Unity3D在渲染方面都帮我们做了什么?

本文深入探讨Unity3D的渲染流程,从顶点属性到着色器,再到材质、渲染器、剔除、排序及合并批次,全面解析Unity3D如何高效处理渲染任务。

转载自 Unity3D白皮书(四) Unity3D在渲染方面都帮我们做了什么?

在这里插入图片描述

1 顶点属性

包括顶点位置、顶点色、法线、uv等。
这些数据从模型文件(例如FBX)中读取出来,组织成一个数据结构——Mesh
但最终渲染的时候还是从Mesh中将这些数据(可能会被更改)取出来传给GPU

2 Vertex shader & Fragment shader 着色器

对Unity3D开发者来说是透明的。Unity3D开发者使用ShaderLab编写Unity3D shader,
这些shader会(根据平台)被编译成Vertex shader & Fragment shader传给GPU。

3 Material 材质

笼统上来讲,就是配置表。
假设我们要直接调用OpenGL(或DirectX),就需要在代码中为Shader设置一些属性(或者说变量)。
Unity3D使用Material这个“配置表”就能够动态地设置这些属性(其实还包含载入纹理的操作)。

4 Renderer 渲染器

再一次封装. Unity3D渲染(在CPU阶段)的基本单位
其实还要算上Transform和针对于MeshRenderer的MeshFilter(求问:为什么要分开?)。
之所以加这一次封装,应该也考虑了 不同Mesh和Material之间的组合 。在送进GPU之前的各种操作都是以Renderer为单位的。 意思是: 一个Renderer一个DrawCall.

5 Culling 剔除

官方文档 Occlusion Culling

注:区别于渲染管线的裁剪。

  • 剔除: 是根据摄像机视域内物体之间互相的遮挡关系判断的.
    Occlusion Culling is a feature that disables rendering of objects when they are not currently seen by the camera
    because they are obscured (occluded) by other objects.

  • 而裁剪: 是在渲染过程中. 根据几何物体的与裁剪面之间的关系来进行的.

6 Sorting 排序

  • 以Shader中的Queue和Renderer中的sortingLayerID+sortingOrder为基准(Queue的优先级更大)。

这一块需要好好理一理. 究竟Unity渲染时是如何排序的.

7 Batching 合并批次

官方文档 Draw call batching

注意:
Because it works by transforming all GameObject vertices into world space on the CPU, it is only an advantage if that work is smaller than doing a draw call.

Batching 是在CPU中进行的. 只有当 Batchinig比DrawCall花费得少才算是有优势.
这就反映了一个问题:Batching并不总是好的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值