Unity3D Compute Shader 晋级 网格模拟与特效【四】
1.每一个不曾舞蹈的日子,都是对生命的辜负….
2.Compute Shader对于她自己来说,所有能实现的效果只是冰山一角
http://blog.csdn.net/column/details/shader-style.html by 恬纳微晰
研究Compute Shader仅此而已,是该你做点something by yourself……..
Compute Shader Show
难以信服的网格拼凑的图片
以前是点拼凑的图片,现在是网格了,信不信拉倒。。。扭曲网格,让你信一信
哟!这就不好意思了,我不是恶意的,,,哟,你看,还能笑。。。
(不知有没有恶意,图片来自猎豹wifi软件中的)奶茶泡泡,我反正是信以为真了
喝完了奶茶,就要吹个奶茶泡泡啊!快吹一个,你看真的变大了。。。
最后吹成这样了,你们猜,它是爆了,还是干嘛了。。。
让眼见成为现实的秘密
- 网格实现起来是朵么难
实验到这儿,说明已经成功了,说明每个网格的确是一个网格一张图。 怎么画网格,就是那个小方块
就是这个,Vertor3[]包含了方块点的位置
不过,你注意没有,里面有两个点重复了,如果把它们按照顺序在纸上连起来,你就知道这画方块的原理了,其实就是2个三角形的组合。当然,你得这样保存到buffer中,我要绘制它。。。。、、、、
这是画的效果,这儿其实一看画了一张图,其实所有的图都重叠在一起了,
如果你不信,那么在你尝试的时候,如果你在camera离图近的时候会有卡顿,如果你又有充分的经验的话,那是face的重叠造成的,这儿很关键,重叠是非常耗性能的。画出其他效果
这儿是我的发挥了,其他神马的效果都可以做出来
技术的革新保存每个像素到每个网格
如果你做过vertex fragment shader的话,发现能轻松从模型数据中获得uv坐标,
但那个问题就来了,这儿没有任何神马模型数据,而是存世界坐标??????如果你的第一想法是,虚拟模型空间,像这样的话:
你会发现,这是多么痛苦的事情。。。。。所以这儿我采用了一种我自己发明的Compute Shader 模型UV绑定法
就是这样
能够顺利在世界坐标中绑定,其理由是,我喜欢在ComputeShader中计算物理效果。。。
不过你可以改为UNITY_MATRIX_MVP,这样虽然感觉UNITY_MATRIX_MVP做了虚拟模型空间,但以后你就知道了,做其它复杂效果就会闹出翔。。。。最后Compute Shader 模型UV绑定法的效果
特别技术
Instance 实例化
说起实例化,其实是个非常棒的革新,让GPU省了许多重复操作的事情。。
上图中的number 即为实例化的数据。。。。可想而知你自己试了才知道,同时对比性能分析
如果前面都知道了,网格的重叠,那么这儿的红线处就是为了什么???我当时就没有数过来,你可以算啊,不是有计算器么
可想而知,这之前得重复了多少张。。。。物理效果之奶茶泡泡
估计最神奇之处就是这儿的奶茶泡泡,如果是这样的话,那么前面的技术都是百搭了???
不是说过了么?Compute Shader中做运算才是发挥GPGPU的魅力之处
不过这种魅力是基于矩阵级思想,有时不能以CPU的思想来玩代码。。不然那一坨管线都不知重复了同一种指令。
代码是最诚实的,也是最有权威的
Use in C#
Use in Compute Shader
Use in Shader
我们说说话吧
1.我觉得Compute Shader什么都可以做,实时运算才是未来所要的。
2.当然其实不一定要用Verctor3[]来代码绘制网格,可以用mesh来获得外部的模型数据。
3.我可以想象,它的价值不局限于这儿的奶茶泡泡。。。。。