浏览代码

first non compiling draft

/Add-physical-light-unity-support
sebastienlagarde 7 年前
当前提交
3724b336
共有 3 个文件被更改,包括 63 次插入1 次删除
  1. 1
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDLightEditor.Styles.cs
  2. 8
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDLightEditor.cs
  3. 55
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightUtils.cs

1
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDLightEditor.Styles.cs


public readonly GUIContent shapeWidthLine = new GUIContent("Length", "Length of the line light");
public readonly GUIContent shapeWidthRect = new GUIContent("Size X", "SizeX of the rectangle light");
public readonly GUIContent shapeHeightRect = new GUIContent("Size Y", "SizeY of the rectangle light");
public readonly GUIContent intensityPhysicalUnit = new GUIContent("intensity (in Lumens)", "Luminous power of the light in lumens, typical value is 600 for a light bulb - 1200 for a strong light bulb");
public readonly GUIContent aspectRatioPyramid = new GUIContent("Aspect ratio", "");
public readonly GUIContent shapeWidthBox = new GUIContent("Size X", "");
public readonly GUIContent shapeHeightBox = new GUIContent("Size Y", "");

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


void DrawLightSettings()
{
settings.DrawColor();
settings.DrawIntensity();
// Customize the
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(settings.intensity, s_Styles.intensityPhysicalUnit);
if (EditorGUI.EndChangeCheck())
{
//settings.intensity.floatValue =
}
settings.DrawBounceIntensity();
settings.DrawLightmapping();

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


using System;
using System.Collections.Generic;
using System.Linq;
namespace UnityEngine.Experimental.Rendering.HDPipeline
{
public class LightUtils
{
// Physical light unit helper
// All light unit are in lumens (Luminous power) and convert to cd/(m^2*steradian) (luminance)
// For an area light it is (Luminous Power / (Area * PI * steradian))
// In the case of a punctual light, there is no area, so theoretically it is Candela but math are the same
// Note: area light calculation is done in Luminance, but punctual light calculation should be done in luminous intensity (Candela)
// Math are identical, so no need to make a distinction here, the conversion handle it.
// No change to shader code is required
public static float ConvertPointLightIntensity(float intensity)
{
return intensity / (4.0f * Mathf.PI);
}
// angle is the full angle, not the half angle in radiant
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;
}
// angleA and angleB are the full opening angle, not half angle
public static float ConvertFrustrumLightIntensity(float intensity, float angleA, float angleB)
{
return intensity / (4.0f * Mathf.Asin(Mathf.Sin(angleA / 2.0f) * Mathf.Sin(angleB / 2.0f)));
}
public static float ConvertSphereLightIntensity(float intensity, float sphereRadius)
{
return intensity / (4.0f * Mathf.PI * sphereRadius * sphereRadius * Mathf.PI * Mathf.PI);
}
public static float ConvertDiscLightIntensity(float intensity, float discRadius)
{
return intensity / (discRadius * discRadius * Mathf.PI * Mathf.PI);
}
public static float ConvertRectLightIntensity(float intensity, float width, float height)
{
return intensity / (width * height * Mathf.PI);
}
public static float calculateLineLightArea(float intensity, float lineRadius, float lineWidth)
{
return intensity / (2.0f * Mathf.PI * lineRadius * lineWidth * Mathf.PI);
}
}
}
正在加载...
取消
保存