浏览代码

Rewrote Sky/fog component with latest Volume APIs after merge.

/main
Julien Ignace 7 年前
当前提交
7389ca21
共有 10 个文件被更改,包括 349 次插入100 次删除
  1. 293
      SampleScenes/HDTest/SkyFogTest.unity
  2. 4
      ScriptableRenderPipeline/HDRenderPipeline/HDRenderPipeline.cs
  3. 56
      ScriptableRenderPipeline/HDRenderPipeline/Sky/AtmosphericScattering/AtmosphericScattering.cs
  4. 2
      ScriptableRenderPipeline/HDRenderPipeline/Sky/AtmosphericScattering/Editor/AtmosphericScatteringEditor.cs
  5. 2
      ScriptableRenderPipeline/HDRenderPipeline/Sky/AtmosphericScattering/ExponentialFog.cs
  6. 4
      ScriptableRenderPipeline/HDRenderPipeline/Sky/AtmosphericScattering/LinearFog.cs
  7. 2
      ScriptableRenderPipeline/HDRenderPipeline/Sky/HDRISky/HDRISky.cs
  8. 12
      ScriptableRenderPipeline/HDRenderPipeline/Sky/ProceduralSky/ProceduralSky.cs
  9. 32
      ScriptableRenderPipeline/HDRenderPipeline/Sky/SkySettings.cs
  10. 42
      ScriptableRenderPipeline/HDRenderPipeline/Sky/VisualEnvironment.cs

293
SampleScenes/HDTest/SkyFogTest.unity


m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.26041162, g: 0.2929252, b: 0.32061547, a: 1}
m_IndirectSpecularColor: {r: 0.1474154, g: 0.17690387, b: 0.23007345, a: 1}
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0

useOldInspector: 0
featuresFoldout: 1
showAdditionalSettings: 1
--- !u!1 &185241297
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 185241299}
- component: {fileID: 185241298}
m_Layer: 0
m_Name: Scene Settings
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &185241298
--- !u!114 &176957651
m_GameObject: {fileID: 185241297}
m_GameObject: {fileID: 0}
m_Script: {fileID: 11500000, guid: 0e34c98127e05d340ba44a1d4a734454, type: 3}
m_Script: {fileID: 11500000, guid: eb673446a9a2dfa408924fe9a56322e0, type: 3}
m_CommonSettings: {fileID: 0}
m_SkySettings: {fileID: 11400000, guid: 7d119d7ec4e5e964d92d40232696fa43, type: 2}
--- !u!4 &185241299
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 185241297}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
active: 1
colorMode:
m_OverrideState: 1
m_Value: 1
color:
m_OverrideState: 1
m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1}
hdr: 0
showAlpha: 1
showEyeDropper: 1
density:
m_OverrideState: 1
m_Value: 1
min: 0
max: 1
mipFogMaxMip:
m_OverrideState: 1
m_Value: 0.581
min: 0
max: 1
mipFogNear:
m_OverrideState: 1
m_Value: 100
min: 0
mipFogFar:
m_OverrideState: 1
m_Value: 500
min: 0
fogStart:
m_OverrideState: 1
m_Value: 20
min: 0
fogEnd:
m_OverrideState: 1
m_Value: 100
min: 0
--- !u!1001 &260093558
Prefab:
m_ObjectHideFlags: 0

m_PrefabParentObject: {fileID: 4590821631456672, guid: 63d293d8d9b22af4eb3a41f61a9d3538,
type: 2}
m_PrefabInternal: {fileID: 394012125}
--- !u!1 &399219813
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 399219815}
- component: {fileID: 399219814}
m_Layer: 0
m_Name: GlobalSceneSettings
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &399219814
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 399219813}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3}
m_Name:
m_EditorClassIdentifier:
isGlobal: 1
priority: 0
blendDistance: 0
weight: 1
components:
- {fileID: 176957651}
- {fileID: 1097837615}
- {fileID: 1020244801}
- {fileID: 1440711252}
- {fileID: 1952690833}
--- !u!4 &399219815
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 399219813}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -48.06, y: 3.26, z: 4.897}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &548582830
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 87dc9ecf0fda675419ce82a06ffdaa23, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1020244801
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3df29e7cc05fbec4aa43e06ea875565d, type: 3}
m_Name:
m_EditorClassIdentifier:
active: 1
rotation:
m_OverrideState: 1
m_Value: 0
min: 0
max: 360
exposure:
m_OverrideState: 1
m_Value: 0
multiplier:
m_OverrideState: 1
m_Value: 1
min: 0
resolution:
m_OverrideState: 1
m_Value: 256
updateMode:
m_OverrideState: 1
m_Value: 0
updatePeriod:
m_OverrideState: 1
m_Value: 0
min: 0
lightingOverride:
m_OverrideState: 1
m_Value: {fileID: 0}
sunSize:
m_OverrideState: 1
m_Value: 0.049
min: 0
max: 1
sunSizeConvergence:
m_OverrideState: 1
m_Value: 5
min: 1
max: 10
atmosphereThickness:
m_OverrideState: 1
m_Value: 1
min: 0
max: 5
skyTint:
m_OverrideState: 1
m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1}
hdr: 0
showAlpha: 1
showEyeDropper: 1
groundColor:
m_OverrideState: 1
m_Value: {r: 0.369, g: 0.349, b: 0.341, a: 1}
hdr: 0
showAlpha: 1
showEyeDropper: 1
enableSunDisk:
m_OverrideState: 1
m_Value: 1
--- !u!1001 &1032135070
Prefab:
m_ObjectHideFlags: 0

m_PrefabParentObject: {fileID: 4590821631456672, guid: 63d293d8d9b22af4eb3a41f61a9d3538,
type: 2}
m_PrefabInternal: {fileID: 1095718989}
--- !u!114 &1097837615
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2150ee00179b2f4418ea8b21a7e98eea, type: 3}
m_Name:
m_EditorClassIdentifier:
active: 1
colorMode:
m_OverrideState: 1
m_Value: 1
color:
m_OverrideState: 1
m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1}
hdr: 0
showAlpha: 1
showEyeDropper: 1
density:
m_OverrideState: 1
m_Value: 1
min: 0
max: 1
mipFogMaxMip:
m_OverrideState: 1
m_Value: 1
min: 0
max: 1
mipFogNear:
m_OverrideState: 1
m_Value: 0
min: 0
mipFogFar:
m_OverrideState: 1
m_Value: 1000
min: 0
fogDistance:
m_OverrideState: 1
m_Value: 100
min: 0
--- !u!1 &1208684576
GameObject:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 87dc9ecf0fda675419ce82a06ffdaa23, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1440711252
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59b6606ef2548734bb6d11b9d160bc7e, type: 3}
m_Name:
m_EditorClassIdentifier:
active: 1
rotation:
m_OverrideState: 0
m_Value: 0
min: 0
max: 360
exposure:
m_OverrideState: 0
m_Value: 0
multiplier:
m_OverrideState: 0
m_Value: 1
min: 0
resolution:
m_OverrideState: 0
m_Value: 256
updateMode:
m_OverrideState: 0
m_Value: 0
updatePeriod:
m_OverrideState: 0
m_Value: 0
min: 0
lightingOverride:
m_OverrideState: 0
m_Value: {fileID: 0}
skyHDRI:
m_OverrideState: 0
m_Value: {fileID: 0}
--- !u!1001 &1461372904
Prefab:
m_ObjectHideFlags: 0

m_PrefabParentObject: {fileID: 4590821631456672, guid: 63d293d8d9b22af4eb3a41f61a9d3538,
type: 2}
m_PrefabInternal: {fileID: 1677549155}
--- !u!114 &1952690833
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0d7593b3a9277ac4696b20006c21dde2, type: 3}
m_Name:
m_EditorClassIdentifier:
active: 1
skyType:
m_OverrideState: 1
m_Value: 2
fogType:
m_OverrideState: 1
m_Value: 1
--- !u!1 &2031183050
GameObject:
m_ObjectHideFlags: 0

4
ScriptableRenderPipeline/HDRenderPipeline/HDRenderPipeline.cs


visualEnv.PushFogShaderParameters(cmd, m_DebugDisplaySettings.renderingDebugSettings);
m_SkyManager.RenderSky(hdCamera, m_LightLoop.GetCurrentSunLight(), m_CameraColorBufferRT, m_CameraDepthStencilBufferRT, cmd);
if(visualEnv.fogType != AtmosphericScattering.FogType.None)
m_SkyManager.RenderOpaqueAtmosphericScattering(cmd);
if(visualEnv.fogType != FogType.None)
m_SkyManager.RenderOpaqueAtmosphericScattering(cmd);
}
public Texture2D ExportSkyToTexture()

56
ScriptableRenderPipeline/HDRenderPipeline/Sky/AtmosphericScattering/AtmosphericScattering.cs


namespace UnityEngine.Experimental.Rendering.HDPipeline
{
// Keep this class first in the file. Otherwise it seems that the script type is not registered properly.
[GenerateHLSL]
public enum FogType
{
None,
Linear,
Exponential
}
[Serializable]
public sealed class FogTypeParameter : VolumeParameter<FogType> { }
[GenerateHLSL]
public enum FogColorMode
{
ConstantColor,
SkyColor,
}
[Serializable]
public sealed class FogColorParameter : VolumeParameter<FogColorMode> { }
private readonly static int m_TypeParam = Shader.PropertyToID("_AtmosphericScatteringType");
// Fog Color
private readonly static int m_ColorModeParam = Shader.PropertyToID("_FogColorMode");

// Fog Color
public FogColorParameter colorMode = new FogColorParameter { value = FogColorMode.SkyColor };
[Tooltip("Constant Fog Color")]
public ColorParameter color = new ColorParameter { value = Color.grey };
public ClampedFloatParameter density = new ClampedFloatParameter { value = 1.0f, min = 0.0f, max = 1.0f };
public ColorParameter color = new ColorParameter(Color.grey);
public ClampedFloatParameter density = new ClampedFloatParameter(1.0f, 0.0f, 1.0f );
public ClampedFloatParameter mipFogMaxMip = new ClampedFloatParameter { value = 1.0f, min = 0.0F, max = 1.0f };
public ClampedFloatParameter mipFogMaxMip = new ClampedFloatParameter(1.0f, 0.0f, 1.0f);
public ClampedFloatParameter mipFogNear = new ClampedFloatParameter { value = 0.0f, min = 0.0f, clampMode = ParameterClampMode.Min };
public MinFloatParameter mipFogNear = new MinFloatParameter(0.0f, 0.0f);
public ClampedFloatParameter mipFogFar = new ClampedFloatParameter { value = 1000.0f, min = 0.0f, clampMode = ParameterClampMode.Min };
public MinFloatParameter mipFogFar = new MinFloatParameter(1000.0f, 0.0f);
public abstract void PushShaderParameters(CommandBuffer cmd, RenderingDebugSettings renderingDebug);

}
}
[GenerateHLSL]
public enum FogType
{
None,
Linear,
Exponential
}
[Serializable]
public sealed class FogTypeParameter : VolumeParameter<FogType>
{
public FogTypeParameter(FogType value, bool overrideState = false)
: base(value, overrideState)
{
}
}
[GenerateHLSL]
public enum FogColorMode
{
ConstantColor,
SkyColor,
}
[Serializable]
public sealed class FogColorParameter : VolumeParameter<FogColorMode> { }
}

2
ScriptableRenderPipeline/HDRenderPipeline/Sky/AtmosphericScattering/Editor/AtmosphericScatteringEditor.cs


PropertyField(m_Density);
PropertyField(m_ColorMode);
EditorGUI.indentLevel++;
if(!m_ColorMode.value.hasMultipleDifferentValues && (AtmosphericScattering.FogColorMode)m_ColorMode.value.intValue == AtmosphericScattering.FogColorMode.ConstantColor)
if(!m_ColorMode.value.hasMultipleDifferentValues && (FogColorMode)m_ColorMode.value.intValue == FogColorMode.ConstantColor)
{
PropertyField(m_Color);
}

2
ScriptableRenderPipeline/HDRenderPipeline/Sky/AtmosphericScattering/ExponentialFog.cs


private readonly static int m_ExpFogParam = Shader.PropertyToID("_ExpFogParameters");
// Exponential fog
public ClampedFloatParameter fogDistance = new ClampedFloatParameter { value = 100.0f, min = 0.0f, clampMode = ParameterClampMode.Min };
public MinFloatParameter fogDistance = new MinFloatParameter(100.0f, 0.0f);
public override void PushShaderParameters(CommandBuffer cmd, RenderingDebugSettings renderingDebug)
{

4
ScriptableRenderPipeline/HDRenderPipeline/Sky/AtmosphericScattering/LinearFog.cs


private readonly static int m_LinearFogParam = Shader.PropertyToID("_LinearFogParameters");
// Linear Fog
public ClampedFloatParameter fogStart = new ClampedFloatParameter { value = 500.0f, min = 0.0f, clampMode = ParameterClampMode.Min };
public ClampedFloatParameter fogEnd = new ClampedFloatParameter { value = 1000.0f, min = 0.0f, clampMode = ParameterClampMode.Min };
public MinFloatParameter fogStart = new MinFloatParameter(500.0f, 0.0f);
public MinFloatParameter fogEnd = new MinFloatParameter(1000.0f, 0.0f);
public override void PushShaderParameters(CommandBuffer cmd, RenderingDebugSettings renderingDebug)
{

2
ScriptableRenderPipeline/HDRenderPipeline/Sky/HDRISky/HDRISky.cs


public class HDRISky : SkySettings
{
[Tooltip("Cubemap used to render the sky.")]
public CubemapParameter skyHDRI = new CubemapParameter { value = null };
public CubemapParameter skyHDRI = new CubemapParameter(null);
public override SkyRenderer GetRenderer()
{

12
ScriptableRenderPipeline/HDRenderPipeline/Sky/ProceduralSky/ProceduralSky.cs


[DisallowMultipleComponent]
public class ProceduralSky : SkySettings
{
public ClampedFloatParameter sunSize = new ClampedFloatParameter { value = 0.04f, min = 0.0f, max = 1.0f };
public ClampedFloatParameter sunSizeConvergence = new ClampedFloatParameter { value = 5.0f, min = 1.0f, max = 10.0f };
public ClampedFloatParameter atmosphereThickness = new ClampedFloatParameter { value = 1.0f, min = 0.0f, max = 5.0f };
public ColorParameter skyTint = new ColorParameter { value = new Color(0.5f, 0.5f, 0.5f, 1.0f) };
public ColorParameter groundColor = new ColorParameter { value = new Color(0.369f, 0.349f, 0.341f, 1.0f) };
public BoolParameter enableSunDisk = new BoolParameter { value = true };
public ClampedFloatParameter sunSize = new ClampedFloatParameter(0.04f, 0.0f, 1.0f);
public ClampedFloatParameter sunSizeConvergence = new ClampedFloatParameter(5.0f, 1.0f, 10.0f);
public ClampedFloatParameter atmosphereThickness = new ClampedFloatParameter(1.0f, 0.0f, 5.0f);
public ColorParameter skyTint = new ColorParameter(new Color(0.5f, 0.5f, 0.5f, 1.0f));
public ColorParameter groundColor = new ColorParameter(new Color(0.369f, 0.349f, 0.341f, 1.0f));
public BoolParameter enableSunDisk = new BoolParameter(true);
public override SkyRenderer GetRenderer()
{

32
ScriptableRenderPipeline/HDRenderPipeline/Sky/SkySettings.cs


namespace UnityEngine.Experimental.Rendering.HDPipeline
{
[Serializable]
public sealed class SkyResolutionParameter : VolumeParameter<SkyResolution> { }
public sealed class SkyResolutionParameter : VolumeParameter<SkyResolution>
{
public SkyResolutionParameter(SkyResolution val, bool overrideState = false)
: base(val, overrideState)
{
}
}
public sealed class EnvUpdateParameter : VolumeParameter<EnvironementUpdateMode> { }
public sealed class EnvUpdateParameter : VolumeParameter<EnvironementUpdateMode>
{
public EnvUpdateParameter(EnvironementUpdateMode val, bool overrideState = false)
: base(val, overrideState)
{
}
}
public ClampedFloatParameter rotation = new ClampedFloatParameter { value = 0.0f, min = 0.0f, max = 360.0f };
public ClampedFloatParameter rotation = new ClampedFloatParameter(0.0f, 0.0f, 360.0f);
public FloatParameter exposure = new FloatParameter { value = 0.0f };
public FloatParameter exposure = new FloatParameter(0.0f);
public ClampedFloatParameter multiplier = new ClampedFloatParameter { value = 1.0f, min = 0.0f, clampMode = ParameterClampMode.Min };
public MinFloatParameter multiplier = new MinFloatParameter(1.0f, 0.0f);
public SkyResolutionParameter resolution = new SkyResolutionParameter { value = SkyResolution.SkyResolution256 };
public SkyResolutionParameter resolution = new SkyResolutionParameter(SkyResolution.SkyResolution256);
public EnvUpdateParameter updateMode = new EnvUpdateParameter { value = EnvironementUpdateMode.OnChanged };
public EnvUpdateParameter updateMode = new EnvUpdateParameter(EnvironementUpdateMode.OnChanged);
public ClampedFloatParameter updatePeriod = new ClampedFloatParameter { value = 0.0f, min = 0.0f, clampMode = ParameterClampMode.Min };
public MinFloatParameter updatePeriod = new MinFloatParameter(0.0f, 0.0f);
public CubemapParameter lightingOverride = new CubemapParameter { value = null };
public CubemapParameter lightingOverride = new CubemapParameter(null);
public override int GetHashCode()
{

42
ScriptableRenderPipeline/HDRenderPipeline/Sky/VisualEnvironment.cs


namespace UnityEngine.Experimental.Rendering.HDPipeline
{
// TODO instead of hardcoing this, we need to generate the information from the existing sky currently implemented.
public enum SkyType
{
None,
HDRISky,
ProceduralSky
}
[Serializable]
public sealed class SkyTypeParameter : VolumeParameter<SkyType> { }
// Keep this class first in the file. Otherwise it seems that the script type is not registered properly.
public SkyTypeParameter skyType = new SkyTypeParameter { value = SkyType.ProceduralSky };
public AtmosphericScattering.FogTypeParameter fogType = new AtmosphericScattering.FogTypeParameter { value = AtmosphericScattering.FogType.None };
public SkyTypeParameter skyType = new SkyTypeParameter(SkyType.None);
public FogTypeParameter fogType = new FogTypeParameter(FogType.None);
switch(fogType.value)
switch (fogType.value)
case AtmosphericScattering.FogType.None:
case FogType.None:
case AtmosphericScattering.FogType.Linear:
case FogType.Linear:
case AtmosphericScattering.FogType.Exponential:
case FogType.Exponential:
{
var fogSettings = VolumeManager.instance.GetComponent<ExponentialFog>();
fogSettings.PushShaderParameters(cmd, renderingDebug);

}
}
// TODO instead of hardcoding this, we need to generate the information from the existing sky currently implemented.
public enum SkyType
{
None,
HDRISky,
ProceduralSky
}
[Serializable]
public sealed class SkyTypeParameter : VolumeParameter<SkyType>
{
public SkyTypeParameter(SkyType value, bool overrideState = false)
: base(value, overrideState)
{
}
}
}
正在加载...
取消
保存