<?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>GAMES202 on The Only Problem&#39;s Blog</title>
    <link>https://congyuxiaoyoudao.github.io/tags/games202/</link>
    <description>Recent content in GAMES202 on The Only Problem&#39;s Blog</description>
    <generator>Hugo -- 0.157.0</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 16 Jun 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://congyuxiaoyoudao.github.io/tags/games202/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Assignment 8. GAMES202 Homework 5</title>
      <link>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-5/</link>
      <pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-5/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;202 系列完结撒花 ✿✿ヽ(°▽°)ノ✿！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;0x00-to-begin-with&#34;&gt;0x00 To begin with&lt;/h2&gt;
&lt;p&gt;这篇文章将会包含以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 部分课程内容回顾&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; GAMES202 作业 5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;For reference&lt;/strong&gt;👇：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📺B 站视频：







  
  &lt;a href=&#34;https://www.bilibili.com/video/BV1YK4y1T7yY/?spm_id_from=333.337.top_right_bar_window_custom_collection.content.click&amp;amp;vd_source=b6584cebba3a7a1a34d2f60d63bdc868&#34;&gt;GAMES202-高质量实时渲染&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;📦代码仓库：







  
  &lt;a href=&#34;https://github.com/congyuxiaoyoudao/GAMES202_Homework/tree/working&#34;&gt;congyuxiaoyoudao/GAMES202_Homework at working&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;







  
  &lt;a href=&#34;https://games-cn.org/forums/topic/zuoye5fabugonggao/&#34;&gt;作业5发布公告及场景下载&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;📖







  
  &lt;a href=&#34;https://zhuanlan.zhihu.com/p/607012514&#34;&gt;GAMES202-作业5：实时光线追踪降噪&lt;/a&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;master 分支上是 202 全部作业汇总，working 分支用于提交代码。需要原始作业可下载 master 分支的包&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;0x01-问题修复-troubleshooting&#34;&gt;0x01 问题修复 TroubleShooting&lt;/h2&gt;
&lt;p&gt;做作业时遇到一些出现问题的地方，这里一并提一下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;运行 build.bat 后 build 目录下没有出现可执行文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReadFloatImage&lt;/code&gt; 方法报错&lt;/li&gt;
&lt;li&gt;mathutil.h 中 &lt;code&gt;uint32_t&lt;/code&gt; was not declared in this scope&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;第一个问题纯属对 Cmake 不熟练，build.bat 提供的命令只是生成工程文件，要运行构建还需要如下命令（或者直接用 VS 等 IDE 运行）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;cmake --build build
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里为了简化运行操作，新增了一个 run.bat：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;cmake --build build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;Denoise.exe
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ..
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第二个问题为路径错误，下载完场景后我的根目录文件结构如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Assignment 7. GAMES202 Homework 4</title>
      <link>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-4/</link>
      <pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-4/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;好久不见！最近在忙别的工作，这几天难得有时间，赶紧把 202 系列作业做个收尾ε٩(๑&amp;gt; ₃ &amp;lt;)۶з！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;0x00-to-begin-with&#34;&gt;0x00 To begin with&lt;/h2&gt;
&lt;p&gt;这篇文章将会包含以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 部分课程内容回顾&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; GAMES202 作业 4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;For reference&lt;/strong&gt;👇：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📺B 站视频：







  
  &lt;a href=&#34;https://www.bilibili.com/video/BV1YK4y1T7yY/?spm_id_from=333.337.top_right_bar_window_custom_collection.content.click&amp;amp;vd_source=b6584cebba3a7a1a34d2f60d63bdc868&#34;&gt;GAMES202-高质量实时渲染&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;📦代码仓库：







  
  &lt;a href=&#34;https://github.com/congyuxiaoyoudao/GAMES202_Homework/tree/working&#34;&gt;congyuxiaoyoudao/GAMES202_Homework at working&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;📃 







  
  &lt;a href=&#34;https://blog.selfshadow.com/publications/s2017-shading-course/imageworks/s2017_pbs_imageworks_slides_v2.pdf&#34;&gt;Revisiting Physically Based Shading at Imageworks&lt;/a&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;master 分支上是 202 全部作业汇总，working 分支用于提交代码。需要原始作业可下载 master 分支的包&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;0x01-课程回顾-recap&#34;&gt;0x01 课程回顾 Recap&lt;/h2&gt;
&lt;h3 id=&#34;能量守恒的-bsdf-energy-preserving-bsdfs&#34;&gt;能量守恒的 BSDF Energy-Preserving BSDFs&lt;/h3&gt;
&lt;p&gt;Cook-Torrance 提出的微表面 BRDF 只考虑光线在表面经过一次弹射后出射到观察方向的能量，然而忽略了多次弹射最终出射到观察方向的能量，这就造成了能量损失。尤其是当材质的 roughness 较高时，G 项减小，多次弹射的比例增加，能量损失越严重。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Missing Energy of Microfacet BRDF, Revisiting Physically Based Shading at Imageworks, SIGGRAPH 2017&#34; loading=&#34;lazy&#34; src=&#34;https://raw.gitmirror.com/congyuxiaoyoudao/Picgo-ImageBed/main/Assignments/Assignment%207.GAMES202HW4/202506151740381.png#center&#34;&gt;&lt;/p&gt;
&lt;p&gt;2017 年 Kulla 和 Conty 受到 Disney Principle BRDF 的启发，提出了一种改进的方法，即通过引入一个能量补偿项，将多次弹射出射到观察方向的能量补充回来，就能近似地保持能量守恒。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Assignment 6. GAMES202 Homework 3</title>
      <link>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-3/</link>
      <pubDate>Sat, 10 May 2025 00:00:00 +0000</pubDate>
      <guid>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-3/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;HiZ 还在施工中……&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;0x00-to-begin-with&#34;&gt;0x00 To begin with&lt;/h2&gt;
&lt;p&gt;这篇文章将会包含以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 部分课程内容回顾&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; GAMES202 作业 3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;For reference&lt;/strong&gt;👇：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📺B 站视频：







  
  &lt;a href=&#34;https://www.bilibili.com/video/BV1YK4y1T7yY/?spm_id_from=333.337.top_right_bar_window_custom_collection.content.click&amp;amp;vd_source=b6584cebba3a7a1a34d2f60d63bdc868&#34;&gt;GAMES202-高质量实时渲染&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;📦代码仓库：







  
  &lt;a href=&#34;https://github.com/congyuxiaoyoudao/GAMES202_Homework/tree/working&#34;&gt;congyuxiaoyoudao/GAMES202_Homework at working&lt;/a&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;master 分支上是 202 全部作业汇总，working 分支用于提交代码。需要原始作业可下载 master 分支的包&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;0x01-课程回顾-recap&#34;&gt;0x01 课程回顾 Recap&lt;/h2&gt;
&lt;p&gt;SSR（Screen Space Reflection）是一种基于屏幕空间的反射算法，也被应用于模拟全局光照。因为是屏幕空间的算法，不能且无需像传统全局光照算法那样需要获取场景的原始几何信息，而是只在当前相机的视野范围计算反射，所以效率相对较高，但也存在一些屏幕空间的 Artifacts。&lt;/p&gt;
&lt;p&gt;SSR 算法有两个假设：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;屏幕范围内的反射光，其反射源也同样来自屏幕空间的某个像素；&lt;/li&gt;
&lt;li&gt;所有被直接光照亮的物体（在屏幕空间中则表现为像素），都可以作为次级光源参与对反射的贡献；&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;SSR 对反射表面没有要求，即不仅能模拟镜面反射，还可以模拟各种粗糙度的反射&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;重用屏幕空间信息 GAMES202&#34; loading=&#34;lazy&#34; src=&#34;https://raw.gitmirror.com/congyuxiaoyoudao/Picgo-ImageBed/main/Assignments/Assignment%206.GAMES202HW3/202505192155513.png#center&#34;&gt;&lt;/p&gt;
&lt;p&gt;SSR 算法的步骤如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对每个需要计算反射的像素沿反射方向发射一条光线；&lt;/li&gt;
&lt;li&gt;沿光线方向步进在屏幕空间中查找深度缓冲并与场景求交；&lt;/li&gt;
&lt;li&gt;若有交点，则将交点颜色作为反射颜色添加到原始像素上；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;其中最关键的步骤就是光线求交，最简单的方法就是 Linear RayMarching，光线每次行进一个固定的距离，每次行进后获取该位置的深度值再与场景深度进行比较，如果某次判断光线深度大于场景深度，则认为发生了相交。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;固定步长的光线步进 GAMES202&#34; loading=&#34;lazy&#34; src=&#34;https://raw.gitmirror.com/congyuxiaoyoudao/Picgo-ImageBed/main/Assignments/Assignment%206.GAMES202HW3/202505192214607.png#center&#34;&gt;&lt;/p&gt;
&lt;p&gt;当然这种方法的精细度很依赖光线步长，小的步长效果更好但消耗大，反之，更大的步长则可能导致光线“穿过”场景而误判相交，造成错误计算反射的情况。&lt;/p&gt;
&lt;p&gt;为了在提高精度的同时节省开销，研究人员又提出了一种动态步长的方法，即 Hierarchical ray trace。允许光线根据场景信息在行进期间选取不同的步长，例图中光线一开始至少可以以 7 倍的 gap 作为步长，之后再缩减到原始的步长。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;层级光线追踪 GAMES202&#34; loading=&#34;lazy&#34; src=&#34;https://raw.gitmirror.com/congyuxiaoyoudao/Picgo-ImageBed/main/Assignments/Assignment%206.GAMES202HW3/202505192226586.png#center&#34;&gt;&lt;/p&gt;
&lt;p&gt;说到实时渲染中的一些动态操作，几乎就离不开预处理。同样的，这种方法运行的前提是，光线需要知道行进的“最大安全距离”，即可以迈多大的步子而不与场景发生相交。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这里最大安全距离是类比 SDF 的说法，或者应该说当前层级规定的步长&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一种实现它的方法是预先生成深度图的 Mip-Map，这里四个像素的最小值作为 Mip 生成的逻辑，具体原因涉及到比较的保号性：如果光线与上一级 Mip 都不相交（$D_{ray}&lt;D_{M_{i+1}}$），则其一定与下级不相交（$D_{ray}&lt;any_{4}\{D_{M_{i}}\}$ ）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Assignment 5. GAMES202 Homework 2</title>
      <link>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-2/</link>
      <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-2/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;(∩^o^)⊃━☆ﾟ.*･｡&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;0x00-to-begin-with&#34;&gt;0x00 To begin with&lt;/h2&gt;
&lt;p&gt;这篇文章将会包含以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 部分课程内容回顾&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; GAMES202 作业 2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;For reference&lt;/strong&gt;👇：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📺B 站视频：







  
  &lt;a href=&#34;https://www.bilibili.com/video/BV1YK4y1T7yY/?spm_id_from=333.337.top_right_bar_window_custom_collection.content.click&amp;amp;vd_source=b6584cebba3a7a1a34d2f60d63bdc868&#34;&gt;GAMES202-高质量实时渲染&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;📦代码仓库：







  
  &lt;a href=&#34;https://github.com/congyuxiaoyoudao/GAMES202_Homework/tree/working&#34;&gt;congyuxiaoyoudao/GAMES202_Homework at working&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;📃







  
  &lt;a href=&#34;https://dl.acm.org/doi/10.1145/15886.15902&#34;&gt;The rendering equation | ACM SIGGRAPH Computer Graphics&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;📃







  
  &lt;a href=&#34;https://dl.acm.org/doi/10.1145/566654.566612&#34;&gt;Precomputed radiance transfer for real-time rendering in dynamic, low-frequency lighting environments | ACM Transactions on Graphics&lt;/a&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;master 分支上是 202 全部作业汇总，working 分支用于提交代码。需要原始作业可下载 master 分支的包&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;0x01-前置准备-warm-up&#34;&gt;0x01 前置准备 Warm Up&lt;/h2&gt;
&lt;h3 id=&#34;渲染方程-render-equation&#34;&gt;渲染方程 Render Equation&lt;/h3&gt;
&lt;p&gt;James T. Kajiya（没错就是那个提出 Kajiya-Kay 头发着色模型的 Kajiya）在 1986 年提出了渲染方程（The Render Equation），原论文里长这样：&lt;/p&gt;
&lt;div&gt;$$
I(x,x&#39;)=g(x,x&#39;)\left[ \epsilon(x,x&#39;)+\int_{S}\rho(x,x&#39;,x&#39;&#39;)I(x&#39;,x&#39;&#39;)dx&#39;&#39; \right]
$$&lt;/div&gt;
&lt;p&gt;当然现在看得更舒服的形式长这样：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Assignment 4. GAMES202 Homework 1</title>
      <link>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-1/</link>
      <pubDate>Mon, 14 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-1/</guid>
      <description>&lt;hr&gt;
&lt;h2 id=&#34;-0x00-to-begin-with&#34;&gt;🚩 0x00 To begin with&lt;/h2&gt;
&lt;p&gt;这篇文章将会包含以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; GAMES202 作业 1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;For reference&lt;/strong&gt;👇：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📺 B 站视频：







  
  &lt;a href=&#34;https://www.bilibili.com/video/BV1YK4y1T7yY/?spm_id_from=333.337.top_right_bar_window_custom_collection.content.click&amp;amp;vd_source=b6584cebba3a7a1a34d2f60d63bdc868&#34;&gt;GAMES202-高质量实时渲染&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;📦 代码仓库：







  
  &lt;a href=&#34;https://github.com/congyuxiaoyoudao/GAMES202_Homework/tree/working&#34;&gt;congyuxiaoyoudao/GAMES202_Homework at working&lt;/a&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;master 分支上是 202 全部作业汇总，working 分支用于提交代码。需要原始作业可下载 master 分支的包&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;0x01-shadow-map&#34;&gt;0x01 Shadow Map&lt;/h2&gt;
&lt;p&gt;完成两个任务点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;第一个 Pass 以光源作为相机渲染一张 ShadowMap，需要为 Shader 传递正确的 &lt;code&gt;uLightMVP&lt;/code&gt; 矩阵；&lt;/li&gt;
&lt;li&gt;第二个 Pass 获取光源传递的统一变量 FBO （ShadowMap），需要比较当前 ShadingPoint 的深度值与 ShadowMap 上记录的深度值，得出可见性项与 Shading 结果相乘。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DirectionalLight.js 中，完善 &lt;code&gt;CalcLightMVP&lt;/code&gt; 函数：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://raw.gitmirror.com/congyuxiaoyoudao/Picgo-ImageBed/main/Assignments/Assignment%204.GAMES202HW1/202504151505787.png#center&#34;&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-glsl&#34; data-lang=&#34;glsl&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;c1&#34;&gt;// Model transform&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;mat4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;translate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modelMatrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;modelMatrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;translate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;mat4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modelMatrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;modelMatrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// View transform&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;mat4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lookAt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;viewMatrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lightPos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;focalPoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lightUp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// Projection transform&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;l&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.01&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// caution! Depth of far plane should be a bit more larger&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;mat4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ortho&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;projectionMatrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;远平面需设置得稍微大一点，避免光源的视锥范围无法覆盖全部场景&lt;/p&gt;</description>
    </item>
    <item>
      <title>Assignment 3. GAMES202 Homework 0</title>
      <link>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-0/</link>
      <pubDate>Mon, 07 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://congyuxiaoyoudao.github.io/posts/assignments/games202-homework-0/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;开个新坑，之前囫囵吞枣地过了一遍 202，现在忘得差不多了，该捡起来。正好给枯燥的生活增添一点色彩（？），最近比较忙但还是争取一周做一个作业&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-0x00-to-begin-with&#34;&gt;🚩 0x00 To begin with&lt;/h2&gt;
&lt;p&gt;这篇文章将会包含以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; GAMES202 作业 0&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;不&lt;/strong&gt;包含作业框架分析&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;For reference&lt;/strong&gt;👇：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📺 B 站视频：







  
  &lt;a href=&#34;https://www.bilibili.com/video/BV1YK4y1T7yY/?spm_id_from=333.337.top_right_bar_window_custom_collection.content.click&amp;amp;vd_source=b6584cebba3a7a1a34d2f60d63bdc868&#34;&gt;GAMES202-高质量实时渲染&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;📦 代码仓库：







  
  &lt;a href=&#34;https://github.com/congyuxiaoyoudao/GAMES202_Homework/tree/working&#34;&gt;congyuxiaoyoudao/GAMES202_Homework at working&lt;/a&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;master 分支上是 202 全部作业汇总，working 分支用于提交代码。需要原始作业可下载 master 分支的包&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-0x01-configuration-环境配置&#34;&gt;⚙️ 0x01 Configuration 环境配置&lt;/h2&gt;
&lt;p&gt;选择使用 VSCode 插件搭建本地服务器，在扩展中搜索 Live Server，安装此插件。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://raw.gitmirror.com/congyuxiaoyoudao/Picgo-ImageBed/main/Assignments/Assignment%203.GAMES202HW0/202504072204421.png#center&#34;&gt;&lt;/p&gt;
&lt;p&gt;在编辑 Html 代码窗口按 F1（或者右键）选择 &lt;strong&gt;Live Server: Open with Live Server&lt;/strong&gt;，随后会自动打开浏览器，导航至本地服务器端口，一切正常的话是下面这个效果：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://raw.gitmirror.com/congyuxiaoyoudao/Picgo-ImageBed/main/Assignments/Assignment%203.GAMES202HW0/202504072210368.png#center&#34;&gt;&lt;/p&gt;
&lt;p&gt;可以使用鼠标和右上角的控制面板进行一些简单的交互。&lt;/p&gt;
&lt;p&gt;如果遇到模型贴图加载不出来（只有 202 字样），可以选择多刷新几次。或者直接在加载脚本前预加载贴图，可以根治这个问题。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;preload&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;assets/mary/MC003_Kozakura_Mari.png&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;image&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;image/png&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;crossorigin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;-0x02-blinn-phong-shading-model&#34;&gt;🤔 0x02 Blinn-Phong Shading Model&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;没什么好说的，CV 工程师&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;使用-glsl-编写-shader&#34;&gt;&lt;strong&gt;使用 GLSL 编写 Shader&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;如果使用字符串的方式引入 Shader，就在 InternalShader.js 中加上：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
