Unity3D Compute Shader 晋级 网格模拟与奶茶泡泡【四】

来源:互联网 发布:java poi api下载 编辑:程序博客网 时间:2024/05/01 22:11

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.我可以想象,它的价值不局限于这儿的奶茶泡泡。。。。。

3 0