Unity渲染流程(底层逻辑)

矩阵

概念

矩阵本质就是一个n*n 的数据,它可以在Unity中可以帮助GameObject进行平移、旋转和缩放。同样在渲染中它最大的作用是可以变换坐标空间。

矩阵在 Shader 中的实际应用

在Unity渲染中,不管是光线计算、顶点计算、像素计算、法线计算,所有的计算有一个公共的规则,就是需要在同一个坐标空间下计算(通常是在世界坐标或者视图空间)

渲染流程

当 GPU 处理顶点时,需要将模型坐标系下的点转换到屏幕空间,步骤是:

模型空间 -> 世界空间 -> 相机空间 -> 裁剪空间 -> 屏幕空间

每次的空间转换都是通过矩阵来计算的。

底层逻辑

接下来,我们了解下在Unity中模型空间坐标到底是如何转换到世界空间坐标的。

首先我们要弄清一些我们已知的信息

  1. 模型空间每个顶点的坐标位置
  2. Unity编辑器中模型的Transform数据,包括position , rotation , scale
  3. 相机的Transform数据,包括 position , rotation
  4. 相机信息,包括Field of View,Aspect,Near,Far等

然后我们要弄清楚我们需要什么信息

  1. 世界空间每个顶点坐标信息
  2. 相机空间每个顶点坐标信息
  3. 裁剪空间每个顶点坐标信息

最后我们就是要弄清楚我们怎么样得到需要的信息

  1. 模型的Transform数据可以得到TRS矩阵,通过矩阵跟模型空间坐标计算得到世界空间的坐标信息
  2. 相机的Transform数据可以得到Camera TR矩阵,(注意下,相机的scarl缩放数据是无用的,不参与矩阵变换计算),同理通过Camera TR矩阵计算得到相机空间坐标信息
  3. 至于得到裁剪空间坐标位置就是完全由Unity编辑器完成,它会通过Field of View,Aspect,Near,Far相机信息,从3D压缩到2D空间中,最终得到了我们裁剪空间坐标信息

裁剪空间 -> 屏幕空间

一开始,我混淆了这两个空间,以为裁剪空间就是屏幕空间,但其实裁剪空间就是Shader代码中的SV_Position 语义下数据信息。

那么从裁剪空间到屏幕空间Unity到底做了哪些操作呢

  1. NDC(标准化设备坐标)
  2. 绘制像素颜色值
  3. 深度测试,检测物体有没有被覆盖
  4. 生成片元,计算插值参数
NDC(标准化设备坐标)

概念:裁剪空间到屏幕空间中比较重要的一步,它的作用是

  1. 给裁剪空间的坐标信息进行归一化,统一成标准立方体
  2. 可以实现近大远小效果,根据距离来实现
  3. 能正确计算插值参数

总结

以上就是Unity渲染空间变换中每一步具体底层实现的逻辑步骤,希望对大家能有所帮助

相关推荐
tealcwu1 天前
【Unity基础】为什么游戏需要物理按键映射?从 Unity Input Manager 到跨引擎输入设计
java·游戏·unity
DolitD2 天前
UE像素流与云渲染技术方案对比分析
3d·云原生·ue5·云计算·图形渲染
tealcwu2 天前
【Unity高级】Unity URP:构建同时支持 2D 与 3D 场景的项目完全指南
3d·unity·游戏引擎
淡海水2 天前
10-01-互操作-C#与C++边界的内存管理
unity·c#·游戏引擎·.netcore·gc
小小数媒成员2 天前
UGUI原理(一)
开发语言·游戏·unity·游戏引擎
暴走约伯2 天前
【VFX工具链源码拆解 04】拯救丢失的绑定:Timeline 一键克隆与层级相对路径重映射算法
unity·c#·游戏引擎·硬件工程
小小数媒成员2 天前
Unity UGUI布局组件(LayoutGroup、ContentSizeFitter、LayoutElement)详解
unity·游戏引擎
tealcwu2 天前
【Unity基础】Unity输入与Time.deltaTime的使用原则
unity·游戏引擎
chen_2273 天前
godot做仪表hmi
游戏引擎·godot
郝学胜-神的一滴3 天前
AI 编程智能体 22:解析器赋能与实战落地全指南
人工智能·程序人生·游戏·unity·游戏引擎