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

相关推荐
孟无岐3 小时前
【Laya】Laya 类使用说明
typescript·游戏引擎·游戏程序·laya
在路上看风景5 小时前
1.2 Unity资源分类
unity·游戏引擎
one named slash5 小时前
BMFont在Unity中生成艺术字
unity·游戏引擎
颜早早7 小时前
Unreal Engine MobileFSR插件实现机制分析
图形渲染·gpu·unreal engine 5·graphic
郝学胜-神的一滴7 小时前
图形学中的纹理映射问题:摩尔纹与毛刺的深度解析
c++·程序人生·unity·游戏引擎·图形渲染·unreal engine
在路上看风景7 小时前
10. CPU-GPU协作渲染
unity
程序员agions7 小时前
Unity 游戏开发邪修秘籍:从入门到被策划追杀的艺术
unity·cocoa·lucene
JIes__8 小时前
Unity(一)——场景切换、退出游戏、鼠标隐藏锁定...
unity·游戏引擎
NIKITAshao18 小时前
Unity URP Volume组件详解(笔记)
unity·游戏引擎
lingxiao1688821 小时前
WebApi详解+Unity注入--下篇:Unity注入
unity·c#·wpf