ainatipen 发表于 2022-1-25 10:49

Cocos Shader入门基础一:前言

看过麒麟子Cocos Creator 3D编程相关文章的朋友应该都知道,麒麟子特别喜欢推荐大家看《OpenGL编程指南》和《3D数学基础:图形与游戏开发》这两本书。并把这两本书放到了Cocos Creator 3D研究院QQ群共享,作为入群必读资料。

麒麟子一直认为,想要玩转3D引擎的话,光是会用API是不行的,必须掌握必要的计算机图形学基础和3D数学基础。

但随着Cocos Creator 3D版本的逐步完善,使用3D版本的C友们也越来越多。一些细节问题逐渐浮现出来。下面是一些C友给麒麟子的私信留言。留言五花八门,麒麟子摘抄了一些,作为FAQ供大家阅读。

第一位出场的C友,是一个经常换头像的小伙子。所以就不能通过头像来描述他的气质。他有一个特点,就是说话的时候,喜欢以带口字旁的字结束,比如:啊,吗,吧,哦,嗯,呢。我们就称他C友1吧

C友1:子啊,你说的OpenGL编程指南我看完了,但还是不会用Cocos Creator 3D。那个材质是几个意思啊,OpenGL书上没有这些呢?

麒麟子:书上的例子有一个个敲吗?

C友1:前面的都敲了,后面的只是流程上增加了一些东西,就没有敲。总想着后面能够找到材质,effect之类的东西。

麒麟子:材质可以看作是渲染一个模型所用到的渲染状态、贴图、shader、shader常量参数的集合。是一个抽像的概念,在引擎中的材质文件其实就是保存了这些状态。它对应的就是你Opengl中那堆状态设置,纹理绑定和uniform设置的代码。

C友1:那要怎么用?

麒麟子:材质是effect的实例,新建一个材质,指定想要的effect 和technique,设置好相关参数就行。引擎在使用的时候,会加载这个材质文件并生成一个Material对象实例。

C1友:哦了,我再看看吧。

第二位出场的C友,有点愤青。这也不怪,江山代有才人出,性子刚强一点没什么不好。平时说话总是喜欢提到太阳和一些花花草草的东西,我们就称他C友2吧。

C友2:****,什么情况,材质还不让改了,锁着的。

麒麟子:???,兄台何以如此鸡冻,不急,慢慢说。

C友2:我在场景里放了一个Plane,想要调整它的颜色,发现调不了啊。

麒麟子:默认材质是所有几何体都要用的,所以编辑器里不让改。

C友2:辣鸡,人家Unity3D就可以改。

麒麟子:咦,Unity3D可以改?你要不先去看看再来喷?

C友2:不管U3D可不可以改,告诉我Cocos Creator 3D里面怎么改。

麒麟子:推荐你看的基础书你看了的话,应该很好理解为什么不让改。

C友2:哪有哪么多时间看书,你就告诉我怎么才能改得了。

麒麟子:你得新建一个材质文件,然后把这个材质给你的Plane就OK了。也可以在代码里面改获取ModelComponent,然后.material.setProperty

C友2:真麻烦,还要用代码。人家U3D就不需要代码。

麒麟子:哥,我错了,不该提代码的事。你新建一个材质文件,然后把这个材质给你的Plane就可以改了。

C友2:早说嘛,我去试试。

麒麟子:嗯,哥您慢走。别摔了。

第三位出场的C友,就是传说中的BUG专业户,开口一般就是:我又发现一个Cocos的BUG,******。最后发现是自己的问题后,又会恍然大悟道:原来如此!我们就称他C友3吧。

C友3:大大,我又发现一个Cocos的BUG。不知道你有没有遇到过?

麒麟子:嗯?说说看。

C友3:我今天试了一下,用代码设置材质的参数,结果我一设置,场景里的物体就都变了?

麒麟子:你是想都变,还是只有一个变?

C友3:只想变一个,鼠标选中某个物体的时候,这个物体变颜色,其他都不变。

麒麟子:我猜你是用的sharedMaterial.setProperty函数。

C友3:嗯啊,还有别的函数?

麒麟子:函数没错,只是不应该用shareMaterial,要用material。

C友3:不是说尽量用sharedMaterial吗,论坛有人说 material会创建新的材质实例,影响批处理的性能。

麒麟子:嗯,话是没错,但sharedMaterial对应的就是你的材质文件。所有使用同一个材质文件的对象,都会跟着修改。

C友3:我X,对对对,明白了。

第四位出场的C友,真的是勤奋好学。文质彬彬,学习能力超强。我们称呼他C友4吧。

C友4:老师,伴随矩阵在3D里面用在什么地方啊?我想学一下。

麒麟子:。。。,暂时没想出来用在哪里。

C友4:老师,共轭四元数用在哪个地方呢?

麒麟子:。。。,一般情况下用不到。

C友4:老师,线性代数我都看完了,但发现3D游戏最多就用到4X4矩阵和乘法。

麒麟子:嗯,对啦。就是这样的。矩阵只是工具,能够更方便地做向量叉乘和点乘。你就当是向量叉乘和点乘的批处理吧。

C友4:哦,那意思是,我白学了一堆用不上的?

麒麟子:也不是,至少经历了别人没经历的人生嘛。

C友4:。。。。

上面位C友可以说是很典型的代表。

C友1:挤出业余时间学习了OpenGL等基础,但无法和Cocos Creator 3D对应起来。

C友2:实干派,根本就不想学基础,只想掌握Cocos Creator 3D的使用技巧。

C友3:理论基础和图形都棒棒的,只是缺少一些使用上的经验。

C友4:学霸型,但会经常学一些不常用的知识。

经过反复思考,麒麟子就有了写Cocos Shader入门基础教程这个想法。

围绕Cocos Creator 3D进行材质方面的基础科谱。

对于想学基础的人和不想学太多基础的人,都能够学以致用。
页: [1]
查看完整版本: Cocos Shader入门基础一:前言