基本光照与阴影(一)

(一)基本光照

光照 —— 即根据场景中光源的分布及物体的形状、朝向等信息,为物体"涂"上阴影、高光等一系列增加真实感的色彩。

?

为了给物体着色,我们需要一个"模型"—— 根据光源的情况和当前表面的参数,得到一个这个表面该有的颜色。

?

这么说可能不太好理解,那么来看一个最基本的光照模型:Phong光照模型。这种光照模型更像是一种"经验模型",由于它在复杂场景中的真实性远不足,在现在已经鲜有人使用,但是它仍然是一种非常重要的计算方法。(而且应该仍是各大学图形学课程的必修内容)

?

我们知道,我们能看见一个自身不发光的物体是因为它反射了从其他地方的光。Phong光照模型把不发光物体所反射的光分成三种分别计算(如下图):

下文中"表面"的解释:

类似"dS"的感觉。把一个曲面分成一个个一个个细小的平面(多边形),这些小平面足够小,以致于在有限分辨率的屏幕前我们分辨不出它们。而它作为一个平面,自然有一个法向量代表它的朝向,也有它中心点的位置及一系列数据。而着色就是为这一个个小平面分别决定它们该有的颜色,最后组合成具有真实感的整个物体。

?

1) 环境光

?

在一个场景中,确定的光源并不是光唯一的来源。正如上面所讲,不发光的物体会反射光源所发出的光,而这种反射大多是漫反射,这就导致了场景中有着无数"乱七八糟""横冲直撞"的漫反射光。如果考虑这些光的存在,以当时计算机的计算能力,最顶级的计算机渲染出一帧(为了完成实时渲染,至少要在1/20秒内完成)可能都要花出比一天还多的运算时间;为了大幅度简化计算,Phong光照模型把这些光视为各个方向上强度都相等的光,导致物体的各个表面都具有一个相同的,比较暗的"底色"。

?

2) 漫反射

?

它模拟了物体表面对光源发出的光产生的漫反射。它根据物体表面的朝向与光源相对于这个表面的位置给表面染上不同的颜色。当光源相对于该表面的位置与该表面的法向量夹角比较小时 —— 此时这个面朝向光源 —— 这个面就会被赋予一个比较亮的颜色。反之,这个面就会被赋予阴影的颜色。

?

3) 高光

?

它模拟了物体表面"规则"的部分,这部分遵循镜面反射原则,进而可以在物体上产生光斑。由表面位置和光源位置可以确定出一道入射光;以这个平面的法线为反射平面的法线,可以求出对应的出射光。当这个出射光的朝向与观察点相对于表面的朝向非常接近时,就给这个表面一个非常亮的颜色,进而在整个物体表面产生高光反射。

?

Phong模型把上述三种方式产生的颜色值按一定比例混合起来,就产生了最后的图像。具体的计算方式限于篇幅原因不再叙述,这方面的网上应该有一大堆。

(Phong光照模型的参考图。P:小平面;V:观察点;L:光源;N:法线;R:出射光)

?

(本来还想写点shadowmap的东西,好像这已经快1000字了…残念w)

时间: 2024-11-04 17:58:54

基本光照与阴影(一)的相关文章

vtk等值面体绘制|纹理映射体绘制 附:不透明传输函数,颜色传输函数、光照与阴影

等值面体绘制: #include <vtkSmartPointer.h> #include <vtkImageData.h> #include <vtkStructuredPoints.h> #include <vtkStructuredPointsReader.h> #include <vtkVolumeRayCastIsosurfaceFunction.h> #include <vtkVolumeRayCastMapper.h>

第二部分 光照和阴影

第八章 区域求和的差值阴影贴图 8.1 介绍 8.2 相关工作 8.3 percentage-closer 过滤 8.4 插值阴影贴图 8.5 区域求和插值阴影贴图 8.6 percentage-closer 软阴影 8.7 结论 8.8 参考资料 第九章 使用全局照明实现互动的电影级重光照 9.1 介绍 9.2 算法总览 9.3 聚集样本 9.4 一次反射的间接照明 大专栏  第二部分 光照和阴影-用于压缩的小波">9.5 用于压缩的小波 9.6 增加多次反射 9.7 对稀疏矩阵进行压缩

关于Unity中的光照(七)

全局光照 GI 这里所说的反射就是,一个红色的物体,当太阳照射它的时候,它周围的物体也会变得有点红. 1:Realtime每帧都会计算光照,实时光照是不会反射的,所以它的光影显得单调;2:Baked GI:通过烘培光照贴图的方式获得很好的光照效果,无法实时的改变光照;3: 预先计算全局光照: Precumputed Realtime GI 实时光照不能很好的显示间接光照的效果, 比如实时光照到一个红色的物体上. 红色物体发生反射,本来如果是实时不会有反射,如果使用预先光照,那么会预先计算好静态物

OpenGL超级宝典笔记——深度纹理和阴影 【转】

目录[-] 光源视角 新型的纹理 深度纹理的大小 首先绘制阴影 然后是光照 投影阴影贴图 阴影比较 之前我们介绍过简单的把物体压平到投影平面来制造阴影.但这种阴影方式有其局限性(如投影平面须是平面).在OpenGL1.4引入了一种新的方法阴影贴图来产生阴影. 阴影贴图背后的原理是简单的.我们先把光源的位置当作照相机的位置,我们从这个位置观察物体,我们就知道哪些物体的表面是被照射到(被光源看到) 的,哪些是没有被照射到(被遮挡住)的(在某个方向上离光源最近的表面是被照射的,后面的表面则没有被照射到

Shadow Map阴影贴图技术之探 【转】

这两天勉勉强强把一个shadowmap的demo做出来了.参考资料多,苦头可不少.Shadow Map技术是目前与Shadow Volume技术并行的传统阴影渲染技术,而且在游戏领域可谓占很大优势.本篇是第一辑.——ZwqXin.comShadow Map的原理很简单,但是实现起来到处是雷.当然这只是我的体会.恩,不过就是“从光源处看场景,那些看不见的区域全部都该是阴影”.很容易看出,与针对 特定模型的Shadow Volume不同,Shadow Map是针对场景的.这就是说,对一个光源应用一次

Unity渲染路径 Rendering Paths_1_Deferred Lighting 延时光照

Deferred Lighting 延时光照 延时光照是有着最高保真度的光照和阴影的渲染路径.如果你有很多实时灯光,最好是使用延时光照.它需要一定水平的硬件支持,仅在 Unity Pro可用,移动设备上不支持. 延迟光照是一种当前最高级的能实现光线和阴影保真的渲染路径 对于能影响任何物体的光线数量没有上限 完全采用以每像素的方式评估光线,这等于意味着全部将以正常贴图的方式正确的和物体交互 所有光线都能拥有信息缓存 所有的光线都能产生阴影 延迟光照的优点: 光照的开销与屏幕的光线尺寸成正比,不用担

Unity3D光照前置知识——Rendering Paths(渲染路径)及LightMode(光照模式)译解

简述 Unity supports different Rendering Paths. You should choose which one you use depending on your game content and target platform / hardware. Different rendering paths have different performance characteristics that mostly affect Lights and Shadows

Shadow Map阴影贴图技术之探

这两天勉勉强强把一个shadowmap的demo做出来了.参考资料多,苦头可不少.Shadow Map技术是目前与Shadow Volume技术并行的传统阴影渲染技术,而且在游戏领域可谓占很大优势.本篇是第一辑.--ZwqXin.comShadow Map的原理很简单,但是实现起来到处是雷.当然这只是我的体会.恩,不过就是"从光源处看场景,那些看不见的区域全部都该是阴影".很容易看出,与针对特定模型的Shadow Volume不同,Shadow Map是针对场景的.这就是说,对一个光源

无插件纯Web 3D机房,HTML5+WebGL倾力打造

前言 最近项目开发任务告一段落,刚好有时间整理这大半年的一些成果.使用html5时间还不久,对js的认识还不够深入.没办法,以前一直搞java,对js的一些语言特性和概念一时还转换不过来. 上一篇介绍了项目中做的一个彩虹爆炸图,主要用了 html5的canvas的2d绘制技术.这一回我想介绍一下项目中的一个亮点技术:html5的3D,以及如何用它打造精美的3D机房监控系统. 目标效果图 下图是客户给找的一张的效果参考图,希望机房至少能达到下面的3D效果. 懂的人都知道,这可是一张设计公司出的装修