1.learnopengl中文教程
opengl和d3d基本是相似的,选一个学习即可。
这个过程的重要是要**各种缓冲类型、各种贴图、冯氏光照模型、光源类型,几种坐标空间变换过程、几种片段测试原理、裁剪、剔除、混合和阴影原理,**后面高级应用也很有用处最好是理解一下,理解不了的地方不要死钻,之后可以再慢慢补回来。
这之中可能需要借助其它的知识来源来帮助理解,推荐一些常用的链接,按使用频繁度排序,google就不说了必备的。学完之后才能开始下一步学习。
- 维基百科和OpenGL Wiki
两个权威wiki,搜索概念用的,质量有保证。 - OpenGL函数API
官方手册,用来查看函数用途及原理。 - songho的opengl系列教程
这个教程的坐标空间转换章节和FBO章节写得非常详细。 - 微软的开发人员技术文章分享
关于阴影的这一篇文章对优化原理写的很到位。 - glm源代码
查看矩阵源码,用来辅助理解变换的原理。 - understanding-the-view-matrix
关于view matrix的所有细节都有讲到。 - glfw官方函数手册
- Anton的opengl教程
2.《unityshader入门精要》中文书籍
这本书唯一的问题就在于已经被Unity的脚步甩远了,目前还能用,内置渲染管线淘汰的时候就不好说了。整本书基于内置管线编写,Unity在2019.3发布的通用渲染管线(URP)性能上碾压它太多,可能也就美术写个测试demo会用它了。另一问题是cg语言的淘汰,内置管线库由cg编写,尽管cg与hlsl语法几乎一致,但SRP、URP和HDRP核心库还是用hlsl重写了一遍,等于说需要重新熟悉一遍,不过这个问题倒不大。
知识原理大多在learnopengl中学过的,主要是Unity用shaderlab和cginclude函数封装了跨平台操作和API,所以一方面是要理解ShaderLab、API在Unity中的封装,熟悉cginclude函数库,另一方面是了解书上常见渲染效果的实现,有机会的话最好再看看渲染路径和几种批处理技术,同样的推荐一些Unity资源。
- Unity官方手册和Unity官方函数API
官方文档。 - UntiyCGInclude函数源码
这个在Unity安装目录Editor\Data\CGIncludes下。 - Cg语言标准库
- Unity官方论坛
这里有不少Unity用户和Unity官方技术人员回答问题。 - HLSL语义文档
cg和hlsl没什么区别,所以资料不用太区分。 - Unity官方Github开源项目和Unity官方Github(Japan)开源项目
后期学习用,这些开源项目都是非常棒的学习资料。 - wikibooks
有许多shader案例。
3.catlike srp系列教程
可编程渲染管线是非常重要的一环知识,在学习URP之前必须先学SRP,共计12篇文章,不少内容和前面重叠,其实看完前几篇文章掌握概念和使用方法后就可以去看URP官方的示例项目以及源码了。SRP有几个难懂的核心概念CommandBuffer、SRP Batch,教程中没有讲太明白,依然需要其它资料。
- srp包官方文档
- srp官方文档
- srp核心库
这个在项目目录Library/PackageCache/com.unity.render-pipeline.core/ShaderLibrary下,创建srp项目或者导入srp包之后就有了。 - 知乎CommandBuffer一个理解
4.UniversalRenderPipeline(URP)源码
知识体系成型后,看源码就是最直接最合适的学习道路。示例项目在2019.3之后创建时可选URP模板,自动包含源码。
URP源码中真正要关注的核心就是渲染循环和ForwardRenderer,理解URP之后项目上的大部分需求就不会完全不懂了。
- URP包官方文档
- How the Universal Render Pipeline unlocks games for you
官方对URP的视频介绍以及网上大佬的翻译 - 官方URP开源项目-BoatAttack
5.UnityChanToonShader(UTS)
UnityJapan在github的卡通渲染开源项目,UTS基本上就是业界最新的卡通渲染实现方案了。最近花了不少时间基于UTS做了一个URP版本的移植,删改了很多代码基本重新从头写了一遍,增加了不少认识。
之后打算的学习选项
PBR:Unity的Standard材质
GPU架构
NPR
NIVIDIA GPU Gems1-3
叶大的书单
知识框架
整理了这张思维导图,就是纯目录图梳理用的。图中还有些不完善的地方,特别是“光照与阴影”和“后处理”的部分,这两部分细分的话完全可以打开新世界,这里暂且够用,以后再去逐步探索下去。