[程式] 黏土绘制:射线迈进与GPU空间结构优化

楼主: cjcat2266 (CJ Cat)   2020-04-22 17:32:03
这是最近做的一个实验
因为某些原因,就跳进射线迈进(ray marching)的大坑了
Ray marching是在demoscene领域很红的绘图手法
在 http://shadertoy.com 上也很热门
搭配有号距离场(signed distance field, SDF)和柔化混和
可以绘制出类似用黏土建构的场景效果
使用相关技术的游戏有Claybook和Dreams
这是我的第一个实验
https://twitter.com/TheAllenChou/status/1251469038644912128
后来成功将此效果套用到Unity的scene view中
这样就可以方便用自由视角观测
https://twitter.com/TheAllenChou/status/1251755478670962695
然后我改用compute shader后制
做到可以利用编辑器内的game object达到即时互动
https://twitter.com/TheAllenChou/status/1252126496799375361
后来试着做出能视觉化效能瓶颈的热视图(heat map)
这是视觉化射线迈进次数的热视图
https://twitter.com/TheAllenChou/status/1252495311798321153
接下来的计画是用空间结构阶层(bounding volume hierarchy, BVH)
想办法优化,剔除射线压根不会碰到的物件所对应的SDF
首战告败,因为陷入race condition的陷阱做出了...蜜蜂群XD
https://twitter.com/TheAllenChou/status/1252828873533743104
二度尝试后成功了
BVH优化在压力测试中可以有效剔除96%的SDF运算
我并且追加了另外一个热视图,以观测射线实际运算的SDF数量
这是最终的demo + 解释
https://www.youtube.com/watch?v=2T2FqvtXqLw
原始档:
https://github.com/TheAllenChou/unity-ray-marching
参考资料:
http://www.michaelwalczyk.com/blog/2017/5/25/ray-marching
http://www.iquilezles.org/www/articles/smin/smin.htm
http://www.iquilezles.org/www/articles/normalsSDF/normalsSDF.htm
https://www.shadertoy.com/
https://box2d.org/files/ErinCatto_DynamicBVH_GDC2019.pdf
https://github.com/erincatto/box2d
以上 :)
作者: wangm4a1 (水兵)   2020-04-22 18:29:00
作者: nicetw20xx (哇爱台湾)   2020-04-23 00:19:00
感觉好厉害,也期待有texture xD
作者: zxc9764315 (Norus)   2020-04-23 11:46:00
推BVH优化,虽然我的电脑GPU还是被操到100% XD
作者: aegis123321 (PE)   2020-04-25 08:03:00
推 好奇运算量如此庞大的情况下是如何实际应用?
楼主: cjcat2266 (CJ Cat)   2020-04-25 11:04:00
可能不适合绘制全萤幕分辨率的效果吧,区域性效果应该比较可行。我现在在研究Dreams和Clayxels使用的绘图方式,不是用ray marching而是voxel splatting,看起来比较适合即时大范围性的绘制

Links booklink

Contact Us: admin [ a t ] ucptt.com