Real-Time-Rendering 矩阵(一)

本文深入探讨了矩阵在图形学中的应用,包括矩阵的基本概念、几何解释、行列式、逆矩阵及其在坐标变换中的作用。文章以《3D图形基础:图形与游戏开发》及《Real-Time-Rendering》为理论基础,适合对图形学感兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        接下来就是矩阵了。图形学中矩阵作为最常用的工具涉及的知识点也非常多。本文以《3D图形基础:图形与游戏开发》及《Real-Time-Rendering》书中对矩阵的知识点的讲述为基础,先做一篇矩阵概述即基础知识。

一、矩阵的数学定义

        矩阵一般用来描述两个坐标系统间的关系。通过定义一种运算将一个坐标系中的向量转换到另一个坐标系中。

        行数和列数相同的矩阵称为方阵。而本文即后续主要讨论4x4一下的方阵。

        方阵的对角线元素即元素的行号和列号相同的元素。其他元素为非对角线元素。如果所有非对角线元素都为0,则该矩阵称为对角矩阵。如:

\begin{bmatrix} 1 & 0 & 0\\ 0 & 5 & 0\\ 0 & 0 & 6 \end{bmatrix}

        若一个对角矩阵的对角线元素皆为1,称为单元矩阵。如:

\begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{bmatrix}

        矩阵的转置即该矩阵沿矩阵的对角线翻折,或使行向量变为列向量,列向量变为行向量。如:

\begin{bmatrix} 1 & 2 & 3\\ 4 & 5 & 6\\ 7 & 8 & 9 \end{bmatrix} 转置后 \begin{bmatrix} 1 & 2 & 3\\ 4 & 5 & 6\\ 7 & 8 & 9 \end{bmatrix} 转置后为\begin{bmatrix} 1 & 4 & 7\\ 2 & 5 & 8\\ 3 & 6 & 9 \end{bmatrix}

        矩阵的转置的转置为原矩阵。任意对角矩阵转置都与原矩阵相同。

        矩阵与标量相乘即各元素与标量相乘。

        矩阵与矩阵相乘。首先矩阵与矩阵相乘必须满足前者的列数等于后者的行数。如3x4的矩阵乘4x6的矩阵会得到3x6的新矩阵。矩阵相乘的公式如下,简单来说即结果矩阵中的任意元素Cij为矩阵A中第i行元素集合与矩阵B中第j行元素集合相乘后的和。

        \mathbf{c}_i_j = \sum_{k=1}^{n}\mathbf{a}_i_k\mathbf{b}_k_j

        矩阵乘法不满足交换律,但满足结合律。矩阵积的转置等同于各矩阵转置的反序乘积。

        (\mathbf{AB})^{T} = \mathbf{B}^{T}\mathbf{A}^{T}

 

二、矩阵的几何解释

        “不幸的是,没有人能告诉您矩阵像什么——您必须自己去感受”。引用黑客帝国的一句话。下面我们去感受下矩阵是什么。

        一般来说,方阵可以描述任何向量的线性变化。如旋转、缩放、投影、镜像、仿射。

        下面我们描述下向量通过矩阵的变换。

        根据向量加法可以如下拆分一个向量:

        \mathbf{v} = [x\: y\: z]^{T} = [x\: 0\: 0]^{T} + [ 0\: y\: 0]^{T} + [0\: 0\:z]^{T}

        \mathbf{v} = [x\: y\: z]^{T} = x[1\: 0\: 0]^{T} + y[ 0\: 1\: 0]^{T} + z[0\: 0\:1]^{T}

        将上式和3x3的单元矩阵与向量v相乘的运算相比较。很容易发现计算过程完全相同。

        如果我们把如上指向+x、+y、+z方向的单位向量定义为pqr。那么向量v就被表示成向量pqr的线性变换了。向量pqr被称为基向量。然而一个坐标系可以用任意三个基向量定义。要求pqr不在一个平面即线性无关。已pqr构成3x3矩阵M

        \mathbf{M} = [\mathbf{p}\: \mathbf{q}\: \mathbf{r}]^{T} = \begin{bmatrix} \mathbf{p}_{x} & \mathbf{p}_{y} &\mathbf{p}_{z} \\ \mathbf{q}_{x} & \mathbf{q}_{y} & \mathbf{q}_{z}\\ \mathbf{r}_{x} &\mathbf{r}_{y} &\mathbf{r}_{z} \end{bmatrix}

        将矩阵M与向量v相乘可得

        \begin{bmatrix} \mathbf{p}_{x} & \mathbf{p}_{y} &\mathbf{p}_{z} \\ \mathbf{q}_{x} & \mathbf{q}_{y} & \mathbf{q}_{z}\\ \mathbf{r}_{x} &\mathbf{r}_{y} &\mathbf{r}_{z} \end{bmatrix}[x\: y\: z]^{T} = \begin{bmatrix} x\mathbf{p}_{x} + y\mathbf{q}_{x} + z\mathbf{r}_{x}\\ x\mathbf{p}_{y} + y\mathbf{q}_{y} + z\mathbf{r}_{y}\\ x\mathbf{p}_{z} + y\mathbf{q}_{z} + z\mathbf{r}_{z} \end{bmatrix} = x\mathbf{p} + y\mathbf{q} + z\mathbf{r}

        在阐述下列定义前,我们需要先做一个约定。通过前面的学习我们知道矩阵相乘或矩阵与向量相乘不满足交换律。所以我们需要定义好向量表示的方法为列向量。因此当向量与矩阵相乘时需要左乘矩阵。这与unity常规的约定一致。

        我们发现上式计算与前面计算转换后的v一致。引申出:

        如果把矩阵的列解释为坐标系的基向量。那么左乘该矩阵就相当于执行了一次坐标转换。若有aM = b,我们可以说Ma转换到b

        这样我们就拥有一种反向构建矩阵的可能。即计算一个期望的变化(旋转、缩放等)后的坐标系的基向量。通过基向量获取矩阵!

三、矩阵的行列式

        方阵M的行列式记作|M|。

        2x2阶矩阵行列式定义:

        \left | \mathbf{M} \right | = \begin{vmatrix} m_{11} &m_{12} \\ m_{21} & m_{22} \end{vmatrix} = m_{11} m_{22} - m_{21} m_{22}

        3x3阶矩阵行列式定义:

        \left | \mathbf{M} \right | = \begin{vmatrix} m_{11} &m_{12} &m_{13} \\ m_{21}& m_{22} & m_{23}\\ m_{31} & m_{32} & m_{33} \end{vmatrix} = m_{11}m_{22}m_{33} + m_{12}m_{23}m_{31} + m_{13}m_{21}m_{32} - m_{13}m_{22}m_{31} - m_{12}m_{21}m_{33} - m_{11}m_{23}m_{32}

        对于任意矩阵。我们需要先引申两个概念:

        假设矩阵M有r行c列。\mathbf{M}^{​{ij}}表示从M中除去第i行和第j列剩下的矩阵。称其为矩阵M的余子式。

        对于方阵M,给定行、列元素的代数余子式等于相应余子式的有符号行列式。如下:

        c_{ij} = (-1)^{i+j}|\mathbf{M}^{ij}|

        通过代数余子式引申出矩阵的行列式公式:

        首先从矩阵中任意选一行或一列,对该行或列的每个元素都乘以对应的代数余子式。这些乘积的和就是矩阵的行列式。如下就是分别选一行,如行i。或选一列,如列j。

        |\mathbf{M}| = \sum_{j = 1}^{n}m_{ij}c_{ij} = \sum_{j = 1}^{n}(-1)^{i+j}|\mathbf{M}^{ij}|

        |\mathbf{M}| = \sum_{i = 1}^{n}m_{ij}c_{ij} = \sum_{i = 1}^{n}(-1)^{i+j}|\mathbf{M}^{ij}|

        例如我们算一个4x4矩阵的行列式。选取第一行。

        \begin{vmatrix} m_{11} & m_{12} & m_{13} & m_{14}\\ m_{21} & m_{22} & m_{23} & m_{24}\\ m_{31} & m_{32} & m_{33} & m_{34}\\ m_{41} & m_{42} & m_{43} & m_{44} \end{vmatrix} = m_{11}\begin{bmatrix} m_{22} & m_{23} & m_{24}\\ m_{32} & m_{33} & m_{34}\\ m_{42} & m_{43} & m_{44} \end{bmatrix} - m_{12}\begin{bmatrix} m_{21} & m_{23} & m_{24}\\ m_{31} & m_{33} & m_{34}\\ m_{41} & m_{43} & m_{44} \end{bmatrix}

                                                +m_{13}\begin{bmatrix} m_{21} & m_{22} & m_{24}\\ m_{31} & m_{32} & m_{34}\\ m_{41} & m_{42} & m_{44} \end{bmatrix} - m_{14}\begin{bmatrix} m_{21} & m_{22} & m_{23}\\ m_{31} & m_{32} & m_{33}\\ m_{41} & m_{42} & m_{43} \end{bmatrix}

        再将3x3矩阵行列的运算公式带入即可。

        显然高阶行列式计算的复杂度呈指数递增。我们可以使用“主元选择的计算方式”来优化对于高阶矩阵行列式计算的效率。

        行列式有以下重要性质:

        1.矩阵积的 行列式等于矩阵行列式的积。

        2.矩阵转置的行列式等于原矩阵行列式。

        3.矩阵任意行或列全为0,则行列式为0,。

        4.交换矩阵的任意两行或两列,行列式变负。

        5.任意行或列的非零积加到另一行或列不会改变行列式的值。

四、矩阵的逆

        方阵M的逆,记作\mathbf{M}^{-1},当两个矩阵相乘,结果为单位矩阵。即:

        \mathbf{M}(\mathbf{M}^{-1}) = \mathbf{M}^{-1} \mathbf{M} = \mathbf{I}

        并非所有矩阵都有逆。例如一个矩阵某行或列全为0,那么用该矩阵乘以任意矩阵都会得到零矩阵。我们称该矩阵可逆或非奇异。所以区分一个矩阵是否可逆或使非奇异矩阵,只需检测该矩阵的行列式是否为零。

        M的标准伴随矩阵记作“adj M”。定义为M的所有代数余子式矩阵的转置矩阵。如:

        \mathbf{M} = \begin{bmatrix} 1 & 2 & 3\\ 4 & 5 & 6\\ 7 & 8 & 9 \end{bmatrix}

        分别计算M的代数余子式:

        c_{11} = +\begin{bmatrix} 5 & 6\\ 8 & 9 \end{bmatrix} = -3      c_{12} = +\begin{bmatrix} 4 & 6\\ 7 & 9 \end{bmatrix} = -6      c_{13} = +\begin{bmatrix} 4 & 5\\ 7 & 8 \end{bmatrix} = -3

        c_{21} = +\begin{bmatrix} 2 & 3\\ 8 & 9 \end{bmatrix} = -6      c_{22} = +\begin{bmatrix} 1 & 3\\ 7 & 9 \end{bmatrix} = -12    c_{23} = +\begin{bmatrix} 1 & 2\\ 7 & 8 \end{bmatrix} = -6

        c_{31} = +\begin{bmatrix} 2 & 3\\ 5 & 6 \end{bmatrix} = -3      c_{32} = +\begin{bmatrix} 1 & 3\\ 4 & 5 \end{bmatrix} = -7      c_{33} = +\begin{bmatrix} 1 & 2\\ 4 & 5 \end{bmatrix} = -3

        可得到M的 伴随矩阵

        adj\mathbf{M} = \begin{bmatrix} c_{11} & c_{12} & c_{13}\\ c_{21} & c_{22} & c_{23}\\ c_{31} & c_{32} & c_{33} \end{bmatrix}^{T} = \begin{bmatrix} -3 & -6 & -3\\ -6 & -12 & -6\\ -3 & -7 & -3 \end{bmatrix}^{T}

        矩阵的逆为矩阵M的伴随矩阵除以M的行列式,即:

        \mathbf{M}^{-1} = adj\mathbf{M}/|\mathbf{M}|

        同样矩阵的逆的计算也可以通过高斯消元法等来计算从而节省计算量。但使用标准伴随矩阵可以提供无分支实现。非常适合GPU这样的并行能力强分支计算效率低的硬件。所以在不同情境结合矩阵的大小及特殊性选择计算方式才是最优解。

        矩阵的逆同样有一些重要的性质:

        1.如果M是非奇异矩阵,则该矩阵的逆的逆等于原矩阵。

        2.单位矩阵的逆等于它本身。

        3.矩阵转置的逆等于其的逆的转置。

        4.矩阵乘积的逆等于矩阵的逆的相反顺序的乘积。

### 4D Gaussian Splatting 技术原理 4D Gaussian Splatting 是种先进的动态场景重建和渲染技术,它利用高斯分布函数来表示动态物体的空间位置和时间变化。这种方法的核心在于将每帧的点云数据转换为组参数化高斯核,这些高斯核可以高效地存储并支持快速渲染[^1]。 具体来说,每个高斯核由其均值向量 \(\mu\) 和协方差矩阵 \(C\) 定义,其中均值向量描述了粒子的位置,而协方差矩阵则定义了粒子形状以及方向的信息。这种表示形式不仅能够捕捉静态几何结构,还能有效表达随时间变化的动力学特性[^3]。 #### 高效的时间维度扩展 为了适应动态场景的需求,4D Gaussian Splatting 将传统的三维空间坐标扩展至四维时空域 (x, y, z, t),从而允许对连续时间段内的对象状态进行建模。通过引入额外的时间轴变量,算法能够在不同时刻之间建立平滑过渡关系,进而实现高质量的动态效果再现[^2]。 --- ### 实时动态场景渲染的应用 这项技术创新性地应用于实时动态场景渲染领域,在多个方面展现出显著优势: 1. **高性能计算能力** 利用 GPU 加速机制配合稀疏张量操作,使得即使面对复杂的大规模环境也能维持流畅体验。相比传统多边形网格或者体素化方案而言,采用基于概率密度估计的方法大幅降低了内存占用率的同时提升了处理效率[^4]。 2. **灵活性与可控性增强** DreamGaussian4D 框架进步拓展了基础理论成果的实际应用场景范围。例如,它可以轻松完成从单幅图片预测整个动作序列的任务,并且允许用户自定义调整某些特定部位的动作幅度大小等个性化需求。 3. **跨平台兼容性强** 输出结果可以直接导入主流游戏引擎如 Unity 或 Unreal Engine 中作为资产文件使用,无需任何额外转换步骤即可无缝集成到现有工作流当中去。 ```python import numpy as np def gaussian_splatting(mean_vector, covariance_matrix): """ Simulates a basic Gaussian splatting operation. Args: mean_vector (np.ndarray): Mean vector of the Gaussian distribution. covariance_matrix (np.ndarray): Covariance matrix defining shape and orientation. Returns: float: Probability density at given point based on input parameters. """ det_cov = np.linalg.det(covariance_matrix) inv_cov = np.linalg.inv(covariance_matrix) def compute_probability(point): diff = point - mean_vector exponent_term = -0.5 * np.dot(diff.T, np.dot(inv_cov, diff)) normalization_factor = ((2 * np.pi)**(len(mean_vector)/2)) * (det_cov**(1/2)) return np.exp(exponent_term) / normalization_factor return compute_probability ``` 上述代码片段展示了个简单的高斯溅射模拟过程,帮助理解如何根据给定的平均矢量和协方差矩阵计算某点处的概率密度值。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值