Added UTSAPI
This commit is contained in:
67
Runtime/UTSAPI.cs
Normal file
67
Runtime/UTSAPI.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using static Misaki.HdrpToon.UtsShaderPropertyName;
|
||||
|
||||
namespace Misaki.HdrpToon
|
||||
{
|
||||
internal class UTSAPI
|
||||
{
|
||||
private enum RenderPriority
|
||||
{
|
||||
Opaque = RenderQueue.Geometry,
|
||||
OpaqueDecal = RenderQueue.Geometry + 225, // Opaque Decal mean Opaque that can receive decal
|
||||
OpaqueAlphaTest = RenderQueue.AlphaTest,
|
||||
OpaqueDecalAlphaTest = RenderQueue.AlphaTest + 25,
|
||||
// Warning: we must not change Geometry last value to stay compatible with occlusion
|
||||
OpaqueLast = RenderQueue.GeometryLast,
|
||||
|
||||
AfterPostprocessOpaque = RenderQueue.GeometryLast + 1,
|
||||
AfterPostprocessOpaqueAlphaTest = RenderQueue.GeometryLast + 10,
|
||||
|
||||
TransparentFirst = RenderQueue.Transparent - 100,
|
||||
Transparent = RenderQueue.Transparent,
|
||||
TransparentLast = RenderQueue.Transparent + 100,
|
||||
}
|
||||
|
||||
public static void SetupPass(Material material)
|
||||
{
|
||||
material.SetShaderPassEnabled(UtsShaderPassName.HAIR_SHADOW_CASTER_PASS_NAME, (MaterialType)material.GetInteger(SurfaceOptions.MATERIAL_TYPE) == MaterialType.FrontHair);
|
||||
material.SetShaderPassEnabled(UtsShaderPassName.HAIR_BLENDING_TARGET_PASS_NAME, material.GetInteger(SurfaceOptions.HAIR_BLENDING_TARGET) == 1);
|
||||
}
|
||||
|
||||
private static void ResetMaterialCustomRenderQueue(Material material)
|
||||
{
|
||||
var isTransparent = material.GetInteger(SurfaceOptions.TRANSPARENT_ENABLED) > 0.0f;
|
||||
var isAlphaClip = material.GetInteger(SurfaceOptions.ALPHA_CLIP_ENABLE) > 0.0f;
|
||||
|
||||
var renderQueue = isTransparent ? RenderPriority.Transparent : (isAlphaClip ? RenderPriority.OpaqueAlphaTest : RenderPriority.Opaque);
|
||||
material.renderQueue = (int)renderQueue;
|
||||
}
|
||||
|
||||
public static void SetupProperties(Material material)
|
||||
{
|
||||
ResetMaterialCustomRenderQueue(material);
|
||||
|
||||
// We only do clip for alpha clip in depth pre-pass once. Z test for Gbuffer and forward pass need to set to equal to make sure alpha clip works correctly.
|
||||
if (material.GetInteger("_AlphaCutoffEnable") > 0.0f)
|
||||
{
|
||||
material.SetInt("_ZTestGBuffer", (int)CompareFunction.Equal);
|
||||
}
|
||||
else
|
||||
{
|
||||
material.SetInt("_ZTestGBuffer", (int)CompareFunction.LessEqual);
|
||||
}
|
||||
|
||||
//if (surfaceType == SurfaceType.Opaque)
|
||||
//{
|
||||
material.SetInt("_ZTestDepthEqualForOpaque", (int)CompareFunction.Equal);
|
||||
//}
|
||||
//else
|
||||
// material.SetInt(kZTestDepthEqualForOpaque, (int)material.GetTransparentZTest());
|
||||
}
|
||||
|
||||
public static void SetupKeywords(Material material)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user