Unity 学习路径

Unity学习—渲染知识基础

2020-02-10  本文已影响0人  Warl_G

关于Unity 渲染概念的基本知识,和部分技术名词解释

本文原地址:Unity学习—渲染知识基础

名词解释

渲染过程

渲染阶段

  1. 应用阶段(CPU)

    • CPU 负责决定哪些对象被渲染,哪些被剔除,从硬盘加载到内存再到显存

    • 设置对象渲染状态,即材质纹理着色器

    • 输出渲染图元,向 GPU 发送 Draw Call

  2. 几何阶段(GPU)

    • 顶点着色器、曲面细分着色器、几何着色器分别对图元做不同处理

    • 裁剪多余图元

    • 映射三维坐标到屏幕坐标

  3. 光栅化阶段(GPU)

    • 三角形设置: 计算屏幕坐标系顶点数据,获取光栅化网格数据

    • 三角形遍历: 对三角形网格覆盖像素生成片元,插值计算片元状态

    • 片元着色器 处理片元输出像素

    • 可见性测试 舍弃测试不通过的片元

    • 将像素缓冲区的像素颜色经后缓冲区绘制,再与前缓冲区交换并刷新显示在屏幕上

渲染操作

CPU
  1. 检查场景,判断渲染对象,如:是否在相机视野内。不渲染物体剔除(Cull)

  2. 收集排序渲染物体的信息放入 Draw Call 指令

  3. 为每一个 Draw Call 创建 Batch,Batch 也包含 Draw Call 以外的数据

    1. CPU发送命令(SetPass Call)GPU更改渲染相关变量,称为渲染状态(Render State),仅在需要更改时发送命令

    2. CPU发送 Draw Call 给GPU,Draw Call 指示 GPU 使用最近发送的 SetPass Call 提供的设置渲染网格

    3. 某些情况一个 Batch 需要多个 Pass,Pass 为 Shader 中的一段代码,一个新的 Pass 需要对 Render State 进行变更。对于 Batch 中的每一个 Pass,CPU 将发送一个新的SetPass call 并且再次发送 Draw Call

GPU
  1. 依据 CPU 指令顺序处理渲染

  2. 若当前为 SetPass Call,则更新 Render State

  3. 若为 Draw Call,GPU 依据 Shader 不同段落分步有序渲染网格

线程
  1. Main Thread 大部分 CPU 任务,一些渲染任务

  2. Render Thread 向 GPU 发送命令

  3. Worker Thread 每个线程用于独立任务如剔除操作

  4. 并非所有平台都支持多线程渲染

  5. CPU 和 GPU 之间通过命令缓冲区来实现并行处理

其他

网格 Mesh

参考 参考

Mesh组成

  1. 顶点坐标 Vertices 顶点组成三角形,确定图形渲染位置,网格的基本组成部分

  2. 三角形序列 Triangle 三个顶点组成一个三角形,三个顶点一组,存入一个一维数组,顶点顺序决定z轴方向,顺指针表正面,逆时针表背面,Unity 默认只渲染正面

  3. 顶点法线 Normal 法线向量垂直于三角面,若一顶点有多个面,则有多个法线向量,用于计算光照等(利用光照方向向量与法线向量点积值确定光照渲染强度)

  4. 纹理坐标 uv uv 数组数量必须与顶点数量一致 uv 为两个坐标轴,u轴水平左向右,v轴垂直上向下,一般是0-1,定义贴图每个点的位置信息 GPU 对贴图采样,分为u*v个颜色,由各个顶点的纹理坐标决定使用贴图的哪块颜色,其余点采用插值决定

参考

Unity基础原理 - 3D模型渲染

unity shader:渲染流程

Unity性能优化(三)-图形渲染优化

《Unity Shader入门精要》

上一篇下一篇

猜你喜欢

热点阅读