2017-03-12 27 views
0

我最近一直在製作遊戲,現在我已經寫了一個簡單的頂點動畫着色器,它根據某些值取代了我擁有的某些植被上的頂點。爲什麼我的頂點動畫着色器在場景和遊戲視圖中產生不同的結果?

到目前爲止,它一直很好,但我在與場景&遊戲並排觀看比賽時遇到了一些問題。他們出於某種原因產生了不同的結果,我無法弄清楚。遊戲和場景相機都設置爲等軸測圖。

這裏是它的外觀現在: GIF Link

上,您可以看到植被應該如何尋找正確的(場景)。

下面的代碼位是相關:

// Distance from vertex to model origin. 
fixed localDistance = distance(v.vertex.xyz, fixed3(0,0,0)); 

// Some displacement values. 
fixed s = sin(_Time.y * _WindY + v.vertex.x); 
fixed c = cos(_Time.y * _WindY + v.vertex.z); 

// Add the values to the Y of the vertex. 
v.vertex.y += _Shakiness * s * c * localDistance * 0.2; 
o.vertex = UnityObjectToClipPos(v.vertex); 

(Then we pass the vertex on to the fragment, and so on...) 
+0

我願意幫助,但不能沒有一個示例項目很容易地複製。你可以提供[mvce](http://stackoverflow.com/help/mcve)項目作爲zip文件嗎? – zwcloud

+0

是的,當我在幾個小時後回家時,我會把它拿起來:) – Ernst

+0

我還在等。 ;) – zwcloud

回答

0

你的模型在遊戲顯示dynamically batched。但在場景視圖中,它不會發生。

動態批處理:對於足夠小的網格物體,它將轉換它們在CPU上的頂點,將許多相似的頂點分組在一起,並一次性繪製它們。 因爲它通過將所有GameObject頂點轉換爲CPU上的世界空間而工作,所以如果該工作小於進行繪製調用,則這只是一個優點。

您可以將DisableBatching添加到SubShader以禁用動態批處理。

某些着色器(主要是那些做對象空間頂點變形)不工作時使用的繪圖調用批處理 - 這是因爲配料轉換所有幾何到世界空間,因此「目標空間」丟失。

DisableBatching標籤可以用來處理這個標籤。有三個可能的值:「True」(總是禁用該着色器的批處理),「False」(不禁用批處理;這是默認值)和「LODFading」(當LOD淡入處於活動狀態時禁用批處理;主要用於樹)。

enter image description here

+0

非常感謝@zwcloud,這是正確的答案! 我最終添加了你在我的SubShader中描述的那一行標籤: ''DisableBatching「=」True「 – Ernst

相關問題