概述 纹理压缩(Texture Compression)是实时渲染中降低显存占用和带宽消耗的核心技术。与通用图像压缩(如 PNG、JPEG)不同,硬件纹理压缩格式支持随机访问——GPU 无需解压整幅图像即可直接读取单个 texel,这对纹理缓存和着色器采样至关重要。 本文系统梳理主流硬件纹理压缩格式的技术细节、适用场景及硬件支持情况,所有关键数据均来自官方文档与公开规范。 BC 系列(Block Compression) BC 系列是 DirectX 生态中最主流的压缩格式,由 S3TC(DXT)发展而来,后续经 RGTC、BPTC 扩展为今日形态。所有 BC 格式均以固定 4×4 texel 块为单位进行编码。 BC1(原 DXT1 / S3TC) 数据量:64 bits / 4×4 block(4 bpp) 结构:两个 16-bit RGB565 端点色 + 16 个 2-bit 索引 色板:4 色(两个端点 + 两个插值色) Alpha:无独立 alpha,仅支持 1-bit “镂空”(punch-through)透明 支持通道:RGB(无独立 Alpha) 典型用途:不透明漫反射贴图、简单遮罩 据 Khronos Data Format Specification 描述,BC1 的 1-bit alpha 行为由两个端点值的相对大小决定: color0 > color1(按无符号整数比较):4 色不透明模式,00/01/10/11 均为插值颜色,无透明 color0 <= color1:3 色 + 透明模式,11 表示完全透明像素(alpha = 0) 实际使用方式 编码端:向压缩器提供带 Alpha 的源图(如 PNG with 1-bit alpha),大多数 BC1 编码器(如 DirectXTex、nvcompress、Compressonator)会自动判断 block 是否需要透明模式。若源图 alpha 为纯 0/255,编码器会尽量使用 color0 <= color1 模式将 11 映射为透明。 ...
UE console 速记
r.VT.Borders 10 设置VT可视化
UE5 Nanite 与传统渲染管线的深度源码对比
本文基于 UE 5.4/5.5 引擎源码,从源码层面深入对比 Nanite 渲染管线与传统网格渲染管线的差异。所有代码引用均标注了引擎内的原始路径。 1. 宏观架构概览 传统渲染管线和 Nanite 管线的最根本区别在于:几何处理的主导权从 CPU 转移到了 GPU,并且材质着色从 Pixel Shader 迁移到了 Compute Shader。 维度 传统渲染 (Traditional) Nanite 几何裁剪 CPU-driven Frustum/Occlusion Culling GPU-driven Cluster Culling + Two-Pass Occlusion LOD 离散 LOD (StaticMesh LOD0~N) 连续 LOD (Cluster Hierarchy, Runtime Streaming) 光栅化 硬件光栅化 (Fixed Function RS) 软件光栅化 (Compute) + 硬件光栅化 (Mesh/Prim Shader) 中间表示 无 (直接写 GBuffer/FrameBuffer) Visibility Buffer (VisBuffer64) 材质着色 Pixel Shader (BasePassPixelShader.usf) Compute Shader (ComputeShaderOutputCommon.ush) GBuffer 输出 SV_Target MRT UAV (ComputeShadingOutputs.OutTargetN) DrawCall FMeshDrawCommand (CPU 组装) Indirect Dispatch (GPU 驱动) 2. 渲染入口与调度 2.1 传统渲染的入口 传统渲染的顶层调度在 FDeferredShadingSceneRenderer::Render() 中,通过 RenderBasePass() 等函数发起。每个 FPrimitiveSceneProxy 会在 FMeshPassProcessor 中被转换为 FMeshDrawCommand,最终由 FParallelMeshDrawCommandPass 提交到 RHI。 ...
Nanite VisBuffer 核心概念速查
Nanite VisBuffer 核心概念速查 Nanite 是 UE5 的虚拟化几何系统,其核心创新是用 Visibility Buffer(可见性缓冲) 替代传统 G-Buffer,将几何处理与材质着色完全解耦。本文梳理 VisBuffer 管线中涉及的关键概念。 VisBuffer 整体管线 Mesh → Instance → Cluster Group → Cluster → Triangle → VisBuffer → Material Pass Culling Pass(计算着色器):GPU 端逐 Cluster 做视锥/遮挡/屏幕尺寸剔除 Rasterization Pass:将可见像素写入 VisBuffer(仅存 ID,不做材质计算) Material Pass:全屏 Pass 读取 VisBuffer,解码 ID,仅对可见像素着色一次 来源:Brian Karis, “A Deep Dive into Nanite Virtualized Geometry”, SIGGRAPH 2021 (Advances in Real-Time Rendering) 三角形(Triangle) Cluster 内的基本渲染单元。每个 Cluster 包含最多 128 个三角形。在 VisBuffer 中,三角形 ID 占约 7 bit(2^7 = 128),用于在 Material Pass 中定位该三角形的三个顶点并做重心坐标插值。 ...
移动端 GPU 可见性剔除机制对比
1. 移动端 GPU 可见性剔除机制对比 1.1 概览 PowerVR HSR Apple HSR Mali FPK Adreno LRZ 全称 Hidden Surface Removal Hidden Surface Removal Forward Pixel Kill Low Resolution Z 架构 TBDR TBDR TBDR TBDR 粒度 逐像素 逐像素 逐像素(尽力而为) 逐块(8x8 像素) 保证级 不透明物体保证零过度绘制 不透明物体保证零过度绘制 非保证,尽力剔除 非保证,块级粗剔除 绘制顺序依赖 不透明物体顺序无关 不透明物体顺序无关 正面到背面更优 Binning pass 构建后顺序无关,但正面到背面可提升 Early-Z 效率 AlphaTest 失效 失效 失效 失效 Alpha Blend 失效 失效 失效 失效 gl_FragDepth 写入 失效 失效 失效 失效 1.2 PowerVR HSR (Imagination) 1.2.1 原理 TBDR 架构中,所有几何体先提交到 Tile,HSR 在 PS 执行前对整个 Tile 做可见性解析,只对最终可见像素跑 PS。 ...
NvPerf GPU 性能计数器参考手册
NvPerf GPU 性能计数器参考手册 本文档基于 NVIDIA 官方文档,对 NvProfAnalyzer 中使用的所有 GPU 性能计数器进行中文解释。 参考文档来源 Nsight Compute Profiling Guide — 计数器命名规则、硬件单元、管线定义 Nsight Graphics Advanced Learning — 图形管线各单元的功能说明 Nsight Graphics System Architecture — GPU 系统架构图解 NVIDIA Peak Performance Analysis Blog — 性能分析方法论 Nsight Compute CLI — CLI 工具与指标映射表 一、计数器命名规则 NVIDIA 性能计数器遵循统一的命名格式: 单元__(子单元?)_(管线阶段?)_度量_(限定符?) 示例解读: sm__inst_executed 单元: SM | 度量: inst_executed (指令执行) | 限定符: 无 → SM 执行的 warp 指令总数 sm__inst_executed_pipe_fma 单元: SM | 度量: inst_executed | 限定符: pipe_fma → FMA 管线执行的 warp 指令数 smsp__thread_inst_executed_pipe_tex_pred_on ...
NVIDIA GPU性能计数器完整参考手册
NVIDIA GPU性能计数器完整参考手册 (NvPerf/Nsight系列) 文件信息 CSV文件示例: Unity_2026.04.02_10.06_frame628066.pagecache.nvperf.csv 参数总数: 2958个性能计数器 工具演进: nvperf → Nsight系列工具(推荐) 一、性能计数器命名规则详解 1.1 Nsight Compute命名规范 根据Nsight Compute Profiling Guide: 基本格式: unit__(subunit?)_(pipestage?)_quantity_(qualifiers?) 接口计数器: unit__(subunit?)_(pipestage?)_(interface)_quantity_(qualifiers?) 组成部分: unit: GPU逻辑或物理单元(如sm、dram、lts) subunit: 单元内的子单元(可选) pipestage: 管线阶段(可选) quantity: 测量的内容(字节、计数、比率等) qualifiers: 附加谓词(操作类型、访问模式等) 1.2 后缀含义 .avg: 平均值 .max: 最大值 .min: 最小值 .sum: 总和 (bytes): 单位标识(字节) _op_read: 读取操作 _op_write: 写入操作 _lookup_hit: 查找命中 _lookup_miss: 查找未命中 二、GPU硬件架构单元详解 2.1 计算核心单元 单元前缀 中文名称 功能描述 对应文档 sm__ 流多处理器 GPU的主要计算单元,包含多个CUDA核心,执行着色器指令 Nsight Compute Profiling Guide smsp__ SM子分区 SM内的四个子分区,各含调度器、寄存器文件和执行单元 同上 tpc__ 纹理处理集群 包含多个SM和纹理单元的处理集群 Nsight Graphics System Architecture vpc__ 顶点处理集群 处理顶点着色相关任务的集群 同上 2.2 图形管线单元 单元前缀 中文名称 功能描述 对应文档 fe__ 前端单元 图形管线的初始阶段,处理命令分发 Nsight Graphics Advanced Learning gr__ 图形渲染单元 图形渲染相关操作 同上 raster__ 光栅化单元 将图元转换为像素片段 同上 pes__ 图元引擎状态 协调顶点、曲面细分、几何等阶段 同上 2.3 内存系统单元 单元前缀 中文名称 功能描述 对应文档 dram__ DRAM内存控制器 设备主内存(GDDR6/GDDR5X)访问控制器 Nsight Compute Profiling Guide fbpa__ 帧缓冲区分区 帧缓冲区内存分区管理 Nsight Graphics System Architecture lts__ 本地纹理存储 纹理数据的本地存储 同上 l1tex__ L1纹理缓存 包含L1数据缓存和纹理处理两个并行管线 同上 2.4 缓存系统单元 单元前缀 中文名称 功能描述 对应文档 gcc__ 图形命令缓存 图形命令的缓存系统 Nsight Graphics Advanced Learning l2__ L2缓存 为GPU所有单元提供服务,一致性的中心点 Nsight Graphics System Architecture syslts__ 系统本地纹理存储 系统级的纹理存储管理 同上 2.5 其他系统单元 单元前缀 中文名称 功能描述 对应文档 idc__ 指令分发单元 指令分发相关操作 Nsight Compute Profiling Guide pcie__ PCI Express总线 CPU-GPU数据传输总线 Nsight Graphics System Architecture prop__ 预ROP单元 协调深度和颜色像素处理,管理API顺序 Nsight Graphics Advanced Learning rtcore__ 光线追踪核心 专用光线追踪处理单元 同上 三、图形管线处理阶段详解 3.1 前端处理(World Pipe) 根据Nsight Graphics Advanced Learning: ...
Nanite: A Deep Dive
Nanite: A Deep Dive 来源: Karis_Nanite_SIGGRAPH_Advances_2021_final — Brian Karis, Rune Stubbe, Graham Wihlidal 会议: SIGGRAPH 2021 Advances in Real-Time Rendering in Games course 作者主讲: Brian Karis (Engineering Fellow, Epic Games) 主题: UE5 全新虚拟几何系统 Nanite 的深度技术解析 目录 愿景与现实 可选方案的探索 GPU Driven Pipeline 三角形 Cluster Culling 与 Occlusion Culling Visibility Buffer 与可见性/材质解耦 次线性扩展与 Cluster 层次结构 LOD 裂缝问题与 DAG 构建 构建流程详解(Build Operations) 简化算法与误差度量 运行时视相关 LOD 选择 并行 LOD 选择与层次裁剪 Persistent Threads 与两 Pass Occlusion Culling 光栅化(软件 + 硬件混合) 小三角形与微多边形软光栅器 小实例(Tiny Instances)与 Imposter 延迟材质求值(Deferred Material Evaluation) 流水线性能数据 阴影:Virtual Shadow Maps Streaming(几何流送) 压缩:内存表示与磁盘表示 结果与未来工作 致谢与参考文献 1. 愿景与现实 1.1 The Dream(梦想) 像 Virtual Texturing 那样虚拟化几何: ...
UE 纹理流送池与 Shader 调试 CVar 速查
纹理流送池 UE 根据流送池预算决定纹理加载哪些 mip level,超出预算时低优先级纹理只加载低分辨率 mip,控制台输出 Texture streaming pool over X MB 警告。 查询与调整 // 运行时查询当前值 r.Streaming.PoolSize // 运行时修改(单位 MiB) r.Streaming.PoolSize 3000 永久设置 在 DefaultEngine.ini 中: [/Script/Engine.RendererSettings] r.Streaming.PoolSize=3000 诊断命令 命令 用途 stat streaming 查看池使用量、各纹理流送状态 ListStreamingTextures 列出所有流送纹理及占用 r.Streaming.MaxTempMemoryAllowed 临时内存上限,过小也会导致流送卡顿 常见原因与对策 原因 对策 纹理分辨率过高 / mip 过多 降低 TextureGroup 的 MaxLOD 或分辨率 UDIM / 大量贴图同时可见 拆分 LOD、降低远处 mip 预算本身设太小 合理提高 PoolSize(需匹配目标显存) 纹理未设 Streaming 确认 Texture → Never Stream 未勾选 Shader 调试 CVar 在 RenderDoc 中查看 Compute Shader 源码,需在 ConsoleVariables.ini 的 [Startup] 段配置以下 CVar: ...