UnityShader入门精要读后感及总结(一)

UnityShader入门精要读后感及总结

其实该文章我写来更多的意义在于对基础知识的深刻记忆,有助于我对实际开发效果的知识沉淀。
其中分享一下该文章的实现开源demo git地址:Unity_Shaders_Book

一、渲染流水线

这个流水线其实不难理解,任何事务的生产为了提高效率一定是流水线的,而大多数带有显示设备的机器都会通过这种流水线渲染图像并最终让我们看到。
其中的概念阶段分为:应用阶段->几何阶段->光栅化阶段
在这里插入图片描述

二、CPU和GPU通信

大体上其实就是描述CPU和GPU的现存是分开的。这里请看书本内容,我就不多做描述。但对于以后深度优化其实有很大的帮助。
在这里插入图片描述

1.那么CPU是如何跟GPU通信的呢?这里就涉及到一个重要的指令:DrawCall

在这里插入图片描述

2.对于GPU的流水线里,我们能做什么?(精)

下图就非常重要,请仔细阅读
在这里插入图片描述
整个渲染流线里包括:顶点数据->顶点着色器->曲面着色器(该着色器手机平台不支持)->几何着色器->裁剪->屏幕映射->三角形设置->三角形遍历->片元着色器->逐片元操作->屏幕图像
而我们日常用到的,大致就是顶点着色器和片元着色器,也就是代码里的vertex和frag
在这里插入图片描述

3.顶点着色器(Vertex Shader)(精)

该阶段也是高度可编程的阶段,也是流水线的第一个阶段,它的输入来自于CPU,也就是说仅仅去处理顶点信息的转换,但就这么简单的一个阶段却可以做出无限的变化。
很神奇.几乎所有比较酷炫的效果其实都依赖这个顶点着色器实现,比如海水,扭曲,云啊等等,而渲染流水线中,开放了顶点着色器就相当于给到开发者很大的空间去实现自己想要的各种效果。
在这里插入图片描述
提一下的是opengl和directx的坐标系数是不一样的,不过其实unity已经帮我们处理好了。
在这里插入图片描述

4.三角形遍历 (精)

这里涉及到一个重要的东西 “片元”,可以理解为,这个片元是遍历三角形后计算出来的一个数据,它是负责记录三角形网格覆盖了哪些像素,并记录插值,及各状态信息,例如屏幕坐标,深度信息等。然后给到另一个非常重要的可编程着色器阶段“片元着色器(Fragment Shader)
在这里插入图片描述

5.片元着色器(Fragment Shader)(精)

片元着色器是一个可变成的着色器阶段,非常重要的一个阶段。
片元着色器可以完成很多重要效果,在这里你可以根据片元中得到的顶点信息,空间信息,屏幕信息,灯光信息等去计算最终的颜色,但它仅可以影响单个片元。
这里要啰嗦一下,因为真的很神奇,你想象一下,有成千上万个小GPU处理单元在并行处理近乎每一个像素的颜色输出,他们都遵循你同一句代码,而这句代码因为在顶点着色器中根据三角形的顶点信息得到的权重,然后就能让你看到形形色色的最终效果。当然,真正复杂的东西其实都是芯片帮你做了。
在这里插入图片描述

6.逐片元操作

这个阶段是最后一步了,不能编程,但是可以高度配置。
在这里插入图片描述
这里模板测试,深度测试,混合,都讲解的非常多,但其实可以理解为工厂做东西的最后一步质量检测,通过各种参数的对比,去得到不同的处理结果。其处理方式归结为针对片元的可见性及混合模式。可见性和混合其实是两种处理阶段,不可见,就没后面啥事了。值得一提的是,GPU会做一些优化,例如深度测试就会在片元着色器之前,避免无谓的计算
流水线很复杂,但是Unity在底层其实帮我们做了很多事情,我们只需要关注我们可编程的阶段及可配置的阶段进行控制就可以实现出想要的效果了

7.Draw Call

强大而又常见的词汇,这是CPU跟GPU通信的指令,简而言之,DrawCall越少越好。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里值得一提,合批技术最近除了Instance Batch,这是一种完全依赖GPU进行合批的新技术。

最后,一句好有深意,请看

在这里插入图片描述

下一章,我会结合书中内容以及实际的实践结果去继续学习学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity Shader是一种用于渲染图形的程序,它可以控制对象的表面颜色、纹理、透明度、反射等属性,从而实现特殊的视觉效果。对于游戏开发者来说,掌握Shader编写技巧是非常重要的。 以下是关于Unity Shader入门精要: 1. ShaderLab语言 ShaderLab是Unity中用于编写Shader的语言,它是一种基于标记的语言,类似于HTML。ShaderLab可以用于定义Shader的属性、子着色器、渲染状态等信息。 2. CG语言 CG语言是Unity中用于编写Shader的主要语言,它是一种类似于C语言的语言,可以进行数学运算、向量计算、流程控制等操作。CG语言可以在ShaderLab中嵌入,用于实现Shader的具体逻辑。 3. Unity的渲染管线 Unity的渲染管线包括顶点着色器、片元着色器、几何着色器等组件,每个组件都有不同的作用。顶点着色器用于对对象的顶点进行变换,片元着色器用于计算每个像素的颜色,几何着色器用于处理几何图形的变形和细节等。 4. 模板和纹理 在Shader中,我们可以使用纹理来给对象添加图案或者贴图,也可以使用模板来控制对象的透明度、反射等属性。纹理可以通过内置函数tex2D()来获取,模板可以通过内置函数clip()来实现裁剪。 5. Shader的实现 Shader的实现需要注意以下几点: - 在ShaderLab中定义Shader的属性、子着色器、渲染状态等信息。 - 在CG语言中实现Shader的具体逻辑,包括顶点着色器、片元着色器等内容。 - 使用纹理和模板来实现特定的视觉效果。 - 在对象上应用Shader,通过调整Shader的属性来达到不同的效果。 以上是关于Unity Shader入门精要,希望对你有所帮助。如果你想更深入地了解Shader的编写技巧,可以参考官方文档或者相关教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值