本项目基于 Taichi 编程语言实现了一个高性能的实时光线追踪渲染器。通过隐式几何求交算法,在不依赖外部模型的情况下,直接在 GPU/Vulkan 上驱动三维场景的生成。
-
红色球体: 利用球体方程
$(P-C)^2 = r^2$ 进行求交。圆心设为 (-1.2, -0.2, 0),半径 1.2。 - 紫色圆锥: 顶点位于 (1.2, 1.2, 0),通过轴向投影与角度判定实现。底面高度限制在 y = -1.4,底面半径 1.2。
-
任务目标: 为每个像素发射射线,并计算所有几何体的交点距离
$t$ 。 -
实现: 核心代码实现了深度竞争逻辑。如果射线同时击中球体和圆锥,程序会自动选择最小的正数
$t$ 进行着色。这保证了当球体位于圆锥前方时,能产生正确的遮挡关系。
- 模型实现: 实现了 Ambient(环境光)、Diffuse(漫反射)和 Specular(镜面高光)三部分。
-
升级点: 使用半程向量
$athbf{H}$ (Halfway Vector) 替换了标准 Phong 模型中的反射向量$athbf{R}$ 。 - 表现差异: Blinn-Phong 模型在大入射角下能产生更平滑、更符合物理直觉的高光边缘,避免了传统 Phong 模型的高光骤减问题。
- 原理: 引入了 Shadow Ray(暗影射线)。在击中点向光源方向进行二次投射。
- 效果: 若射线在路径上被其他几何体遮挡,则该点仅接受环境光,产生了清晰的硬阴影边界。
通过左上角的交互面板,可以实时调整以下物理参数,观察材质变化:
- Ka: 环境光强度系数 (默认 0.2)
- Kd: 漫反射强度系数 (默认 0.7)
- Ks: 镜面高光强度系数 (默认 0.5)
- Shininess: 表面高亮指数 (1.0 - 128.0)
- Python 3.12+
- Taichi 1.7.4 (Vulkan Backend)
- 执行:
uv run main.py
- 学号:202411081041
- 姓名:许铭洋
- 专业:计算机科学与技术
