public static void GetBlendMode(ShaderGraph.SurfaceType surfaceType, AlphaMode alphaMode, ref Pass pass) { if (surfaceType == ShaderGraph.SurfaceType.Opaque) { pass.BlendOverride = "Blend One Zero, One Zero"; } else { switch (alphaMode) { case AlphaMode.Alpha: pass.BlendOverride = "Blend One OneMinusSrcAlpha, One OneMinusSrcAlpha"; break; case AlphaMode.Additive: pass.BlendOverride = "Blend One One, One One"; break; case AlphaMode.Premultiply: pass.BlendOverride = "Blend One OneMinusSrcAlpha, One OneMinusSrcAlpha"; break; // This isn't supported in HDRP. case AlphaMode.Multiply: default: pass.BlendOverride = "Blend One OneMinusSrcAlpha, One OneMinusSrcAlpha"; break; } } }
public static void GetZWrite(ShaderGraph.SurfaceType surfaceType, ref Pass pass) { if (surfaceType == ShaderGraph.SurfaceType.Opaque) { pass.ZWriteOverride = "ZWrite On"; } else { pass.ZWriteOverride = "ZWrite Off"; } }
void AddTags(ShaderGenerator generator, string pipeline, HDRenderTypeTags renderType, ShaderGraph.SurfaceType surfaceType) { string queue = surfaceType == ShaderGraph.SurfaceType.Opaque ? "Geometry" : "Transparent"; ShaderStringBuilder builder = new ShaderStringBuilder(); builder.AppendLine("Tags"); using (builder.BlockScope()) { builder.AppendLine("\"RenderPipeline\"=\"{0}\"", pipeline); builder.AppendLine("\"RenderType\"=\"{0}\"", renderType); builder.AppendLine("\"Queue\"=\"{0}\"", queue); } generator.AddShaderChunk(builder.ToString()); }