Games101 笔记 13 光线跟踪1

光栅化不容易做全局性的效果

  • 软阴影
  • 毛玻璃
  • 间接光照

 


光线跟踪准确的, 但是比较慢.

基础光线追踪算法

光线

1.光线是沿着直线传播的(尽管是错的, 因为光有波动性)

2.光线和光线不会发生碰撞  (尽管是错的)

3.光线从光源出发到我们的眼镜(光路可逆, )

光线投射

1.从摄像机穿过成像平面打出一根光线, 到场景中,

2.和场中物体的交点和光源连接, 判断是否在阴影中.

考虑最近的交点,


### Games101 全局光照学习笔记 #### 什么是全局光照? 全局光照(Global Illumination, GI)是指模拟环境中所有光源发出的光在整个场景中的传播过程,不仅包括直接来自光源的光,还包括间接通过物体表面反射、折射后的光。这种技术能够更真实地再现现实世界中的光影效果[^4]。 #### 局部光照 vs. 全局光照 局部光照仅考虑光源到物体之间的直线路径上的相互作用;而全局光照则进一步考虑到光线在不同表面上多次反弹的情况。例如,在典型的Cornell Box实验中,当采用全局光照算法时,可以观察到墙壁间由于颜色渗漏现象产生的微妙色彩变化,这是单纯依靠局部光照难以实现的效果。 #### 路径追踪与全局光照 为了更好地处理全局光照问题,相较于传统的Whitted风格射线跟踪方法——后者只会在完全镜面处发生反射而在漫反射面上终止——现代图形学倾向于使用基于蒙特卡罗积分理论开发出来的路径追踪(Path Tracing)技术来近似求解渲染方程。这种方法允许我们更加精确地描述光泽材质的行为特性,并且能有效捕捉因多层散射所引起的复杂光学效应。 ```python def path_tracing(ray): color = Vector3(0, 0, 0) throughput = Vector3(1, 1, 1) while True: hit_record = scene.intersect(ray) if not hit_record.hit: break material = hit_record.material emitted_light = material.emission(hit_record.uv) color += throughput * emitted_light scattered_ray, attenuation = material.scatter(ray, hit_record) throughput *= attenuation ray = scattered_ray return color ``` 此Python伪代码展示了如何利用路径追踪算法迭代计算每条光线的颜色贡献度。每次遇到新的交点都会更新累积透过率(`throughput`)并继续沿新方向发射次级光线直到不再命中任何对象为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值