20240401 学习目标:
- 刷课至2.9
学习内容:
2.7 模型的本地空间
- Houdini
- 观察空间:
- 中心点在屏幕中心
- 右手坐标系,右正左负
- 应用程序阶段数据
- 几何阶段
- 顶点着色
- 模型变换
- 视图变换
- 顶点着色
- 几何曲面细分着色
- 裁剪
- 投影变换
- 裁剪
- 屏幕映射
- 顶点着色
- 光栅化阶段
- 三角形设置
- 三角形遍历
- 片断着色
- 混合
- Alpha测试
- 模板测试
- 深度测试
- 混合
- 帧缓存
2.8 CGInclude
-
HLSLSupport.cginc:编译CGPROGRAM时自动包含此文件,其中声明了很多预处理器宏帮助多平台
-
UnityShaderVariables.cginc:编译CGPROGRAM时自动包含此文件,其中声明了很多各种内置的全局变量
-
UnityCG.cginc:需手动添加,其中声明了很多内置的帮助函数与结构
-
获取途径
- 从安装目录中获取: Data/CGIncludes/xxx.cginc
- 从官网下载
-
如何使用
CGPROGRAM
//...
#include"xxx.cginc"
//...
ENDCG
2.9 空间变换
- 本地空间 -> 模型变换 -> 世界空间 -> 视图变换 -> 相机空间 -> 投影变换 -> 裁剪空间
- 矩阵变换运算符
mul(M,V);
M=矩阵
V=向量
Shader "taecg/FrameWork"
{
SubShader
{
pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include"UnityCG.cginc" //内置的帮助函数与结构
//定义了一个组,名字叫做appdate
struct appdate
{
//输入
float4 pos : POSITION;
float4 color:COLOR;
};
struct v2f
{
float4 pos : SV_POSITION;
};
//顶点着色器
v2f vert(appdate v)
{
v2f 0 = (v2f)0;
0.pos = UnityObjeceToClipPos(v.vertex); // 矩阵变换 官网可查
return 0;
}
//片断着色器
float4 frag(v2f i) : SV_TARGET
{
}
EndCG
}
}
}
-
模型空间 -> 投影空间:UNITY_MATRIX_MVP
-
模型空间 -> 观察空间:UNITY_MATRIX_MV
-
视图空间:UNITY_MATRIX_V
-
投影空间:UNITY_MATRIX_P
-
视图空间 -> 投影空间:UNITY_MATRIX_VP
-
本地空间 -> 世界空间:unity_ObjectYoWorld
-
世界空间 -> 本地空间:unity_WorldToObject
-
模型空间到齐次裁剪空间
UnityObjeceToClipPos(v.vertex)
学习产出:
- 2.7
- 2.8
- 2.9