有生之年转ta系列1.1渲染流水线

本文内容来自

## b站霜狼_may的技术美术百人计划

观后记录
美术岗位代码或者算法一类的问题可能不太懂
本文仅用来记录学习,如果有不对的请指出谢谢。

图形 1.1 渲染流水线
渲染管线作用
3d元素转换成屏幕中的2d图像
线性工作流程

流程

1.应用阶段:(GPU
1.1准备场景数据:
(渲染哪些物体;模型顶点的位置,大小,方向 以及法线切线方向 网格信息 uv贴图等;
光源的类型,位置,方向等一些基本属性以及所产生阴影的信息 ,逐光源绘制阴影贴图;相机位置属性等参数;其他全局性数据)

1.2加速算法,粗粒度剔除
(可见光裁剪;可见场景物体裁剪;被遮挡的物体不需要渲染 提高性能
裁剪算法 八叉树,BSP树 K-D树 BVH)

1.3进行渲染设置
设置渲染状态
准备渲染参数
绘制设置(不同物体用不同shader去渲染 不同渲染对象的合批方式)
绘制顺序 (从远到近 不透明透明渲染顺序等 材质RenderQueue)
渲染目标(渲染结束后结果输出哪里rendertexture还是framebuffer帧缓存)
渲染模式(unity的前向渲染或者延迟渲染)

1.4准备基本数据
输出到几何阶段 调用DrawCall(输出渲染图元给显存GPU)

2.几何阶段:(CPU
2.1顶点着色器 (顶点的坐标的变换 以及部分着色操作)
顶点着色器

2.2曲面细分 (让现有顶点变得更多 max涡轮平滑)
几何着色器(基于图元的操作 通过给定的图元生成更多的图元)
在这里插入图片描述

2.3投影 透视除法 xyz/w 投影坐标系转换到了标准设备坐标系(NDC)
正交视图中w始终为1 xyz投影到平面以后不会发生变化
透视中w近处比较小远处比较大 所以投影到平面以后近大远小
在这里插入图片描述

2.4顶点裁切 (cvv裁剪 正面或者背面剔除)
xyz/w 以后如果xyz数值超过1~-1的范围 超出的范围就不会显示
如果有图元部分顶点在外面被裁剪掉 则会生成两个新的顶点来补全这个片元
在这里插入图片描述

设备坐标系在open GL和D3D中是不一样的 前者是-1-1之间 后者xy是-1-1 z是0-1

2.5屏幕影射(3D空间转换到2D空间)
标准坐标系映射到屏幕坐标系
标准坐标系当中xy范围是-1-1 而屏幕坐标系中是输出设备的长和宽在这里插入图片描述
屏幕坐标系原点在open GL中是左下方 在D3D中是左上方

(几何阶段操作都源于应用阶段获得的数据)
(2.1-2.2顶点空间到投影空间的过程)
3.光栅化阶段:(CPU
三角形设置(2d空间得到的顶点位置重构成三角形 计算三角形边界信息的过程)
三角形遍历(前一步获得三角形包含了哪些2d空间像素点 检查这些像素是否被三角形覆盖)
在这里插入图片描述
3.3抗锯齿(MSAA)
SSAA(渲染一个放大n倍buffer 然后采样)
MSAA(光栅化阶段计算多个覆盖样本)
在这里插入图片描述

FXAA/TXAA(后处理技术)

4.逐片元操作:(CPU
片元着色(对每个片元上色)
颜色混合(屏幕上一个像素点多个片元 对其进行多步测试)

透明度测试
深度测试
模板测试

目标缓冲区(输出到帧缓冲区或者一个渲染贴图)
混合
上一阶段输出的片元数据 片元可以理解为屏幕上的一个像素点 每一个片元进行上面操作 通过的保留 同一片元可能对应多个像素点 将通过的多个片元进行一个混合
在这里插入图片描述
整体流程例子
在这里插入图片描述

5.后处理
( 将逐片元操作获得缓冲图像 进行处理 图像处理 模糊 景深高光等)

在这里插入图片描述
备注:应用阶段交给GPU处理 几何 光栅化 逐片元阶段交给CPU处理
GPU特点并行性比较好
当一个物体有多个顶点或者光照需要计算 且只有数据不同 光照着色模型几何运算方式都相同的前提下,可以分配到GPU的不同工作单元上面同时执行,速度更快。

图片参考GPU Rendering Pipeline——GPU渲染流水线简介

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值