Shader编程一直是一个比较难入门难上手的主题,本篇对Unity Shader编程的一些基础和要点进行了总结。
包括Shader编程相关知识图谱、Shader编程相关数据类型、Shader核心结构体等(后续继续补充)。
每个部分相互独立,可以单独参考,亦可作为一个整体参考。
博文首发:http://blog.csdn.net/duzixi
个人对Shader编程的理解凝在四个字:色即是光。
无论是要手写Shader程序,还是利用各类Shader制作插件(如ShaderForge)制作Shader,关于“光”的知识是一定要有的。
(.xmind源文件下载地址:http://www.duzixi.com/doc/ShaderStudy.xmind)
Shader编程中比较麻烦的一点是,同一个变量在不同的语法阶段表示的方式不同,常用变量类型对照如下:
硬件平台 |
CPU |
(接口:Inspector面板设置) |
GPU |
变量类型 |
C#脚本语言 |
ShaderLab 属性 |
Cg语言 |
纹理贴图 |
Texture |
2D |
sampler2D |
颜色 |
Color |
Color |
fixed4 / half4 |
3D贴图 |
Cubemap |
Cube |
sampleCUBE |
4元素向量 |
Vector4 |
Vector |
float4 |
浮点数 |
float |
Float |
float |
浮点范围 |
float |
Range |
float |
矩形纹理 |
Texture |
Rect |
sampleRect |
(1)顶点着色器输入结构体
成员类型 |
成员名 |
?? 结构体也可以自定义,但是必须有位置信息 |
appdata_base |
appdata_tan |
appdata_full |
appdata_img |
float4 |
vertex |
位置 |
1 |
1 |
1 |
1 |
float3 |
normal |
法线 |
1 |
1 |
1 |
|
float4 |
tangent |
切线 |
|
1 |
1 |
|
fixed4 |
color |
顶点颜色 |
|
|
1 |
|
float4 |
texcoord |
纹理坐标0 |
1 |
1 |
1 |
1 |
fixed4 |
texcoord1 |
纹理坐标1 |
|
|
1 |
|
(2)表面着色器输出结构体
SurfaceOutput |
||
half3 |
Abedo |
反射光 |
half3 |
Normal |
法线 |
half3 |
Emission |
自发光 |
half |
Specular |
高光 |
half |
Alpha |
透明度 |
原文地址:http://blog.csdn.net/duzixi/article/details/46559153