Unity Shader 入门宝典2023.05.11

前言

都说Unity Shader学习曲线很陡峭,想学又不知道从何学起,刷了几本书,似乎还是云里雾里,一涉及到数学和物理知识——直接劝退。

这是大部分新手会遇到的问题,所以这篇文章不是为了解释某些理论知识,因为那些书上都有,或者一些专栏博客也讲的很清楚了。

这篇文章出现的目的是为了解决shader学习曲线陡峭和学习路线规划的问题。

如果想了解更多入门知识。

推荐一些入门级专栏。

Unity技术美术 - 知乎

小白的Unity Shader学习笔记 - 知乎

shader从入门到跑路 - 知乎

推荐两本书。

 在阐明了写这篇文章的目的之后,先说一下本文主要包含两个部分

  • 学习方法
  • 基础知识框架

我将从这两个维度,帮助大家降低学习shader的难度,接下来就先从学习方法开始讲起。

高效学习法

1.了解全局

美国前国防部长唐纳德.拉姆斯菲尔德曾经说过“unknown unknowns”,即你根本不知道自己不知道。

在学习shader之前,其实我们根本不知道自己不知道什么,甚至不知道shader是什么。

于是,我们拿着一本书开始啃,或者找到了网上的教程,一集一集看。

看了两天,学习曲边突然飙升,心里想“果然是从入门到放弃”。

其实问题在于,这个过程,你要么学非所需,要么力所不及。

所以我们应该先了解计算机图形学这个领域,了解这个领域都涉及到什么,才能弄清楚自己到底要学什么,然后找出最好的学习方式。

了解全局的方式可以是在网上找几本相关的书,然后收集一下目录里的内容,比如这样。

但是不要在这一步花太多时间,因为这一步的目的不是掌握主题,而是对相关内容有一个全局性的了解。

2.确定范围

在一定时间内,我们不可能掌握所有的shader知识,我们需要确定学习的重点和范围。如果我们想学习如何制作卡通着色效果,这就是一个学习范围,如果我们想学习如何提升渲染性能,这又是一个学习范围。

在这一步中,我们很容易犯一个错误,就是试图解决太大的问题而把自己搞的不堪重负。所以我们也利用好上一步得到的信息,让自己的关注点落脚到更小的可控范围。

3.定义目标

在明确了学习范围之后,我们应该明确成功的标准,这样就可以使用倒推的方式,明确实现目标所需要的步骤。

不好的成功标准:我学习了shader的基础知识

好的成功标准:我可以使用shader编写出一个卡通着色效果,并在Unity中可以成功运行。

这样的标准会让你更快更准的接近目标。

4.寻找资源

当我们确定好了目标后,我们需要手机多种学习资源帮助我们学习,而不是只读一本相关的书。

我一般是先打开亚马逊,然后搜索相关图书,把样章发送到我的手机或者电脑上。

我还会看看找到的书里在豆瓣评分是多少,评论内容。

然后打开油管,搜索相关视频,打开知乎,搜索相关专栏和文章,打开搜索引擎,搜索博客文章。

这样做是因为我觉得单一的信息更容易产生偏见。视频或者博客上的信息并不权威,甚至有误导作用,书中的内容又往往过于官腔,难以理解。

5.创建学习计划

书中的目录往往按照作者自己的意愿来编写,但是有的书结构很差,有的书又超出了你的需求。这一步需要建立自己的学习路径,按照自己感兴趣的主体,打造自己的学习计划。最后我们会发现自己的学习路径跟一本书的目录很相似,基本就是完成了目标。

6.筛选资源

在第4步的时候,我们找到了大量的资源,但是根据学习计划,很多数据是冗余的,我们需要全部浏览一遍,找出哪些内容能覆盖我们的学习计划,然后再买一两本物超所值的书。

以上步骤都完成后,我们便可以开始正在的学习知识了。

7.开始学习

对于普通的编程语言来说,创建一个”Hello,world!”是第一步,对于我们学习shader来说,能创建一个最基础的不报错(变粉)shader也会是第一步。

这一步的关键在于过犹不及,因为我们会很容易失去自控力,开始消化学习计划中所有的资源。

我们需要的是专注于掌握自己所需、能在下一步动手操作的最小量的知识。

为什么要先上手呢?我举个例子。

在我们玩游戏时,并不会学习了所有操作指南和攻略后再开始游戏。

比如玩英雄联盟,我通过先前的了解,比较喜欢36D琴女这个英雄,然后玩两把,我就对这个英雄的技能效果,施法距离,对线技巧都有了一定的了解,并且抱有很多疑惑,比如我应该出什么装备?我应该在哪插眼?我除了辅助能不能打别的位置?

现在我们开始查攻略,看视频,研究这些问题,然后再实战。

当我们反复进行这个过程的时候,其实是我们进步最快的时候。

采用这种方法学习,大脑会自然的产生各种问题,当回过头寻找问题的答案时,这些问题不止迎难而解,还学到了更多的东西,因为学到的都是对你很重要的东西。

好奇心是自学的重要组成部分。在通过动手操作发现了一些尚未解答的问题时,我们出于好奇心,会回过头来通过阅读资料来解决过程中积累的问题,寻求答案。

所以我们千万不要害怕回过头再去阅读操作,并且这一次主要解决在动手过程中发现的问题为主。我们每掌握一个模块,都应该以这种方式推动我们向终极目标前进。

8.乐为人师

多数人都不敢为人师,但这其实没什么好恐惧的,有的时候比学生超前太多的专家反而无法等心应手的教,因为他们无法与学生产生共鸣,他们已经忘了初学者的样子,很容易专注于他们认为的简单细节,这也是我觉得shader学习路线如此陡峭的原因之一。

当你要教给别人知识的时候,也是查缺补漏的好办法,你需要剖析自己所学,然后内化到自己的思想中,这会让对shader的理解能力更上一层楼。

比如我在知乎写专栏和文章,其实就是我查缺补漏的方式,同样也希望能帮到更多人。

基础知识框架

以下是站在宏观角度我认为在入门阶段有必要了解的知识

经典图形学原理

问为什么要先了解图形学原理?

因为我们要做的事情就是用计算机语言欺骗用户的视觉,再了解了图形渲染的基本原理后,会降低我们理解shader的难度,也就是能使学习曲线平缓一点。

我建议以下内容要了解清楚,尤其是渲染流水线的三大阶段。

Unity Shader基础

接下来我建议直接去了解Unity Shader基础,因为我觉得这块知识就是能上手写shader的最小知识量。

这里是比较关键的知识点,是值得反复动手、操作、学习的技能模块。

比如我们可以先不关心有多少属性类型、tag、渲染设置、编译指令,先实现一个“Hello word”再说,但是实现指的可不是单纯的代码拷贝。

动手操作一遍后,我们可以尝试更改不同的设置来完成别的效果。反复操作几次后,我们心中便对shader是什么有了基础的了解。

数学基础

对于数学基础不好的同学来说,这个模块的学习难度巨大,尤其是线性代数和矩阵部分。

对于实在很难啃下的同学,我建议直接跳过,去到下一个部分。

在向量部分尤其要注意点乘和叉乘的几何意义和代数意义,不然到后来的公式变形会很难理解。

矩阵部分则需要了解矩阵的意义,矩阵的类型,最基本的运算法则,明白矩阵的几何意义在于数据的变换。

更多的内容,建议配合上文推荐的《3D数学基础》食用,效果更佳。

基础光照原理

我觉得这一部分的难度就没有那么大,因为很多光照公式都是固定的,只要了解基本的物理知识,应该都不难理解,就算理解不了,暂时记住就好了。

其中漫反射和高光反射是我们着重要动手实践的部分,要实践几种反射在两个着色器里不同效果来理解两种不同着色器的区别。

基础渲染效果

这里的渲染效果指的是结合基础光照和纹理贴图以及渲染顺序后得到的效果。

其中的透明度测试可以决定是否渲染图像,透明度混合可以得到半透明效果。这一部分也是需要动手实践来搞清楚如何实现对应效果的。

写在最后

虽然通篇没有多少介绍shader入门的内容,但是我希望以这种方式让大家更容易接受学习shader这件事。

其实不光学习shader,我们作为技术人员,应该有快速学习的能力。关于学习方法这部分同样也适用于快速掌握其他技能,希望能帮助到大家。

原文:Unity Shader——不一样的入门宝典 - 知乎

猜你喜欢

转载自blog.csdn.net/weixin_42565127/article/details/130626007