Unity Shader之图形学基础(一)

伴随着VR/AR的飞速发展,Unity开发引擎逐渐成为了VR/AR开发的主力引擎。为了满足VR高清高帧率的极限渲染,着色器编程(Shader)也成为了Unity程序开发人员的必备知识。本篇主要讲解图形学基础知识,了解Unity图像渲染机制,以及图像渲染管线流程。

  • Unity图像渲染机制
  • 在Unity引擎中,任何图像渲染都需要一个很重要的文件属性——Material(材质球),在MeshRenderer、LineRenderer、UI渲染、拖尾渲染都可以见到它的影子。
  • 因此,我们可以将Material理解为Unity中图像渲染的工具,而Shader(着色器)即可以理解为Material这个工具的加工厂,Shader(加工厂)定义了Material渲染的解决方案,定义了Material渲染所需要的原材料,而此时所讲的原材料,即Shader中的属性(数值,颜色,纹理,贴图等等)。
Unity Shader之图形学基础(一)

Unity图像渲染机制

下面举例说明,在Unity中设置一个网格渲染的具体流程:

  • 想要渲染一个网格,首先需要创建一个材质球;
Unity Shader之图形学基础(一)

创建材质球

  • 在材质球中,选择合适的Shader;
Unity Shader之图形学基础(一)

选择Shader

  • 将材质球添加到网格渲染器中;
Unity Shader之图形学基础(一)

添加材质球到网格渲染器

  • 调整材质球中的属性信息;
Unity Shader之图形学基础(一)

调整材质属性

  • 查看调整后的渲染效果。
Unity Shader之图形学基础(一)

查看渲染效果

  • 渲染绘图管线
  • 了解了Unity图像渲染机制,下面我来介绍渲染绘图管线。那么何为渲染绘图管线呢?渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的并行处理单元。在Unity中,即将3D场景模型绘制成屏幕2D图片的过程。
Unity Shader之图形学基础(一)

渲染绘图管线

下面我们详细讲解图像渲染流水线中各个模块的详细操作步骤:

  • 第一个步骤——顶点处理
  • 1.当模型制作完成后,模型只有一个自身中心以及自身的前后左右上下方位,我们称之为本地坐标系。当模型置入3D场景中,每个顶点都拥有了一个世界坐标,因此顶点处理第一步是从本地坐标到世界坐标的过程。
Unity Shader之图形学基础(一)

本地坐标-->世界坐标

2.有了世界坐标后,模型在不同角度观察,所看到的画面是不同的,因此下一个步骤是从世界坐标系到观察坐标系的过程。

Unity Shader之图形学基础(一)

世界坐标-->投影坐标

3.观察坐标系还是一个3D视角,但我们所看到的画面其实是一个2D的平面,只是有了阴影,有了光照,有了3D模型的角度渲染,我们看起来比较又3D点感觉。最后一个步骤,即观察坐标系(3D)到投影坐标系(2D)到过程。

Unity Shader之图形学基础(一)

观察坐标-->投影坐标

  • 第二个步骤——面处理
  • 1.刚刚操作已经获取到了2D平面上每个顶点的坐标,下面面处理第一个步骤即将所有顶点连线,组装成面。
Unity Shader之图形学基础(一)

面组装

2.当然面组装成型后,会有我们看不到的地方不需要渲染,因此要将看得到的面截取,将看不到的面剔除,因此有了面截取和面剔除步骤。

Unity Shader之图形学基础(一)

面截取与面剔除

  • 第三个步骤——光栅化
  • 光栅化是渲染管线流程中重要的一步,即将面渲染所需要的像素数量,位置等信息计算出来,也可以理解为是将面拆分成一个个的像素的过程。
Unity Shader之图形学基础(一)

光栅化

  • 最后一个步骤——像素处理(像素着色)
  • 最后一步,即给每个像素着色,形成我们想要看到的画面。
Unity Shader之图形学基础(一)

像素处理

结束语

图形学是计算机领域比较晦涩难懂的一部分,本篇用简单的语言及详细的配图,阐述了Unity图像渲染机制及图形学渲染管线流程。相信大家能对图形学有一个大概的认识。

商弈网校开发:用户决策的不同模式及营销策略

编辑导语:影响用户决策的因素有很多,在面对不同价值、不同用途的商品时,用户会有不同的决策模式;比如你买一样很贵的商品时,你会经过多种对比,思前想后,最后决定下单;

某游戏服务运维架构进化史(上云方案)

网站架构百度百科:网站架构,一般认为是根据客户需求分析的结果,准确定位网站目标群体,设定网站整体架构,规划、设计网站栏目及其内容,制定网站开发流程及顺序,以最大限度地进行高效资源分配与管理的设计。

Unity 内存管理和profiler详解

Unity Memory Management Unity 的 Memory 构造 实际上Unity游戏使用的内存一共有三种:程序代码、托管堆(Managed Heap)以及本机堆(Native Heap)。 程序代码包括了所有的Unity引擎,使用的库,以及你所写的所有的游戏代码。在编译后,得到的运行文件将会被加载到设备中执行,并占用一定内存。 这部分内存实际上是没有办法去“管理”的,它们...

Unity在Android设备中的icon适配

应用icon图标适配 前言: 游戏上了 Google Play 之后,若没有做 Android 8.0 及更高版本的 icon 适配. 就会出现以下3个不适配的图标样式. 谷歌从 Android 8.0 后就设计了一套将 icon 分为前景和背景的方式拼接,这样还可以实现很好的 icon 效果。 详细科普请见以下链接: Understanding Android Adaptive Icons...

unity圆圈自动吸附屏幕边缘

效果: 设置如下: