我已经为此努力了一段时间,但我不知道是否有可能创建一个深度掩模着色器HDRP (如此处所述) http://wiki.unity3d.com/index.php/DepthMask.
对于我的确切用途,我试图在应用了材质的任何形状上创建一个“洞”,以显示在所有内容后面渲染的不同相机的内容。
我尝试摆弄着色器内的渲染队列、不同的 ZTest 和 ZWrite 组合,以及我发现的着色器的一些变体。最重要的是,我尝试摆弄我能想到的基本 HDRP 着色器的每个配置,这可能会有所作为。
我能得到的最接近的结果是使物体后面的透明材料消失。这确实意味着,如果我将所有不透明材质设置为透明,我会得到我想要的效果,但这并不理想,因为它破坏的东西比解决的东西多。理想情况下,我能够以某种方式在不透明材质上使用 HDRP 透明优先级系统,但我不确定这是否可能。
我不太确定下一步要尝试什么,任何帮助将不胜感激!
所以我设法找到一种方法来实现这一点,它是使用自定义通行证:
HDRP Unity 深度掩模概述 https://i.stack.imgur.com/C6flO.png
该场景中有三个对象:
- 一架飞机将被遮蔽,并且其一部分消失(这是黄色的)。它确实使用 HDRP Lit 着色器作为透明,这是他的着色器:
使用 HDRP Lit 着色器遮罩对象 https://i.stack.imgur.com/ZnjM8.png
-
一架不会被掩盖的飞机。它确实使用 HDRP Lit 着色器作为不透明的(它是红色的)。这只是基本的。
-
一架飞机将成为面具。它有一个自定义图层,我将此图层命名为“Mask”。该飞机的 HDRP Lit 着色器是透明的,并且使用深度测试:从不。这里是 :
具有 HDRP Lit 着色器的 Mask 对象 https://i.stack.imgur.com/gr3Md.png
最终,您将需要一个具有自定义通道体积组件的对象。此自定义通道体积将以您创建的自定义图层为目标:“蒙版”图层,并在渲染透明通道之前将其材质替换为自定义材质。这里是 :
自定义通行证设置 https://i.stack.imgur.com/zdKau.png
最后,这是在自定义通道中插入的材质上使用的着色器代码(自定义通道中名为 StencilMask 的材质):
Shader "Custom/Stencil/MaskStencil"
{
SubShader {
// Render the mask after regular geometry, but before masked geometry and
// transparent things.
Tags {"Queue" = "Geometry+10" }
// Don't draw in the RGBA channels; just the depth buffer
ColorMask 0
ZWrite On
// Do nothing specific in the pass:
Pass {}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)