Shade学习总结

自从昨天写了第一篇博文,感觉有些挡不住的想写第二篇,可能也和心情有关吧,最近即将离职,但是还没有找到工作,内心有一丝迷茫。可能是心里无处宣泄吧,把这些用文字表达出来。

我所写的这些东西仅仅是自己的一些想法,对于别人可能没有什么意义。你可以理解为废话、鬼话,这也是我把标签写为“鬼话连篇”的原因。

最近这段时间一直在学习,Shader,框架等,越来越发现自己了解的知识好少啊。框架是在看一个叫做StrangeIOC,这个下一篇再说吧。Shader是从这个地方学习的。都是美女博主写的很基础的东西,很感谢美女博主的分享。

Shader这个东西吧,我觉得我是不会专门去编写这个东西,但是了解一些还是很有必要的。毕竟很多游戏公司会要求你会这个。

—————— 正文开始 ——————

在这里我不会很仔细介绍,只会说一下,哪部分是什么东西。先来贴一个普通的Surface Shader代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Shader "Custom/BasicDiffuse" {
Properties {
///////(1)////////
_EmissiveColor ("Emissive Color", Color) = (1,1,1,1)
_AmbientColor ("Ambient Color", Color) = (1,1,1,1)
_MySliderValue ("This is a Slider", Range(0,10)) = 2.5
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
////////(2)////////
#pragma surface surf Lambert
////////(3)////////
float4 _EmissiveColor;
float4 _AmbientColor;
float _MySliderValue;
////////(4)////////
struct Input
{
float2 uv_MainTex;
};
////////(5)////////
void surf (Input IN, inout SurfaceOutput o)
{
//We can then use the properties values in our shader
float4 c;
c = pow((_EmissiveColor + _AmbientColor), _MySliderValue);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}

1)这部分是属性,也是外部显示的东西。格式为 变量名(“外面显示的字”,属性) = 值
属性包括2D 图片,Color 颜色,Range(min,max) 带取值范围的数值
如果你要使用这些属性,还必须要在SubShader里面写对应的变量,变量名称必须一致,例如上面的(1)和(3)

2)这个部分是声明,那个步骤用哪个函数。上面说的是surface处理,使用surf这个函数,光照使用Lambert光照(预制的光照)。

4)这个结构体,里面的UV后面是你的图片变量名。上面写的MainTeX是一个内置值。

上面的东西讲的很少,可能得不到什么有用的东西。你要是想做Shader我可以告诉你个插件,叫做ShaderForge,制作Shader超级简单,我仅仅学了一下午,就做出来一个闪光的Shader。OK,鬼话讲完了,收工。