<?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>图形渲染 on MrOptimist</title><link>https://mr0ptimist.github.io/categories/%E5%9B%BE%E5%BD%A2%E6%B8%B2%E6%9F%93/</link><description>Recent content in 图形渲染 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/categories/%E5%9B%BE%E5%BD%A2%E6%B8%B2%E6%9F%93/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>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>移动端 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>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></channel></rss>