2012-01-18 77 views
5

我想在Unity中創建一個線框頂點/片段着色器。根據this paper似乎是可能的。一般的想法似乎是,您將頂點着色器中計算的距離向量傳遞給片段着色器中的每個片段,根據其在多邊形內的位置確定用什麼亮度繪製線框線。是否可以訪問頂點着色器中的多邊形中的所有頂點?

從我讀過的其他東西看,雖然看起來您只能訪問頂點着色器中的單個頂點。我需要訪問頂點的多邊形中的所有相鄰頂點。這篇文章似乎意味着幾何着色器不是必需的,這很好,因爲Unity目前還不支持它們。

我錯過了什麼?在頂點着色器中不可能訪問相鄰的頂點嗎?如果沒有幾何着色器,我想要做什麼?

回答

2

你似乎的確有過閱讀2.1,說

步驟G1一般總是在頂點着色器執行的段落。步驟G2 應該在幾何着色器中執行,因爲幾何着色器 可以訪問多邊形的所有頂點(只要它是三角形)。 因此,如果未使用幾何着色器,則頂點着色器 需要接收其他頂點作爲屬性以便計算距離。這需要應用代碼不是不變的 ,以確定是否使用線框方法,需要發送附加數據 ,並且最終排除使用索引基元 ,因爲頂點的屬性取決於哪個三角形是 繪製。

因此,當不使用幾何着色器時,您確實不知道三角形的其他頂點,因此必須將它們作爲附加頂點屬性傳輸。因此,對於三角形的每個頂點,您有兩個額外的vec3屬性,其中包含此三角形的其他兩個頂點的位置。當然,就像文字說的那樣,你不能使用索引圖,因爲這兩個屬性不僅取決於頂點的位置,還取決於這個頂點所屬的三角形。

+0

感謝您的幫助。你知道這些限制是否可以在Unity引擎中克服嗎?是否有可能將這些額外的信息傳遞到像Unity使用的Cg着色器中?這個傳球從哪裏進行? – aardvarkk 2012-01-18 18:56:33

+0

@aardvarkk這些約束無法克服,因爲它們是底層硬件/接口的約束,而不是引擎或着色語言的約束。頂點着色器只能訪問單個頂點,並且需要將其他兩個作爲此頂點的屬性。我對Unity沒有任何經驗,但Cg當然具有每個頂點的屬性,我相信Unity有一些方法可以爲您的模型的頂點定製屬性。 – 2012-01-18 19:05:44

+0

@aardvarkk所以你有關於你原來的問題的任何進一步的問題(如果你可以訪問VS的鄰居,並且沒有GS你的目標是不可能的)?任何理解頂點和幾何着色器的人都不會得到任何不同的答案。 Unity與它沒有任何關係,因爲它不能奇蹟般地克服底層圖形硬件的限制。 – 2012-01-19 13:17:09