chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用NVIDIA RTX光線跟蹤的最佳實(shí)踐

星星科技指導(dǎo)員 ? 來源:NVIDIA ? 作者:Juha ? 2022-10-10 15:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這篇文章根據(jù)我們目前在游戲中使用 NVIDIA RTX 光線跟蹤的經(jīng)驗(yàn)收集了最佳實(shí)踐。實(shí)用技巧被組織成簡短的、可操作的項(xiàng)目,供今天從事光線跟蹤工作的開發(fā)人員使用。他們旨在深入了解什么樣的解決方案在大多數(shù)情況下會帶來良好的性能。為了找到特定案例的最佳解決方案,我總是建議進(jìn)行分析和實(shí)驗(yàn)。

本文中使用的常見縮寫和短詞:

AABB: 軸對齊邊界框

AS :加速度結(jié)構(gòu)

BLAS: 底層加速結(jié)構(gòu)

Geometry: 和 BLAS 中的幾何體

Instance: TLAS 中 BLAS 的實(shí)例

TLAS: 頂層加速結(jié)構(gòu)

加速結(jié)構(gòu)

本節(jié)重點(diǎn)介紹光線跟蹤加速結(jié)構(gòu)的構(gòu)建和管理,這是將光線跟蹤用于任何目的的起點(diǎn)。主題包括:

一般提示

建筑時(shí)最大化 GPU 利用率

內(nèi)存分配

將幾何圖形組織為 BLAS

生成首選項(xiàng)標(biāo)志

動態(tài) BLASE

非不透明幾何形狀

粒子

一般提示

考慮異步計(jì)算作為構(gòu)建。 特別是在混合渲染中, G 緩沖區(qū)或陰影貼圖被光柵化,在異步計(jì)算的基礎(chǔ)上執(zhí)行可能是有益的。

考慮將工作線程生成為構(gòu)建命令列表。 生成生成生成命令可能包括大量 CPU 端工作。它可以直接在編譯調(diào)用中,也可以直接在一些相關(guān)任務(wù)中,如對象的剔除。將 CPU 工作轉(zhuǎn)移到一個(gè)或多個(gè)工作線程可能是有益的。

TLA 的剔除實(shí)例。 通常,在 TLAS 中包括整個(gè)場景不是最佳的。相反,根據(jù)情況挑選實(shí)例。例如,考慮基于擴(kuò)展的相機(jī)截錐體進(jìn)行消隱。在光柵化中,最大距離通??梢孕∮谶h(yuǎn)平面距離。在剔除時(shí),還可以考慮實(shí)例大小,以便在較短的距離內(nèi)剔除較小的實(shí)例。

對實(shí)例使用適當(dāng)?shù)脑敿?xì)程度( LOD )。 與光柵化一樣,對所有內(nèi)容使用最詳細(xì)的幾何 LOD 通常是次優(yōu)的。用于遠(yuǎn)距離對象的 LOD 可以更簡單。在混合渲染中,可以考慮使用相同的 LOD 進(jìn)行光柵化和光線跟蹤。這是避免自相交偽影(如曲面陰影本身)的有效方法。

還應(yīng)考慮在光線跟蹤中使用較低細(xì)節(jié) LOD ,特別是為了降低動態(tài) BLAS 的更新成本。如果光柵化和光線跟蹤之間的 LOD 不匹配,則在光線跟蹤中通常需要啟用背面消隱,以防止自相交。有關(guān)光線跟蹤中 LOD 的更多信息,以及如何實(shí)現(xiàn)隨機(jī) LOD ,請參見 使用 Microsoft DirectX 光線跟蹤實(shí)現(xiàn)隨機(jī)細(xì)節(jié)級別 。

盡可能將幾何體或?qū)嵗龢?biāo)記為不透明。 將實(shí)例或幾何體標(biāo)記為不透明允許不間斷的硬件交叉點(diǎn)搜索,并防止調(diào)用任何命中著色器。盡可能做到這一點(diǎn)。只允許對需要的幾何體使用任何命中著色器;例如,進(jìn)行 alpha 測試。

盡可能使用三角形幾何形狀。 硬件擅長執(zhí)行光線三角形相交。光線盒交點(diǎn)也會加速,但在跟蹤三角形幾何體時(shí),您可以充分利用硬件。

建筑時(shí)最大化 GPU 利用率

批處理頂點(diǎn)變形和 BLAS 構(gòu)建。 連續(xù)執(zhí)行所有頂點(diǎn)變形調(diào)用,生成用作 BLAS 構(gòu)建和所有 BLAS 構(gòu)建調(diào)用輸入的三角形。不要在連續(xù)通話之間設(shè)置資源障礙。這允許驅(qū)動程序在一定程度上并行調(diào)用。所有 BLAS 構(gòu)建調(diào)用都需要唯一的暫存內(nèi)存,以允許無障礙執(zhí)行。

無需為每個(gè)資源持有區(qū)設(shè)置單獨(dú)的無人機(jī)屏障。相反,在 TLAS 構(gòu)建之前,您可以有一個(gè)單一的全球 UAV 屏障,以確保所有 BLAS 構(gòu)建都已完成,無論它們位于何處。

考慮合并小頂點(diǎn)變形調(diào)用。 通常,為一個(gè)幾何體或?qū)嵗敵鲎冃雾旤c(diǎn)的調(diào)用是輕量級的,即使在連續(xù)調(diào)用之間沒有障礙的情況下執(zhí)行,也不會填充整個(gè) GPU 。將多個(gè)幾何圖形或?qū)嵗奶幚砗喜⒌揭粋€(gè)調(diào)用中可以提高 GPU 利用率并產(chǎn)生更好的性能。

內(nèi)存分配

匯集小額撥款: BLASE 可以很小,有時(shí)只有幾千字節(jié)。使用單獨(dú)的提交資源來存儲每個(gè)這樣的小 BLA 并不是最優(yōu)的。相反,用更大的資源集中他們。池可以節(jié)省內(nèi)存,通??梢蕴岣咝阅?。一種選擇是在大型資源堆中使用放置的資源。

或者,通過手動從緩沖區(qū)中分配部分,可以將許多 BLAE 存儲在單個(gè)緩沖區(qū)中。由于子分配只需遵循 256 字節(jié)對齊,因此這允許更緊密地將 BLASE 備份到內(nèi)存中。無論采用何種池機(jī)制,都要避免內(nèi)存碎片,以保持池帶來的好處。

考慮壓縮靜態(tài) BLAS: 壓縮 BLASE 可以節(jié)省內(nèi)存并提高性能。內(nèi)存消耗的減少取決于幾何形狀,但可能高達(dá) 50% 左右。由于在 GPU 上完成 BLAS 構(gòu)建后,需要將壓縮大小讀回 CPU ,這對于只構(gòu)建一次的 BLAS 最為實(shí)用。請記住,要集中小的分配并避免內(nèi)存碎片,以從壓縮中獲得最大的好處。

將幾何圖形組織為 BLAS

當(dāng)實(shí)例的世界空間 AABB 中有很多空白空間時(shí),考慮拆分 BLA 。 世界空間 AABB 用于測試光線是否可能擊中實(shí)例并遍歷其相關(guān) BLA 。大量的空白會導(dǎo)致通過 BLAS 進(jìn)行不必要的遍歷。

獨(dú)立移動的幾何體通常應(yīng)該在自己的 BLAS 中。將它們合并到單個(gè) BLAS 中可能會導(dǎo)致一個(gè)具有大量空白空間的 AABB ,以及不必要的 BLAS 重建,而不是簡單地更改獨(dú)立實(shí)例的轉(zhuǎn)換。

當(dāng)實(shí)例世界空間 AABB 顯著重疊時(shí),考慮合并 BLASE 。 當(dāng)實(shí)例的世界空間 AABBs 重疊時(shí),穿過該區(qū)域的每條光線必須分別處理所有重疊的 BLAS 實(shí)例,以找到潛在的交點(diǎn)。遍歷一個(gè)合并的 BLA 將更有效。

針對 BLAS 的跟蹤性能不取決于其中幾何體的數(shù)量。合并到單個(gè) BLAS 中的幾何體仍然可以具有獨(dú)特的材質(zhì)。

盡可能實(shí)例化 BLAS 。 實(shí)例化 BLASE 可以節(jié)省內(nèi)存。它還可以提高光線跟蹤性能。實(shí)例可以具有唯一的材質(zhì)和變換。在實(shí)例的 AABB 重疊很多的情況下,盡管內(nèi)存消耗增加,但將它們復(fù)制并合并為單個(gè) BLA 作為多個(gè)幾何體仍然是更好的選擇。

避免幾何形狀中的細(xì)長三角形。 長而薄的三角形具有非最佳邊界體積,具有大量的空白空間。它們很容易與許多其他邊界體積重疊。當(dāng)根據(jù)幾何體跟蹤光線時(shí),這會導(dǎo)致非最佳性能。

駕駛員可以根據(jù)幾何形狀在一定程度上緩解問題。第一個(gè)三角形不太可能引起問題,但太多的三角形確實(shí)會引起問題,因此我建議盡可能避免它們;例如,將它們分割成較小的三角形。

不要在 TLA 中包含天空幾何體。 天盒或天球?qū)⒂幸粋€(gè) AABB ,與其他所有物體重疊,所有光線都必須進(jìn)行測試。對于表示天空的幾何體,在未命中著色器中處理天空著色比在命中著色器中更有效。

生成首選項(xiàng)標(biāo)志

對于 TLA ,考慮PREFER_FAST_TRACE標(biāo)志并僅執(zhí)行重建。通常,這會產(chǎn)生最佳的整體性能。其基本原理是,無論場景中發(fā)生何種移動,盡可能高質(zhì)量地制作 TLA 都很重要,而且成本不高。

對于靜態(tài) BLASE ,使用PREFER_FAST_TRACE標(biāo)志。對于所有只構(gòu)建一次的 BLASE ,優(yōu)化最佳光線跟蹤性能是一個(gè)簡單的選擇。

對于動態(tài) BLASE ,請選擇使用PREFER_FAST_TRACE或PREFER_FAST_BUILD標(biāo)志,或者兩者都不使用。對于偶爾重建或更新的 BLAE ,最佳構(gòu)建首選項(xiàng)標(biāo)志取決于許多因素。建造了多少?射線痕跡有多貴?可以通過在異步計(jì)算上執(zhí)行構(gòu)建來隱藏構(gòu)建成本嗎?為了找到特定情況下的最佳解決方案,我建議嘗試不同的選項(xiàng)。

動態(tài) BLASE

盡可能重復(fù)使用舊 BLA 。 如果您知道 BLAS 的頂點(diǎn)在上次更新后沒有移動,請繼續(xù)使用舊 BLAS 。

僅為可見對象更新 BLAS 。 當(dāng)從 TLA 中剔除實(shí)例時(shí),也將其剔除的 BLAS 從 BLAS 更新過程中排除。

考慮根據(jù)距離和大小跳過更新。 有時(shí)不需要在每一幀上更新 BLA ,這取決于它在屏幕上的大小??梢蕴^某些更新,而不會引起明顯的視覺錯(cuò)誤。

在大變形后重建 BLASE 。 有限變形后的 BLAS 更新是一個(gè)不錯(cuò)的選擇,因?yàn)樗鼈儽戎亟ū阋说枚?。然而,先前重建后的大變形可能會?dǎo)致非最佳光線跟蹤性能。細(xì)長的三角形加劇了這個(gè)問題。

考慮定期重建更新的 BLASE 。 當(dāng)幾何體變形過大并且需要重建以恢復(fù)最佳光線跟蹤性能時(shí),可以進(jìn)行檢測。簡單地定期重建所有 BLASE 是一種合理的方法,可以避免顯著的性能影響,而不考慮變形。

在框架上分布重建。 由于重建比更新慢得多,因此在單個(gè)幀上進(jìn)行的許多重建可能會導(dǎo)致口吃。為了避免這種情況,最好將重建分布在框架上。

考慮僅使用具有不可預(yù)測變形的重建。 在某些情況下,當(dāng)幾何體變形足夠大和快速時(shí),在構(gòu)建 BLAS 時(shí)省略ALLOW_UPDATE標(biāo)志并始終重建它是有益的。如果需要,可以考慮使用PREFER_FAST_BUILD標(biāo)志來降低重建成本。在極端情況下,使用PREFER_FAST_BUILD標(biāo)志會比使用PREFER_FAST_TRACE標(biāo)志和更新產(chǎn)生更好的整體光線跟蹤性能。

避免在 BLAS 更新中更改三角形拓?fù)洹?更新中的拓?fù)渥兓馕吨切瓮嘶驈?fù)活。如果退化三角形的位置不代表恢復(fù)三角形的位置,則可能導(dǎo)致非最佳光線跟蹤性能。“彎曲”變形中偶爾發(fā)生的拓?fù)渥兓ǔ2粫斐蓡栴},但“斷裂”變形中較大的拓?fù)渥兓赡軙斐蓡栴}。

在可能的情況下,最好使用單獨(dú)的 BLAS 版本,或?qū)Α捌茐摹弊冃我鸬牟煌負(fù)涫褂梅腔顒尤切巍.?dāng)三角形的位置為 N A N 時(shí),三角形處于非活動狀態(tài)。如果這些替代方案不可行,我建議重建 BLAS ,而不是在拓?fù)涓暮蟾?。更新中不允許通過索引緩沖區(qū)修改來更改拓?fù)洹?/p>

非不透明幾何形狀

盡可能減少非不透明區(qū)域。 調(diào)用任何命中著色器(通常用于對非不透明三角形執(zhí)行 alpha 測試)會中斷硬件交點(diǎn)搜索。盡可能減少未標(biāo)記為不透明的區(qū)域是提高性能的簡單方法。使用更多的三角形更準(zhǔn)確地定義非不透明區(qū)域可能是一個(gè)很好的權(quán)衡。

考慮拆分為不透明和非不透明幾何體。 當(dāng)定義良好的幾何三角形部分可以被視為完全不透明時(shí),可以考慮將其拆分為單獨(dú)的幾何體并將其標(biāo)記為不透明。不同的幾何形狀仍然可以駐留在同一 BLAS 中。

粒子

考慮將公告牌粒子表示為三角形幾何體。 在 BLASE 中表示廣告牌粒子的一個(gè)選項(xiàng)是將廣告牌輸出為三角形,將廣告牌的一部分沿垂直軸旋轉(zhuǎn) 90 度到不同的方向。這允許利用三角形相交硬件,同時(shí)為粒子的視覺邊界提供合理的近似。

考慮 alpha 測試而不是混合。 根據(jù)粒子類型,在二次光線中對渲染主可見性時(shí)混合的粒子進(jìn)行 alpha 測試可能會提供合理的視覺質(zhì)量。這種方法最適用于邊界清晰的粒子。對于表示煙或霧等物體的粒子,這可能不適用。有關(guān)更多信息,請參閱 光線跟蹤 《沃爾芬斯坦:年輕的血液》中的思考 。

避免對死粒子使用退化三角形。 更新 BLASE 中的退化三角形可能會使結(jié)構(gòu)對于光線跟蹤而言不是最優(yōu)的。對于具有動態(tài)活粒子數(shù)的粒子系統(tǒng),我建議考慮其他解決方案,例如使用正確的粒子數(shù)在每個(gè)幀上重建 BLAS 。

考慮將網(wǎng)格粒子表示為 TLA 中的實(shí)例。 對于渲染為三角形網(wǎng)格的粒子,每個(gè)粒子都有一個(gè)唯一的實(shí)例是一個(gè)合理的解決方案。當(dāng)粒子在場景周圍分布時(shí),這是真實(shí)的,因此單個(gè)光線通常不會擊中許多實(shí)例。實(shí)例應(yīng)共享基礎(chǔ)網(wǎng)格 BLAS 。此外,考慮壓縮 BLAS 。

點(diǎn)擊著色

本節(jié)重點(diǎn)介紹光線命中的著色。即使是經(jīng)驗(yàn)豐富的圖形開發(fā)人員在開始開發(fā)光線跟蹤著色器時(shí)也可能會受益于新想法,因?yàn)樽罴呀鉀Q方案可能與光柵化中的不同。主題包括:

一般提示

最小化分歧

任何命中著色器

著色器資源綁定

內(nèi)聯(lián)光線跟蹤

管道狀態(tài)

一般提示

保持光線有效載荷較小。 寄存器用于保存有效負(fù)載值,它們減少了命中著色器可用的寄存器數(shù)量。我建議避免草率使用有效負(fù)載,盡管向包值中添加復(fù)雜代碼很少有好處。

使用有效負(fù)載訪問限定符。 此功能在 HLSL 著色器模型 6.6 中可用。它允許指定哪些著色器階段寫入或讀取有效負(fù)載中的每個(gè)字段,并使編譯器能夠更好地優(yōu)化寄存器使用,從而提高占用率和性能。為了獲得最大的潛在效益,請盡可能準(zhǔn)確地定義每個(gè)字段的限定符。有關(guān)更多信息,請參閱 GitHub 上的 DirectX-Specs 。

考慮將安全默認(rèn)值寫入未使用的有效負(fù)載字段。 當(dāng)某些著色器不使用負(fù)載中其他著色器所需的所有字段時(shí),仍然可以將安全默認(rèn)值寫入未使用的字段。這允許編譯器在寫入之前丟棄未使用的輸入值,并將有效負(fù)載寄存器用于其他目的。

盡可能在第一次擊中時(shí)終止射線。 當(dāng)不需要解析正確的最近命中時(shí)(對于陰影光線),使用RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH或gl_RayFlagsTerminateOnFirstHitEXT標(biāo)記光線是一種簡單有效的優(yōu)化。

僅當(dāng)需要正確性時(shí)才使用面剔除。 與光柵化不同,啟用背面或正面消隱不會提高性能。相反,它稍微減慢了光線遍歷。僅當(dāng)需要獲得正確的渲染結(jié)果時(shí)才使用它們。

最小化光線跟蹤調(diào)用的活動狀態(tài)。 在TraceRay或traceRayExt調(diào)用之前初始化并在調(diào)用后使用的變量是活動狀態(tài),在調(diào)用命中和未命中著色器時(shí)必須在調(diào)用過程中保持這些狀態(tài)。司機(jī)有幾種不同的選擇,但都有成本。

我建議盡量減少活動狀態(tài)的數(shù)量。識別這樣的變量并不總是微不足道的。 NVIDIA 和微軟正在合作開發(fā)一種編譯器功能,用于自動檢測活動狀態(tài)。

避免深度遞歸。 深度、非均勻光線遞歸可能代價(jià)高昂。

最小化分歧

對每個(gè)材質(zhì)模型使用單獨(dú)的命中著色器。 減少命中著色器中的代碼和數(shù)據(jù)發(fā)散是有幫助的,尤其是在非相干光線的情況下。特別是,避免在材質(zhì)模型之間手動切換的 U bershader 。在單獨(dú)的命中著色器中實(shí)現(xiàn)每個(gè)所需的材質(zhì)模型,為系統(tǒng)提供了管理發(fā)散命中著色的最佳可能性。

當(dāng)材質(zhì)模型允許使用統(tǒng)一的著色器而沒有太多分歧時(shí),可以考慮對具有各種材質(zhì)的幾何體使用公共命中著色器。

考慮簡化著色。 通常,不需要復(fù)制用于渲染主要可見性的所有功能,以進(jìn)行著色鏡面反射或間接漫反射照明。忽略特征并不總是導(dǎo)致顯著的視覺差異?;蛘?,視覺效果的改善并不能證明渲染成本是合理的。光線越不相干,通常需要的主要可見性特征的復(fù)制越不準(zhǔn)確。此外,隨著命中距離的增加,著色有時(shí)可以進(jìn)一步簡化。

避免直接從頂點(diǎn)和像素著色器轉(zhuǎn)換。 在命中著色中獲得最佳性能的方法不同于光柵化的最佳方法。在光柵化中,即使代碼差異很小,也可以使用單獨(dú)的著色器置換。在命中著色中,減少單個(gè)命中著色器內(nèi)的發(fā)散度和單獨(dú)命中著色器的數(shù)量都很有幫助。通常,我不建議直接將頂點(diǎn)和像素著色器轉(zhuǎn)換為命中著色器。

考慮將公共代碼移到命中和未命中著色器之外。 當(dāng)所有命中著色器都有一個(gè)公共部分時(shí),我建議將該代碼從命中著色器中移除;例如,到光線生成著色器。有時(shí),命中著色器和未命中著色器中也可能存在常見代碼,例如,當(dāng)命中著色器中下一次反彈的近似值與未命中著色器中第一次反彈的近似值相同時(shí)。同樣,我建議將該常見代碼移到命中和未命中著色器之外。

任何命中著色器

更喜歡統(tǒng)一和簡化的任何命中著色器。 在光線遍歷期間,可能會大量執(zhí)行任意命中著色器,并且它會中斷硬件交點(diǎn)搜索。任何命中著色器的成本都會對整體性能產(chǎn)生顯著影響。我建議在光線跟蹤過程中使用統(tǒng)一且簡化的任意命中著色器。此外, GPU 的完整寄存器容量不適用于任何命中著色器,因?yàn)樗囊徊糠直或?qū)動程序用于存儲光線狀態(tài)。

優(yōu)化對材料數(shù)據(jù)的訪問。 在任何命中著色器中,對材質(zhì)數(shù)據(jù)的最佳訪問通常至關(guān)重要。一系列相關(guān)內(nèi)存訪問是一種常見模式。加載頂點(diǎn)索引、頂點(diǎn)數(shù)據(jù)和采樣紋理。在可能的情況下,從該路徑中刪除間接操作是有益的。

混合時(shí),請記住未定義的點(diǎn)擊順序。 沿光線的點(diǎn)擊被發(fā)現(xiàn),并且相應(yīng)的任何點(diǎn)擊著色器調(diào)用以未定義的順序發(fā)生。這意味著混合技術(shù)必須與順序無關(guān)。這還意味著,為了排除最近的不透明命中之外的命中,必須適當(dāng)限制光線距離。此外,可能需要使用NO_DUPLICATE_ANYHIT_INVOCATION標(biāo)記混合幾何體,以確保結(jié)果正確。有關(guān)更多信息,請參閱 光線跟蹤寶石 中的第 9 章。

著色器資源綁定

如果可能,首選全局根表( DXR )或直接描述符訪問( Vulkan )。 通常,光線生成和未命中著色器使用的資源可以像計(jì)算著色器一樣方便地綁定,而不是通過著色器記錄綁定。此外,不管命中了什么,通常也可以這樣綁定使用的命中著色器資源。在所有命中記錄中具有相同的資源限制不是最優(yōu)的。

考慮 hit 著色器的無綁定資源。 無界描述符表( DXR )或無大小描述符數(shù)組( Vulkan )中的資源,由命中特定的系統(tǒng)值(如 InstanceIndex 或 gl _ InstanceID )或直接存儲在命中記錄中的值( DXR 中的根常數(shù))索引,可以是向命中著色器提供資源的有效方法。

考慮索引和頂點(diǎn)緩沖區(qū)的根描述符。 ( DXR )作為無界描述符表的替代方法,可以高效地將索引和頂點(diǎn)緩沖區(qū)地址直接存儲在命中記錄中作為根描述符。當(dāng)通過根描述符訪問資源時(shí),不會隱式執(zhí)行越界檢查。根描述符地址必須遵循四字節(jié)對齊。預(yù)計(jì)算到基址的 16 位索引的偏移量可能會破壞對齊。

盡可能使用根簽名版本 1.1 和靜態(tài)描述符。 ( DXR )根簽名 1.1 允許驅(qū)動程序預(yù)期描述符是靜態(tài)的;也就是說,在記錄命令列表后,應(yīng)用程序不會修改它們。這可以在驅(qū)動程序中實(shí)現(xiàn)一些潛在的有益優(yōu)化,尤其是當(dāng)根描述符不用于訪問緩沖區(qū)時(shí)。與根描述符一樣,越界檢查不是用靜態(tài)描述符隱式執(zhí)行的。此外,靜態(tài)描述符和根描述符都不能為 null 。

考慮在 GPU 上構(gòu)建著色器表。 當(dāng)有許多幾何體和許多光線跟蹤過程時(shí),命中表可能會變大,上載它們可能會耗費(fèi)大量時(shí)間。與其上載在 CPU 上構(gòu)建的整個(gè)命中表,不如只上載每個(gè)幀上所需的新信息,例如當(dāng)前可見實(shí)例的材質(zhì)索引,然后在 GPU 上執(zhí)行命中表構(gòu)建過程以提高效率。

表構(gòu)造中所需的大部分信息可以永久駐留在 GPU 內(nèi)存中,例如命中組標(biāo)識符、頂點(diǎn)緩沖區(qū)地址和幾何體的偏移量。

內(nèi)聯(lián)光線跟蹤

考慮螺紋組尺寸為 8 × 8 或更大。 作為計(jì)算著色器進(jìn)行內(nèi)聯(lián)光線跟蹤的經(jīng)驗(yàn)法則,可以使用大小為 8 × 8 的線程組。通常,一組中的線程數(shù)是 GPU 波大小的倍數(shù)是有效的。 NVIDIA GPU 中的波形大小為 32 個(gè)線程。

然而,由于同時(shí)執(zhí)行的組數(shù)量有限,使用只有一個(gè)波形的線程組限制了線程占用。一組中有兩個(gè)波浪會使?jié)撛谡加寐史?。著色器寄存器和組共享內(nèi)存消耗也可以設(shè)置占用限制。當(dāng)其他因素允許時(shí),可以從三個(gè)波組開始達(dá)到最大線程占用率。

組大小的實(shí)際選擇可以是 16 × 8 螺紋。將尺寸增加到遠(yuǎn)遠(yuǎn)超出此范圍通常是沒有好處的。通過不同尺寸的實(shí)驗(yàn),可以發(fā)現(xiàn)針對特定情況的最佳尺寸。不同硬件代的最佳尺寸可能不同。

使用內(nèi)聯(lián)光線跟蹤避免發(fā)散著色。 由于未基于命中調(diào)用命中著色器,因此所有著色都在投射光線的著色器中內(nèi)聯(lián)發(fā)生。在根據(jù)點(diǎn)擊數(shù)選擇的著色器中具有發(fā)散的代碼路徑或數(shù)據(jù)訪問可能會減慢著色速度,尤其是在光線不相干的情況下。當(dāng)需要多個(gè)不同的著色模型時(shí),使用DispatchRays或vkCmdTraceRaysKHR是更好的選擇。

使用 hit 特定的系統(tǒng)值進(jìn)行內(nèi)聯(lián)光線跟蹤的無綁定資源訪問。由于命中記錄中的綁定不可用,因此必須通過其他方式提供特定于幾何體的綁定?;谔囟ㄓ?hit 的系統(tǒng)值(如InstanceContributionToHitGroupIndex和GeometryIndex)訪問無界描述符表中的資源是一種很好的做法。

我建議盡可能避免間接訪問索引、頂點(diǎn)和材質(zhì)數(shù)據(jù)。例如,基于系統(tǒng)值(如InstanceID)從緩沖區(qū)讀取資源索引以選擇索引緩沖區(qū)可能會導(dǎo)致難以隱藏的延遲。

首選編譯時(shí)光線標(biāo)志。 編譯時(shí)和運(yùn)行時(shí)光線標(biāo)志都可以用于內(nèi)聯(lián)光線跟蹤。我建議盡可能使用編譯時(shí)標(biāo)志,因?yàn)樗鼈兛梢詫?shí)現(xiàn)有益的編譯時(shí)優(yōu)化。

監(jiān)視查詢對象的寄存器消耗。 初始化后,當(dāng)著色器執(zhí)行可能繼續(xù)遍歷的代碼時(shí),查詢對象必須保持光線遍歷的狀態(tài)。這會消耗寄存器,復(fù)雜的用戶代碼可能會比通常更快地限制占用。這種情況類似于在DispatchRays或vkCmdTraceRaysKHR過程中執(zhí)行任何命中著色器。在使用查詢對象之前初始化并在之后使用的變量可能會消耗額外的寄存器。

考慮線程組重新排序以提高一致性。 當(dāng)使用來自計(jì)算著色器的內(nèi)聯(lián)光線跟蹤時(shí),調(diào)度線程組的默認(rèn)行主分配到 GPU 執(zhí)行通常不會產(chǎn)生最佳性能。通過手動重新排序線程組,可以提高在 GPU 上執(zhí)行時(shí)線程組同時(shí)進(jìn)行的內(nèi)存訪問的一致性。有關(guān)更多信息,請參閱 光線跟蹤管道狀態(tài)的并行著色器編譯 。

管道狀態(tài)

考慮每個(gè)光線生成著色器一個(gè)狀態(tài)對象。 我建議為每個(gè)DispatchRays或vkCmdTraceRaysKHR調(diào)用使用該過程中所需的著色器編譯一個(gè)單獨(dú)的狀態(tài)對象。它可以幫助優(yōu)化寄存器消耗,并允許優(yōu)化本文后面描述的管道配置值設(shè)置。

將MaxTraceRecursionDepth、MaxRecursionDepth、MaxPayloadSizeInBytes , 和MaxAttributeSizeInBytes設(shè)置得盡可能小。將這些值設(shè)置為高于必要值可能會對性能產(chǎn)生不必要的負(fù)面影響。在DispatchRays或vkCmdTraceRaysKHR調(diào)用中使用內(nèi)聯(lián)光線跟蹤時(shí),這些光線跟蹤調(diào)用不計(jì)入最大遞歸深度。

盡可能使用SKIP_PROCEDURAL_PRIMITIVES, SKIP_AABBS , 和SKIP_TRIANGLES。這些管道狀態(tài)標(biāo)志允許在狀態(tài)編譯中進(jìn)行簡單但潛在有效的優(yōu)化。

考慮使用著色器集合進(jìn)行并行編譯和共享。 ( DXR )當(dāng)您管理多個(gè)著色器時(shí),著色器集合可能允許多線程編譯狀態(tài)對象,并在狀態(tài)對象之間共享編譯代碼。有關(guān)更多信息,請參閱 光線跟蹤管道狀態(tài)的并行著色器編譯 。

當(dāng)需要自動綁定點(diǎn)分配時(shí),請考慮編譯器選項(xiàng)。 ( DXR )默認(rèn)情況下,編譯著色器庫時(shí)不使用著色器資源的自動綁定點(diǎn)指定。如果需要,有幾個(gè)有用的編譯器選項(xiàng)。首先,/auto-binding-space在給定寄存器空間中啟用自動綁定點(diǎn)分配。此外,默認(rèn)情況下,所有未標(biāo)記關(guān)鍵字 static 的函數(shù)都被視為庫導(dǎo)出。

使用/auto-binding-space時(shí),任何導(dǎo)出函數(shù)訪問的資源都會消耗綁定點(diǎn),而不管它們是否在最終狀態(tài)對象中使用。為了將綁定點(diǎn)消耗限制為真正需要的函數(shù),可以使用/exports來限制庫導(dǎo)出。

考慮AddToStateObject的增量構(gòu)建。它允許基于現(xiàn)有對象增量構(gòu)建狀態(tài)對象,這在使用多個(gè)著色器管理動態(tài)內(nèi)容時(shí)非常有用。

M 如果適用,每年管理堆棧。 使用 API 的查詢函數(shù)來確定每個(gè)著色器所需的堆棧大小,并應(yīng)用有關(guān)調(diào)用圖的應(yīng)用程序端知識來減少內(nèi)存消耗并提高性能。

一個(gè)很好的例子是拍攝二次陰影光線的昂貴反射著色器,應(yīng)用程序知道,二次陰影光線僅使用具有低堆棧要求的普通命中著色器。驅(qū)動程序無法提前知道此調(diào)用圖,因此默認(rèn)的保守堆棧大小計(jì)算會過度分配內(nèi)存。

關(guān)于作者

Juha 是一名軟件工程師,在實(shí)時(shí)圖形方面有 15 年的經(jīng)驗(yàn)。他曾在各種游戲、引擎和硬件基準(zhǔn)測試中使用過尖端渲染技術(shù)。最近,他專注于 RTX 光線追蹤在游戲中的應(yīng)用。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5494

    瀏覽量

    127765
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5431

    瀏覽量

    108256
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    NVIDIA RTX PRO 4500 Blackwell GPU測試分析

    今天我們帶來全新 NVIDIA Blackwell 架構(gòu) GPU —— NVIDIA RTX PRO 4500 Blackwell 的測試,對比上一代產(chǎn)品 NVIDIA
    的頭像 發(fā)表于 08-28 11:02 ?2133次閱讀
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>RTX</b> PRO 4500 Blackwell GPU測試分析

    NVIDIA Omniverse Extension開發(fā)秘籍

    NVIDIA Omniverse 是一個(gè)模塊化平臺,使用高級 API 和微服務(wù)來構(gòu)建由 OpenUSD 和 NVIDIA RTX 提供支持的 3D 應(yīng)用。OpenUSD 功能強(qiáng)大的 3D 框架與
    的頭像 發(fā)表于 08-22 15:52 ?3089次閱讀
    <b class='flag-5'>NVIDIA</b> Omniverse Extension開發(fā)秘籍

    超過175款游戲和應(yīng)用現(xiàn)已支持NVIDIA DLSS 4

    超過 175 款游戲和應(yīng)用現(xiàn)已支持 DLSS 4,包括《生化危機(jī):安魂曲》(Resident Evil Requiem)、《影之刃零》(Phantom Blade Zero)等支持光線追蹤的大作,升級的 NVIDIA RTX R
    的頭像 發(fā)表于 08-20 14:26 ?758次閱讀

    NVIDIA RTX AI加速FLUX.1 Kontext現(xiàn)已開放下載

    NVIDIA RTXNVIDIA TensorRT 現(xiàn)已加速 Black Forest Labs 的最新圖像生成和編輯模型;此外,Gemma 3n 現(xiàn)可借助 RTX
    的頭像 發(fā)表于 07-16 09:16 ?1448次閱讀

    天馬榮獲新財(cái)富雜志“2024 ESG最佳實(shí)踐獎(jiǎng)”

    天馬可持續(xù)發(fā)展?ESG表現(xiàn)再獲認(rèn)可,上榜2024年新財(cái)富雜志最佳上市公司評選“ESG最佳實(shí)踐榜單”。
    的頭像 發(fā)表于 05-21 14:43 ?601次閱讀

    NVIDIA Omniverse Kit 107的安裝部署步驟

    NVIDIA Omniverse 是一個(gè)模塊化平臺,使用高級 API 和微服務(wù)來構(gòu)建由 OpenUSD 和 NVIDIA RTX 提供支持的 3D 應(yīng)用。OpenUSD 功能強(qiáng)大的 3D 框架與
    的頭像 發(fā)表于 03-28 10:37 ?927次閱讀
    <b class='flag-5'>NVIDIA</b> Omniverse Kit 107的安裝部署步驟

    使用NVIDIA RTX PRO Blackwell系列GPU加速AI開發(fā)

    NVIDIA GTC 推出新一代專業(yè)級 GPU 和 AI 賦能的開發(fā)者工具—同時(shí),ChatRTX 更新現(xiàn)已支持 NVIDIA NIM,RTX Remix 正式結(jié)束測試階段,本月的 NVIDIA
    的頭像 發(fā)表于 03-28 09:59 ?888次閱讀

    NVIDIA RTX 4500 Ada與NVIDIA RTX A5000的對比

    基于大眾所熟知的 NVIDIA Ada Lovelace 架構(gòu),NVIDIA RTX 4500 Ada Generation是一款介于 NVIDIA
    的頭像 發(fā)表于 03-05 10:30 ?2787次閱讀

    $1999 的 RTX 5090 來了

    和最具挑戰(zhàn)性的創(chuàng)意工作負(fù)載。使用全光線追蹤和最低延遲進(jìn)行游戲。GeForce RTX 5090 采用 NVIDIA Blackwell 架構(gòu),配備 32GB 超高速 GDDR7 顯存,讓您無所不能。 Spec GPU 引擎規(guī)格
    的頭像 發(fā)表于 01-13 10:03 ?2588次閱讀
    $1999 的 <b class='flag-5'>RTX</b> 5090 來了

    NVIDIA推出面向RTX AI PC的AI基礎(chǔ)模型

    NVIDIA 今日發(fā)布能在 NVIDIA RTX AI PC 本地運(yùn)行的基礎(chǔ)模型,為數(shù)字人、內(nèi)容創(chuàng)作、生產(chǎn)力和開發(fā)提供強(qiáng)大助力。
    的頭像 發(fā)表于 01-08 11:01 ?749次閱讀

    技嘉于 CES 2025 首度亮相升級散熱設(shè)計(jì)與精實(shí)體積的 NVIDIA GeForce RTX 50 系列顯卡

    NVIDIA GeForce RTX? 50 系列顯示芯片設(shè)計(jì)的散熱系統(tǒng),可大幅提升高負(fù)載需求的游戲表現(xiàn)。以 "Evolution of Ten" 為設(shè)計(jì)概念,技嘉新系列顯卡提升高達(dá) 10% 散熱效率,并減少 10% 整體體積,提供高游戲性能及更輕松上手的 PC 組裝體
    的頭像 發(fā)表于 01-07 17:57 ?683次閱讀

    NVIDIA和GeForce RTX GPU專為AI時(shí)代打造

    NVIDIA 和 GeForce RTX GPU 專為 AI 時(shí)代打造。
    的頭像 發(fā)表于 01-06 10:45 ?1068次閱讀

    AMD與NVIDIA GPU優(yōu)缺點(diǎn)

    ,NVIDIARTX系列顯卡以其強(qiáng)大的光線追蹤和DLSS技術(shù)領(lǐng)先于市場。例如,NVIDIARTX 3080在4K分辨率下提供了卓越的游戲
    的頭像 發(fā)表于 10-27 11:15 ?4702次閱讀

    MES系統(tǒng)的最佳實(shí)踐案例

    效率、降低成本、保證產(chǎn)品質(zhì)量。 MES系統(tǒng)的最佳實(shí)踐案例 引言 在當(dāng)今競爭激烈的制造業(yè)環(huán)境中,企業(yè)必須不斷尋求創(chuàng)新和改進(jìn)的方法來保持競爭力。MES系統(tǒng)作為一種關(guān)鍵的信息技術(shù)工具,已經(jīng)被廣泛應(yīng)用于各種制造行業(yè),以實(shí)現(xiàn)生產(chǎn)過程的優(yōu)化和管理。本文將探討MES系統(tǒng)的
    的頭像 發(fā)表于 10-27 09:33 ?3334次閱讀

    云計(jì)算平臺的最佳實(shí)踐

    云計(jì)算平臺的最佳實(shí)踐涉及多個(gè)方面,以確保高效、安全、可擴(kuò)展和成本優(yōu)化的云環(huán)境。以下是一些關(guān)鍵的最佳實(shí)踐: 一、云成本優(yōu)化 詳細(xì)分析云使用情況 :通過細(xì)致的監(jiān)控和分析,識別低ROI(投資
    的頭像 發(fā)表于 10-24 09:17 ?992次閱讀