博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DirectX11 光照与材质的相互作用
阅读量:4086 次
发布时间:2019-05-25

本文共 1031 字,大约阅读时间需要 3 分钟。

光照与材质的相互作用

1. 为什么需要光照?
下图展示了光照和阴影在表现物体的立体感和体积感时起到的重要作用。左边的球体没有灯照射,看上去就像是一个扁平的2D圆;而右边的球体有灯照射,看上去很立体。实际上,我们的视觉能力完全取决于光照及光照与材质之间的相互作用,所以,许多超写实场景的渲染工作都是通过精确的物理光照模型(lighting model)来实现的。(译者注:本章经常会提及“光照模型”个词,请读者不要将它与“3D网格模型”的含义混淆。“光照模型”不是指“用灯照射一个3D网格模型”,也不是指“支持光照运算的3D网格模型”。它的正确含义是“光照算法的数学模型(或者说数学公式)”。请读者一定要将“光照模型”与“3D网格模型”的含义区分开。)

这里写图片描述

(a)没有灯照明的球体看上去就像是一个2D圆。(b)有灯照明的球体看上去很立体。
当然,一般来讲,越精确的光照模型,花费的计算时间就越长;我们必须在真实感和速度之间寻求平衡。例如,电影中的3D特效场景可以做得非常复杂,可以使用更为写实的光照模型,因为电影中的帧是预渲染的(pre-rendered),电影制作者可以花费数小时甚至数日的时间来渲染一帧。而游戏是实时渲染应用程序,它至少要以每秒30帧的速度渲染场景。

注意,本书关于光照模型的解释和实现方法大部分来自于[Möller02]的描述。

2. 局部光照模型与全局光照模型

本书(和许多实时渲染应用程序)采用的光照模型都是局部光照模型(local illumination model)。在局部光照模型中,每个物体的光照都是相互独立的,所有的光线都是从光源直接照射到物体上(即,本来应该被场景中其他物体阻隔的线,仍然会照射到后面的物体上)。下图说明了局部光照模型的特点。

这里写图片描述

在现实环境中,如果墙壁挡住了从灯泡射出的光线,那么球体就应该位于墙壁的阴影之中。然而,在局部光照模型中,无论墙壁是否存在,球体都会被照亮。

与之相反,全局照明模型(global illumination model)不仅会考虑光源对物体的直接照明,也会考虑场景中的其他物体反射造成的间接照明。它之所以被称为全局照明模型,就是因为它在照亮一个物体的同时,也会考虑到整个场景中的其他因素。对于实时游戏来讲,全局照明模型占用的系统资源量过大(虽然它可以渲染出接近于照片的超写实场景)。目前,实时全局照明(real-time global illumination)的实现方法还处于探索阶段。

你可能感兴趣的文章
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Java8 HashMap集合解析
查看>>
自定义 select 下拉框 多选插件
查看>>
Linux常用统计命令之wc
查看>>
fastcgi_param 详解
查看>>
搞定Java面试中的数据结构问题
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
Winform多线程
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
《计算机网络》第五章 运输层 ——TCP和UDP 可靠传输原理 TCP流量控制 拥塞控制 连接管理
查看>>
《PostgreSQL技术内幕:查询优化深度探索》养成记
查看>>
剑指_复杂链表的复制
查看>>
FTP 常见问题
查看>>
Python学习笔记之数据类型
查看>>
shell 快捷键
查看>>