【技术美术】个人引擎内的投影矩阵 【技术美术】个人引擎内的投影矩阵 Unity 中官推的投影矩阵风格是 OpenGL,这可以直接从相机组件中拿到,但在DX平台,Unity传入着色器时实际上会将该矩阵转为 DX 风格。 DX 风格没必要了解,而且此处也不是 Unity 中使用的 DX 风格,而是个人自制游戏引擎时做的推导文章。 此处采用的NDC空间为: x:从左到右 (-1,1) y:从下到上 (-1,1) z:从前到后 (0,1 2025-12-23 技术堆栈 > 技术美术 > 空间矩阵
【技术美术】平面反射 【技术美术】平面反射 如上图所示,实现平面反射说到底就是要实现,P 采样到 A,Q 采样到 B。A~B显然是需要渲染到纹理以供采样的,实现该过程有两种方法: 最简单的方式是放一个镜像的摄像机 E’ 去渲染 A,B。 更高级的做法是E不动,但渲染每个物体的镜像(A’,B’),因此需要给每个物体做一步镜像变换。 镜像矩阵推导 镜像矩阵的作用如上,使顶点相对平面镜像,即 P′=MPP' 2025-12-23 技术堆栈 > 技术美术 > 空间矩阵
【技术美术】TRS矩阵 【技术美术】TRS矩阵 TRS 矩阵是最常用的变换矩阵,其本质就是平移、旋转、缩放矩阵的复合,其复合顺序为: 平移矩阵∗旋转矩阵∗缩放矩阵平移矩阵 * 旋转矩阵 * 缩放矩阵平移矩阵∗旋转矩阵∗缩放矩阵 本文 TRS 矩阵以行业主流的左手坐标系为准,则: 平移矩阵(Translate) [100x010y001z0001] \begin{bmatrix} 1&0&0&x\\ 2025-12-23 技术堆栈 > 技术美术 > 空间矩阵
【质点弹簧】Unity 版示例 【质点弹簧】Unity 版示例 该Demo实现自该教程【质点弹簧】如何做一个不会崩溃的质点弹簧 急速搭建的 Unity 版本的质点弹簧 Demo,不要在意帧率,这个 Demo 没有做任何优化。整个 Demo 就一个文件,直接在 Unity 创建里创建一个名为“MassSpring”的空脚本将下面代码替换进去,然后随便拖到一个场景物体上即可。 1234567891011121314151617181 2025-12-23 技术堆栈 > 技术美术 > 仿真模拟 > 质点弹簧
【质点弹簧】如何做一个不会崩溃的质点弹簧 【质点弹簧】如何做一个不会崩溃的质点弹簧 演示视频见:https://www.bilibili.com/video/BV15vPie8EEd/ 在绳索、布料、软体等软性物质的模拟上,质点弹簧绝对是最流行的一种物理模型,相关资料在网上非常多。但无一例外的都绕不过一个痛点:动不动就崩溃给你看。那有没有一种能实现绝对不会崩溃的质点弹簧模型,或者说我们能始终确切的知道它崩溃的边缘在哪里,而不是和传统质点弹 2025-12-23 技术堆栈 > 技术美术 > 仿真模拟 > 质点弹簧
【质点弹簧】质点位置积分 【质点弹簧】质点位置积分 在物理模拟中,物理系统每帧都需要根据粒子当前位置,速度,加速度等信息计算粒子下个阶段相关信息,而这种一点一点计算位置的操作被称作对粒子位置的积分。 具体而言实现这种积分效果的有两种方法: 欧拉积分法 https://zhuanlan.zhihu.com/p/355170943 欧拉积分法是根据现实中的物理公式来求解下一帧位置的,具体而言分三种: 显式欧拉方法(完全根据当 2025-12-23 技术堆栈 > 技术美术 > 仿真模拟 > 质点弹簧
【基于物理的渲染(1)】反射率方程 【基于物理的渲染(1)】反射率方程 能量守恒 光是一种能量,遵循的能量守恒原则,物体表面反射光的总量总是小于等于入射光的总量。 微表面模型 微表面模型是指采用了微分的思想看待物体表面。无论表面是粗糙还是光滑,只要从足够小的尺度下观察,它们都是由一堆微小镜面构成的,因此物体表面的每一点都可以看作采用了相同的光照计算公式。因此我们在计算光照时,只需要考虑单个微表面的实现即可。 注意微表面不是一个单个具 2025-12-23 技术堆栈 > 技术美术 > 光照模型 > 基于物理的渲染
【基于物理的渲染(2)】Cook-Torrance 【基于物理的渲染(2)】Cook-Torrance BRDF BRDF 直译为双向散射分布函数,是一种解释光反射强度的模型。双向散射是指其将反射光描述为由镜射光和漫射光两种。基于物理的 BRDF 说明该公式不能是传统的经验模型,而是遵循各种物理现象而设计的模型。 漫射光 漫射光是指光线射入物体内部,在内部多次反弹后返回的光,这类光容易被物体吸收,且反射的方向无序,因此反光将均匀的分布在照射区域。 2025-12-23 技术堆栈 > 技术美术 > 光照模型 > 基于物理的渲染
【基于物理的渲染(3)】基于图片的渲染 【基于物理的渲染(3)】基于图片的渲染 上述 CookTorrance 公式中还缺少环境光的处理,在 PBR 中环境光是用 IBL 实现的。 IBL 中由于光来自一个完整的球面,因此需要对球面积分计算,但这样工作量太大了。考虑到物体表面受到的环境光不会改变,因此可以提前预处理,将部分光照提前计算存放到环境贴图中。因此对于间接光,不能直接使用直接光的反射率方程。 在Unity中:预计算的漫射光使用S 2025-12-23 技术堆栈 > 技术美术 > 光照模型 > 基于物理的渲染
【Unity】加载纹理和网格数据 【Unity】加载纹理和网格数据 Unity 使用同步和异步两种方式加载纹理和网格到 GPU,如果资源支持,则 Unity 将默认使用异步加载。同步加载会导致游戏卡顿,但异步则不会,所以考虑性能优化,应尽可能保证资源满足异步加载条件。 工作原理 资源数据由“元数据”(标头数据)和“像素顶点数据”(二进制数据)组成。当资源被要求加载时,其中标头数据必须立即被加载,但二进制数据实际可以在后续慢慢加载。 2024-05-31 框架使用 > Unity > Unity文档笔记 > 图形