cover

【CG】 Photon Mapping 介绍篇

Introduction Photon Mapping 是由 Henrik Wann Jensen 于 1996 年提出的一种全局光照方法,它高效解决了 Caustics 这一在经典 Path Tracing 中难以收敛的问题。 Photon Mapping 是一个 two pass 的方法,在 Pass 1 中首先通过场景的光源向场景中发射大量 Photon 并且当这些 Photon 击中物体表面时在该物体的表面使用 两张 photon Map 存储这些 Photon 的信息,一张高分辨率的 Map 用于渲染 Caustics,一张低分辨率的 Map 用于给 Pass 2 提供信息。 ...

September 10, 2026 · 5 min · 2378 words · 氧均竭

【CG】150行C++路径追踪

学了 离线渲染 相关的知识这么久了,自己也写过一些渲染器,但是我认为我对渲染器中的积分器的实现的理解还是不够透彻,于是打算写一个简单的 path tracer 程序来加深自己的印象 ,于是就得到了(无第三方库 代码 ...

August 22, 2026 · 3 min · 1098 words · 氧均竭

【CG】正确使用 C++ 写一个均匀半球采样

我们都知道标准的 Rendering Equation 是 $$ L_o(p, \omega_o) = L_e(p, \omega_o) + \int_{\Omega } f_r(p,\omega_i, \omega_o) L_i(p,\omega_i) (\mathbf{n}\cdot\omega_i) d\omega_i $$ 而我们需要计算一个以 $p$ 点为球心,以 $p$ 点法线 $n$ 方向为半球区域 $\Omega$ 的积分 而这个积分没有解析解,所以我们通常需要通过 Monte Carlo 方法进行求解。 将 Rendering Equation 写成 Monte Carlo Estimator 得到 ...

August 22, 2026 · 6 min · 2534 words · 氧均竭

【CG】 Perlin Noise

柏林噪声 | Perlin Noise 在很多游戏中,比如 Minecraft 的地形生成,怪物猎人的云,大部分游戏中的火焰,水面的纹理都是基于 Perlin Noise 实现的 而这篇文章我们将学习 Perlin Noise 的基本思想,以及使用 C++ 实现一个基本的二维 Perlin Noise ...

July 23, 2026 · 4 min · 1792 words · 氧均竭

【CG】 屏幕空间导数

介绍 在光栅化中我们通过定义三角形的三个顶点的各种属性并对其进行重心坐标插值而得到三角形内部点的属性,而我们又经常需要知道在屏幕空间中三角形内部两个相邻的像素间其对应的三维空间中点的属性的变化率(在连续空间中变化率就是导数),简单说就是当像素变化了一个单位时其他属性的变化量是多少。 ...

July 3, 2026 · 4 min · 1570 words · 氧均竭

【CG | Paper Reading】A Reflectance Model for Computer Graphics

前言 《A Reflectance Model for Computer Graphics1》由 Robert L. Cook(来自 Lucasfilm)和 Kenneth E. Torrance(来自康奈尔大学)于 1982 年发表于 SIGGRAPH 这篇论文是计算机图形学中最常用的反射模型,在看这篇论文之前我已经了解过论文中提到的模型了,不过是经过改进的现代模型,现在让我们看看原文是怎么写的,主要聚焦于Cook-Torrance 反射模型 ...

May 25, 2026 · 5 min · 2001 words · 氧均竭

【CG | Re0:PathTracing】 Specular Reflection | 0x04

Abstract 上一节,我们学习并实现了简单的 Lambertian 漫反射材质模型,这一节我们将学习更复杂的 Cook-Torrance 材质模型并将其实现到我们现有的渲染器中。 Microfacet Theory 上一节,我们也提到过“在 Re0:0x02 中我们给出了 BRDF 的定义,但是那只是定义式是没办法用于真正计算的,所以我们需要对真实的材质在我们的定义式下进行建模,通过建模后的式子才适合用于计算”,然后我们给出了简单的漫反射材质模型,这一节我们将学习更复杂的材质模型。而这个材质模型是由 Robert L. Cook(来自 Lucasfilm)和 Kenneth E. Torrance(来自康奈尔大学)于 1982 年发表的《计算机图形学的反射模型》(A Reflectance Model for Computer Graphics1)所提出的。我们将结合这篇论文、 Google filament 的白皮书 《Physically Based Rendering in Filament2》和 Real Shading in Unreal Engine 43 来仔细讲解和实现。 ...

May 25, 2026 · 5 min · 2412 words · 氧均竭

【CG | Re0:PathTracing】实现 IS RR NEE MIS | 0x03

背景 上次学习了 Radiometry&Monte Carlo Integration 的理论知识,现在觉得自己很强,想学习一下怎么将理论应用到实践中了,你准备在你第一次实现的那个最简单的渲染器上进行扩展,并加入一些新的材质、和优化方法,并且进一步理解上次代码中不懂得一些问题 ...

May 18, 2026 · 17 min · 8328 words · 氧均竭

【CG | Re0:PathTracing】Radiometry&Monte Carlo Integration | 0x02

背景 你根据给出的 README 成功构建了一个最简单的 Path Tracing Renderer 渲染出来了自己的第一个 Cornell Box,并且心怀忐忑的将答卷交到了 CGLab 的邮箱中去,虽然最终结果看起来很丑陋,整幅图都是噪点,而且渲染出来的速度非常慢,但是说到底也是渲染出来了。 ...

May 6, 2026 · 16 min · 7793 words · 氧均竭

【CG | Re0:PathTracing】 从零开始搓一个路径追踪渲染器 | 0x01

背景 你在一个教室中趴在桌子上睡觉,天色开始逐渐变红,教室中的窗帘被一阵风拍的开始乱飞,你被惊醒,发现同学都不见了,你跑出教室,下楼的时候你突然脚滑摔晕。 ...

April 17, 2026 · 32 min · 15588 words · 氧均竭