在工作之余,也会尝试学一些自己感兴趣的东西,最近看到博客,猫也能学会的shader,感觉很有意思,希望能在空闲也学习一下shader语言的编写和使用,这个博客一方面也是算作学习笔记,一方面是希望和我一样菜的,也就是说猫都看得懂但是咱们看不懂的博客,能够学习一下如何去使用和实现
00- shader的基本结构
01-shader的各个属性
很显然,当我们点开一个shader脚本,类似于unity内置的一些shader,我们能很清楚地看到脚本里面有很多属性,那么这些属性有啥子用,我们定义的语法格式是什么,这些都是很值得我们好奇和深究的
-------1.Properties 属性,这里定义的将被作为输出提供给所有的子着色器
比如这里,我们随手新建了一个Properties,这里面我们可以看到它的语法格式都是这样
_Name(“DisplayName”,type)=defaultValue[{options}]
那么这些都代表了什么呢
1._Name,很显然,这个就是变量名了
2.DisplayName,这个就是我们在编辑器模式下给shader使用者看到的名字,
比如你看下图,这里的话就是这些了
3.type,你定义的这个变量的类型
通过这些类型,我们能定义一些shader着色器的属性
4.defaultValue
这个属性嘛,顾名思义,就是默认值,就像我们初始化变量也会给一个默认值是一样的道理
5.options
这个咱也不太懂,以后再说吧,目前查询的是只和2d,Rect,Cube贴图有关
------------------------Tags
有时候想大佬讲的太清楚了,这些基础概念在座的各位也能搜的到,但是能看到我的博客不一定能看到大佬博客,能看到大佬博客不一定能看到我的博客,抱着这种态度,我还是把tags的属性标注出,因为它本身的概念非常重要
虽然我们一直强调解说要说人话,但是大佬已经用白话写出来了,我也没啥好补充的,讲一下我的理解(好吧,现在还没用过,所以我光是贴着而不写)
----------------Lod(现在是不懂光贴属性,用了后会在后面补充感悟)
2.从一个实例开始看Shader
我这人学代码也是从具体工程来学,那么很显然,学习shader,那么也要根据一个具体工程来喽,之前在知乎看到罗培羽大佬写的一个关于制作
https://www.zhihu.com/people/pyluo/posts
这样的一个效果,很显然,这种shader我们可以用在类似合金弹头一样的游戏里,当然这种功能有很多实现方法,最简单的你直接放个长图移动摄像机都是可以的,但是用shader会不会给我们一种很酷很炫很厉害的感觉(大雾),因此,我也想结合这个案例分析一下shader,下面的话就是大佬的代码了,接下来,我会在代码注释了分析一下每一行代码
1. Shader “Lpy/ImageRoll”
这个很显然就是指定了Shader的路径,你可以在材质面板选择shader的时候找到这个路径
Shader "Lpy/ImageRoll"
{
//2.Properties
这里的话我们在上文提到过了,就是面板上该shader的特性,第一个是
2D的主要Texture,这个的话呢我们指定为白色,也就是生成的2阶的图片的每个像素点为白色
Width和Distance不是内置的属性,这个我们之后在面板上会对它们进行修改,这里的话,我们会先给一个默认值,后续根据需求再改,这个的话也就是调整我们shader的大小,也就是我们希望滚动画面时当前画面的宽高