Added transparent depth pre pass;
Added transparent depth post pass; Added transparent depth write; Added transparent back then front render; Added transparent motion vector write;
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.HighDefinition;
|
||||
using static Misaki.HdrpToon.UTSPropertyName;
|
||||
|
||||
namespace Misaki.HdrpToon
|
||||
@@ -58,8 +59,19 @@ namespace Misaki.HdrpToon
|
||||
|
||||
public static void SetupPass(Material material)
|
||||
{
|
||||
var surfaceType = (SurfaceType)material.GetInteger(SurfaceOptions.SURFACE_TYPE);
|
||||
|
||||
var isTransparent = surfaceType == SurfaceType.Transparent;
|
||||
|
||||
material.SetShaderPassEnabled(UTSPassName.HAIR_SHADOW_CASTER_PASS_NAME, (MaterialType)material.GetInteger(SurfaceOptions.MATERIAL_TYPE) == MaterialType.FrontHair);
|
||||
material.SetShaderPassEnabled(UTSPassName.HAIR_BLENDING_TARGET_PASS_NAME, material.GetInteger(SurfaceOptions.HAIR_BLENDING_TARGET) == 1);
|
||||
|
||||
var depthWriteEnable = material.GetInteger(InternalProperties.TRANSPARENT_DEPTH_PREPASS_ENABLE) == 1;
|
||||
var ssrTransparent = material.GetInteger(SurfaceOptions.RECEIVES_SSR_TRANSPARENT) == 1;
|
||||
var backFaceEnable = material.GetInteger(SurfaceOptions.TRANSPARENT_BACKFACE_ENABLE) == 1;
|
||||
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPrepassStr, isTransparent && (depthWriteEnable || ssrTransparent));
|
||||
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPostpassStr, material.GetInteger(InternalProperties.TRANSPARENT_DEPTH_POSTPASS_ENABLE) == 1 && isTransparent);
|
||||
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentBackfaceStr, backFaceEnable && isTransparent);
|
||||
}
|
||||
|
||||
public static void SetupKeywords(Material material)
|
||||
@@ -70,6 +82,7 @@ namespace Misaki.HdrpToon
|
||||
|
||||
CoreUtils.SetKeyword(material, "_SURFACE_TYPE_TRANSPARENT", surfaceType == SurfaceType.Transparent);
|
||||
CoreUtils.SetKeyword(material, "_DOUBLESIDED_ON", doubleSidedEnable);
|
||||
CoreUtils.SetKeyword(material, "_DISABLE_SSR_TRANSPARENT", material.GetInteger(SurfaceOptions.RECEIVES_SSR_TRANSPARENT) == 0);
|
||||
}
|
||||
|
||||
static public void ComputeStencilProperties(bool receivesLighting, bool forwardOnly, bool receivesSSR, bool useSplitLighting, bool hasRefraction, bool excludeFromTUAndAA,
|
||||
@@ -175,7 +188,7 @@ namespace Misaki.HdrpToon
|
||||
|
||||
material.SetOverrideTag("RenderType", "Transparent");
|
||||
// TODO: Z write for transparent.
|
||||
material.SetInteger(InternalProperties.ZWRITE, 0);
|
||||
material.SetInteger(InternalProperties.ZWRITE, material.GetInteger(SurfaceOptions.TRANSPARENT_Z_WRITE));
|
||||
material.SetInteger(InternalProperties.DEST_BLEND2, (int)BlendMode.OneMinusSrcAlpha);
|
||||
|
||||
//TODO: Implement additive and pre-multiply mode.
|
||||
|
||||
Reference in New Issue
Block a user