mcpField
U
unity-shaders-rendering

unity-shaders-rendering

github.com/josiahsiegel开发59127 次安装19 周前更新
代码仓库

关于 unity-shaders-rendering

这是面向 Unity 开发者的渲染与着色器参考指南,介绍渲染管线、Shader Graph、手写着色器、灯光和视觉效果。内容覆盖 Built-in RP、URP 与 HDRP,并提供渲染扩展和效果制作的资料线索。

主要功能

  1. 01比较 Built-in RP、URP 与 HDRP
  2. 02构建 Shader Graph 节点网络
  3. 03编写 ShaderLab 与 HLSL 着色器
  4. 04配置灯光、光照贴图与后处理
  5. 05使用 VFX Graph 和 URP 渲染功能

适用场景

  1. 01为 Unity 项目选择渲染管线
  2. 02制作溶解、辉光或顶点位移着色器
  3. 03配置场景灯光与光照烘焙
  4. 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 RPURPHDRP
目标旧版项目移动设备、VR、广泛适用高端 PC/主机
着色器语言表面着色器 + HLSLHLSL(无表面着色器)HLSL
Shader Graph是是是
SRP Batcher否是是
渲染功能否是(ScriptableRendererFeature)Custom Pass
后处理Post Processing Stack v2Volume 系统(内置)Volume 系统(内置)
光线追踪否否(基于探针)是(DXR)
性能中等针对规模优化最高保真度

建议: 新项目使用 URP,除非只针对高端视觉效果(HDRP)。Built-in RP 已过时——尽可能迁移。

Shader Graph

入门
  1. 在 Project 中右键单击:Create > Shader Graph > URP > Lit Shader Graph
  2. 双击打开 Shader Graph 编辑器
  3. 构建连接到 Master Stack 输出的节点网络
  4. 使用该着色器创建 Material,并将其分配给渲染器
Master Stack 输出(URP Lit)
输出类型用途
Base ColorColor (RGB)反照率/漫反射颜色
NormalVector3切线空间法线贴图
MetallicFloat (0-1)金属与电介质
SmoothnessFloat (0-1)粗糙度的反向值
EmissionColor (RGB)自发光
AlphaFloat (0-1)透明度
Alpha Clip ThresholdFloatAlpha 测试的截断阈值
常见节点模式
效果关键节点
溶解Noise > Step > Alpha Clip + 边缘发光
滚动 UVTime > 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
执行位置CPUGPU(计算着色器)
粒子数量数千数百万
复杂度基于组件,简单基于节点,复杂
平台所有平台仅支持计算着色器的平台
集成物理、碰撞物理支持有限

对于与游戏玩法集成的效果(物理碰撞、少量粒子),请使用粒子系统。对于视觉盛景(雨、火焰、魔法、环境粒子),请使用 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