OldBlueWater/BlueWater/Assets/StylizedWater2/Runtime/Underwater/Passes/UnderwaterShadingPass.cs
2023-12-14 23:58:32 +09:00

86 lines
3.2 KiB
C#

//Stylized Water 2: Underwater Rendering extension
//Staggart Creations (http://staggart.xyz)
//Copyright protected under Unity Asset Store EULA
using UnityEngine;
using UnityEngine.Rendering;
#if URP
using UnityEngine.Rendering.Universal;
namespace StylizedWater2.UnderwaterRendering
{
class UnderwaterShadingPass : RenderPass
{
private const string ProfilerTag = "Underwater Rendering: Shading";
private static readonly ProfilingSampler m_ProfilingSampler = new ProfilingSampler(ProfilerTag);
public UnderwaterShadingPass(UnderwaterRenderFeature renderFeature)
{
base.Initialize(renderFeature, renderFeature.resources.underwaterShader);
}
public const string DEPTH_NORMALS_KEYWORD = "_REQUIRE_DEPTH_NORMALS";
public const string SOURCE_DEPTH_NORMALS_KEYWORD = "_SOURCE_DEPTH_NORMALS";
public override void Setup(UnderwaterRenderFeature.Settings settings, ScriptableRenderer renderer)
{
base.Setup(settings, renderer);
renderer.EnqueuePass(this);
}
public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
{
base.Configure(cmd, cameraTextureDescriptor);
#if UNITY_2020_2_OR_NEWER
ConfigureInput(ScriptableRenderPassInput.Depth | ScriptableRenderPassInput.Color);
#endif
if (settings.directionalCaustics)
{
#if UNITY_2020_2_OR_NEWER
if(settings.accurateDirectionalCaustics)
{
ConfigureInput(ScriptableRenderPassInput.Depth | ScriptableRenderPassInput.Normal | ScriptableRenderPassInput.Color);
CoreUtils.SetKeyword(Material, SOURCE_DEPTH_NORMALS_KEYWORD, true);
}
else
{
CoreUtils.SetKeyword(Material, SOURCE_DEPTH_NORMALS_KEYWORD, false);
}
#else
CoreUtils.SetKeyword(Material, SOURCE_DEPTH_NORMALS_KEYWORD, false);
#endif
}
CoreUtils.SetKeyword(Material, DEPTH_NORMALS_KEYWORD, settings.directionalCaustics);
CoreUtils.SetKeyword(Material, UnderwaterRenderer.TRANSLUCENCY_KEYWORD, renderFeature.keywordStates.translucency);
CoreUtils.SetKeyword(Material, UnderwaterRenderer.CAUSTICS_KEYWORD, renderFeature.keywordStates.caustics);
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
var cmd = CommandBufferPool.Get();
using (new ProfilingScope(cmd, m_ProfilingSampler))
{
base.Execute(context, ref renderingData);
UnderwaterLighting.PassAmbientLighting(this, cmd);
UnderwaterLighting.PassMainLight(cmd, renderingData);
BlitToCamera(cmd, ref renderingData);
}
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
protected override void Cleanup(CommandBuffer cmd)
{
base.Cleanup(cmd);
}
}
}
#endif