当前的模型矩阵定义为什么?如果将着色器应用于3D对象或相机的渲染纹理,它有什么区别?

问题描述

我正在尝试以单位计算深度,而单位的ml-image-synthesis库支持渲染深度纹理,但我想获取不会渲染到屏幕上的虚拟点的深度。 https://bitbucket.org/Unity-Technologies/ml-imagesynthesis/src/master/Assets/ImageSynthesis/Shaders/UberReplacement.shader

我已经拼凑过它使用COmpuTE_DEPTH_01将视线移至更深的深度,并通过使用预构建函数将其转换为近至远的距离。而且我已经完成了一些有关使用transform.localtoworldmatrix生成模型矩阵并使用Camera.worldToCameraMatrix查看矩阵的基本测试。但是,如果我要复制定义为 -(mul( UNITY_MATRIX_MV,v.vertex ).z * _ProjectionParams.w)的COmpuTE_DEPTH_01,则需要帮助确定当前模型和视图模型,因为UNITY_MATRIX_MVcurrent model * view matrix,而且我不知道当前模型是否引用到相机的当前模型或相机的视图当前模型中的对象。

解决方法

当前模型引用场景中正在渲染的当前对象。

在一个非常简单的带有照相机,光源和立方体的Unity项目中,立方体在世界中的位置就是模型矩阵。在具有许多对象的更复杂场景中,模型矩阵将是当前正在转换的任何对象的转换矩阵。

因此,模型矩阵,摄影机矩阵和视图矩阵将模型的顶点位置从其自身的本地坐标转换为世界坐标(模型矩阵),然后转换到摄影机空间(视图矩阵),最后通过“摄影机”进行投影镜头”并放在一个平面上(投影矩阵)。