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} $$...