<?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 榎aaaa的个人主页</title><link>https://jiat-t.github.io/categories/%E5%9B%BE%E5%BD%A2%E5%AD%A6/</link><description>Recent content in 图形学 on 榎aaaa的个人主页</description><image><title>榎aaaa的个人主页</title><url>https://jiat-t.github.io/images/avatar.jpg</url><link>https://jiat-t.github.io/images/avatar.jpg</link></image><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sat, 20 Jun 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://jiat-t.github.io/categories/%E5%9B%BE%E5%BD%A2%E5%AD%A6/index.xml" rel="self" type="application/rss+xml"/><item><title>Split-Sum IBL</title><link>https://jiat-t.github.io/graphics/split-sum-ibl/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0800</pubDate><guid>https://jiat-t.github.io/graphics/split-sum-ibl/</guid><description>整理 PBR IBL 中 Irradiance Map、Prefiltered Environment Map 与 BRDF LUT 的拆分思路和运行时组合方式。</description></item><item><title>PBR 材质模型</title><link>https://jiat-t.github.io/graphics/pbr-models/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0800</pubDate><guid>https://jiat-t.github.io/graphics/pbr-models/</guid><description>对比 PBR 中 Metallic-Roughness 与 Specular-Glossiness 两种材质工作流的贴图结构、能量守恒约束和显存开销。</description></item><item><title>GAMES104：大气与云的渲染</title><link>https://jiat-t.github.io/graphics/games104-atmosphere-and-clouds/</link><pubDate>Sun, 14 Jun 2026 10:28:47 +0000</pubDate><guid>https://jiat-t.github.io/graphics/games104-atmosphere-and-clouds/</guid><description>记录高度场地形、三角形与四叉树细分的基本思路，以及地形 LOD 和层级管理问题。</description></item><item><title>GAMES104：渲染实践</title><link>https://jiat-t.github.io/graphics/games104-rendering-practice/</link><pubDate>Tue, 09 Jun 2026 10:32:42 +0000</pubDate><guid>https://jiat-t.github.io/graphics/games104-rendering-practice/</guid><description>整理 GPU 执行架构、渲染资源组织、可见性裁剪、纹理压缩与 Cluster/Nanite 模型管线。</description></item><item><title>Pathtracer 梳理</title><link>https://jiat-t.github.io/graphics/pathtracer-code-notes/</link><pubDate>Tue, 02 Jun 2026 06:16:19 +0000</pubDate><guid>https://jiat-t.github.io/graphics/pathtracer-code-notes/</guid><description>按路径追踪、几何与 BVH、材质接口、PBR 和 IBL/MIS 梳理个人渲染器的代码职责与工程优化。</description></item><item><title>CPU 路径追踪器项目细节</title><link>https://jiat-t.github.io/graphics/pathtracer-project-details/</link><pubDate>Tue, 26 May 2026 05:46:15 +0000</pubDate><guid>https://jiat-t.github.io/graphics/pathtracer-project-details/</guid><description>整理个人 CPU 路径追踪器的模块分工、PBR 与 IBL、MIS 采样及 BVH 和多线程性能优化。</description></item><item><title>Whitted-style 光线追踪与 Monte Carlo 路径追踪的主要区别</title><link>https://jiat-t.github.io/posts/others/witted-and-mote-carlo/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://jiat-t.github.io/posts/others/witted-and-mote-carlo/</guid><description>&lt;h3 id="一whitted-style-光线追踪"&gt;一：Whitted-style 光线追踪&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;流程：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从相机发出主光线&lt;/li&gt;
&lt;li&gt;命中物体之后根据材质种类继续发射：
&lt;ul&gt;
&lt;li&gt;反射光线&lt;/li&gt;
&lt;li&gt;折射光线&lt;/li&gt;
&lt;li&gt;阴影光线&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;最后通过递归计算所有光线对像素的贡献值&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;主要用于&lt;strong&gt;模拟直接光照与理想情况下的反射、折射现象&lt;/strong&gt;，对于真实世界的漫反射、全局光照、颜色渗透等并不擅长，因为它的路径通常是确定的：遇到镜面就反射，遇到玻璃就折射。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="二monte-carlo-路径追踪"&gt;二：Monte Carlo 路径追踪&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;流程：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从相机发出射线&lt;/li&gt;
&lt;li&gt;命中物体后根据 BRDF 随机选择次级射线发射方向
&lt;ul&gt;
&lt;li&gt;漫反射方向&lt;/li&gt;
&lt;li&gt;高光方向&lt;/li&gt;
&lt;li&gt;透射方向&lt;/li&gt;
&lt;li&gt;&amp;hellip;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;经过多次采样之后求得平均值&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;因为光线传播方向的多样性，路径追踪可以&lt;strong&gt;很好地模拟诸如漫反射间接光、软阴影、全局光照等现象&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&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;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;Whitted Ray Tracing&lt;/td&gt;
&lt;td&gt;Monte Carlo Path Tracing&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;/tr&gt;
&lt;tr&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;/tr&gt;
&lt;tr&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;/tr&gt;
&lt;tr&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;</description></item><item><title>如何混合法线贴图</title><link>https://jiat-t.github.io/posts/others/normal-combination/</link><pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate><guid>https://jiat-t.github.io/posts/others/normal-combination/</guid><description>&lt;h3 id="一linear-blending"&gt;&lt;font style="color:#117CEE;"&gt;一：Linear Blending&lt;/font&gt;&lt;/h3&gt;
&lt;p&gt;代码实现：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;float3&lt;/span&gt; &lt;span class="n"&gt;normal_1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tex2D&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;normal_tex1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;xyz&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;2.0f&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;1.0f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;float3&lt;/span&gt; &lt;span class="n"&gt;normal_2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tex2D&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;normal_tex2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;xyz&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;2.0f&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;1.0f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;float3&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;normal_1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;normal_2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这是一种非常暴力的方法，实现起来也是最简单的（相加后再归一化即可）；虽然最终可以实现混合法线贴图的效果，但是会导致&lt;strong&gt;混合后的法线变平，细节也就会更加模糊&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;产生这种结果的原因有两个，可以分别从&lt;strong&gt;几何维度与物理维度&lt;/strong&gt;的方向来分析：&lt;/p&gt;
&lt;p&gt;&lt;font style="background-color:#F1A2AB;"&gt;1.几何维度：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;法线本质上是定义在球面上的向量，当我们使用线性的公式对两个法线向量进行混合时，计算的路径实际上是沿着“弦”而非“弧”进行的；这会导致&lt;strong&gt;两个法线向量相加得到的中间向量的模始终小于 1&lt;/strong&gt;，虽然可以通过normalize 将模长拉回至 1，但这又会使得“** 角速度非均匀** ”，表现在混合后的法线上就是：&lt;u&gt;混合结果在中间部分的变化比两端更慢，并且高频的法线会在这种非线性的映射中被抹平&lt;/u&gt;，产生“&lt;strong&gt;细节模糊&lt;/strong&gt;”；细节模糊的另一个原因是——当两个法线的方向差异过大（接近180度，也就是反向）时，这样的&lt;u&gt;线性混合得到的结果会趋近于垂直向上，丢失了原有的细节&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style="background-color:#F1A2AB;"&gt;2.物理维度：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;法线贴图存储的并不是颜色，而是物体表面的偏导数（斜率），如果使用处理颜色的办法去混合两个法线，&lt;strong&gt;只会导致数据的平均，而不是细节的叠加&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;e.g. 有两张法线贴图，一张代表“砖块的粗糙纹理”，另一张代表“划痕”，线性混合的行为逻辑是：“我有 50% 像砖块，50% 像划痕”， 但真实的逻辑应该是：“在砖块的斜率基础上，叠加划痕的斜率”&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;代码实现：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;float3&lt;/span&gt; &lt;span class="n"&gt;normal_1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tex2D&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;normal_tex1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;xyz&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;2.0f&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;1.0f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;float3&lt;/span&gt; &lt;span class="n"&gt;normal_2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tex2D&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;normal_tex2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;xyz&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;2.0f&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;1.0f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;float3&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;normal_1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;normal_1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nl"&gt;normal_2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="err"&gt;–&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;normal_1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;normal_2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;相比于线性混合，Overlay Blending 是对两张法线贴图进行了类似 PS 中“正片叠底”的处理，虽然 overlay 对于增强二维图像的对比度又很好的效果，但是法线贴图本身并不应该被当作颜色贴图进行处理；overlay 并不理解法线贴图存储的是斜率信息，因此他会对x、y、z分量无差别地进行非线性缩放，这会导致严重的数学错误与视觉伪影&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="三partical-derivative-blending"&gt;&lt;font style="color:#117CEE;"&gt;三：Partical Derivative Blending&lt;/font&gt;&lt;/h3&gt;
&lt;p&gt;代码实现：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;float3&lt;/span&gt; &lt;span class="n"&gt;normal_1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tex2D&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texBase&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;xyz&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;float3&lt;/span&gt; &lt;span class="n"&gt;normal_2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tex2D&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texDetail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;xyz&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;float2&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;normal_1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xy&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;normal_1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;normal_2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xy&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;normal_2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Add the PDs
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;float3&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;float3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;根据导数的线性性质：&lt;/p&gt;
$$
\frac{\partial F_{total}}{\partial x} = \frac{\partial f_1}{\partial x} + \frac{\partial f_2}{\partial x}
$$&lt;p&gt;可以得知要想混合两个法线，需要&lt;strong&gt;对它们在切空间中对应的表面梯度进行线性累加，然后将合成后的梯度重新投影回法线空间&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>GAMES101 作业 5：基础光线追踪</title><link>https://jiat-t.github.io/graphics/games101-assignment-5/</link><pubDate>Thu, 26 Mar 2026 07:38:19 +0000</pubDate><guid>https://jiat-t.github.io/graphics/games101-assignment-5/</guid><description>整理从像素坐标生成相机光线的空间变换流程，以及三角形求交的基础实现。</description></item><item><title>GAMES104：如何构建游戏世界</title><link>https://jiat-t.github.io/graphics/games104-game-world/</link><pubDate>Thu, 26 Mar 2026 01:08:36 +0000</pubDate><guid>https://jiat-t.github.io/graphics/games104-game-world/</guid><description>整理 Game Object 与组件化、Tick 更新、事件交互和场景空间管理的基本思路。</description></item><item><title>GAMES104：引擎架构分层</title><link>https://jiat-t.github.io/graphics/games104-engine-architecture/</link><pubDate>Wed, 25 Mar 2026 07:55:05 +0000</pubDate><guid>https://jiat-t.github.io/graphics/games104-engine-architecture/</guid><description>记录资源层、功能层、核心层、平台层与工具层的职责，以及引擎分层和依赖方向。</description></item><item><title>GAMES101 作业 4：Bézier 曲线</title><link>https://jiat-t.github.io/graphics/games101-assignment-4/</link><pubDate>Sun, 22 Mar 2026 06:46:41 +0000</pubDate><guid>https://jiat-t.github.io/graphics/games101-assignment-4/</guid><description>记录 De Casteljau 递归插值绘制 Bézier 曲线的方法，以及采样步长与曲线绘制代码。</description></item><item><title>GAMES101 作业 2：三角形光栅化</title><link>https://jiat-t.github.io/graphics/games101-assignment-2/</link><pubDate>Thu, 19 Mar 2026 06:55:49 +0000</pubDate><guid>https://jiat-t.github.io/graphics/games101-assignment-2/</guid><description>记录三角形内部判断、包围盒遍历、重心坐标与深度测试的光栅化实现。</description></item></channel></rss>