浏览代码

Added a volume to control the indirect light intensity

/main
Antoine Lelievre 6 年前
当前提交
b2cf9b0e
共有 8 个文件被更改,包括 73 次插入2 次删除
  1. 5
      com.unity.render-pipelines.high-definition/HDRP/Lighting/LightLoop/LightLoop.cs
  2. 2
      com.unity.render-pipelines.high-definition/HDRP/Lighting/LightLoop/ShaderVariablesLightLoop.hlsl
  3. 4
      com.unity.render-pipelines.high-definition/HDRP/Material/Lit/Lit.hlsl
  4. 2
      com.unity.render-pipelines.high-definition/HDRP/RenderPipeline/HDStringConstants.cs
  5. 29
      com.unity.render-pipelines.high-definition/HDRP/Editor/Lighting/IndirectLightingControlEditor.cs
  6. 11
      com.unity.render-pipelines.high-definition/HDRP/Editor/Lighting/IndirectLightingControlEditor.cs.meta
  7. 11
      com.unity.render-pipelines.high-definition/HDRP/Lighting/IndirectLightingControl.cs
  8. 11
      com.unity.render-pipelines.high-definition/HDRP/Lighting/IndirectLightingControl.cs.meta

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


void PushGlobalParams(HDCamera hdCamera, CommandBuffer cmd)
{
IndirectLightingControl indirectLightVolume = VolumeManager.instance.stack.GetComponent< IndirectLightingControl >();
Vector4 indirectLightData = new Vector4(indirectLightVolume.indirectDiffuseIntensity, indirectLightVolume.indirectSpecularIntensity, 0, 0);
using (new ProfilingSample(cmd, "Push Global Parameters", CustomSamplerId.TPPushGlobalParameters.GetSampler()))
{
Camera camera = hdCamera.camera;

cmd.SetGlobalInt(HDShaderIDs._NumTileClusteredX, GetNumTileClusteredX(hdCamera));
cmd.SetGlobalInt(HDShaderIDs._NumTileClusteredY, GetNumTileClusteredY(hdCamera));
cmd.SetGlobalVector(HDShaderIDs._IndirectLightingMultiplier, (indirectLightVolume != null) ? indirectLightData : Vector4.one);
if (m_FrameSettings.lightLoopSettings.enableBigTilePrepass)
cmd.SetGlobalBuffer(HDShaderIDs.g_vBigTileLightList, s_BigTileLightList);

2
com.unity.render-pipelines.high-definition/HDRP/Lighting/LightLoop/ShaderVariablesLightLoop.hlsl


uint _NumTileClusteredX;
uint _NumTileClusteredY;
float4 _IndirectLightingMultiplier;
float4x4 _Env2DCaptureVP[MAX_ENV2D_LIGHT];
#else

4
com.unity.render-pipelines.high-definition/HDRP/Material/Lit/Lit.hlsl


// Apply the albedo to the direct diffuse lighting (only once). The indirect (baked)
// diffuse lighting has already had the albedo applied in GetBakedDiffuseLighting().
diffuseLighting = modifiedDiffuseColor * lighting.direct.diffuse + builtinData.bakeDiffuseLighting;
diffuseLighting = modifiedDiffuseColor * lighting.direct.diffuse + builtinData.bakeDiffuseLighting * _IndirectLightingMultiplier.x;
// If refraction is enable we use the transmittanceMask to lerp between current diffuse lighting and refraction value
// Physically speaking, transmittanceMask should be 1, but for artistic reasons, we let the value vary

specularLighting = lighting.direct.specular + lighting.indirect.specularReflected;
specularLighting = lighting.direct.specular + lighting.indirect.specularReflected * _IndirectLightingMultiplier.y;
// Rescale the GGX to account for the multiple scattering.
specularLighting *= 1.0 + bsdfData.fresnel0 * preLightData.energyCompensation;

2
com.unity.render-pipelines.high-definition/HDRP/RenderPipeline/HDStringConstants.cs


public static readonly int _NumTileFtplY = Shader.PropertyToID("_NumTileFtplY");
public static readonly int _NumTileClusteredX = Shader.PropertyToID("_NumTileClusteredX");
public static readonly int _NumTileClusteredY = Shader.PropertyToID("_NumTileClusteredY");
public static readonly int _IndirectLightingMultiplier = Shader.PropertyToID("_IndirectLightingMultiplier");
public static readonly int g_isLogBaseBufferEnabled = Shader.PropertyToID("g_isLogBaseBufferEnabled");
public static readonly int g_vLayeredOffsetsBuffer = Shader.PropertyToID("g_vLayeredOffsetsBuffer");

29
com.unity.render-pipelines.high-definition/HDRP/Editor/Lighting/IndirectLightingControlEditor.cs


using System.Collections;
using UnityEngine;
using UnityEditor;
using UnityEditor.Experimental.Rendering;
namespace UnityEngine.Experimental.Rendering.HDPipeline
{
[CanEditMultipleObjects]
[VolumeComponentEditor(typeof(IndirectLightingControl))]
public class IndirectLightingControlEditor : VolumeComponentEditor
{
SerializedDataParameter m_IndirectSpecularIntensity;
SerializedDataParameter m_IndirectDiffuseIntensity;
public override void OnEnable()
{
var o = new PropertyFetcher<IndirectLightingControl>(serializedObject);
m_IndirectDiffuseIntensity = Unpack(o.Find(x => x.indirectDiffuseIntensity));
m_IndirectSpecularIntensity = Unpack(o.Find(x => x.indirectSpecularIntensity));
}
public override void OnInspectorGUI()
{
PropertyField(m_IndirectSpecularIntensity, CoreEditorUtils.GetContent("Indirect Specular Intensity|Multiplier for the reflected specular light."));
PropertyField(m_IndirectDiffuseIntensity, CoreEditorUtils.GetContent("Indirect Diffuse Intensity|Multiplier for the baked diffuse lighting."));
}
}
}

11
com.unity.render-pipelines.high-definition/HDRP/Editor/Lighting/IndirectLightingControlEditor.cs.meta


fileFormatVersion: 2
guid: 8f4eec32d24065f4db3249afcf3153cb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
com.unity.render-pipelines.high-definition/HDRP/Lighting/IndirectLightingControl.cs


using System;
namespace UnityEngine.Experimental.Rendering.HDPipeline
{
[Serializable]
public class IndirectLightingControl : VolumeComponent
{
public MinFloatParameter indirectSpecularIntensity = new MinFloatParameter(1.0f, 0.0f);
public MinFloatParameter indirectDiffuseIntensity = new MinFloatParameter(1.0f, 0.0f);
}
}

11
com.unity.render-pipelines.high-definition/HDRP/Lighting/IndirectLightingControl.cs.meta


fileFormatVersion: 2
guid: b867368b7a8a6b34ca8118533fdfe3d2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
正在加载...
取消
保存