<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on MrOptimist</title><link>https://mr0ptimist.github.io/posts/</link><description>Recent content in Posts on MrOptimist</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 22 Apr 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://mr0ptimist.github.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>纹理压缩格式详解：ASTC、BC、ETC 与 PVRTC</title><link>https://mr0ptimist.github.io/posts/%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9%E6%A0%BC%E5%BC%8F%E8%AF%A6%E8%A7%A3_astc_bc_etc_pvrtc/</link><pubDate>Wed, 22 Apr 2026 10:00:00 +0800</pubDate><guid>https://mr0ptimist.github.io/posts/%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9%E6%A0%BC%E5%BC%8F%E8%AF%A6%E8%A7%A3_astc_bc_etc_pvrtc/</guid><description>&lt;h2 id="概述"&gt;概述&lt;/h2&gt;
&lt;p&gt;纹理压缩（Texture Compression）是实时渲染中降低显存占用和带宽消耗的核心技术。与通用图像压缩（如 PNG、JPEG）不同，硬件纹理压缩格式支持&lt;strong&gt;随机访问&lt;/strong&gt;——GPU 无需解压整幅图像即可直接读取单个 texel，这对纹理缓存和着色器采样至关重要。&lt;/p&gt;
&lt;p&gt;本文系统梳理主流硬件纹理压缩格式的技术细节、适用场景及硬件支持情况，所有关键数据均来自官方文档与公开规范。&lt;/p&gt;
&lt;h2 id="bc-系列block-compression"&gt;BC 系列（Block Compression）&lt;/h2&gt;
&lt;p&gt;BC 系列是 DirectX 生态中最主流的压缩格式，由 S3TC（DXT）发展而来，后续经 RGTC、BPTC 扩展为今日形态。所有 BC 格式均以固定 &lt;strong&gt;4×4 texel 块&lt;/strong&gt;为单位进行编码。&lt;/p&gt;
&lt;h3 id="bc1原-dxt1--s3tc"&gt;BC1（原 DXT1 / S3TC）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数据量&lt;/strong&gt;：64 bits / 4×4 block（&lt;strong&gt;4 bpp&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;结构&lt;/strong&gt;：两个 16-bit RGB565 端点色 + 16 个 2-bit 索引&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;色板&lt;/strong&gt;：4 色（两个端点 + 两个插值色）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alpha&lt;/strong&gt;：无独立 alpha，仅支持 1-bit &amp;ldquo;镂空&amp;rdquo;（punch-through）透明&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;支持通道&lt;/strong&gt;：RGB（无独立 Alpha）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;典型用途&lt;/strong&gt;：不透明漫反射贴图、简单遮罩&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;据 &lt;a href="https://registry.khronos.org/DataFormat/specs/1.3/dataformat.1.3.html"&gt;Khronos Data Format Specification&lt;/a&gt; 描述，BC1 的 1-bit alpha 行为由两个端点值的相对大小决定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;color0 &amp;gt; color1&lt;/code&gt;（按无符号整数比较）&lt;/strong&gt;：4 色不透明模式，&lt;code&gt;00/01/10/11&lt;/code&gt; 均为插值颜色，无透明&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;color0 &amp;lt;= color1&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;3 色 + 透明模式&lt;/strong&gt;，&lt;code&gt;11&lt;/code&gt; 表示完全透明像素（alpha = 0）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="实际使用方式"&gt;实际使用方式&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;编码端&lt;/strong&gt;：向压缩器提供带 Alpha 的源图（如 PNG with 1-bit alpha），大多数 BC1 编码器（如 DirectXTex、&lt;code&gt;nvcompress&lt;/code&gt;、Compressonator）会自动判断 block 是否需要透明模式。若源图 alpha 为纯 0/255，编码器会尽量使用 &lt;code&gt;color0 &amp;lt;= color1&lt;/code&gt; 模式将 &lt;code&gt;11&lt;/code&gt; 映射为透明。&lt;/p&gt;</description></item><item><title>UE console 速记</title><link>https://mr0ptimist.github.io/posts/ue-console-%E9%80%9F%E8%AE%B0/</link><pubDate>Tue, 21 Apr 2026 17:30:27 +0800</pubDate><guid>https://mr0ptimist.github.io/posts/ue-console-%E9%80%9F%E8%AE%B0/</guid><description>&lt;h4 id="rvtborders-10-设置vt可视化"&gt;r.VT.Borders 10 设置VT可视化&lt;/h4&gt;</description></item><item><title>UE5 Nanite 与传统渲染管线的深度源码对比</title><link>https://mr0ptimist.github.io/posts/ue5-nanite-%E4%B8%8E%E4%BC%A0%E7%BB%9F%E6%B8%B2%E6%9F%93%E7%AE%A1%E7%BA%BF%E7%9A%84%E6%B7%B1%E5%BA%A6%E6%BA%90%E7%A0%81%E5%AF%B9%E6%AF%94/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><guid>https://mr0ptimist.github.io/posts/ue5-nanite-%E4%B8%8E%E4%BC%A0%E7%BB%9F%E6%B8%B2%E6%9F%93%E7%AE%A1%E7%BA%BF%E7%9A%84%E6%B7%B1%E5%BA%A6%E6%BA%90%E7%A0%81%E5%AF%B9%E6%AF%94/</guid><description>&lt;blockquote&gt;
&lt;p&gt;本文基于 UE 5.4/5.5 引擎源码，从源码层面深入对比 Nanite 渲染管线与传统网格渲染管线的差异。所有代码引用均标注了引擎内的原始路径。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-宏观架构概览"&gt;1. 宏观架构概览&lt;/h2&gt;
&lt;p&gt;传统渲染管线和 Nanite 管线的最根本区别在于：&lt;strong&gt;几何处理的主导权从 CPU 转移到了 GPU&lt;/strong&gt;，并且&lt;strong&gt;材质着色从 Pixel Shader 迁移到了 Compute Shader&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;维度&lt;/th&gt;
&lt;th&gt;传统渲染 (Traditional)&lt;/th&gt;
&lt;th&gt;Nanite&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;几何裁剪&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CPU-driven Frustum/Occlusion Culling&lt;/td&gt;
&lt;td&gt;GPU-driven Cluster Culling + Two-Pass Occlusion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LOD&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;离散 LOD (StaticMesh LOD0~N)&lt;/td&gt;
&lt;td&gt;连续 LOD (Cluster Hierarchy, Runtime Streaming)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;光栅化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;硬件光栅化 (Fixed Function RS)&lt;/td&gt;
&lt;td&gt;软件光栅化 (Compute) + 硬件光栅化 (Mesh/Prim Shader)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;中间表示&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;无 (直接写 GBuffer/FrameBuffer)&lt;/td&gt;
&lt;td&gt;Visibility Buffer (VisBuffer64)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;材质着色&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pixel Shader (&lt;code&gt;BasePassPixelShader.usf&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Compute Shader (&lt;code&gt;ComputeShaderOutputCommon.ush&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GBuffer 输出&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SV_Target&lt;/code&gt; MRT&lt;/td&gt;
&lt;td&gt;UAV (&lt;code&gt;ComputeShadingOutputs.OutTargetN&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DrawCall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FMeshDrawCommand&lt;/code&gt; (CPU 组装)&lt;/td&gt;
&lt;td&gt;Indirect Dispatch (GPU 驱动)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-渲染入口与调度"&gt;2. 渲染入口与调度&lt;/h2&gt;
&lt;h3 id="21-传统渲染的入口"&gt;2.1 传统渲染的入口&lt;/h3&gt;
&lt;p&gt;传统渲染的顶层调度在 &lt;code&gt;FDeferredShadingSceneRenderer::Render()&lt;/code&gt; 中，通过 &lt;code&gt;RenderBasePass()&lt;/code&gt; 等函数发起。每个 &lt;code&gt;FPrimitiveSceneProxy&lt;/code&gt; 会在 &lt;code&gt;FMeshPassProcessor&lt;/code&gt; 中被转换为 &lt;code&gt;FMeshDrawCommand&lt;/code&gt;，最终由 &lt;code&gt;FParallelMeshDrawCommandPass&lt;/code&gt; 提交到 RHI。&lt;/p&gt;</description></item><item><title>Nanite VisBuffer 核心概念速查</title><link>https://mr0ptimist.github.io/posts/nanite_visbuffer%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5%E9%80%9F%E6%9F%A5/</link><pubDate>Mon, 20 Apr 2026 14:00:00 +0800</pubDate><guid>https://mr0ptimist.github.io/posts/nanite_visbuffer%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5%E9%80%9F%E6%9F%A5/</guid><description>&lt;h1 id="nanite-visbuffer-核心概念速查"&gt;Nanite VisBuffer 核心概念速查&lt;/h1&gt;
&lt;p&gt;Nanite 是 UE5 的虚拟化几何系统，其核心创新是用 &lt;strong&gt;Visibility Buffer（可见性缓冲）&lt;/strong&gt; 替代传统 G-Buffer，将几何处理与材质着色完全解耦。本文梳理 VisBuffer 管线中涉及的关键概念。&lt;/p&gt;
&lt;h2 id="visbuffer-整体管线"&gt;VisBuffer 整体管线&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Mesh → Instance → Cluster Group → Cluster → Triangle → VisBuffer → Material Pass
&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Culling Pass（计算着色器）&lt;/strong&gt;：GPU 端逐 Cluster 做视锥/遮挡/屏幕尺寸剔除&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rasterization Pass&lt;/strong&gt;：将可见像素写入 VisBuffer（仅存 ID，不做材质计算）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Material Pass&lt;/strong&gt;：全屏 Pass 读取 VisBuffer，解码 ID，仅对可见像素着色一次&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;来源：Brian Karis, &amp;ldquo;A Deep Dive into Nanite Virtualized Geometry&amp;rdquo;, SIGGRAPH 2021 (Advances in Real-Time Rendering)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="三角形triangle"&gt;三角形（Triangle）&lt;/h2&gt;
&lt;p&gt;Cluster 内的基本渲染单元。每个 Cluster 包含最多 &lt;strong&gt;128 个三角形&lt;/strong&gt;。在 VisBuffer 中，三角形 ID 占约 7 bit（2^7 = 128），用于在 Material Pass 中定位该三角形的三个顶点并做重心坐标插值。&lt;/p&gt;</description></item><item><title>使用文档</title><link>https://mr0ptimist.github.io/posts/%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3/</link><pubDate>Mon, 20 Apr 2026 12:00:00 +0800</pubDate><guid>https://mr0ptimist.github.io/posts/%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3/</guid><description>&lt;h1 id="hugo-博客使用文档"&gt;Hugo 博客使用文档&lt;/h1&gt;
&lt;h2 id="站点信息"&gt;站点信息&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;站点目录：&lt;code&gt;D:\ClaudeOutput\my-site\&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;文章目录：&lt;code&gt;content\posts\&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;配置文件：&lt;code&gt;hugo.toml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;主题：PaperMod&lt;/li&gt;
&lt;li&gt;本地预览：http://localhost:1313/&lt;/li&gt;
&lt;li&gt;GitHub 仓库：https://github.com/mr0ptimist/mr0ptimist.github.io&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="bat-工具"&gt;BAT 工具&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文件&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;serve_启动预览.bat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启动本地预览服务器（自动杀旧进程），含草稿，实时刷新&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;build_构建发布.bat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;构建静态文件到 public/ 目录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;new-post_新建文章.bat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;交互式创建文章（标题、标签、分类、是否隐藏）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;clean_清除输出.bat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;删除 public/ 目录&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="日常写文章流程"&gt;日常写文章流程&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;1. 双击 new-post_新建文章.bat → 输入标题、选标签/分类、是否隐藏
2. 编辑 content/posts/xxx.md → 写文章内容
3. 双击 serve_启动预览.bat → 浏览器打开 http://localhost:1313/ 查看效果
4. 关掉预览（关闭窗口即可）
5. git add . &amp;amp;&amp;amp; git commit -m &amp;#34;new post&amp;#34; &amp;amp;&amp;amp; git push → 自动部署
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="文章格式"&gt;文章格式&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+++
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;date = &amp;#39;2026-04-20T12:00:00+08:00&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;draft = false
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;title = &amp;#39;文章标题&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tags = [&amp;#39;标签1&amp;#39;, &amp;#39;标签2&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;categories = [&amp;#39;分类&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hidden = true
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+++
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;正文内容，支持 Markdown 语法。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;draft = true&lt;/code&gt;：草稿，只在 &lt;code&gt;serve -D&lt;/code&gt; 模式下显示&lt;/li&gt;
&lt;li&gt;&lt;code&gt;draft = false&lt;/code&gt;：正式发布&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hidden = true&lt;/code&gt;：加密文章，需在导航栏输入密码后才显示&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="私密文章"&gt;私密文章&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;在 hugo.toml 中配置 &lt;code&gt;secretPassword = '密码'&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;文章 front matter 加 &lt;code&gt;hidden = true&lt;/code&gt; 即可隐藏&lt;/li&gt;
&lt;li&gt;导航栏锁图标 → 弹窗输入密码 → 隐藏文章出现&lt;/li&gt;
&lt;li&gt;再次点击锁图标 → 重新锁定&lt;/li&gt;
&lt;li&gt;密码状态用 sessionStorage，关闭浏览器自动重置&lt;/li&gt;
&lt;li&gt;隐藏文章不会出现在分类、标签列表中&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="导航栏功能"&gt;导航栏功能&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;按钮&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;锁图标&lt;/td&gt;
&lt;td&gt;解锁/锁定私密文章&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;箭头图标&lt;/td&gt;
&lt;td&gt;调整文章宽度和 TOC 宽度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;太阳/月亮&lt;/td&gt;
&lt;td&gt;切换亮色/暗色主题&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="toc目录导航"&gt;TOC（目录导航）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;大屏（1400px+）自动在左侧显示浮动 TOC&lt;/li&gt;
&lt;li&gt;滚动时高亮当前标题&lt;/li&gt;
&lt;li&gt;只显示一级标题和带数字编号的子标题&lt;/li&gt;
&lt;li&gt;点击箭头按钮可调整 TOC 宽度（150-400px）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="部署"&gt;部署&lt;/h2&gt;
&lt;p&gt;使用 GitHub Actions 自动部署，push 到 main 分支即可：&lt;/p&gt;</description></item><item><title>移动端 GPU 可见性剔除机制对比</title><link>https://mr0ptimist.github.io/posts/%E7%A7%BB%E5%8A%A8%E7%AB%AFgpu%E5%8F%AF%E8%A7%81%E6%80%A7%E5%89%94%E9%99%A4%E6%9C%BA%E5%88%B6/</link><pubDate>Mon, 20 Apr 2026 10:04:00 +0800</pubDate><guid>https://mr0ptimist.github.io/posts/%E7%A7%BB%E5%8A%A8%E7%AB%AFgpu%E5%8F%AF%E8%A7%81%E6%80%A7%E5%89%94%E9%99%A4%E6%9C%BA%E5%88%B6/</guid><description>&lt;h1 id="1-移动端-gpu-可见性剔除机制对比"&gt;1. 移动端 GPU 可见性剔除机制对比&lt;/h1&gt;
&lt;h2 id="11-概览"&gt;1.1 概览&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;PowerVR HSR&lt;/th&gt;
&lt;th&gt;Apple HSR&lt;/th&gt;
&lt;th&gt;Mali FPK&lt;/th&gt;
&lt;th&gt;Adreno LRZ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;全称&lt;/td&gt;
&lt;td&gt;Hidden Surface Removal&lt;/td&gt;
&lt;td&gt;Hidden Surface Removal&lt;/td&gt;
&lt;td&gt;Forward Pixel Kill&lt;/td&gt;
&lt;td&gt;Low Resolution Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;架构&lt;/td&gt;
&lt;td&gt;TBDR&lt;/td&gt;
&lt;td&gt;TBDR&lt;/td&gt;
&lt;td&gt;TBDR&lt;/td&gt;
&lt;td&gt;TBDR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;粒度&lt;/td&gt;
&lt;td&gt;逐像素&lt;/td&gt;
&lt;td&gt;逐像素&lt;/td&gt;
&lt;td&gt;逐像素（尽力而为）&lt;/td&gt;
&lt;td&gt;逐块（8x8 像素）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;保证级&lt;/td&gt;
&lt;td&gt;不透明物体保证零过度绘制&lt;/td&gt;
&lt;td&gt;不透明物体保证零过度绘制&lt;/td&gt;
&lt;td&gt;非保证，尽力剔除&lt;/td&gt;
&lt;td&gt;非保证，块级粗剔除&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;绘制顺序依赖&lt;/td&gt;
&lt;td&gt;不透明物体顺序无关&lt;/td&gt;
&lt;td&gt;不透明物体顺序无关&lt;/td&gt;
&lt;td&gt;正面到背面更优&lt;/td&gt;
&lt;td&gt;Binning pass 构建后顺序无关，但正面到背面可提升 Early-Z 效率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AlphaTest&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alpha Blend&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gl_FragDepth 写入&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;td&gt;失效&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="12-powervr-hsr-imagination"&gt;1.2 PowerVR HSR (Imagination)&lt;/h2&gt;
&lt;h3 id="121-原理"&gt;1.2.1 原理&lt;/h3&gt;
&lt;p&gt;TBDR 架构中，所有几何体先提交到 Tile，HSR 在 PS 执行前对整个 Tile 做可见性解析，只对最终可见像素跑 PS。&lt;/p&gt;</description></item><item><title>NvPerf GPU 性能计数器参考手册</title><link>https://mr0ptimist.github.io/posts/nvperf_counters_reference/</link><pubDate>Mon, 20 Apr 2026 10:03:00 +0800</pubDate><guid>https://mr0ptimist.github.io/posts/nvperf_counters_reference/</guid><description>&lt;h1 id="nvperf-gpu-性能计数器参考手册"&gt;NvPerf GPU 性能计数器参考手册&lt;/h1&gt;
&lt;p&gt;本文档基于 NVIDIA 官方文档，对 NvProfAnalyzer 中使用的所有 GPU 性能计数器进行中文解释。&lt;/p&gt;
&lt;h2 id="参考文档来源"&gt;参考文档来源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.nvidia.com/nsight-compute/ProfilingGuide/index.html"&gt;Nsight Compute Profiling Guide&lt;/a&gt; — 计数器命名规则、硬件单元、管线定义&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nvidia.com/nsight-graphics/AdvancedLearning/index.html"&gt;Nsight Graphics Advanced Learning&lt;/a&gt; —
图形管线各单元的功能说明&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nvidia.com/nsight-graphics/UserGuide/gpu-trace-system-architecture.html"&gt;Nsight Graphics System Architecture&lt;/a&gt; —
GPU 系统架构图解&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.nvidia.com/blog/the-peak-performance-analysis-method-for-optimizing-any-gpu-workload/"&gt;NVIDIA Peak Performance Analysis Blog&lt;/a&gt; —
性能分析方法论&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nvidia.com/nsight-compute/NsightComputeCli/index.html"&gt;Nsight Compute CLI&lt;/a&gt; — CLI 工具与指标映射表&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="一计数器命名规则"&gt;一、计数器命名规则&lt;/h2&gt;
&lt;p&gt;NVIDIA 性能计数器遵循统一的命名格式：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;单元__(子单元?)_(管线阶段?)_度量_(限定符?)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;示例解读：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;sm__inst_executed&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单元: SM | 度量: inst_executed (指令执行) | 限定符: 无&lt;/li&gt;
&lt;li&gt;→ SM 执行的 warp 指令总数&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;sm__inst_executed_pipe_fma&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单元: SM | 度量: inst_executed | 限定符: pipe_fma&lt;/li&gt;
&lt;li&gt;→ FMA 管线执行的 warp 指令数&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;smsp__thread_inst_executed_pipe_tex_pred_on&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>NVIDIA GPU性能计数器完整参考手册</title><link>https://mr0ptimist.github.io/posts/nvidia_gpu_performance_counters_complete_zh/</link><pubDate>Mon, 20 Apr 2026 10:02:00 +0800</pubDate><guid>https://mr0ptimist.github.io/posts/nvidia_gpu_performance_counters_complete_zh/</guid><description>&lt;h1 id="nvidia-gpu性能计数器完整参考手册-nvperfnsight系列"&gt;NVIDIA GPU性能计数器完整参考手册 (NvPerf/Nsight系列)&lt;/h1&gt;
&lt;h2 id="文件信息"&gt;文件信息&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CSV文件示例&lt;/strong&gt;: &lt;code&gt;Unity_2026.04.02_10.06_frame628066.pagecache.nvperf.csv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;参数总数&lt;/strong&gt;: 2958个性能计数器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具演进&lt;/strong&gt;: nvperf → Nsight系列工具（推荐）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="一性能计数器命名规则详解"&gt;一、性能计数器命名规则详解&lt;/h2&gt;
&lt;h3 id="11-nsight-compute命名规范"&gt;1.1 Nsight Compute命名规范&lt;/h3&gt;
&lt;p&gt;根据&lt;a href="https://docs.nvidia.com/nsight-compute/ProfilingGuide/index.html"&gt;Nsight Compute Profiling Guide&lt;/a&gt;：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基本格式&lt;/strong&gt;: &lt;code&gt;unit__(subunit?)_(pipestage?)_quantity_(qualifiers?)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;接口计数器&lt;/strong&gt;: &lt;code&gt;unit__(subunit?)_(pipestage?)_(interface)_quantity_(qualifiers?)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;组成部分&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;unit&lt;/strong&gt;: GPU逻辑或物理单元（如sm、dram、lts）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;subunit&lt;/strong&gt;: 单元内的子单元（可选）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pipestage&lt;/strong&gt;: 管线阶段（可选）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;quantity&lt;/strong&gt;: 测量的内容（字节、计数、比率等）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;qualifiers&lt;/strong&gt;: 附加谓词（操作类型、访问模式等）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-后缀含义"&gt;1.2 后缀含义&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;.avg&lt;/code&gt;&lt;/strong&gt;: 平均值&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;.max&lt;/code&gt;&lt;/strong&gt;: 最大值&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;.min&lt;/code&gt;&lt;/strong&gt;: 最小值&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;.sum&lt;/code&gt;&lt;/strong&gt;: 总和&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;(bytes)&lt;/code&gt;&lt;/strong&gt;: 单位标识（字节）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;_op_read&lt;/code&gt;&lt;/strong&gt;: 读取操作&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;_op_write&lt;/code&gt;&lt;/strong&gt;: 写入操作&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;_lookup_hit&lt;/code&gt;&lt;/strong&gt;: 查找命中&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;_lookup_miss&lt;/code&gt;&lt;/strong&gt;: 查找未命中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="二gpu硬件架构单元详解"&gt;二、GPU硬件架构单元详解&lt;/h2&gt;
&lt;h3 id="21-计算核心单元"&gt;2.1 计算核心单元&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;单元前缀&lt;/th&gt;
&lt;th&gt;中文名称&lt;/th&gt;
&lt;th&gt;功能描述&lt;/th&gt;
&lt;th&gt;对应文档&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;sm__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;流多处理器&lt;/td&gt;
&lt;td&gt;GPU的主要计算单元，包含多个CUDA核心，执行着色器指令&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nsight-compute/ProfilingGuide/index.html"&gt;Nsight Compute Profiling Guide&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;smsp__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SM子分区&lt;/td&gt;
&lt;td&gt;SM内的四个子分区，各含调度器、寄存器文件和执行单元&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;tpc__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;纹理处理集群&lt;/td&gt;
&lt;td&gt;包含多个SM和纹理单元的处理集群&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nsight-graphics/UserGuide/gpu-trace-system-architecture.html"&gt;Nsight Graphics System Architecture&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;vpc__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;顶点处理集群&lt;/td&gt;
&lt;td&gt;处理顶点着色相关任务的集群&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-图形管线单元"&gt;2.2 图形管线单元&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;单元前缀&lt;/th&gt;
&lt;th&gt;中文名称&lt;/th&gt;
&lt;th&gt;功能描述&lt;/th&gt;
&lt;th&gt;对应文档&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;fe__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;前端单元&lt;/td&gt;
&lt;td&gt;图形管线的初始阶段，处理命令分发&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nsight-graphics/AdvancedLearning/index.html"&gt;Nsight Graphics Advanced Learning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;gr__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;图形渲染单元&lt;/td&gt;
&lt;td&gt;图形渲染相关操作&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;raster__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;光栅化单元&lt;/td&gt;
&lt;td&gt;将图元转换为像素片段&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;pes__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;图元引擎状态&lt;/td&gt;
&lt;td&gt;协调顶点、曲面细分、几何等阶段&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-内存系统单元"&gt;2.3 内存系统单元&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;单元前缀&lt;/th&gt;
&lt;th&gt;中文名称&lt;/th&gt;
&lt;th&gt;功能描述&lt;/th&gt;
&lt;th&gt;对应文档&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;dram__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;DRAM内存控制器&lt;/td&gt;
&lt;td&gt;设备主内存（GDDR6/GDDR5X）访问控制器&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nsight-compute/ProfilingGuide/index.html"&gt;Nsight Compute Profiling Guide&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;fbpa__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;帧缓冲区分区&lt;/td&gt;
&lt;td&gt;帧缓冲区内存分区管理&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nsight-graphics/UserGuide/gpu-trace-system-architecture.html"&gt;Nsight Graphics System Architecture&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;lts__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本地纹理存储&lt;/td&gt;
&lt;td&gt;纹理数据的本地存储&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;l1tex__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;L1纹理缓存&lt;/td&gt;
&lt;td&gt;包含L1数据缓存和纹理处理两个并行管线&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="24-缓存系统单元"&gt;2.4 缓存系统单元&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;单元前缀&lt;/th&gt;
&lt;th&gt;中文名称&lt;/th&gt;
&lt;th&gt;功能描述&lt;/th&gt;
&lt;th&gt;对应文档&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;gcc__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;图形命令缓存&lt;/td&gt;
&lt;td&gt;图形命令的缓存系统&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nsight-graphics/AdvancedLearning/index.html"&gt;Nsight Graphics Advanced Learning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;l2__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;L2缓存&lt;/td&gt;
&lt;td&gt;为GPU所有单元提供服务，一致性的中心点&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nsight-graphics/UserGuide/gpu-trace-system-architecture.html"&gt;Nsight Graphics System Architecture&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;syslts__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;系统本地纹理存储&lt;/td&gt;
&lt;td&gt;系统级的纹理存储管理&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="25-其他系统单元"&gt;2.5 其他系统单元&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;单元前缀&lt;/th&gt;
&lt;th&gt;中文名称&lt;/th&gt;
&lt;th&gt;功能描述&lt;/th&gt;
&lt;th&gt;对应文档&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;idc__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;指令分发单元&lt;/td&gt;
&lt;td&gt;指令分发相关操作&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nsight-compute/ProfilingGuide/index.html"&gt;Nsight Compute Profiling Guide&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;pcie__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PCI Express总线&lt;/td&gt;
&lt;td&gt;CPU-GPU数据传输总线&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nsight-graphics/UserGuide/gpu-trace-system-architecture.html"&gt;Nsight Graphics System Architecture&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;prop__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;预ROP单元&lt;/td&gt;
&lt;td&gt;协调深度和颜色像素处理，管理API顺序&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nsight-graphics/AdvancedLearning/index.html"&gt;Nsight Graphics Advanced Learning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;rtcore__&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;光线追踪核心&lt;/td&gt;
&lt;td&gt;专用光线追踪处理单元&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="三图形管线处理阶段详解"&gt;三、图形管线处理阶段详解&lt;/h2&gt;
&lt;h3 id="31-前端处理world-pipe"&gt;3.1 前端处理（World Pipe）&lt;/h3&gt;
&lt;p&gt;根据&lt;a href="https://docs.nvidia.com/nsight-graphics/AdvancedLearning/index.html"&gt;Nsight Graphics Advanced Learning&lt;/a&gt;：&lt;/p&gt;</description></item><item><title>Nanite: A Deep Dive</title><link>https://mr0ptimist.github.io/posts/karis_nanite_siggraph_advances_2021/</link><pubDate>Mon, 20 Apr 2026 10:00:00 +0800</pubDate><guid>https://mr0ptimist.github.io/posts/karis_nanite_siggraph_advances_2021/</guid><description>&lt;h1 id="nanite-a-deep-dive"&gt;Nanite: A Deep Dive&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;来源&lt;/strong&gt;: &lt;a href="https://advances.realtimerendering.com/s2021/Karis_Nanite_SIGGRAPH_Advances_2021_final.pdf"&gt;Karis_Nanite_SIGGRAPH_Advances_2021_final&lt;/a&gt; — Brian Karis, Rune Stubbe, Graham Wihlidal
&lt;strong&gt;会议&lt;/strong&gt;: SIGGRAPH 2021 &lt;em&gt;Advances in Real-Time Rendering in Games&lt;/em&gt; course
&lt;strong&gt;作者主讲&lt;/strong&gt;: Brian Karis (Engineering Fellow, Epic Games)
&lt;strong&gt;主题&lt;/strong&gt;: UE5 全新虚拟几何系统 Nanite 的深度技术解析&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="目录"&gt;目录&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-%E6%84%BF%E6%99%AF%E4%B8%8E%E7%8E%B0%E5%AE%9E"&gt;愿景与现实&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-%E5%8F%AF%E9%80%89%E6%96%B9%E6%A1%88%E7%9A%84%E6%8E%A2%E7%B4%A2"&gt;可选方案的探索&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-gpu-driven-pipeline"&gt;GPU Driven Pipeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#4-%E4%B8%89%E8%A7%92%E5%BD%A2-cluster-culling-%E4%B8%8E-occlusion-culling"&gt;三角形 Cluster Culling 与 Occlusion Culling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#5-visibility-buffer-%E4%B8%8E%E5%8F%AF%E8%A7%81%E6%80%A7%E6%9D%90%E8%B4%A8%E8%A7%A3%E8%80%A6"&gt;Visibility Buffer 与可见性/材质解耦&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#6-%E6%AC%A1%E7%BA%BF%E6%80%A7%E6%89%A9%E5%B1%95%E4%B8%8E-cluster-%E5%B1%82%E6%AC%A1%E7%BB%93%E6%9E%84"&gt;次线性扩展与 Cluster 层次结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#7-lod-%E8%A3%82%E7%BC%9D%E9%97%AE%E9%A2%98%E4%B8%8E-dag-%E6%9E%84%E5%BB%BA"&gt;LOD 裂缝问题与 DAG 构建&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#8-%E6%9E%84%E5%BB%BA%E6%B5%81%E7%A8%8B%E8%AF%A6%E8%A7%A3build-operations"&gt;构建流程详解（Build Operations）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#9-%E7%AE%80%E5%8C%96%E7%AE%97%E6%B3%95%E4%B8%8E%E8%AF%AF%E5%B7%AE%E5%BA%A6%E9%87%8F"&gt;简化算法与误差度量&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#10-%E8%BF%90%E8%A1%8C%E6%97%B6%E8%A7%86%E7%9B%B8%E5%85%B3-lod-%E9%80%89%E6%8B%A9"&gt;运行时视相关 LOD 选择&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#11-%E5%B9%B6%E8%A1%8C-lod-%E9%80%89%E6%8B%A9%E4%B8%8E%E5%B1%82%E6%AC%A1%E8%A3%81%E5%89%AA"&gt;并行 LOD 选择与层次裁剪&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#12-persistent-threads-%E4%B8%8E%E4%B8%A4-pass-occlusion-culling"&gt;Persistent Threads 与两 Pass Occlusion Culling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#13-%E5%85%89%E6%A0%85%E5%8C%96%E8%BD%AF%E4%BB%B6--%E7%A1%AC%E4%BB%B6%E6%B7%B7%E5%90%88"&gt;光栅化（软件 + 硬件混合）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#14-%E5%B0%8F%E4%B8%89%E8%A7%92%E5%BD%A2%E4%B8%8E%E5%BE%AE%E5%A4%9A%E8%BE%B9%E5%BD%A2%E8%BD%AF%E5%85%89%E6%A0%85%E5%99%A8"&gt;小三角形与微多边形软光栅器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#15-%E5%B0%8F%E5%AE%9E%E4%BE%8Btiny-instances%E4%B8%8E-imposter"&gt;小实例（Tiny Instances）与 Imposter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#16-%E5%BB%B6%E8%BF%9F%E6%9D%90%E8%B4%A8%E6%B1%82%E5%80%BCdeferred-material-evaluation"&gt;延迟材质求值（Deferred Material Evaluation）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#17-%E6%B5%81%E6%B0%B4%E7%BA%BF%E6%80%A7%E8%83%BD%E6%95%B0%E6%8D%AE"&gt;流水线性能数据&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#18-%E9%98%B4%E5%BD%B1virtual-shadow-maps"&gt;阴影：Virtual Shadow Maps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#19-streaming%E5%87%A0%E4%BD%95%E6%B5%81%E9%80%81"&gt;Streaming（几何流送）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#20-%E5%8E%8B%E7%BC%A9%E5%86%85%E5%AD%98%E8%A1%A8%E7%A4%BA%E4%B8%8E%E7%A3%81%E7%9B%98%E8%A1%A8%E7%A4%BA"&gt;压缩：内存表示与磁盘表示&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#21-%E7%BB%93%E6%9E%9C%E4%B8%8E%E6%9C%AA%E6%9D%A5%E5%B7%A5%E4%BD%9C"&gt;结果与未来工作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#22-%E8%87%B4%E8%B0%A2%E4%B8%8E%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE"&gt;致谢与参考文献&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="1-愿景与现实"&gt;1. 愿景与现实&lt;/h2&gt;
&lt;h3 id="11-the-dream梦想"&gt;1.1 The Dream（梦想）&lt;/h3&gt;
&lt;p&gt;像 Virtual Texturing 那样&lt;strong&gt;虚拟化几何&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>UE 纹理流送池与 Shader 调试 CVar 速查</title><link>https://mr0ptimist.github.io/posts/ue%E7%BA%B9%E7%90%86%E6%B5%81%E9%80%81%E6%B1%A0%E4%B8%8Eshader%E8%B0%83%E8%AF%95cvar%E9%80%9F%E6%9F%A5/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://mr0ptimist.github.io/posts/ue%E7%BA%B9%E7%90%86%E6%B5%81%E9%80%81%E6%B1%A0%E4%B8%8Eshader%E8%B0%83%E8%AF%95cvar%E9%80%9F%E6%9F%A5/</guid><description>&lt;h2 id="纹理流送池"&gt;纹理流送池&lt;/h2&gt;
&lt;p&gt;UE 根据流送池预算决定纹理加载哪些 mip level，超出预算时低优先级纹理只加载低分辨率 mip，控制台输出 &lt;code&gt;Texture streaming pool over X MB&lt;/code&gt; 警告。&lt;/p&gt;
&lt;h3 id="查询与调整"&gt;查询与调整&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 运行时查询当前值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;r.Streaming.PoolSize
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 运行时修改（单位 MiB）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;r.Streaming.PoolSize &lt;span style="color:#ae81ff"&gt;3000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="永久设置"&gt;永久设置&lt;/h3&gt;
&lt;p&gt;在 &lt;code&gt;DefaultEngine.ini&lt;/code&gt; 中：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[/Script/Engine.RendererSettings]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;r.Streaming.PoolSize&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;3000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="诊断命令"&gt;诊断命令&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;stat streaming&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看池使用量、各纹理流送状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ListStreamingTextures&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列出所有流送纹理及占用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;r.Streaming.MaxTempMemoryAllowed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;临时内存上限，过小也会导致流送卡顿&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="常见原因与对策"&gt;常见原因与对策&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;原因&lt;/th&gt;
&lt;th&gt;对策&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;纹理分辨率过高 / mip 过多&lt;/td&gt;
&lt;td&gt;降低 TextureGroup 的 MaxLOD 或分辨率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UDIM / 大量贴图同时可见&lt;/td&gt;
&lt;td&gt;拆分 LOD、降低远处 mip&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;预算本身设太小&lt;/td&gt;
&lt;td&gt;合理提高 PoolSize（需匹配目标显存）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;纹理未设 Streaming&lt;/td&gt;
&lt;td&gt;确认 Texture → Never Stream 未勾选&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="shader-调试-cvar"&gt;Shader 调试 CVar&lt;/h2&gt;
&lt;p&gt;在 RenderDoc 中查看 Compute Shader 源码，需在 &lt;code&gt;ConsoleVariables.ini&lt;/code&gt; 的 &lt;code&gt;[Startup]&lt;/code&gt; 段配置以下 CVar：&lt;/p&gt;</description></item><item><title/><link>https://mr0ptimist.github.io/posts/claude/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://mr0ptimist.github.io/posts/claude/</guid><description>Hugo 博客 content/posts 目录下 Markdown 文章的 front matter 格式与写作规范</description></item></channel></rss>