时间:2025-09-09 09:39
人气:
作者:admin
【从UnityURP开始探索游戏渲染】专栏-直达
POSITION、NORMAL、TEXCOORD0等用于接收模型数据SV_POSITION传递裁剪空间坐标,COLOR0等自定义语义用于插值数据传递SV_Target控制颜色缓冲区写入UNITY_MATRIX_MVP等宏替代传统矩阵传递方式,优化实例化渲染效率positionOS(模型空间坐标)作为基础输入COMPUTE_SCREEN_POS宏实现positionCS计算TEXCOORD系列)SV_Position用于深度计算,SV_RenderTargetArrayIndex支持多目标渲染)#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"预定义语义宏,实现跨平台兼容该演进过程体现了从灵活语义定义到标准化渲染接口的转变,同时保持了与旧版管线的兼容性。开发者可通过URP
| 语义 | 数据类型 | 描述 |
|---|---|---|
POSITION |
float4 |
模型空间顶点坐标 |
NORMAL |
float3 |
模型空间法线向量 |
TANGENT |
float4 |
模型空间切线向量(.w分量存储副切线方向标志) |
TEXCOORDn |
float2/float4 |
顶点纹理坐标(n=0-7,如TEXCOORD0表示第一组UV) |
COLOR |
fixed4/float4 |
顶点颜色 |
hlsl
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 uv : TEXCOORD0;
};
| 语义 | 数据类型 | 描述 |
|---|---|---|
SV_POSITION |
float4 |
必需语义,输出裁剪空间顶点坐标 |
TEXCOORDn |
任意 |
自定义插值数据(如UV、计算中间值),n=0-7 |
COLORn |
fixed4/float4 |
插值颜色(n=0-1) |
SV_POSITION 必须存在于顶点着色器输出结构体中;TEXCOORDn 可自由传递任意数据(如光照向量、自定义参数)。| 语义 | 数据类型 | 描述 |
|---|---|---|
SV_Target |
fixed4/float4 |
输出颜色到帧缓存(默认渲染目标) |
SV_Targetn |
任意 |
多渲染目标(MRT)输出(n=0-7) |
hlsl
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
fixed4 frag(v2f i) : SV_Target {
return tex2D(_MainTex, i.uv);
}
TEXCOORDn 含义不同:顶点输入时由Unity自动填充纹理坐标,输出时可自定义用途;TEXCOORDn 索引。fixed(11位)处理颜色,half(16位)处理中等范围数值,减少GPU开销。POSITION 与 SV_POSITION 需严格区分:前者为输入模型坐标,后者为输出裁剪坐标;POSITION 在片元输入中已被弃用,需替换为 SV_POSITION【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,????)