前言
写作背景
2020年5月,笔者所在公司启动了基于Unity引擎开发的3D汽车展示项目,使用户能够在手机上通过3D的方式查看市面上的所有汽车。考虑移动设备性能方面的问题,团队在技术路线上首选了Unity的Universal Render Pipeline(简称URP)。
随着功能开发的逐渐推进,笔者也逐渐发现这样一个问题: 虽然Unity的可编程渲染流水线已经推出两年多了,但是其官方文档仍然没有补充完整,而仅有的几个文档也是点到即止,对于新手来说并不能起到很好的指导作用。虽然互联网上有很多关于这方面的文章分享,但至今没有发现系统讲解URP的,市面上更是没有一本关于这方面的书籍。
于是,笔者一边在网上查阅资料,一边翻看Shader的源码,然后在项目应用中不断测试并验证自己的假设,这一路走来,实属不易。想到肯定还有跟我一样的人正在或将要重走一遍这样的路,为了给他们提供一些帮助,笔者特地将自己的经验和成果总结下来,编辑成册。
虽然本书中仍然存在很多未研究透的知识点,但是读完本书之后,在Unity 的URP项目中自己编写Shader已经完全不成问题。
适用群体
本书适合有Unity Shader基础的读者作为自学和研究URP的参考书,也适合目前使用传统渲染流水线做项目,打算往URP转换的读者用于技术预研的教程。
如果读者毫无Unity Shader编写经验,建议先阅读笔者的第一本书《Unity ShaderLab 新手宝典》,这本书可以帮助你快速从“对Unity Shader一无所知”的状态变成“完全掌握Unity Shader”。
需要提前掌握的技能
作为一本Unity Shader的专业书籍,建议读者在阅读本书之前掌握如下技能:
(1) Unity的基本操作,例如添加物体、创建Shader文件、创建材质资源等。
(2) ShaderLab基础语法,例如定义属性变量、设置渲染状态等。
(3) Cg或HLSL基础语法,例如定义函数、声明变量等。
(4) 3D数学或空间几何相关知识,例如理解向量、矩阵、点乘运算等。
本书应该如何阅读
本书是按照笔者研究源码的思路进行编写的,引导读者从一个内置的Shader(Lit shader)开始逐步了解URP项目中完整的Shader框架,所以强烈建议读者在阅读本书的时候能够坐在计算机前,启动Unity,按照书中的引导打开并阅读源码。
Unity为了实现模块化将Shader框架按照不同功能拆分成不同的文件,然后以包含文件的形式进行整合,因此在阅读源代码的过程中需要来回翻阅多个不同的文件,所以建议读者一次性阅读较多的篇幅,切勿在中间章节停下,否则前面讲解的内容很可能会遗忘。
某些Shader文件的代码量非常大,读者在阅读后面的代码时很容易就会忘记前面的代码,因此建议读者在阅读源代码的过程中养成添加注释的习惯。
特别鸣谢
在此非常感谢广大Unity爱好者能够积极分享自己对于Unity最新技术的理解,你们作为技术的“先行者”,为后面的“追赶者”提供了丰富的知识储备,如果没有你们的贡献,Unity技术的学习之路将会变得更加坎坷。
此外,我还要感谢我目前就职的公司——广州市有车以后信息科技有限公司,这是一家愉快、包容且充满激情的公司。感谢公司给我提供机会,使我能够从事自己喜欢的工作,并全身心投入技术研究当中。正是我所从事的工作,激发了这本书的写作灵感。
本书能够顺利出版,还要感谢清华大学出版社,在该出版社相关编辑的帮助下,本书才能得以顺利面世。
最后,本书是笔者在一边探索一边应用的状态下编写而成的,倘若有疏漏和不足之处,恳请读者批评指正。
2021年8月