光线追踪-Unity-ComputeShader实现
行为动机学了Games101与Games202 (感谢闫老师分享), 我感兴趣就是光线追踪这一块
https://www.bilibili.com/video/BV1X7411F744?spm_id_from=333.337.search-card.all.click
Games最深的内容只讲了BVH 路径追踪与光源采样(入门确实够了),
但是嘞,
我想在光线追踪中跑PBR!
我想整个体积渲染!
我想做个次表面散射的皮肤!
我想用光线追踪渲染个更好看的Tifa!
我想渲染时间更快一点,而不是每一张图片渲染都等个几十分钟!
抱着这些问题,我就开始找其他的资料,
发现了,RayTracingInOneWeek系列
发现了,用ComputeShader写的光线追踪
还发现,坐我旁边的同事已经开始用 DXR捣鼓光追渲染器了,效果叼得一批,还能实时跑!
我承认,在此之前我对硬件跑光追一无所知,
于是乎,我查了一些资料,发现,原来18年的时候就能跑硬件光追了!
DX12与Vulkan都能跑硬件光追!
于是乎,我也屁颠屁颠地去下了个DX12光追Demo:
https://github.com/microsoft/DirectX-Graphics-Samples
功夫不负有心人,经过一个周末的死命折腾,写了几百行代码(Ctl+C+V),成功地跑了个牛逼哄哄的光追效果:
这个三角形很特别,它是光线追踪渲染的
但是勒,在无尽的API调用中,我迷失了自己,效果是整出来了,但是我都不知道干了什么!
于是我就开始反思,到底是哪出了问题?想了又想,是基础不牢!是不懂原理!核心的问题在于,我以为自己学了Games101 202,就明白了所有光追的知识了,但实际上却是一个刚刚入门!闫老师说:不推荐初学者去看PBRT,然后我就没去看!但实际上PBRT是包含了光追的大部分内容!因此我重整心态,掏出了我裸考过四六级的勇气去看PBRT,
https://pbr-book.org/
跳着跳着看,结合代码看,终于是有了一点头绪,
然后在去Github上找各种 光线追踪渲染器的源代码,看看他们的算法是怎么实现的,有了这些基础之后,
于是在Unity中用ComputeShader去实现了一版“光线追踪”,
为什么用ComputeShader写光线追踪?
因为用C++学光线追踪渲染太慢,用DXR学不到原理, 因此用ComputeShader非常适合学习光线追踪, 渲染速度还能接受 "所见即所得"!!!
一开始的效果长这样:
随后加入了,PathTracing, BVH,DisneyPBR,MIS,等效果与速度都有了很大的提升
DisneyPBR
反射 面光源
MIS 加快收敛
透射
光线追踪-Unity-ComputeShader
https://www.zhihu.com/video/1549447566420635648
B站高清视频连接:
后续打算:
1.实现PBRT中更进阶一些的算法:双向路径追踪 体渲染 次表面散射等
2.借助硬件的力量,将DXR融到光栅化的实时管线中
3.AI算法降噪?Maybe
最后
欢迎大家加入技术美术交流群(688075253):
TalkArtist Joey同志目前在职还是在校? 工作了 都已经卖课了[尴尬]
页:
[1]