GameTech/URP 渲染实战
UNITY 2022.3 LTS · URP 14

URP 渲染实战

Unity Shader、PBR 与效果案例全解

从第一个 URP Shader 写起,到光照、阴影、PBR、卡通渲染、水、溶解、贴花、Renderer Feature 与后处理。 全书 30 章、234 个案例,书里的每一张效果图都能在浏览器里实时预览:转视角、调参数,还能直接改 Shader 代码。

30 章 + 附录234 个案例327 个可交互效果HLSL + GLSL 双版本
第 19 章:风格化水面
第 19 章 · 风格化水面,点 ▶ 在浏览器里实时渲染
实时预览正文里带 ▶ 按钮的配图,点开就是浏览器里实时渲染的同一个场景:拖动旋转、滚轮缩放,多格对比图可以逐格切换。
调参数右侧面板列出这个效果用到的材质属性、灯光和后处理参数,拖动滑杆立刻看到变化。
改代码“改代码”打开网页版 GLSL,改完按 Ctrl+Enter 重新编译,报错会定位到行。
两个版本书和配套 Unity 工程用 HLSL;网页预览用逐行对应的 GLSL 移植。代码框上方可以切换查看,下载的是 Unity 工程里的 HLSL 原文件。

目录

  1. 第一部分 · 地基GPU 管线、URP 架构与第一个 Shader
  2. 第 1 章从像素说起:GPU 渲染管线与坐标空间一帧画面的旅程、坐标空间链与 URP 中的对应函数7 个实时预览
  3. 第 2 章URP 架构与一帧的流程SRP、资产关系、Pass 顺序、渲染路径、SRP Batcher 与相机栈9 个实时预览
  4. 第 3 章第一个 URP ShaderShaderLab 结构、HLSL 基础与一步步搭出完整的 Unlit Shader12 个实时预览
  5. 第 4 章Shader 里的数学工具箱与程序化图案向量、插值、重复、极坐标、噪声与 2D SDF10 个实时预览
  6. 第二部分 · 光与影从 Lambert 到全局光照
  7. 第 5 章经典光照模型Lambert、Half-Lambert、Phong 与 Blinn-Phong12 个实时预览
  8. 第 6 章多光源与阴影附加光循环、衰减、阴影映射与 ClassicLit15 个实时预览
  9. 第 7 章法线贴图与视差切线空间、TBN、细节法线与视差遮挡映射11 个实时预览
  10. 第 8 章环境光、光照贴图与反射探针球谐、光照贴图、Meta Pass、反射探针与 AO12 个实时预览
  11. 第三部分 · PBR基于物理的渲染:理论、源码与手写实现
  12. 第 9 章PBR 理论辐射度量学、渲染方程、微表面模型与 D/G/F13 个实时预览
  13. 第 10 章逐行读懂 URP Lit从 Lit.shader 到 BRDF.hlsl 与 GlobalIllumination.hlsl7 个实时预览
  14. 第 11 章从零手写 PBRGGX、Smith、Schlick、IBL 与能量补偿,造一个能用的 MyPBR12 个实时预览
  15. 第 12 章PBR 进阶材质清漆、各向异性、头发、布料、皮肤与薄膜干涉18 个实时预览
  16. 第 13 章PBR 材质制作与校准色彩空间、通道打包、取值原则、法线贴图与材质校验11 个实时预览
  17. 第四部分 · 风格与透明卡通渲染、NPR 与透明物体
  18. 第 14 章卡通渲染色阶、边缘光、描边、天使环与面部 SDF 阴影14 个实时预览
  19. 第 15 章更多风格化(NPR)Gooch、素描排线、半调网点、水彩、像素风、Matcap、低多边形与线框10 个实时预览
  20. 第 16 章透明、混合与模板测试渲染队列、Blend、ZWrite/ZTest/Cull、排序、Alpha to Coverage、Stencil 与 RenderObjects10 个实时预览
  21. 第五部分 · 效果工坊游戏里最常见的 Shader 效果
  22. 第 17 章顶点动画旗帜、草地风动、Gerstner 波、膨胀呼吸、碎裂重组、VAT 与阴影同步7 个实时预览
  23. 第 18 章溶解、全息与护盾溶解、菲涅尔、全息、能量护盾、扭曲隐身、冰冻与扫描线13 个实时预览
  24. 第 19 章水深度着色、折射、法线流动、反射、泡沫、焦散、Gerstner 波与平面反射12 个实时预览
  25. 第 20 章地形与植被Triplanar、高度/坡度混合、Height Blend 与 GPU Instancing 草地13 个实时预览
  26. 第 21 章UV 动画与粒子UV 滚动、序列帧、Flowmap、极坐标与粒子 Shader13 个实时预览
  27. 第 22 章贴花URP Decal Projector、自写屏幕空间贴花与网格贴花9 个实时预览
  28. 第 23 章阴影进阶参数全解读、平面阴影、Blob、阴影着色、屏幕空间与接触阴影14 个实时预览
  29. 第 24 章Shader GraphTargets、Blackboard、Keywords、Sub Graph 与 Custom Function4 个实时预览
  30. 第六部分 · 屏幕之上Renderer Feature 与后处理
  31. 第 25 章Renderer Feature 与 RTHandle往 URP 的一帧里插入你自己的 Pass7 个实时预览
  32. 第 26 章自定义后处理Volume 组件 + Renderer Feature 的十个全屏效果12 个实时预览
  33. 第 27 章URP 内置后处理全解析Volume 框架与 17 个内置效果的参数、源码与对比24 个实时预览
  34. 第 28 章屏幕空间技术深度重建、扫描线、雾、SSAO、体积光、SSR 与 TAA7 个实时预览
  35. 第七部分 · 工程化性能、调试与上线
  36. 第 29 章性能优化瓶颈定位、合批、变体、精度、Overdraw 与移动端设置3 个实时预览
  37. 第 30 章调试与排错Frame Debugger、RenderDoc、Xcode、Rendering Debugger 与常见问题手册6 个实时预览
  38. 附录 · 速查随手翻的工具页
  39. 附录附录:速查表函数、宏、关键字、迁移对照与术语

写在前面

Unity 换到可编程渲染管线(SRP)之后,很多人的第一感受是“Shader 不会写了”:UnityCG.cginc 不见了,surface shader 不能用了,网上搜到的教程一半是 Built-in 管线的老写法,另一半跟着 URP 版本改来改去。这本书想做的事情很简单——锁定一个版本,把 URP 下的渲染从头到尾讲透,并且每一个结论都有能跑的代码。

本书基于 Unity 2022.3 LTS(作者使用 2022.3.62f3) 和随之配套的 URP 14.0.12。书中所有 Shader 与 C# 代码都放在配套工程的 Assets/Cookbook 目录下,按章节分文件夹;书里的配图也都是用这个工程在 URP 下直接渲染出来的,不是示意图。你看到的效果,就是代码跑出来的效果。

这本书怎么组织。全书分七个部分。第一部分打地基:GPU 管线、坐标空间、URP 架构、第一个 Shader、Shader 里的数学。第二部分讲光照:从 Lambert 到 Blinn-Phong,多光源、阴影、法线贴图、环境光与全局光照。第三部分是 PBR:先讲微表面理论和渲染方程,再逐行读 URP 自带 Lit Shader 的源码,然后从零手写一个完整的 PBR Shader,最后扩展到清漆、各向异性、布料和皮肤。第四、五部分是效果工坊:卡通渲染、透明与模板、顶点动画、溶解、水、地形、粒子、贴花、Shader Graph。第六部分走出单个物体,讲 Renderer Feature、自定义后处理和屏幕空间技术。第七部分讲性能与调试。附录是速查表。

每一章的写法。章首列出“本章你会学到”,正文先讲必要的原理,然后是一个个编号的案例,每个案例都给出完整代码、关键行的解释、实际渲染结果,以及可以继续改的方向。案例右上角标了难度:入门、进阶、高阶。章末有小结和练习。

你需要的基础。会用 Unity 编辑器、能看懂 C# 就够了。线性代数和光学会在用到时现讲,不需要提前补课。如果你已经写过 Built-in 管线的 Shader,可以从第 3 章开始,并留意书中“Built-in 对照”的提示。

配套工程怎么用

  1. 用 Unity Hub 以 2022.3.x 打开配套工程(其他 2022.3 小版本一般也可以,URP 版本以 Package Manager 显示为准)。
  2. 菜单 Cookbook › Setup Project 会创建一份 URP Asset 并切到线性色彩空间。
  3. 每章的代码在 Assets/Cookbook/ChNN/;Shader 名都以 Cookbook/ChNN/ 开头,在材质的 Shader 下拉框里能直接找到。
  4. 书中出现的贴图(噪声、砖墙、刷漆金属、水面法线、Ramp 等)都是程序生成的原创贴图,放在 Assets/Cookbook/_Core/Textures/,可以随意使用。
版本说明URP 的 C# API 在大版本之间变化较大(例如 Unity 6 / URP 17 引入了 Render Graph)。本书的 Renderer Feature 代码以 URP 14 的 RTHandle + Blitter 写法为准,并在相应位置说明了在新版本里的变化。Shader(HLSL)部分在 URP 12~17 之间大体通用。软件界面与菜单名称以你实际使用的版本为准。

本书为作者原创的技术学习资料。Unity、Universal Render Pipeline、Shader Graph 等为 Unity Technologies 的商标,本书与 Unity Technologies 无关联,也未获其认可。书中引用的 URP 源码片段仅用于学习讲解,版权归原作者所有,请以 Package Manager 中你实际安装的版本为准。