最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

空間求交加速-BVH(Unity CPU/GPU)

2022-02-15 20:41 作者:DeadCyber  | 我要投稿

????需要求解射線(xiàn)與Mesh交點(diǎn)。但三角面太多,算法效率低下,Log(n)。

????通過(guò)網(wǎng)上大致了解BVH。我以自己的方法實(shí)現(xiàn)最簡(jiǎn)單BVH,將被求交的空間對(duì)象——三角面array,通過(guò)不斷二分(二分策略為沿著最長(zhǎng)軸切半),獲得AABB包圍盒(以下簡(jiǎn)稱(chēng)BBox),到一定深度后,記錄每個(gè)葉子節(jié)點(diǎn)下對(duì)應(yīng)的三角面的leafArray。于是求交變成了先與Log2(n)的BBox求交,最后遍歷leafArray三角面求交。

Mesh求交就是一堆三角面求最短交
我的策略:判斷重心,BBox最長(zhǎng)軸對(duì)半分

求交:與BVH樹(shù)求交到leaf,然后遍歷leafArray

由于與BBox求交遠(yuǎn)比三角面求交簡(jiǎn)單,所以省不少。

例如Mesh有1024個(gè)三角面,如果我們構(gòu)建10層的BVH樹(shù),那么最優(yōu)情況下我們只需要沿著B(niǎo)VH樹(shù),求交10次BBox,就能確定交到哪個(gè)三角形;如果我們構(gòu)建9層,那么最優(yōu)只需求交9次BBox,遍歷求交1個(gè)或2個(gè)三角形...

PS:左右子節(jié)點(diǎn)的BBox不一定包含同數(shù)量三角面,也可能相交。

轉(zhuǎn)

即使與這個(gè)節(jié)點(diǎn)的BBox相交,也不一定會(huì)交在這個(gè)bbox內(nèi)。

BVH近子優(yōu)先+深度優(yōu)先+堆棧返檢

具體都在圖里了。如果一下看不懂也不用在意,因?yàn)閷?shí)現(xiàn)的時(shí)候會(huì)很自然地碰到,并知道怎么做。

如果沒(méi)有考慮這個(gè)情況地話(huà),實(shí)際會(huì)是這樣:

最后我將算法在Unity中用CPU和GPU端都實(shí)現(xiàn)了一遍(c#腳本和ComputeShader)。CPU端用來(lái)離線(xiàn)構(gòu)建BVH,生成樹(shù)信息后,用來(lái)實(shí)時(shí)進(jìn)行BVHTrace,使得渲染速度大符上升。

RayBased IBL render,從1FPS到173FPS

我還將BVH用于加速其他射線(xiàn)檢測(cè),以實(shí)現(xiàn)加速離線(xiàn)烘培Mesh SDF,AO,軟陰影等...

巨量的Trace到三角面(4萬(wàn)面模型),不到0.2s就搞定

其他

我的BVH劃分策略比較簡(jiǎn)單,并且?guī)eafArray。這是為了移植算法到ComputeShader不得以的。如果不考慮快速兼容GPU,這種算法劃分不足以應(yīng)付一些特殊情況。即使是GPU,我也沒(méi)有確定一個(gè)比較合理的BVH樹(shù)深度設(shè)置策略,導(dǎo)致深度不同,效率vary巨大。

我的策略,在特殊情況下BVH劃分不理想,效率低下

BVH劃分算法是一個(gè)還沒(méi)有研究透的領(lǐng)域,各種算法層出不窮,大家自己選擇最適合的就行。

最后給上我的代碼地址:https://gitee.com/ouerkakachango/UnityRayTrace


空間求交加速-BVH(Unity CPU/GPU)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
双城市| 武胜县| 平阳县| 枣庄市| 密山市| 旺苍县| 长武县| 松桃| 桃园市| 新巴尔虎右旗| 桦川县| 赤壁市| 垣曲县| 新泰市| 济源市| 瑞昌市| 许昌县| 同德县| 金华市| 乌恰县| 樟树市| 闵行区| 金塔县| 湖口县| 惠东县| 商南县| 逊克县| 简阳市| 固安县| 兴山县| 札达县| 泽州县| 河源市| 苗栗县| 陕西省| 桑日县| 涿州市| 蕲春县| 淮北市| 恩施市| 屯昌县|