【发布时间】:2021-10-08 23:55:34
【问题描述】:
我通过一个名为 Shadero Sprite 的基于节点的着色器工具创建了一个着色器,我正在尝试用它调试一个问题。由于代码是由基于节点的工具生成的,我不完全确定着色器中每一行的用途是什么,这使得这个问题难以调试。
问题是,虽然着色器本身工作正常,但在我的 Unity 场景中使用它会导致我的场景中的某些 other 对象根本无法渲染;它们变得不可见。
这似乎与下面对UnityObjectToClipPos() 的调用有关:
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
...因为,如果我替换...
o.vertex = UnityObjectToClipPos(v.vertex);
...与...
o.vertex = v.vertex;
然后其他着色器/对象渲染得很好。然而,这当然意味着这个着色器看起来不正确。
我能够推断出的唯一其他线索是其他对象(不可见的对象)是 Unity UI 元素,它们都具有自定义着色器。一个着色器正在使用对 UnityObjectToClipPos() 的调用。另一个似乎没有(虽然它有很多 #includes,所以也许确实存在对它的调用,埋在其中一个 #includes 中)。
为什么这个函数调用会导致其他对象不可见,我可以用什么替换它来修复它?
编辑:这里是更多上下文的场景配置:
【问题讨论】: