Unity的渲染管线

渲染管线

概念

Unity的渲染管线是在图形学渲染管线的基础上,加上了高度可配置可扩展的框架,允许开发者自定义渲染流程。

渲染管线(渲染流水线)概述:将数据阶段的变为屏幕图像的过程。

  • 数据指的是模型、光源和摄像机等内容的顶点、纹理、光照等数据。

  • 阶段:应用阶段—>几何阶段—>光栅化阶段

    image-20240617175319915

CPU和GPU

  • CPU:中央处理器,负责逻辑处理。
  • GPU:图形处理器,搭载在显卡上,负责渲染逻辑处理。

图元

在渲染管线中,图元是几何数据的基本单元,是构成几何体的最小可绘制单元。

图元可以是点、线、三角形,在几何阶段,顶点数据会被组合成图元。

这些图元将在光栅化阶段转换为像素,最终呈现在屏幕上。

像素

像素组成图像的最小可控单位。

具有位置和属性,用于表示颜色和其他信息。

二维图像中的一个点,每个像素都占据屏幕的固定位置。

片元

片元是光栅化阶段生成的像素或像素片段。

片元是渲染管线中进行像素级别操作和计算的基本单位。

其实片元就是像素加上了一些其他信息,如颜色、深度值、法线等。

应用阶段

概述:CPU将渲染数据传递给GPU,用于后两个阶段的处理。

应用阶段CPU为渲染准备了什么?

  1. 剔除不可见(相机外)的物体数据。
  2. 准备好模型相关的数据,如顶点、法线、切线、贴图、着色器等。
  3. 把数据加载到显存中。显存就是显卡的专用内存,用来存储显卡芯片处理过或者即将提取的渲染数据。
  4. 设置渲染状态,如网格需要使用哪个着色器、材质、光源属性等。
  5. 调用DrawCall,DrawCall就是CPU通知GPU用上面准备的数据和渲染状态进行渲染的命令。

image-20240614210459107

应该尽可能避免多的DrawCall

因为它会影响性能。每次调用DrawCall,CPU就会给GPU发送大量的内容,效率就慢了,可能会造成卡顿。

怎么减少呢?批处理技术

  • 将多个静态物体的网格合并为一个网格,变为一次DrawCall。
  • 使不同网格使用同一种材质。
  • 合并图集:将多张图片合并成一张大图。(2D游戏和UI中常用)

几何阶段

几何阶段是GPU主导的阶段,它的主要工作为:顶点处理、坐标转换、裁剪画面外图元

概述:在几何阶段,我们主要通过自定义顶点着色器阶段,带来不同的画面表现效果。

image-20240617171522020

顶点着色器:是完全可编程的,进行一些操作就能带来如水波纹、布料等表现效果。

image-20240617172841403

image-20240617172937407

光栅化阶段

GPU主导,确定片元是否被渲染,并且确定片元的最终渲染颜色效果等。

我们主要通过自定义片元着色器阶段,带来如水面、火焰、黑白或模糊等效果。

image-20240617174032679

  • 三角形设置:计算三角形网格的表示数据,人话就是把顶点连成三角形。

  • 三角形遍历:检查哪些像素被三角形网格覆盖了,覆盖就生成为一个片元,最终获得片元序列。

    • image-20240617175824695
  • 片元着色器(可编程):

    • image-20240617175937464
  • 逐片元操作(输出合并阶段,可配置):

    • image-20240617180058393
  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值