图形学之Unity渲染管线流程分析

作者:小紫苏 时间:2023-09-25 05:27:36 

下图是《Unity Shader 入门精要》一书中的渲染流程图;

图形学之Unity渲染管线流程分析

ApplicationStage阶段:准备场景信息(视景体,摄像机参数)、粗粒度剔除、定义每个模型的渲染命令(材质,shader)——由开发者定义,不做讨论;

GemetryStage阶段:顶点着色器、曲面细分着色器、几何着色器、裁剪、屏幕映射;

RasterizerStage阶段:三角形设置遍历,片元着色器、逐片元操作;

每个阶段具体操作如下图(虚线框是可选阶段):

图形学之Unity渲染管线流程分析

模型空间——矩阵变换——齐次裁剪空间——透视除法——NDC标准设备坐标——屏幕映射

齐次裁剪空间是视景体空间(台体);

CVV:标准视体-也就是NDC坐标系对应的空间;

透视除法:顶点坐标除以w分量,将当前z深度所在的截面缩放为(2,2,2)的截面坐标;所以w分量记录了z深度信息;

硬件做透视除法获得NDC归一化设备坐标——再经过屏幕映射获得屏幕坐标系下顶点坐标;

Unity使用OpenGL的NDC,z分量在[-1,1];

OpenGL和DirectX差异

NDC空间——OpenGL为[-1,1],DirectX为[0,1],深度z范围不同;

窗口坐标系——DirectX左上角原点,OpenGL左下角原点;

投影平面——DirectX投影平面就是视景体近截面,OpenGL有视平面;

左右手坐标系——DirectX左手,OpenGL右手,叉乘顺序;

问题:

为什么片元不叫像素?

片元是很多状态的集合,记录了该像素的屏幕坐标,深度信息,法线,UV等;

DrawCall为什么会影响性能?

DrawCall是CPU向GPU添加渲染命令的过程,过程会由CPU向GPU发送数据(模型信息),DrawCall的次数越多CPU消耗性能就越大,DrawCall次数过多会导致每一帧CPU来不及发送全部数据给GPU渲染;

GPU有一个命令缓存区(Command Buffer),CPU的渲染命令都会存储在这里,GPU从命令缓存区依次执行渲染命令;

两种渲染命令:渲染模型(CPU提交模型信息也就是DrawCall)和改变渲染状态(着色器纹理状态改变,更耗时);

一般情况都是GPU渲染完成等待CPU发渲染命令;

来源:https://www.cnblogs.com/littleperilla/p/15680654.html

标签:Unity,渲染管线
0
投稿

猜你喜欢

  • 基于Elasticsearch5.4的常见问题总结

    2022-07-15 15:02:49
  • 使用Android studio创建的AIDL编译时找不到自定义类的解决办法

    2023-06-23 10:59:41
  • Springboot全局异常捕获及try catch区别解析

    2022-03-02 17:44:07
  • SpringBoot深入浅出分析初始化器

    2022-07-06 09:05:59
  • Java实现整数分解质因数的方法示例

    2022-01-27 23:10:04
  • 详解C# Socket异步通信实例

    2022-08-27 14:27:22
  • JAVA swing布局管理器实例解析

    2022-01-11 05:05:15
  • 程序员最喜欢的ThreadLocal使用姿势

    2022-10-22 21:14:55
  • 浅谈Android的Lifecycle源码分析

    2023-03-08 21:42:04
  • Java算法之递归算法计算阶乘

    2021-06-30 14:10:56
  • Springboot项目打war包docker包找不到resource下静态资源的解决方案

    2022-01-01 07:03:55
  • 磁盘配额的wmi版本(C#)

    2022-07-31 17:55:17
  • Redis在springboot中的使用教程

    2021-10-02 18:10:46
  • springboot集成本地缓存Caffeine的三种使用方式(小结)

    2021-06-29 07:00:40
  • Java编程实现打印螺旋矩阵实例代码

    2021-10-16 19:15:14
  • Java同步锁Synchronized底层源码和原理剖析(推荐)

    2023-09-25 08:36:22
  • C#实现封面图片生成器的示例代码

    2023-05-15 11:05:58
  • java调用ffmpeg实现转换视频

    2022-08-25 15:21:04
  • Mybatis多表关联查询的实现(DEMO)

    2022-05-03 14:50:03
  • C#实现文件上传以及多文件上传功能

    2023-06-19 15:36:17
  • asp之家 软件编程 m.aspxhome.com