关于 unity-shaders-rendering
这是面向 Unity 开发者的渲染与着色器参考指南,介绍渲染管线、Shader Graph、手写着色器、灯光和视觉效果。内容覆盖 Built-in RP、URP 与 HDRP,并提供渲染扩展和效果制作的资料线索。
主要功能
- 01比较 Built-in RP、URP 与 HDRP
- 02构建 Shader Graph 节点网络
- 03编写 ShaderLab 与 HLSL 着色器
- 04配置灯光、光照贴图与后处理
- 05使用 VFX Graph 和 URP 渲染功能
适用场景
- 01为 Unity 项目选择渲染管线
- 02制作溶解、辉光或顶点位移着色器
- 03配置场景灯光与光照烘焙
- 04在 URP 中实现轮廓或屏幕空间效果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill unity-shaders-rendering安装后在 Claude Code 中输入/unity-shaders-rendering确认已加载。
详细介绍
Unity 着色器与渲染
概述
Unity 渲染系统、着色器开发、光照配置和视觉效果的参考。涵盖全部三种渲染管线、Shader Graph、手写着色器和 VFX Graph。
渲染管线对比
| 特性 | Built-in RP | URP | HDRP |
|---|---|---|---|
| 目标 | 旧版项目 | 移动设备、VR、广泛适用 | 高端 PC/主机 |
| 着色器语言 | 表面着色器 + HLSL | HLSL(无表面着色器) | HLSL |
| Shader Graph | 是 | 是 | 是 |
| SRP Batcher | 否 | 是 | 是 |
| 渲染功能 | 否 | 是(ScriptableRendererFeature) | Custom Pass |
| 后处理 | Post Processing Stack v2 | Volume 系统(内置) | Volume 系统(内置) |
| 光线追踪 | 否 | 否(基于探针) | 是(DXR) |
| 性能 | 中等 | 针对规模优化 | 最高保真度 |
建议: 新项目使用 URP,除非只针对高端视觉效果(HDRP)。Built-in RP 已过时——尽可能迁移。
Shader Graph
入门
- 在 Project 中右键单击:Create > Shader Graph > URP > Lit Shader Graph
- 双击打开 Shader Graph 编辑器
- 构建连接到 Master Stack 输出的节点网络
- 使用该着色器创建 Material,并将其分配给渲染器
Master Stack 输出(URP Lit)
| 输出 | 类型 | 用途 |
|---|---|---|
| Base Color | Color (RGB) | 反照率/漫反射颜色 |
| Normal | Vector3 | 切线空间法线贴图 |
| Metallic | Float (0-1) | 金属与电介质 |
| Smoothness | Float (0-1) | 粗糙度的反向值 |
| Emission | Color (RGB) | 自发光 |
| Alpha | Float (0-1) | 透明度 |
| Alpha Clip Threshold | Float | Alpha 测试的截断阈值 |
常见节点模式
| 效果 | 关键节点 |
|---|---|
| 溶解 | Noise > Step > Alpha Clip + 边缘发光 |
| 滚动 UV | Time > Multiply > Add to UV |
| 菲涅耳辉光 | Fresnel Effect > Multiply color > Emission |
| 三平面映射 | Triplanar 节点(避免 UV 拉伸) |
| 颜色变化 | 使用参数或时间在颜色之间进行 Lerp |
| 顶点位移 | Noise > Multiply > Add to Position |
| 轮廓 | 双通道:在自定义渲染功能中使用反转外壳 |
Shader Graph 子图
将可复用的节点组提取到子图中(Create > Shader Graph > Sub Graph)。可用于共享噪声函数、UV 变换或自定义光照模型。
手写着色器(ShaderLab + HLSL)
URP 着色器结构
Shader "Custom/SimpleUnlit"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" }
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
float2 uv : TEXCOORD0;
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
float2 uv : TEXCOORD0;
};
TEXTURE2D(_MainTex);
SAMPLER(sampler_MainTex);
CBUFFER_START(UnityPerMaterial)
float4 _MainTex_ST;
half4 _Color;
CBUFFER_END
Varyings vert(Attributes IN)
{
Varyings OUT;
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
OUT.uv = TRANSFORM_TEX(IN.uv, _MainTex);
return OUT;
}
half4 frag(Varyings IN) : SV_Target
{
half4 tex = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uv);
return tex * _Color;
}
ENDHLSL
}
}
}
与 Built-in 着色器的主要区别:
- 使用
HLSLPROGRAM/ENDHLSL(而非CGPROGRAM/ENDCG) - 引入 URP 着色器库,而非 UnityCG.cginc
- 使用
TEXTURE2D/SAMPLER宏(而非sampler2D) - 将属性封装在
CBUFFER_START(UnityPerMaterial)中,以兼容 SRP Batcher
光照
光源类型
| 类型 | 用途 | 阴影开销 |
|---|---|---|
| Directional | 太阳、全局光照 | 低(级联阴影贴图) |
| Point | 火把、灯具 | 中 |
| Spot | 手电筒、舞台灯 | 中 |
| Area(仅烘焙) | 柔和的窗光、面板 | 高(仅烘焙) |
光照模式
| 模式 | 描述 | 最适用场景 |
|---|---|---|
| 实时 | 每帧计算 | 动态对象、少量光源 |
| 烘焙 | 预计算到光照贴图中 | 静态环境 |
| 混合 | 烘焙间接光 + 实时直接光 | 最佳平衡 |
光照贴图烘焙技巧
- 根据场景规模设置光照贴图分辨率(室内为每单位 10-40 个纹素)
- 在烘焙场景中使用 Light Probes 处理动态对象
- 对金属/反射表面使用 Reflection Probes
- 启用 GPU Lightmapper,以加快烘焙速度
- 在 Static 标记中将对象标记为 Contribute GI
后期处理(体积系统)
Setup:
1. Add a Volume (Global or Local) to the scene
2. Create a Volume Profile asset
3. Add overrides: Bloom, Color Adjustments, Tonemapping, etc.
4. Camera must have Post Processing enabled (URP Camera settings)
| 效果 | 性能开销 | 说明 |
|---|---|---|
| 泛光 | 低 | 使用阈值控制强度 |
| 颜色调整 | 极低 | 饱和度、对比度、颜色滤镜 |
| 色调映射 | 极低 | 使用 ACES 呈现电影感 |
| 暗角 | 极低 | 使画面边缘变暗 |
| 环境光遮蔽(SSAO) | 中 | 在移动设备上禁用 |
| 景深 | 高 | 仅在电影场景中使用散景 |
| 运动模糊 | 中 | 可能导致 VR 晕动症 |
VFX Graph 与粒子系统的比较
| 功能 | 粒子系统(Shuriken) | VFX Graph |
|---|---|---|
| 执行位置 | CPU | GPU(计算着色器) |
| 粒子数量 | 数千 | 数百万 |
| 复杂度 | 基于组件,简单 | 基于节点,复杂 |
| 平台 | 所有平台 | 仅支持计算着色器的平台 |
| 集成 | 物理、碰撞 | 物理支持有限 |
对于与游戏玩法集成的效果(物理碰撞、少量粒子),请使用粒子系统。对于视觉盛景(雨、火焰、魔法、环境粒子),请使用 VFX Graph。
URP 渲染功能
使用自定义 ScriptableRendererFeatures 扩展 URP 渲染:
public class OutlineFeature : ScriptableRendererFeature
{
OutlinePass _pass;
public override void Create()
{
_pass = new OutlinePass();
_pass.renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData data)
{
renderer.EnqueuePass(_pass);
}
}
常见用途:自定义描边、屏幕空间效果、生成渲染纹理、基于模板缓冲的效果。
其他资源
参考文件
references/shader-recipes.md-- 完整的着色器实现:卡通/赛璐珞着色、水、溶解、全息图、力场、程序化天空盒、模板传送门、顶点动画、自定义光照模型references/lighting-vfx-detail.md-- 高级光照设置、GI 故障排查、VFX Graph 指南(火焰、烟雾、电流、传送门)、Scriptable Render Pipeline 自定义、自定义渲染通道
评论
支持 Markdown