旁拮猾 发表于 2025-9-9 08:15:32

【URP】UnityHLSL顶点片元语义详解

【从UnityURP开始探索游戏渲染】专栏-直达
发展历史

‌传统可编程管线语义体系‌早期Unity采用HLSL/CG混合语法,定义了基础语义系统:


[*]顶点着色器输入语义:POSITION、NORMAL、TEXCOORD0等用于接收模型数据‌
[*]输出语义:SV_POSITION传递裁剪空间坐标,COLOR0等自定义语义用于插值数据传递‌
[*]片元着色器输出语义:SV_Target控制颜色缓冲区写入‌
‌URP架构的语义重构‌2021年推出的URP通过SRP体系重构了语义系统:


[*]引入UNITY_MATRIX_MVP等宏替代传统矩阵传递方式,优化实例化渲染效率‌
[*]标准化顶点着色器输入结构体,强制要求positionOS(模型空间坐标)作为基础输入‌
[*]新增语义支持屏幕空间坐标转换,如COMPUTE_SCREEN_POS宏实现positionCS计算‌
‌现代URP语义特性‌当前URP 12.x版本语义系统呈现以下特征:


[*]保留传统语义兼容性(如TEXCOORD系列)‌
[*]强化系统语义(SV_Position用于深度计算,SV_RenderTargetArrayIndex支持多目标渲染)‌
[*]通过#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"预定义语义宏,实现跨平台兼容‌
该演进过程体现了从灵活语义定义到标准化渲染接口的转变,同时保持了与旧版管线的兼容性。开发者可通过URP
顶点着色器输入数据由应用阶段(如Mesh Renderer)提供,常用语义如下:

‌语义‌‌数据类型‌‌描述‌POSITIONfloat4模型空间顶点坐标‌NORMALfloat3模型空间法线向量‌TANGENTfloat4模型空间切线向量(.w分量存储副切线方向标志)‌TEXCOORDnfloat2/float4顶点纹理坐标(n=0-7,如TEXCOORD0表示第一组UV)‌COLORfixed4/float4顶点颜色‌‌示例代码‌:

hlsl
struct appdata {
    float4 vertex : POSITION;
    float3 normal : NORMAL;
    float2 uv : TEXCOORD0;
};<strong>
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【URP】UnityHLSL顶点片元语义详解