Unity3d 图形学之OpenGL渲染流程(一)

游戏开发中经常需要平衡GPU和CPU的性能消耗

比如游戏加载时的 Loading 界面,往往伴随着资源请求(网络请求数据和本地请求资源),这些请求很消耗CPU的资源,如果Loading也放在CPU做的话会抢占CPU资源,就使得当前界面会变的非常卡顿,所以我们要在CPU忙的时候,通过GPU来分担一下工作。

Loading 做法:利用CPU 做若干图交替   ;利用GPU旋转

OpenGl 渲染流程:Cpu和Gpu:

Cpu:

Fbx加载到内存中去,然后通过Mesh render渲染出来(通过Fbx加载顶点等信息传给Mesh'render)

 

Gpu:

   渲染管线(管道):顶点着色器——>光栅化——>片段着色器——>alpha测试——>模版测试——>深度测试——>Blend——>Gbuffer——>BrontBuffer——>framebuffer——>显示器

顶点着色器:

1.计算顶点的颜色;2. 将物体坐标系转换到相机坐标系;

光栅化:

将顶点转换成像素,一 一对应

比如Unity渲染一个Quad物体,如下Quad有四个顶点

假设Quad像素为100*100

 

片段着色器:

1.此时顶点已经是像素点(像素:一般有RGBA 4通道组成   RGBA  8888表示每个通道占8bit ,32位刚好用float )

比如 屏幕  1080*1920  横有 1080个像素,竖有1920个像素,float[1080*1920]


Quad有4个顶点到了   片段着色器  就变成了 100*100(即顶点着色器运行4次,片段着色器运行10000次)

顶点着色器  与片段着色器   运算次数不是一个量级的,所以能把运算放在顶点着色器里就尽量放在里面。

片段着色器主要做些什么呢?

1.纹理采样 即给Quad赋予贴图或材质球,把纹理像素付给原来的像素,把原来的像素覆盖掉了。

            ———————— >  

2. 像素跟灯光进行计算。

alpha测试:挑选合格的alpha像素显示。(RGBA)

模版测试:  像素还可以携带 模板信息 达到条件的模板值会显示出来 

深度测试:符合条件的(一般是像素距离相机的距离)像素 就通过,不然就丢弃

以上三个测试 决定像素能否被显示出来,挑选合格的像素

Blend:将当前 要 渲染的像素 和 已经渲染出来的像素混合运算

GBuffer :一个像素 存的(RGBA 模板值  深度值 )等信息,只要是审核通过了以后

Gbuffer做的中转把这些信息传给FrontBuffer 

Buffer其实是缓存区)Float[720*1280*4]数组存的信息比较多。

Front Buffer:由Gbuffer往Front Buffer写完以后,Front Buffer推向显示器显示过程中,Front Buffer

此时此刻就变成了FrameBuffer,同时

由Gbuffer往Front Buffer写完以后,FrameBuffer会交换到后面去变成Front Buffer

Float[720*1280]缓存区

FrameBuffer:

Float[720*1280]缓存区

其实 Front Buffer和FrameBuffer在交替显示,一帧帧的看着好像在动一样,所以两个是相对的。

 

相关知识借鉴:http://video.mobiletrain.org/course/index/courseId/535?pinzhuanbdtg=biaoti

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值