作者cjcat2266 (CJ Cat)
看板GameDesign
标题[程式] 黏土绘制:迈进方块与色块绘制
时间Thu Apr 30 10:32:07 2020
先贴demo~
https://www.youtube.com/watch?v=yILKJEd9pvE
我原本是在研究全画面的射线迈进(ray marching)
虽然用了包络空间阶层(bounding volume hierarchy, BVH)优化了不少
但是感觉效能还是没办法进步到能够在游戏中广泛应用
(当然如果游戏本体或主要机制就是全画面射线迈进则另当别论)
这是我的ray marching优化最终成果demo
https://www.youtube.com/watch?v=2T2FqvtXqLw
後来有不少人建议我去看看Clayxels:
https://andrea-intg.itch.io/clayxels
它是一个Unity的外挂,使用迈进方块(marching cubes)方式建构物件
与ray marching同样是对有向距离场(signed distance field, SDF)取样
所以同样可以达到像是黏土般融合物件的效果
再加上用色块(splat)的方式绘制,就可以达到类似Dreams的效果
(Clayxels算是部分受到Dreams影响)
受到了Clayxels的启发
我便转换跑道从ray marching改成研究marching cubes
开头的demo影片就是目前的研究进度
已经可以达到物件融合和材质融合
接下来就要开始研究优化和工具UX了
以下是我所用到的研究资料
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://box2d.org/files/ErinCatto_DynamicBVH_GDC2019.pdf
https://github.com/erincatto/box2d
http://paulbourke.net/geometry/polygonise/
--
Web
http://AllenChou.net
Twitter
http://twitter.com/TheAllenChou
LinkedIn
http://linkedin.com/in/MingLunChou
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 160.33.168.6 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1588213931.A.E5A.html
1F:推 zxc9764315: 要看起来这麽平滑的话,cube size是多少啊? 04/30 10:54
2F:推 dreamnook: 04/30 12:44
3F:推 metallican: 猫大是我的神 04/30 17:03
4F:→ aiwhat: 要看起来平滑,可以根据与该点相邻的面重新计算 normal 04/30 20:12
5F:→ aiwhat: vector,取代原本的 face normal 04/30 20:12
我没有采用存取邻近面的方法
每一个方块是独立的GPU thread运算
如果要存取邻近方块生成的面,会遇到以下两个问题之一:
1. 需要额外配置跨GPU thread的共同记忆体
2. 需要重算6个邻近方块生成的面,会多出6倍运算量
我使用的方式是对SDF进行数值微分
https://iquilezles.org/www/articles/normalsSDF/normalsSDF.htm
不过也只用在圆滑mesh绘制模式
splat绘制模式用平的法向量就可以了
※ 编辑: cjcat2266 (160.33.168.6 美国), 05/01/2020 03:24:22
6F:推 doomleika: 05/01 10:10
※ 编辑: cjcat2266 (160.33.168.6 美国), 05/01/2020 10:30:25