浏览代码

Various update

/main
sebastienlagarde 6 年前
当前提交
3ca4d227
共有 3 个文件被更改,包括 11 次插入27 次删除
  1. 25
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDLightEditor.cs
  2. 5
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/Light/HDAdditionalLightData.cs
  3. 8
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightUtils.cs

25
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDLightEditor.cs


public SerializedProperty directionalIntensity;
public SerializedProperty punctualIntensity;
public SerializedProperty areaIntensity;
public SerializedProperty displayBounceIntensity;
public SerializedProperty spotInnerPercent;
public SerializedProperty lightDimmer;
public SerializedProperty fadeDistance;

directionalIntensity = o.Find(x => x.directionalIntensity),
punctualIntensity = o.Find(x => x.punctualIntensity),
areaIntensity = o.Find(x => x.areaIntensity),
displayBounceIntensity = o.Find(x => x.displayBounceIntensity),
spotInnerPercent = o.Find(x => x.m_InnerSpotPercent),
lightDimmer = o.Find(x => x.lightDimmer),
fadeDistance = o.Find(x => x.fadeDistance),

}
}
EditorGUI.BeginChangeCheck();
{
EditorGUILayout.PropertyField(m_AdditionalLightData.displayBounceIntensity, s_Styles.lightBounceIntensity);
// No indirect shadow support for anything but directional
if (m_LightShape != LightShape.Directional &&
settings.shadowsType.enumValueIndex != (int)LightShadows.None &&
settings.isRealtime && m_AdditionalLightData.displayBounceIntensity.floatValue > 0.0f &&
!settings.lightType.hasMultipleDifferentValues)
{
EditorGUILayout.HelpBox(s_Styles.indirectBounceShadowWarning.text, MessageType.Info);
}
}
if (EditorGUI.EndChangeCheck())
{
// Lightmapper don't divide correctly by PI when calculating bounce of analytic light (Lambert is rho / PI but lightmapper only do rho),
// so we need to handle the divide ourselves through this workaround (only for analytical light)
settings.bounceIntensity.floatValue = m_AdditionalLightData.displayBounceIntensity.floatValue / Mathf.PI;
}
settings.DrawLightmapping();
EditorGUI.BeginChangeCheck(); // For GI we need to detect any change on additional data and call SetLightDirty

EditorGUILayout.Slider(m_AdditionalShadowData.normalBiasMin, 0.0f, 5.0f, s_Styles.normalBiasMin);
if (EditorGUI.EndChangeCheck())
{
// Link min to max and don't expose normalBiasScale (useless when min == max)
// Link min to max and don't expose normalBiasScale (useless when min == max)
m_AdditionalShadowData.normalBiasMax = m_AdditionalShadowData.normalBiasMin;
}
//EditorGUILayout.PropertyField(m_AdditionalShadowData.normalBiasMax, s_Styles.normalBiasMax);

5
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/Light/HDAdditionalLightData.cs


// To be able to have correct default values for our lights and to also control the conversion of intensity from the light editor (so it is compatible with GI)
// we add intensity (for each type of light we want to manage).
public float directionalIntensity = 10000.0f; // Sun Light default to 10000 lux
public float punctualIntensity = 600.0f; // Light default to 600 lumens, i.e ~48 candela
public float areaIntensity = 600.0f; // Light default to 600 lumens
public float displayBounceIntensity = 1.0f; // override bound intensity of built-in unity to take into account the PI shift observe in GI (as GI don't divide by PI)
public float punctualIntensity = 600.0f; // Light default to 600 lumen, i.e ~48 candela
public float areaIntensity = 600.0f; // Light default to 600 lumen
[Range(0.0f, 100.0f)]
public float m_InnerSpotPercent = 0.0f; // To display this field in the UI this need to be public

8
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightUtils.cs


// Area light are convert to luminance (cd/(m^2*steradian)) with the following formulation: Luminous Power / (Area * PI * steradian)
// Ref: Moving Frostbite to PBR
// convert intensity (lumen) to candela
public static float ConvertPointLightIntensity(float intensity)
{
return intensity / (4.0f * Mathf.PI);

// convert intensity (lumen) to candela
public static float ConvertSpotLightIntensity(float intensity, float angle, bool exact)
{
return exact ? intensity / (2.0f * (1.0f - Mathf.Cos(angle / 2.0f)) * Mathf.PI) : intensity / Mathf.PI;

// convert intensity (lumen) to candela
// convert intensity (lumen) to nits
// convert intensity (lumen) to nits
// convert intensity (lumen) to nits
// convert intensity (lumen) to nits
public static float calculateLineLightArea(float intensity, float lineRadius, float lineWidth)
{
return intensity / (2.0f * Mathf.PI * lineRadius * lineWidth * Mathf.PI);

正在加载...
取消
保存