坐标空间

视频截图

  1. 物体空间:3D物体自己的坐标空间一般设计时几何体以中心为原点,人物以双脚为原点;
  2. 世界空间:30物体在场景中的世界坐标,整个游戏场景的空间;
  3. 摄像机空间:以观察摄像机为原点的坐标系下的坐标空间;
  4. 投影成像3D坐标转换到屏幕空间;

Unity坐标系转换

视频截图

  1. transform.localTo WoridMatrix局部转世界的矩阵;
  2. transfrom.worldTolocalMatrix 世界坐标转局部坐标矩阵;
    Multiply Point,MultiplyPoint3x4 MultiplayVector 来进行坐标变换;
  3. shader中左乘_World2Object 矩阵来实现世界坐标转局部坐标变换;
  4. shader中左乘_Object2World 矩阵来实现局部转世界的转换;
  5. UNITY_MATRIX_MV基本变换矩阵x摄像机矩阵;
  6. UNITY_MATRIX_MVP 基本变换矩阵x摄像机矩阵x投影矩阵;
  7. UNITY_MATRIX_V 摄像机矩阵;
  8. UNITY_MATRIX_P 投影矩阵;
  9. UNITY_MATRIX_VP 摄像机矩阵x投影矩阵;
  10. UNITY_MATRIX_T_MV(基本变换矩阵x摄像机矩阵)转置矩阵;
  11. UNITY_MATRIX_IT_MV(基本变换矩阵x摄像机矩阵)的逆转置矩阵;
  12. UNITY_MATRIX_TEXTUREO 纹理变化矩阵;

GPU 管道流水线

视频截图

顶点片元着色器

视频截图

  1. 控制灵活,但不能参与光照计算;
  2. 在着色器中插入Cg代码段,编写在CGPROGRAM与ENDCG之间;
  3. 编译指令:
  • #pragma控制着色器代码编译;
  • #pragma vertex name将名称为name的函数编译为顶点着色器;
  • #pragma fragment name将名称为name的函数编译为片元着色器;
  1. 参数和返回值有语义修饰

常用语义修饰

视频截图

  1. POSITION:位置
  2. TANGENT:切线
  3. NORMAL:法线
  4. TEXCOORDO:第一套纹理
  5. TEXCOORD1:第二套纹理
  6. TEXCOORD2:第三套纹理
  7. TEXCOORD3:第四套纹理
  8. COLOR:颜色

第一个shader

  1. 创建一个shader,编写最简单的shader代码。
  2. 创建一个立方体,创建一个材质,使用自己的shader,,将立方体的材质制定为自己的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
Shader "Custom/MyShader"
{
// 属性,可以再Unity中修改和绑定
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 // 编写CG代码开始

#pragma vertex my_vert

// 获取上一个工位的参数 -> 语义bind
float4 my_vert(float4 pos : POSITION ): POSITION{
return UnityObjectToClipPos(pos);
}

#pragma fragment my_frag
fixed4 my_frag() : COLOR{
// 设置红色
return fixed4 (1.0,0.0,0.0,1.0);
}

ENDCG// 编写CG代码结束
}
}
FallBack "Diffuse"
}

视频截图