2012-03-06 50 views

回答

3

幾乎所有的着色器都可以使用(特別是如果你打算使用SM4 +)。如果您需要任何市場滲透,我不建議爲SM3做任何事情。我仍然很遺憾,我們沒有爲我們的最新遊戲提供SM2後備,因爲不少人仍然使用老舊的SM2卡。

更多關於這個問題。您可以使用RTT,並且永遠不要往返回主內存(這很慢,儘量減少從圖形內存到主內存的傳輸),但不利的一面是,您需要使用一些相當複雜的技巧來計算AABB (如果你使用純粹的GPU,你會希望在CPU的一面)。

相反,我們所做的一切都需要改變CPU端粒子的狀態。然後,我們將獲得更新到GPU的數據的緊張內存表示。頂點着色器相當有趣(但是完全正確,在頂點着色器中儘可能多地做到!),它會提取粒子的壓縮表示,轉換它,並將未壓縮的數據傳遞給像素着色器。這裏一個重要的觀察結果是,您可以並且應該按照每個粒子數據分割每個頂點&。這意味着使用實例化(這只是一種說法:使用分頻器)。我們用正常+正常的旋轉表示粒子旋轉。

做粒子CPU端狀態改變的另一個原因是複合行爲CPU端更容易。任何至少有一半體面的粒子系統需要相當多的旋鈕才能創造有趣的粒子效應。

編輯:如果你有任何類似的粒子::更新,不能內聯你失敗了,最小化每個粒子函數調用,特別是虛擬的,並保持一個粒子的內存表示緊密包裝!

+0

Ahh輝煌的回覆,這對我很有意義。我的下一個任務是實現軟粒子,這就是爲什麼我需要問這個問題,因爲如果你正在做純粹的GPU,它不會讓我覺得你可以很容易地進行深度排序。我現在可以更改我的代碼,以反映您非常感謝的內容 – RobBain85 2012-03-06 16:35:19

1

這取決於你有什麼樣的粒子系統。在大多數情況下,你有一個C++的軟件表示和一個着色器的硬件表示。着色器的幾何數據是從軟件表示中計算出來的,應儘可能少。因爲在大多數情況下,計算能力不是限制資源,而是圖形卡的傳輸速率。

如果您可以使用您的方法進一步減少傳輸,您仍然可以在內存中保留軟件表示以供進一步使用。即使這意味着兩次計算數據,它可能比傳輸過程更快。

+0

我的粒子系統以煙,火,塵埃,雨等形式出現。此刻,我發送隨機x和z值到着色器的位置和速度等我也通過粒子的幀時間和生命週期。然後,我的着色器會計算出粒子應該基於哪些值進入的位置。您是否會在軟件中執行這些計算? – RobBain85 2012-03-06 16:28:07

+0

也許我誤解了你......但是當你發送隨機位置和速度時,你的粒子會閃爍,對嗎?或者這些值只計算一次,只有幀時間得到更新?在那種情況下,只有確定性的運動是可能的。 – 2012-03-06 16:34:50

+0

對不起,是的,當粒子不再被重複使用時,它們被應用 – RobBain85 2012-03-06 16:41:23