我通過名為 Shadero Sprite 的基于節點的著色器工具創建了一個著色器,我正在嘗試除錯它的問題。由于代碼是由基于節點的工具生成的,我不完全確定著色器中每一行的目的是什么,這使得這個問題難以除錯。
問題是,雖然著色器本身作業正常,但在我的 Unity 場景中使用它的物件會導致場景中的某些其他物件根本無法渲染;他們變得不可見。
這似乎與以下呼叫有關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)。
為什么這個函式呼叫會導致其他物件不可見,我可以用什么替換它來修復它?
編輯:這是更大背景關系的場景配置:

uj5u.com熱心網友回復:
為了在 3D 空間中顯示模型,我們通常將這個模型的所有頂點乘以 MVP -模型、視圖和投影矩陣。
該UnityObjectToClipPos()函式只是在齊次坐標中將一個點從物件空間轉換到相機的剪輯空間。這等效于mul(UNITY_MATRIX_MVP, float4(pos, 1.0)),應在其位置使用。
因此,我不認為該UnityObjectToClipPos()功能是導致您出現問題的原因。您應該更詳細地描述您的問題,我們會盡力幫助您。
uj5u.com熱心網友回復:
問題最終出在我用于文本的著色器上。
文本使用稱為SuperTextMesh的 Unity 資產,它為文本提供多個著色器。當我需要使用“投影和輪廓”著色器時,我使用了“投影和輪廓未點亮”著色器。“未點亮”的一個引起了問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/316220.html
