用途
该技能用于在 Unity 通用渲染管线(URP)中以 HLSL/ShaderLab 代码(而非 Shader Graph)编写着色器。当用户提出“URP shader”“HLSL”“ShaderLab”“write a shader”“custom shader”“vertex fragment shader”“SRP Batcher”“CBUFFER”“custom lit shader”“unlit shader”等需求,或需要将内置管线着色器转换为 URP,或引用 Cyanilux 模板、phi-lira gists、NedMakesGames 教程时,均可触发使用。
主要能力
- 提供生产可用的 URP HLSL/ShaderLab 代码模板,并保证 SRP Batcher 兼容。
- 提供 URP Unlit(移动端就绪)模板,包含 ForwardLit、ShadowCaster、DepthOnly 三个 Pass。
- 提供 URP Simple Lit(主光)模板,加入主方向光的 Lambert 漫反射、阴影与环境光。
- 提供内置管线到 URP 的转换对照表(包含 include、变换宏、光照、阴影、纹理采样、雾效、结构体命名、LightMode 标签等)。
- 列出 URP 各 LightMode 标签及其用途(UniversalForward、ShadowCaster、DepthOnly、DepthNormals、Meta、Universal2D、SRPDefaultUnlit)。
- 汇总常见陷阱(CBUFFER 缺失、sampler2D 用法、缺少 ShadowCaster/DepthOnly、multi_compile 与 shader_feature 的选择)。
- 提供参考仓库与 gist 链接。
核心规则
- 始终使用 HLSLPROGRAM / ENDHLSL,而非 CGPROGRAM / ENDCG。
- 所有材质属性必须放在 CBUFFER_START(UnityPerMaterial) / CBUFFER_END 块中,以保证 SRP Batcher 兼容。
- 引入 URP Core 而非旧版 Unity include,例如: #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
- 使用 URP 变换宏,例如 TransformObjectToHClip、TransformObjectToWorld、TransformObjectToWorldNormal、TransformWorldToHClip、GetVertexPositionInputs、GetVertexNormalInputs。
- Tags 必须包含 "RenderPipeline" = "UniversalPipeline"。
- 使用 TEXTURE2D 与 SAMPLER 宏替代 sampler2D,采样使用 SAMPLE_TEXTURE2D。
使用方式
技能以模板与规则形式提供代码。用户可直接采用 Unlit 或 Simple Lit 模板作为起点,按需修改属性、Pass 与光照逻辑;也可依据转换对照表将内置管线着色器改写为 URP 版本。模板中已包含 SRP Batcher 兼容的 CBUFFER 写法、URP include、变换宏、纹理采样宏与雾效处理。
适用场景
- 为 URP 编写基于代码的自定义着色器(Unlit、Simple Lit 等)。
- 将内置管线着色器迁移到 URP。
- 需要 SRP Batcher 兼容的移动端着色器。
- 需要参考 URP Pass 类型与 LightMode 标签的场合。
限制
- 资料未提供收费、价格、平台支持范围或性能效果的具体数据。
- 资料未提供安装命令或包管理方式。
- 资料未提供 Surface Shader 的 URP 等价方案,仅说明需手写顶点/片元着色器。
- 资料未提供除所列模板外的完整着色器类型覆盖说明。