作者cjcat2266 (CJ Cat)
看板GameDesign
标题[程式] 黏土绘制:射线迈进与GPU空间结构优化
时间Wed Apr 22 17:32:03 2020
这是最近做的一个实验
因为某些原因,就跳进射线迈进(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
以上 :)
--
Web
http://AllenChou.net
Twitter
http://twitter.com/TheAllenChou
LinkedIn
http://linkedin.com/in/MingLunChou
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 23.242.26.50 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1587547933.A.82C.html
※ 编辑: cjcat2266 (23.242.26.50 美国), 04/22/2020 17:44:45
1F:推 dreamnook:04/22 17:47
2F:→ hinenak:04/22 17:55
3F:推 wangm4a1: 推04/22 18:29
4F:推 eugenelinrmx:04/22 19:43
5F:推 nicetw20xx: 感觉好厉害,也期待有texture xD04/23 00:19
※ 编辑: cjcat2266 (160.33.168.6 美国), 04/23/2020 02:27:35
6F:推 zxc9764315: 推BVH优化,虽然我的电脑GPU还是被操到100% XD04/23 11:46
因为运算量太多了,所以有没有优化都撑到100%运算吞吐量了吧
我用RTX 2080的资源使用差别是40% vs 100% (过饱和)
超过100%的过饱和部分要用GPU profiler或高精度stopwatch才观测得到
我用profiler观测的结果,效能差异约是12倍
不同於SDF运算量的30倍,因为仍需考虑两者共同的基础绘制运算
※ 编辑: cjcat2266 (23.242.26.50 美国), 04/24/2020 02:03:37
7F:推 aegis123321: 推 好奇运算量如此庞大的情况下是如何实际应用? 04/25 08:03
8F:→ cjcat2266: 可能不适合绘制全萤幕解析度的效果吧,区域性效果应该 04/25 11:04
9F:→ cjcat2266: 比较可行。我现在在研究Dreams和Clayxels使用的绘图方 04/25 11:04
10F:→ cjcat2266: 式,不是用ray marching而是voxel splatting,看起来 04/25 11:04
11F:→ cjcat2266: 比较适合即时大范围性的绘制 04/25 11:04
12F:→ doomleika: 04/25 23:07