Unity 入门精要阅读笔记

https://zhuanlan.zhihu.com/p/257877196

一、渲染流水线

1. 概述

由一个三维场景出发,渲染一张二维的图像。

2 . 概念渲染流水线

  • 应用阶段:开发者可以自由主导的阶段,通常由 CPU 负责。开发者主要通过以下 3个 主要任务
    输出渲染需要的几何信息,即 渲染图元
    • 布置好场景。模型、相机和光照的摆放。
    • 粗粒度剔除(culling)。将被遮挡,不可见的物体剔除出去。
    • 设置模型的渲染状态。包括材质、纹理、shader等。
  • 几何阶段: 通常在 GPU 中进行。对输入的渲染图元进行多步处理,
    • 输出屏幕空间二维顶点坐标(MVP变换),每个顶点包含深度值、着色等信息
  • 光栅化阶段: 通常在 GPU 上运行。主要是决定每一个渲染图元中那些像素应该绘制到屏幕上。需要对几何阶段得到的顶点数据(纹理坐标、顶点颜色)进行插值,然后逐像素处理。

下面介绍的GPU流水线这是硬件真正用于上述概念的流水线

3. CPU 和 GPU 之间通信(应用阶段)

应用阶段的起点是 CPU。主要分为三部分。

  1. 应用阶段
    1. 把数据加载到显存(GPU)中:所有需要渲染的数据,需要从硬盘中加载到内存(Random Access Memory RAM)中,再将网格、纹理等信息加载到 GPU 显存(Video Random Access Memory VRAM)中
    2. 设置渲染状态:定义了场景中网格是被怎么渲染的。
      使用哪个顶点着色器(Vertex Shader)/片元着色器(Fragment Shader)、光源属性、材质等
    3. 调用 Draw Call:当所有CPU 通知 GPU 对一个被需要渲染的图元列表进行渲染
      • 渲染图元(rendering Primitives):点、线、面

4. GPU 流水线(几何阶段 + 光栅化阶段)

GPU 接受到了 CPU 的 Draw Call 指令。会按照顺序执行下面的步骤

顶点数据

  1. 几何阶段
    1. 顶点着色器(Vertex Shader):完全可编程。
      • 顶点变换:顶点变换把模型空间的顶点变换到裁剪空间/屏幕空间
      • 顶点着色:并准备一些插值数据,比如顶点位置、法线、顶点颜色
    2. 曲面细分着色器(Tessellation Shader):可选着色器,用于细分图元。
    3. 几何着色器(Geometry Shader):可选着色器。用于逐图元的着色,或生成更多的图元。
    4. 裁剪(Clipping):可配置。将不在摄像机内的顶点裁剪掉,并剔除某些三角图元的面片。
    5. 屏幕映射(Screen Mapping):不可配置和编程。负责将图元坐标转换到屏幕坐标系中。
  2. 光栅化阶段
    1. 三角形设置(Triangle Setup):固定函数
      • 上个阶段是三角网络的顶点,需要计算三角网络
    2. 三角形遍历(Triangle Traversal):固定函数
      • 判断一个三角网络覆盖了哪些像素
      • 并使用三角形网络的三个顶点信息对整个覆盖区域的像素进行插值
    3. 片元着色器(Fragment Shader):完全可编程。逐片元着色。
      • 输入是上一个阶段得到的顶点信息插值得到的结果
      • 包括纹理采样
    4. 逐片元操作(Per-Fragement Operations) / 输出合并阶段:可配置
      • 决定每个片元的可见性,涉及模版测试和深度测试
        读取当前片元位置的模版缓冲区的模版值(深度值),与读取的参考值(深度值)进行比较,这个比较函数的规则可以自定义
      • 如果一个片元通过了所有测试,这需要将片元的颜色值和已存储在颜色缓冲区中的颜色进行合并,同时根据是否开启深度写入,决定是否更将这个片元的深度值覆盖掉原有的深度值,这和透明效果息息相关
      • 如果没有通过测试,则之前的计算都白费
        • 所以上述顺序有时深度测试会放在片元着色器之前
      • 屏幕显示的就是颜色缓冲区的颜色值,但是为了避免看到那些正在光栅化的片元,GPU会使用双重缓冲(Double Buffering)的策略,一旦场景渲染到了后置缓冲中,GPU就会交换后置缓冲区和前置缓冲区中的内容
学习笔记如有侵权,请提醒我,我会马上删除
暂无评论

发送评论 编辑评论


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