Foundation 施工笔记 【4】- 网格数据量化及压缩

Preface 对网格数据而言,顶点数可以很多很多:如果存储每个顶点的开销能够减少,显然对GPU显存和磁盘存储压力而言是非常好的事情。以下介绍目前Editor内存在的一些量化操作。glTF中的顶点可以有以下属性(参见 Spec): Name Accessor Type(s) Component Type(s) Description POSITION VEC3 float Unitless XYZ vertex positions NORMAL VEC3 float Normalized XYZ vertex normals TANGENT VEC4 float XYZW vertex tangents where the XYZ portion is normalized, and the W component is a sign value (-1 or +1) indicating handedness of the tangent basis TEXCOORD_n VEC2 float unsigned byte normalized unsigned short normalized ST texture coordinates COLOR_n VEC3 VEC4 float unsigned byte normalized unsigned short normalized RGB or RGBA vertex color linear multiplier JOINTS_n VEC4 unsigned byte unsigned short See Skinned Mesh Attributes WEIGHTS_n VEC4 float unsigned byte normalized unsigned short normalized See Skinned Mesh Attributes 下面为完整精度的顶点struct,足矣表示glTF标准中的任何非蒙皮(不看JOINTS, WEIGHTS)网格(vertex color暂时忽略)。...

December 24, 2025 · 12 min · 2457 words · mos9527

Foundation 施工笔记 【2】- GPU-Driven 管线与剔除

Preface 迄今为止,Editor渲染方面实现仅处理了单个 Mesh 的最简单情况。接下来我们将正式引入场景加载。 在 CPU 上表达物体间关系的方案诸多——本质上也都是为实现某种Scene Graph。同时,本篇体裁内的最终目标仅仅是为了渲染 GLTF 场景。此后内容也将围绕其结构进行展开。 坐标系细节 我们约定使用右手系坐标系统。即在相机视角,$+X$为右,$+Y$为上,$-Z$为前。这也是Blender等的默认坐标系($+Z$指向相机“内”) 透视及视角矩阵 注:$f$与$a$ $$ f = \frac{1}{\tan(fov_y / 2)},a = \text{宽高比} $$ 我们想要让$z$轴上,相机处 $ z= z_{n}$ 的NDC为 $z_{ndc} = 1$; 无穷远,或一定$z_{f}$ 处 $z_{ndc} = 0$ 理由是充分的。简要地,$[1,0]$映射可大幅改善near plane附件深度精度。详细解释及动机还请参考: https://mynameismjp.wordpress.com/2010/03/22/attack-of-the-depth-buffer/ https://developer.nvidia.com/content/depth-precision-visualized 下面直接给出改配置对应透视矩阵,可由代入计算$z=z_n,z_{NDC}=1$, $z = z_f, z_{NDC} = 0$易得 $$ P = \begin{bmatrix} \frac{f}{a} & 0 & 0 & 0 \newline 0 & f & 0 & 0 \newline 0 & 0 & \frac{z_n}{z_f - z_n} & \frac{z_f z_n}{z_f - z_n} \newline 0 & 0 & -1 & 0 \end{bmatrix} $$...

December 24, 2025 · 10 min · 1969 words · mos9527

Foundation 施工笔记 【1】- Mesh Shader 自适应 LOD

Preface 预谋多时而虽迟但到的 Foundation 博文系列。 特别中二的名字以外,项(天)目(坑)并非最近开始的工作(开始于约莫 ~2023)。期间诸多内容,如各类无锁 (Lock-free) 数据结构、RHI、RenderGraph细节、Shader 反射等,也都是实现期间相当想留一笔的工作… 嘛、反正也是后期也不得不记的事,不如梭哈开篇为好——那么就开始吧? 注: Foundation 文档:https://mos9527.com/Foundation/ Mesh Shader? 注: 参考性内容 - 酌情跳过。 深入了解,还请参阅以下文档: Introduction to Turing Mesh Shaders - NVIDIA 【技术精讲】AMD RDNA™ 显卡上的Mesh Shaders(一): 从 vertex shader 到 mesh shader 脱离 Fixed Function 的整套Input Assembler/Vertex+Geometry管线,繁而就简:Fragment/Pixel之前,Compute模式的Mes 足矣且充分地代替这些功能。 额外的,前置还可以有Task/Amplification环节生成 Mesh Shader WorkGroup(同时,Task Shader 也支持 Indirect Dispatch)。很显然,这样的架构是相当适合当代 GPU-Driven 渲染器的实现的。 最小单元(Primitive)仍然还是三角形 - 为饱和CS单元利用率,Mesh Shader同时引入了Meshlet - 依据一定指标对Mesh进行分区 - 直接地减小overhead, 间接的提供压缩(index buffer压到N个micro buffer/uint8),剔除机会,和… Enter Nanite 作为 UE5 的招牌特性,Nanite 利用新管线的高粒度与可控性实现了消除 LOD 过渡的任务。...

December 24, 2025 · 8 min · 1503 words · mos9527