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渲染空间变换中每一步具体底层实现的逻辑步骤,希望对大家能有所帮助

相关推荐
KindSuper_liu4 小时前
Unity 游戏网络基础:从 TCP、UDP 到 HTTP、TLS 与 Best HTTP
网络·游戏·unity
weixin_404679317 小时前
godot + vscode ai开发
ide·vscode·编辑器·游戏引擎·godot
还是大剑师兰特1 天前
Unity3D(Unity)完整详细介绍
unity·游戏引擎
ellis19701 天前
u3d插件xLua[七]例6 Coroutine
unity
还是大剑师兰特1 天前
Unity 从零搭建简易3D场景(新手分步教程)
3d·unity·游戏引擎
神码编程1 天前
【Unity】TankBattle联机坦克大战(三)创建关卡(生成地块)
unity·游戏引擎·帧同步·坦克大战
淡海水1 天前
C#与常用数据结构源码剖析-全篇导览
开发语言·数据结构·unity·面试·职场和发展·c#
SNAKEpc121381 天前
OpenGL(十三)- Mip贴图
c语言·c++·图形渲染·贴图
玖玥拾2 天前
Unity3D RPG 入门项目(四)背包拖拽、物品悬浮提示、项目开发思维
3d·unity·游戏引擎
SNAKEpc121382 天前
OpenGL(十五)- 着色器语言GLSL
c语言·c++·线性代数·算法·矩阵·图形渲染·着色器