技美 百人计划 (图形)1.1渲染流程

技美 百人计划 (图形)

图形 1.1 渲染流水管线2.1数学基础

很早之前就有关注百人计划这个系列的课程,也跟着看到了2.几的教学但是一直没有写笔记,最近看到百人计划已经快更新完毕了,决定从头看一遍然后补补笔记和作业。

整体流程

1,应用阶段:粗粒度剔除,进行渲染设置,准备基本数据,输出到几何阶段(CPU)
2,几何阶段:顶点着色器,曲面细分,几何着色器,顶点裁剪,屏幕映射(GPU)
3,光栅化阶段:三角形(点/线)设置,三角形(点/线)遍历,片段着色器(GPU)
4,逐片源操作:裁剪测试,透明度测试,深度测试,模板测试,混合(常用的分法将逐片源操作分类到(3)光栅化阶段)(GPU)
5,后处理

一、应用阶段(CPU)

1.准备场景需要的数据

场景物体数据
  • 物体变换数据(位置,旋转,缩放)
  • 物体网格数据(顶点位置,UV贴图)
摄像机数据
  • 位置,方向,远近裁剪面
  • 正交/透视
  • 视口比列/尺寸
光源及阴影数据
设置光源
 - 方向光(颜色,方向)
 - 点光源(颜色,位置,范围)
 - 聚光源(颜色,位置,方向,内外圆锥角)
设置阴影
 - 是否需要阴影(判断该光源可见范围内是否有可投射阴影的物体)
 - 阴影参数
    - 对应的光源序号
    - 阴影强度
    - 级联参数
    - 深度偏移(优化相关)
    - 近平面偏移(优化相关)
逐光源绘制阴影贴图
    - 近平面偏移
    - 逐级联
        - 计算当前光源+级联对应的观察矩阵,投影矩阵,以及对应到阴影贴图里的视口区域
        - 绘制到阴影贴图
其他全局数据

2,加速算法,粗粒度剔除

  • 碰撞检测
  • 加速算法
  • 遮挡剔除
    • 可见光裁剪
    • 可见场景物体裁剪
      • 八叉树
      • BSP树
      • K-D树
      • BVH
      • 其他算法

渲染侧设置,准备渲染参数(多参考Unity)

绘制设置
  • 使用着色器
  • 合批方式
绘制物体的顺序
  • 相对相机的距离
  • 材质RenderQueue
  • UICanvas
  • 其他方式等
渲染目标(输出到哪)
  • Framebuffer
  • RenderTexture
渲染模式
  • 前向渲染
  • 延迟渲染

调用Drawcall 输出渲染图元到显存

顶点数据
  • 位置
  • 颜色
  • 法线
  • 纹理UV坐标
  • 其他顶点数据
其他数据
  • MVP变换矩阵
  • 纹理贴图
  • 其他数据

几何阶段(GPU)

顶点着色器

坐标系变换(视图变换)
  • 模型坐标系到世界坐标系(MVP(M))
  • 世界坐标系到观察坐标系(视锥)(MVP(V))
  • 投影变换得到投影坐标系(为2D3D投影做准备)(MVP(P))
  • 正交
  • 透视
顶点矩阵

曲面细分(可选)

  • 外壳着色器
  • 曲面细分
  • 域着色器

几何着色器

  • 基于图元操作

投影

将坐标的的xyz除w(NDC)

  • 正交(w始终为1)
  • 透视(w近小远大)

裁剪

将超出-1~到1的点丢掉(设备坐标系在OpenGL和D3D下面是不一样的,在open GL中,xyz三个维度都是-1到1而D3D中只有xy是-1到1而z是0-1)

  • CVV
  • 正面剔除或背面剔除(可配置)

屏幕映射

  • 从连续到离散
  • 坐标系差异(标准坐标系到屏幕坐标系从0-1到输出设备的长和宽)openGL原点在左下D3D在左上

光栅化阶段

三角形设置(计算图元边界信息)
  • 计算微分、边方程和其他三角形数据
三角形遍历(检查被三角形边界覆盖的像素对所有像素进行插值)
抗锯齿(MSAA)
SSAA
 - 渲染到一个分辨率放大n倍的buffer
 - 对放大n倍的buffer下采样
MSAA
  • 在光栅化阶段
  • 计算多个覆盖样本
FXAA/TXAA
  • 后处理阶段
逐片元操作(GPU)
  • 片元作色
  • 颜色混合
    • 透明度测试
    • 模板测试
    • 深度测试
    • 混合
  • 目标缓冲区

后处理

  • Bloom
  • HDR
  • FXAA
  • Deph of View
  • 边缘检测
  • 径向模糊
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值