渲染流水线

什么是渲染流水线

在RTR4中,将渲染流程分为3个概念阶段:应用阶段、几何阶段、光栅化阶段。

应用阶段

  • 由CPU负责实现
  • 准备场景数据,例如摄像机位置、视锥体、场景模型、使用光源等
  • 粗粒度剔除
  • 设置每个模型的渲染状态(材质、纹理、Shader等)
  • 输出渲染所需几何信息,即渲染图元。通俗来讲,渲染图元可以是点、线、三角形等

几何阶段

  • 由GPU负责实现
  • 决定绘制的图元是什么,怎样绘制,在哪里绘制
  • 将顶点坐标转换到屏幕空间中
  • 输出屏幕空间的二维坐标、每个顶点的深度值、着色等相关信息

光栅化阶段

  • 使用上个阶段传递的数据产生屏幕上的像素
  • 对上一阶段得到的逐顶点数据(纹理坐标、顶点颜色等)进行插值,然后再进行逐像素处理

CPU与GPU之间的通信

渲染流水线的起点是CPU,即应用阶段。应用阶段大致可分为:

  1. 把数据加载到显存中
  2. 设置渲染状态
  3. 调用DrawCall

把数据加载到显存中

所有渲染数据都需要从硬盘中加载到系统内存,然后,网格和纹理等数据又被加载到显卡上的存储空间——显存中。这是因为显卡对显存的访问速度更快,而且大多数显卡对RAM没有直接访问权利。

设置渲染状态

渲染状态的通俗解释是,这些状态定义了场景中的网格是怎样被渲染的。例如使用了哪个顶点着色器/片元着色器、光源属性、材质等。如果没有设置渲染状态,那么所有网格都将使用同一种渲染状态。

在准备好上述工作后,CPU就需要调用一个渲染命令告诉GPU按照设置来渲染了。这个命令就是DrawCall。

调用DrawCall

DrawCall就是一个命令,发起方是CPU,接收方是GPU。这个命令仅仅会指向一个需要被渲染的图元列表,而不会再包含任何材质信息(因为已经在上一阶段中完成了)。

当给定一个DrawCall时,GPU就会根据渲染状态(例如材质、纹理、着色器等)和所有输入的顶点数据来进行计算,最终输出屏幕上显示的像素。这个过程就是GPU流水线。

GPU流水线

对于概念阶段的后两个阶段,即几何阶段和光栅化阶段,开发者无法拥有绝对的控制权,其实现的载体是GPU。

概述

可以看出,GPU的渲染流水线接受顶点数据作为输入。这些顶点数据是由应用阶段加载到显存中,再由DrawCall指定的。这些数据随后被传递给顶点着色器。

几何阶段:

  • 顶点着色器是完全可编程的。它通常用于实现顶点的空间变换、顶点着色等功能。
  • 曲面细分着色是一个可选的着色器,用于细分图元。
  • 几何着色器也是一个可选的着色器,用于执行逐图元的着色操作,或者用于产生更多的图元。
  • 裁剪的目的是将不在摄像机视野内的顶点裁剪掉,并剔除某些三角形的面片。这个阶段可配置不可编程。
  • 屏幕映射是不可配置不可编程的,负责把每个图元的坐标转换到屏幕坐标系中。

光栅化阶段:

  • 三角形设置和三角形遍历阶段也都是固定函数阶段。
  • 片元着色器是完全可编程的,它用于实现逐片元的着色操作。
  • 逐片元操作负责修改颜色、深度缓冲、进行混合等,它不是可编程的,但具有高配置性。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇