江枫

ShaderToy基础

   本来之前已经决定不再碰渲染相关了,因为自己的数学实在是太差了,也没那个天分学渲染。但是上周帮同事想一个过滤正弦波的算法的时候发现还是很想研究这些的。于是就照着其他大佬的想法,有时间的时候就去搬搬ShaderToy的效果吧~
   前几篇准备还是纯抄大佬们已经搬到Unity内的思路找找感觉,大概第四篇左右就开始自己研究和搬运效果。

1.ShaderToy的特点

   ShaderToy中的shader都是绘制在整个屏幕范围的,也就是pixel shader。在Unity中shader都是贴在material上然后贴在具体的游戏物体上的。
   所以ShaderToy的shader就相当于Unity内生成了一个刚好铺满整个屏幕的全屏方形平板,然后这个平板的材质上贴了对应的shader。
   和Unity差不多,ShaderToy内也是分为顶点着色和片元着色,所以在ShaderToy上面的Shader Input内,可以看到顶点着色器提供了哪些公共变量进行访问,我们后面在Unity进行修改时,大多也是对这些公共变量进行转换。

2.Unity中的模板

   代码是从乐乐老师那边抄来的,主要功能是在开头定义了一系列宏来和ShaderToy中的GLSL进行衔接,因为GLSL内的预定义的一些变量CG内并没有,所以在开头声明了一下。
   顶点着色器内只包含了一个把模型坐标转换到屏幕坐标的计算,因为ShaderToy内的pixel shader都是基于屏幕的~
   此外,为了响应鼠标操作,我们还可以定义一个C#脚本,来把鼠标位置传递给shader

文章大纲