Files
nexus/wiki/concepts/Shader.md
2026-05-03 05:42:12 +08:00

3.5 KiB
Raw Blame History

title, type, tags, sources, last_updated
title type tags sources last_updated
Shader concept
game-dev
rendering
graphics
technical-artist
unity-shader-graph-artist
2026-05-01

Shader

Definition

Shader着色器是在 GPU 上运行的专用程序,控制像素如何被渲染——决定颜色、光照、阴影、透明度等视觉特性。游戏开发中最常用的语言为 HLSLDirectX/PC、GLSLOpenGL/Linux和 ShaderLabUnity

Core Concepts

Vertex Shader

逐顶点执行,负责几何变换(模型空间 → 世界空间 → 视图空间 → 屏幕空间和传递顶点属性UV、法线

Fragment/Pixel Shader

逐像素执行,决定最终像素颜色。性能敏感操作应优先考虑移至 Vertex Shader。

Surface ShaderUnity 概念)

Unity URP/HDRP 的高级抽象,自动处理光照模型,开发者只需定义表面属性。

Compute Shader

通用 GPU 计算,可用于后处理、特效、布料模拟等非传统渲染任务。

Technical Artist 的 Shader 标准

  • 移动端安全变体:所有自定义着色器必须包含移动端安全版本或明确标注平台限制
  • Shader 复杂度分析:使用引擎的 Shader 复杂度可视化工具验证,绿色/黄色合格,红色必须修订
  • 参数文档化:暴露给艺术家的所有着色器参数必须在材质检查器中有 Tooltip 注释
  • 避免逐像素操作:可在顶点阶段完成的操作不应放在像素阶段(移动端尤其重要)

Shader 类型与预算

类型 PC 复杂度 Mobile 复杂度 典型应用
Unlit 极低 极低 UI、纯色物体
Lit (PBR) 中等 中等-高 角色、环境
透明/加法 中等 VFX、玻璃
自定义光照 极高 特殊效果

Unity Shader Graph 规范(来自 unity-shader-graph-artist

Sub-Graph 强制复用

所有重复逻辑必须封装为 Sub-Graph重复节点簇是维护和一致性失败。Sub-Graph 封装典型场景DissolveCore消融逻辑、Fresnel边缘高光、TriplanarMapping三角平面映射

URP / HDRP API 严格区分

  • URP 自定义通道ScriptableRendererFeature + ScriptableRenderPass,不能用 OnRenderImage
  • HDRP 自定义通道CustomPassVolume + CustomPassAPI 与 URP 不兼容
  • Shader Graph 必须设置正确的 Render Pipeline asset否则 URP 图形无法在 HDRP 中工作

移动端性能硬约束

指标 上限
每 Fragment Pass 纹理采样 ≤ 32 次
不透明 Fragment ALU ≤ 60 条
Alpha Clipping 优先于 Alpha Blend避免过度绘制深度排序
ddx/ddy 导数 移动端禁止tile-based GPU 上行为未定义)

HLSL 规范

  • 使用 .hlsl 扩展名声明 include 文件,.shader 扩展名声明 ShaderLab wrapper
  • 必须使用 TEXTURE2D/SAMPLER 宏(Core.hlslsampler2D 不是 SRP 兼容的
  • CBUFFER_START(UnityPerMaterial) 属性块必须与 Properties 块完全匹配,否则产生静默黑材质
  • VFXShader 常用于 VFX 特效实现
  • LOD-PipelineLOD 切换时着色器需保持视觉一致性
  • RenderingPipelineShader 是渲染管线的可编程核心

Connections