Unity的渲染流程

Unity中坐标空间的转换:

 

 

Unity的渲染流程:

渲染到设备屏幕的每一帧画面都要经历如下几个阶段:

应用程序阶段(CPU):将材质和模型数据发送给GPU

几何阶段(GPU):进行顶点变换计算

光栅化(GPU):将三角形转化为片元,并对片元着色。

 

Cpu:准备需要渲染的对象。

  1. 把可视的对象,进行遮挡剔除和视椎体剔除,并将渲染对象排序。
  2. 设置渲染对象的渲染状态,包括材质,模型,着色器
  3. 发送drawcall

会为每一个渲染兑现的每一个材质生成一个渲染批次batch,(合批就是将多个材质合成一个批次)

setPass Call是在渲染状态发生改变时才会被调用,和drawcall相伴产生。在某些特定情况也不一定对等,如一个batch中用到了多个pass,不同的pass,cpu将发送新的setpass call和drawcall。而在静态批处理中,由于顶点限制而不能再同一批次处理而被分割的紧邻的多个批次,因为使用的是相同的渲染设置,所以只产生一个set pass call

Setpass call 是告诉gpu接下来要用到哪些资源,需抓经准备。执行时,会向显存中传入大量的资源信息,包括纹理。

Drawcall 是要求gpu根据顶点数据进行绘制

 

Fbx(里面包含了uv,顶点位置,法线,切线等信息)加载到内存中,通过mesh render 渲染出来

Skindned mesh render : 带蒙皮的骨骼,把物体的顶点,法线,切线等信息传个gpu渲染出来。

Mesh filter:将模型信息传递给gpu

Mesh render :将顶点等渲染信息传递给GPU

Skinned mesh render 和 mesh render 的区别就是,前者用于有蒙皮动画的mesh, 后者用于静态的mesh。

 

 

Gpu:

渲染管线: 顶点着色器、光栅化、片段着色器(alpha测试、模板测试、深度测试、blend、gbuffer、brondbuffer,framebuffer)、显示器

 

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

每个顶点执行一次顶点着色器,在此阶段可以进行透视投影,顶点光照,纹理计算,蒙皮。也可以修改顶点位置生成程序式动画,例如模拟风吹草动,碧波荡漾。

 

光栅化:将顶点转换成像素,一一对应

片段着色器:将顶点围起来的像素着色(运行次数远大于顶点着色器,尽量将运算放在顶点着色器中。例如:quad中四个顶点坐标为((0,0)(0,100)(100,100)(100,0))顶点着色器执行4次,片段着色器执行10000次

 

片段着色器中处理的事情:逐片元操作

  1. 纹理采样 即给Quad赋予贴图或材质球,把纹理像素付给原来的像素,把原来的像素覆盖掉了
  2. 像素跟灯光进行计算
    1. alpha测试:挑选合格的alpha像素显示。(RGBA)
    2. 模版测试:  像素还可以携带 模板信息 达到条件的模板值会显示出来
    3. 深度测试:符合条件的(一般是像素距离相机的距离)像素 就通过,不然就丢弃
    4. 以上三个测试 决定像素能否被显示出来,挑选合格的像素
  3. Blend:将当前 要 渲染的像素 和 已经渲染出来的像素混合运算
    1. GBuffer :一个像素 存的(RGBA 模板值  深度值 )等信息,只要是审核通过了以后Gbuffer做的中转把这些信息传给FrontBufferBuffer其实是缓存区)Float[720*1280*4]数组存的信息比较多
    2. Front Buffer:由Gbuffer往Front Buffer写完以后,Front Buffer推向显示器显示过程中,Front Buffer,此时变成了framebuffer,由Gbuffer往Front Buffer写完以后,FrameBuffer会交换到后面去变成Front BufferFloat[720*1280])缓存区
    3. FrameBuffer:Float[720*1280]缓存
    4. 其实 Front Buffer和FrameBuffer在交替显示,一帧帧的看着好像在动一样,所以两个是相对的

 

 

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值