坐标空间
物体空间: 3D物体自己的空间,一般设计时几何体以中心为原点,人物以双脚为原点
世界空间: 3D物体在场景中的世界坐标,整个游戏场景的空间
摄像机空间: 以观察摄像机为原点的坐标系下的坐标空间
投影成像: 3D坐标转换到屏幕中间
Unity坐标转换
顶点片元Shader
特点:
- 控制灵活,但是不能参与光照计算
- 在着色器中插入Cg代码段,编写在 CGPROGRAM 与 ENDCG 之间
编译指令:
#pragma控制着色器代码代码编译
例如
#pragma vertex name //将名称为name的函数编译为顶点着色器
#pragma fragment name //将名称为name的函数编译为片元着色器
参数和返回值由语义修饰
常用语义修饰如下图
基本的代码实例:
Shader "Custom/MyShader"
{
Properties
{
_Color("Color", Color) = (1,1,1,1)
_MainTex("Albedo (RGB)", 2D) = "white" {}
_Glossiness("Smoothness", Range(0,1)) = 0.5
_Metallic("Metallic", Range(0,1)) = 0.0
}
SubShader
{
Pass{
CGPROGRAM
#pragma vertex vert //把vert作为顶点Shader的入口
//获得上一个工位的参数使用语义绑定(bind),获得输入输出的类型,可使用的语义上面有列举
float4 vert(float4 pos : POSITION) : POSITION{
return mul(UNITY_MATRIX_MVP, pos); //在这里可以写你自己的操作,我这里的操作是完成一个矩阵转换
}
#pragma fragment frag //把frag作为像素Shader的入口
fixed4 frag() : COLOR{
return fixed4(1.0, 0.0, 0.0, 1.0); //红色
}
ENDCG
}
}
FallBack "Diffuse"
}