Skip to content

Commit 63b8bc4

Browse files
Add fade distance for light impact on volumetrics (#2291)
* Fade * changelog * Don't display on directional Co-authored-by: sebastienlagarde <[email protected]>
1 parent ff96dd6 commit 63b8bc4

File tree

6 files changed

+30
-1
lines changed

6 files changed

+30
-1
lines changed

com.unity.render-pipelines.high-definition/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
1010
- Exposed the API to access HDRP shader pass names.
1111
- Added the status check of default camera frame settings in the DXR wizard.
1212
- Added frame setting for Virtual Texturing.
13+
- Added a fade distance for light influencing volumetric lighting.
1314

1415
### Fixed
1516
- Fixed a null reference exception when creating a diffusion profile asset.

com.unity.render-pipelines.high-definition/Editor/Lighting/HDLightUI.Skin.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ sealed class Styles
103103
// Volumetric Additional light data
104104
public readonly GUIContent volumetricEnable = new GUIContent("Enable", "When enabled, this Light uses Volumetrics.");
105105
public readonly GUIContent volumetricDimmer = new GUIContent("Multiplier", "Controls the intensity of the scattered Volumetric lighting.");
106+
public readonly GUIContent volumetricFadeDistance = new GUIContent("Fade Distance", "The distance at which light smoothly fades out from contributing to volumetric lighting.");
106107
// Volumetric Additional shadow data
107108
public readonly GUIContent volumetricShadowDimmer = new GUIContent("Shadow Dimmer", "Dims the volumetric shadows this Light casts.");
108109

com.unity.render-pipelines.high-definition/Editor/Lighting/HDLightUI.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,11 @@ static void DrawVolumetric(SerializedHDLight serialized, Editor owner)
991991
{
992992
EditorGUILayout.PropertyField(serialized.volumetricDimmer, s_Styles.volumetricDimmer);
993993
EditorGUILayout.Slider(serialized.volumetricShadowDimmer, 0.0f, 1.0f, s_Styles.volumetricShadowDimmer);
994+
HDLightType lightType = serialized.type;
995+
if (lightType != HDLightType.Directional)
996+
{
997+
EditorGUILayout.PropertyField(serialized.volumetricFadeDistance, s_Styles.volumetricFadeDistance);
998+
}
994999
}
9951000
}
9961001

com.unity.render-pipelines.high-definition/Editor/Lighting/SerializedHDLight.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ internal class SerializedHDLight
2727
public SerializedProperty maxSmoothness;
2828
public SerializedProperty applyRangeAttenuation;
2929
public SerializedProperty volumetricDimmer;
30+
public SerializedProperty volumetricFadeDistance;
3031
public SerializedProperty lightUnit;
3132
public SerializedProperty displayAreaLightEmissiveMesh;
3233
public SerializedProperty areaLightEmissiveMeshCastShadow;
@@ -336,6 +337,7 @@ public SerializedHDLight(HDAdditionalLightData[] lightDatas, LightEditor.Setting
336337
spotIESCutoffPercent = o.Find("m_SpotIESCutoffPercent");
337338
lightDimmer = o.Find("m_LightDimmer");
338339
volumetricDimmer = o.Find("m_VolumetricDimmer");
340+
volumetricFadeDistance = o.Find("m_VolumetricFadeDistance");
339341
lightUnit = o.Find("m_LightUnit");
340342
displayAreaLightEmissiveMesh = o.Find("m_DisplayAreaLightEmissiveMesh");
341343
fadeDistance = o.Find("m_FadeDistance");

com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDAdditionalLightData.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,24 @@ public float fadeDistance
304304
}
305305
}
306306

307+
// Not used for directional lights.
308+
[SerializeField]
309+
float m_VolumetricFadeDistance = 10000.0f;
310+
/// <summary>
311+
/// Get/Set the light fade distance for volumetrics.
312+
/// </summary>
313+
public float volumetricFadeDistance
314+
{
315+
get => m_VolumetricFadeDistance;
316+
set
317+
{
318+
if (m_VolumetricFadeDistance == value)
319+
return;
320+
321+
m_VolumetricFadeDistance = Mathf.Clamp(value, 0, float.MaxValue);
322+
}
323+
}
324+
307325
[SerializeField, FormerlySerializedAs("affectDiffuse")]
308326
bool m_AffectDiffuse = true;
309327
/// <summary>

com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ internal struct ProcessedLightData
259259
public LightVolumeType lightVolumeType;
260260
public float distanceToCamera;
261261
public float lightDistanceFade;
262+
public float volumetricDistanceFade;
262263
public bool isBakedShadowMask;
263264
}
264265

@@ -1548,7 +1549,7 @@ internal void GetLightData(CommandBuffer cmd, HDCamera hdCamera, HDShadowSetting
15481549
lightData.lightDimmer = processedData.lightDistanceFade * (additionalLightData.lightDimmer);
15491550
lightData.diffuseDimmer = processedData.lightDistanceFade * (additionalLightData.affectDiffuse ? additionalLightData.lightDimmer : 0);
15501551
lightData.specularDimmer = processedData.lightDistanceFade * (additionalLightData.affectSpecular ? additionalLightData.lightDimmer * hdCamera.frameSettings.specularGlobalDimmer : 0);
1551-
lightData.volumetricLightDimmer = processedData.lightDistanceFade * (additionalLightData.volumetricDimmer);
1552+
lightData.volumetricLightDimmer = Mathf.Min(processedData.volumetricDistanceFade, processedData.lightDistanceFade) * (additionalLightData.volumetricDimmer);
15521553

15531554
lightData.cookieMode = CookieMode.None;
15541555
lightData.shadowIndex = -1;
@@ -2278,6 +2279,7 @@ void PreprocessLightData(ref ProcessedLightData processedData, VisibleLight ligh
22782279
ref processedData.lightCategory, ref processedData.gpuLightType, ref processedData.lightVolumeType);
22792280

22802281
processedData.lightDistanceFade = processedData.gpuLightType == GPULightType.Directional ? 1.0f : HDUtils.ComputeLinearDistanceFade(processedData.distanceToCamera, additionalLightData.fadeDistance);
2282+
processedData.volumetricDistanceFade = processedData.gpuLightType == GPULightType.Directional ? 1.0f : HDUtils.ComputeLinearDistanceFade(processedData.distanceToCamera, additionalLightData.volumetricFadeDistance);
22812283
processedData.isBakedShadowMask = IsBakedShadowMaskLight(lightComponent);
22822284
}
22832285

0 commit comments

Comments
 (0)