unity中 构建三维动画心形shader

unity中实现三维心形 动画shader

    • 二维构建过程
    • 三维构建
  • 动画
    • 顶点动画
    • 膨胀程度
    • 总结:

基于shadertoy网站上二维心形的构建,进行改造

二维构建过程

-x轴拉伸,y=sqrt(abs(x))得到心形,再进行细节调整。
unity中 构建三维动画心形shader_第1张图片

三维构建

在二维基础上,同样xy轴进行相应的操作,得到如图:

很明显能看出,心形在下面尖角处太厚。因为至此为止,尚未对z方向进行改进。
unity中 构建三维动画心形shader_第2张图片
选取函数z = xx+yy;(尝试过sqrt(x)等,但效果都不明显,目前用平方函数,如果大家还有更好方法,可以分享哈)

动画

顶点动画

  • 根据表面法线方向,对顶点位置位移运动;对内置时间取正弦函数;

膨胀程度

-运动过程球体变小变大,每个点的膨胀程度,随z轴相应变化;越是边缘区域(绝对值靠近1)膨胀越小;这样才能达到中间凸起的圆润效果。displacement*=sin(PI/2*(z+1))
unity中 构建三维动画心形shader_第3张图片

shader源码
shadertoy二维心形

总结:

  • 整体利用基于函数,构造三维心形,主要在于三维的圆滑。使用顶点动画实现变大效果。(注:我的代码基于球体坐标在(-1, 1)之间,要改变大小的话,可以加上调节参数)
  • 着色方面就简单的光照;
  • 写完以后才发现,shadertoy上已经有很多三维心形的例子,而且效果很好看;我这个。。。下次有时间再改进吧。

你可能感兴趣的:(unity,shader)