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

相关推荐
魔士于安4 天前
unity 丑陋哥布林 哥布林有humannoid 动画没 带动画
unity·游戏引擎·材质·贴图·模型
小贺儿开发5 天前
Unity 家居视频遥控(细节优化)
科技·unity·程序员·udp·视频·工具·通信
淡海水5 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Cx330❀5 天前
Qt 常用控件属性与底层机制详解:从窗口半透明、浮点数陷阱到 QSS 与焦点策略
qt·ui·图形渲染
小小数媒成员5 天前
UGUI 性能优化(详细,全,深入)
开发语言·unity·游戏引擎
Cx330❀5 天前
Qt 常用 UI 控件详解:从QPushButton到QLabel 核心用法解析
qt·ui·图形渲染
林川~016 天前
Unity新输入系统使用笔记
unity·input system
小贺儿开发6 天前
Unity 结合百度AI开放平台 手写文字识别
人工智能·科技·学习·unity·云服务·文字识别·手写文字
goujunwe6 天前
GEO 评估方法:如何自测你的内容,会不会被 AI 引用
搜索引擎·网络安全·游戏引擎·全文检索·中文分词
林川~017 天前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具