尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Nvidium紧凑顶点格式深析:Minecraft顶点数据还能再小多少

Nvidium紧凑顶点格式深析:Minecraft顶点数据还能再小多少 Nvidium紧凑顶点格式深析Minecraft顶点数据还能再小多少【免费下载链接】nvidiumFast minecraft rendering backend for sodium (nvidia only)项目地址: https://gitcode.com/gh_mirrors/nvi/nvidiumNvidium 是一个专为 NVIDIA 显卡打造的 Minecraft 高性能渲染后端Sodium 的替代渲染层要求 GTX 1600 系列Turing 架构及以上显卡。本文深入剖析 Nvidium 的紧凑顶点格式每个顶点仅占 16 字节比 Sodium 原版的压缩顶点格式再小 25%同时讲清背后的精度取舍与 GPU 解码逻辑 为什么顶点越小越好Minecraft 地形由海量方块面片quad组成每一片 4 个顶点。玩家视角越远、视距越大显存里的顶点数据就越多GPU 要搬运的数据量也越大。顶点数据越小收益是双重的显存占用更低同等视距下能容纳更多地形带宽压力更小上传与读取顶点数据更快帧率更稳Sodium 已经做过一轮压缩CompactChunkVertex每顶点 20 字节每 quad 80 字节Nvidium 在此基础上又砍掉了 4 个字节。从 20 到 16 字节Nvidium 的压缩思路核心实现在 src/main/java/me/cortex/nvidium/sodiumCompat/NvidiumCompactChunkVertex.java一个顶点被打包进 4 个 32 位整数字段位宽说明位置 X / Y / Z各 16 位覆盖 -8 到 24 方块的区块局部坐标纹理 U / V各 16 位归一化到 32768天空光 / 方块光各 8 位构建时钳制在 8~248颜色 R / G / B各 8 位AO 烘焙进颜色材质参数2 位mipmap 标记 透明度截断值位置精度16 位够不够用Sodium 用 20 位存一个坐标轴覆盖 32 方块的区块范围单步精度约 0.03 毫米Nvidium 只用 16 位单步精度约 0.49 毫米32 / 65536见源文件中的MODEL_SCALE定义。差距听起来大但对玩家而言完全不可见——1 毫米和 0.5 毫米在屏幕上连一个像素都凑不到。这就是典型的够用即可压缩用肉眼分辨不出的精度换 4 个字节的显存带宽 纹理与光照能省就省纹理坐标Sodium 用 15 位 1 个 bias 位Nvidium 直接给足 16 位TEXTURE_MAX_VALUE 32768反而更宽松光照天空光和方块光各压成 8 位且在构建时钳制到 8~248避免极端值浪费颜色把 AO 提前烘焙一个隐藏的小优化环境光遮蔽AO不再交给着色器实时计算而是在 CPU 构建几何体时直接乘进顶点颜色encodeColor方法。GPU 少做一次计算换来的代价只是构建线程多做一点乘法——这正是 Nvidium 的设计哲学把活儿搬到构建线程渲染线程只管画 GPU 端如何解码着色器侧的解码逻辑在 src/main/resources/assets/nvidium/shaders/terrain/vertex_format/nvidium_vertex_format.glsl非常直白// 拆出三个 16 位位置值乘缩放减原点 vec3 decodeVertexPosition(Vertex v) { uvec3 packed_position uvec3( (v.x 0) 0xFFFFu, (v.x 16) 0xFFFFu, (v.y 0) 0xFFFFu); return (vec3(packed_position) * MODEL_SCALE) - MODEL_ORIGIN; }对比 Sodium 格式的解码文件 src/main/resources/assets/nvidium/shaders/terrain/vertex_format/sodium_vertex_format.glsl后者要做 20 位交叉位拆分_deinterleave_u20x3。16 位对齐存储不仅省空间拆位指令也更便宜——这是紧凑与快速兼得的关键。顶点格式怎么选兼容性开关如果某些 MOD 与 Nvidium 紧凑格式冲突配置里提供了回退开关。对应字段use_sodium_vertex_format定义在 src/main/java/me/cortex/nvidium/config/NvidiumConfig.java默认关闭保存于config/nvidium-config.json开启后使用 Sodium 顶点格式性能略降、显存占用增加但可修复部分 MOD 的兼容问题即默认 16 字节紧凑格式追求性能遇到 MOD 问题再切回 20 字节格式一行配置的事。几何体重组管线顶点格式并不是孤立的。Sodium 构建完成后src/main/java/me/cortex/nvidium/sodiumCompat/SodiumResultCompatibility.java 会把区块几何体重打包成 Nvidium 布局按 6 个朝向重新排列 quad方便剔除不可见面在构建线程而非渲染线程算好每段顶点的字节偏移与包围盒降低 1% low 卡顿半透明面片按到相机的距离排序保证正确混合小结还能再小多少Nvidium 的答案是——在肉眼无感的前提下16 字节/顶点就是当前的甜点对比项Sodium 紧凑格式Nvidium 紧凑格式每顶点20 字节16 字节-25%每 quad80 字节64 字节位置精度约 0.03 mm约 0.49 mm肉眼无差GPU 解码20 位交叉拆位16 位直接移位想亲自体验安装 Sodium 与 Nvidium 两个 MODNVIDIA GTX 1600 显卡即可默认为紧凑格式无需任何额外配置 【免费下载链接】nvidiumFast minecraft rendering backend for sodium (nvidia only)项目地址: https://gitcode.com/gh_mirrors/nvi/nvidium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表