这是最近做的一个实验
因为某些原因,就跳进射线迈进(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
以上 :)