版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/li951244313/article/details/84581095
好的。当需求对我这个可怜的小猫咪下手的时候,拿棒槌逼着我去写Shader的时候,打死我也不会屈服的[○・`Д´・ ○]!
//Shader名称:
//1.固定写法:Shader"XXX/XXX"
//2./表示层级,与C#脚本不同的是Shader名称和外面的文件名没有关系
Shader"MyShader/MyShader1"
{
//属性:
//1.固定写法:Properties{XXX}
//2.在这里声明的变量会显示在使用此Shader的材质球的面板上
//3.此处声明的变量需要初始化,不初始化会报错
//4.此处声明语句不需要加';'
//5.结构:_Name("ShowName",Type)
// ①_Name:在此Shader中使用且在外部赋值Shader变量时使用的变量
// ②ShowName:在材质球面板上显示的名称
// ③Type:此变量的类型。
Properties{
//Float:浮点型
//此外还有常用的Float数组,但是无法在此处定义
//Float/Float2/Float3/Float4 后面数字表示能存放的值的数量
_Float("Float",Float) = 0.5
//Int:整数
//虽然是Int值,但是如果你在外面的材质球上也能写浮点数
//但是脚本中就不阔以了
_Int("Int",Int) = 5
//Range:此变量的取值范围,类型亦为Float
_Range("Range",Range(0,100)) = 30
//Vector:四维向量
//取值为(x,y,z,w)
_Vector("Vector",Vector) = (0,0,0,0)
//Color:颜色类型
_Color("Color",Color) = (0,0,0,1)
//图片纹理:先设置一个颜色,{}中放置图片纹理
//TODO:待找到理论依据
//颜色值无法改变,且无法在外面赋值,只能是在这里默认的
_2D("2D",2D) = "white"{}
//Cube:立方体纹理 立方体贴图(不知道有什么用,手动狗头=3=)
_Cube("Cube",Cube) = "white"{}
//3D:3D纹理(不知道有什么用,手动狗头=3=)
_3D("3D",3D) = "white"{}
}
//放代码块的地方
SubShader{
//至少含有一个Pass
//一个Pass代表一个处理流程
//一般应该有多个Pass来处理在不同设备上的显示效果
//一般从上至下,效果越来精简,所以最上方的Pass块一般为最秀的
Pass{
//又回到最初的起点,可以开始写代码了
CGPROGRAM
//在这里搞CG语言代码
//在这里再声明上面设置的变量才能在Pass块中使用
//在这里声明的变量后面需要加';'
Float _Float;
//Int比较神奇。
//我也不太清楚我是不是有别的操作影响到Int大佬的心情了,但是我的确碰到了个问题。
//如果在Pass块中声明了vertex 且 声明了 fragment 函数
//这个地方就不能声明Int变量了,不然就会报错。
//但是单独声明其中一个没有问题,但是应该没有独自使用这些函数的情况bia= =
//就需要写为一下情况:
//Float _Int;
Int _Int;
Float _Range;
Vector _Vector;
Color _Color;
2D _2D;
Cube _Cube;
3D _3D;
//数组:
//Properties块中木有办法写数组,所以也就没有办法通过在Properties块中声明数组
//然后赋值的方法来使用外部的数组
//那怎么整???
//因为Unity在较低版本中还没有整合所以只能通过别的办法来解决
//可以在Pass块中声明需要使用的数组
//然后在脚本中直接赋值的方法来实现
//但是这个办法在unity5之前不好使
//因为项目原因我试用的是unity4.x的版本,相应脚本中并没有相应的方法
//所以此方法只能在Unity5之后使用(我用5.6.0f3打开里面是含有相应的函数的)
//之前的项目怎么办?
//升级版本吧,小老弟,或者压缩这个需求量控制在可操作的范围内=3=
//此外:数组的长度必须是固定的无法修改,所以需要提前先按照需求设计好
uniform Float[100] _FloatList;
uniform Vector[100] _VectorList;
ENDCG
}
}
//备用方案:上述Pass块,全都使不了,就使介个。
FallBack "Diffuse"
}
真香( • ̀ω•́ )✧。
感谢以下文章吗,为我提供了短时间内的解决方案:
这哥们提供的温度云图解决方案,为我提供了思路,使我理解了其中的一些内容
感恩这个哥们,文章挺细的,比较系统化,提供了很深的理解,并且他的插件很有用,配合UI实现的展示功能
感谢以上但不限于的哥们们,因为有的文章我看完了忘收藏了ヾ(๑╹◡╹)ノ"
以后有机会我一定不会看Shader的书的ヽ(#`Д´)ノ!
(好,留下个真香Flag= =督促自己学习,手动狗头(๑>ڡ<)✿ )