进阶光照与材质之模拟真实世界的光照

读书笔记第二章,加了许多博主的理解和补充。

第二章讲的也是基础知识,补充了博主许多知识缝隙。

介绍了四中类型光的光照模型,点光源,面光源,方向光,聚光灯,和他们的光照模型,还简单介绍了下GI。

这章的几个topics:

1.理想的点光源

2.几何衰减

3.光照通过物质的衰减

4.方向光

5.面积光

6.聚光灯

7.本地和全局光照模型

8.环境光

作者首先介绍了真实世界中一些光的例子,有各种各样的形状颜色和大小。实时渲染需要每帧都来计算所以需要注意权衡消耗,离线渲染就可以慢慢渲染计算复杂的高品质GI。

光照之所以显得真实是光衰减的体现,所以计算光衰减就是计算光照的一大目的。

理想的点光源

在虚拟世界中我们只能模拟理想情况下的点光源,点光源也是所有种类光源的原型,它的特性适用于所有种类光源,嗯,点光源是老祖宗,所有光源都是由点光源变种而来。

点光源就是在一点发射以某个半径长度范围内的球型的能量,但是在真实世界中的点光源是没有范围界限的,但是我们为了节约计算,为它定制范围,以免去那些小的可以忽略不计的光强。

这里出现了一条定义:球是按立体角来划分的,球面度是立体角的单位,4π球面度就是整个球。

点光源是以流明lumen为单位的光通量luminous flux来测量辐射功率。每段时间的能量被称为flux通量,然后这个光能使它luminou发光。很方便的称luminous intensity光强作为每单位立体角发射的能量。对于可见光,每单位测量的光强称为坎德拉candela(以它为单位)。

power功率是每单位时间测量出的energy能量。光强由功率得出。能量和功率这两个单位是不可互换的。一些光照单位比如:candela,lumen,candlepower,nit等等它们之间的转换需要单位变换。

接着说到了几何衰减,光强有对距离的平方反比性,就是对到被照明物体表面的距离的平方成反比,衰减就与这个距离的平方成正比。

衰减的产生是由于距离和光穿过材质带来的能量转移而产生的,这个能量转移与光穿过雾和浑浊水被其中的分子小颗粒大颗粒吸收、散射的情况不同,也就是说fog等的吸收、散射效果与光衰减无关,衰减是不变的。另外注意光怎么衰减都不会减到0,因为就算你除以无穷大的距离平方他也只是趋近于0但并不为0,这就是之前所说真实世界的点光源是没有范围的的原因。

自然界是没有完美点光源的,但是接下来要讲的面光源更接近与真实世界的光源

点光源的光照公式如下图,基本上是由于衰减而产生的变化。

方向光

最常见的方向光是太阳光。刚才讲点光源的时候说过了,所有类型的光源都是由点光源的变形,那么方向光是点光源怎么变得呢?

情况1:方向光就是无限远的点光源,角度相差过小可以忽略不计

情况2:点光源的大小大于或等于被照明物体

一张图示全部解释

还是举太阳的例子,太阳离地球比十万八千里还远,好吧,其实是150000000km,

太阳与地球两端的角度小于0.005度,当然可以忽略不计啦。又有人说了,衰减怎么办呢?等到能够计算衰减的时候地球的另一半都是黑天了,根本没有光照。。。这是一点,另外更重要的了一点,对于遥远的光照距离,地球直径这个小小的厚度所产生的衰减差也是小到可以忽略不计。

这也就是为什么在unity中对光照的齐次向量_WorldSpaceLightPos0,的xyz分量对于点光源是表示位置的,对于方向光是表示方向的,而z就是齐次部分,我们知道,对于其次部分一般情况是为1,如果为0,就代表无穷大也就是表示方向,这也就是为什么对于方向光的z部分为0,点光源的z部分为1。

方向光的公式的计算量很小基本就是一个常量,如下图

面光源

面光源是最复杂计算量最大的光照模型,在unity中使用的话需要提前烘焙不能实时计算,以它为基础可以引申出spotlight聚光灯

那么面光源又是由点光源怎么变来的呢?面光源可以理解为一个矩阵的点光源集合,如下图

每个点光源都计算一遍衰减,当然消耗得多,但这也是面光源看起来非常真实的原因。

可以用soft shadow和softer attenuation技术来模拟面光源的效果。

到达照明物体的能量与其与面光源的距离和他们之间的角度有关

面光源的衰减的计算也与点光源不同,不只是简单的距离平方反比,

不同大小和形状的面光源计算衰减的复杂性也不同,普遍的计算方式如下:

A为光衰减受距离平方影响的速率,B决定衰减的线性行为,C为偏差系数

spotlight聚光灯

聚光灯是面光源的延伸,聚光灯既有方向光的性质又有面积光的性质,它通过阴影的本影umbra和半影penumbra来表现柔和的光照(阴影)

可以把聚光灯想象为一个圆筒照在点光源上,阻塞部分光照,根据圆筒开口范围不同阻塞范围不同露出光大小也不同。

本影和半影与圆筒的关系与圆筒开口范围与点光源在圆筒内的位置决定,圆通开口大小并不能改变半影范围大小,因为点光源本质不变,半影大小与光源在圆筒内的位置和光源大小有关

想要定义聚光灯模型,我们需要几个参数,聚光灯的方向,本影方向,半影方向,

当点在本影范围内时,光照强度为1,如果在半影范围之外光照强度为0。如果在本影到半影角度之间则按下面的公式计算,F为衰减因子,各种余弦,,计算是不是也挺复杂的,挺消耗的。

全局光照和局部光照和环境光

这里简单介绍了一下为后面的光线追踪做铺垫。

在真实世界中物体受到的光照不止来自于光源,也来自于其他物体的反射。局部光照就显得效果非常虚假,甚至没有阴影。

但是我们如果计算每个物体的反射光作为光源的话(比如光线追踪)有很消耗并且很慢,不适宜用在实时渲染,所以我们用环境光来做近似,以使得没有光照的地方不至于没有一点亮度。

环境光消耗很少。

近期更新下一章

博主近期渲染:

2016的渲染

2015后半段的渲染

---- by wolf96  http://blog.csdn.net/wolf96

时间: 2024-10-06 00:16:35

进阶光照与材质之模拟真实世界的光照的相关文章

进阶光照与材质之光照和反射模型

第五章讲述了一些漫反射模型和镜面反射模型的原理和数学公式 博主在unity中实现了一下,把部分结果贴在上面 有下面几个主题: 渲染公式 基本光照定义 光照和lambert法则 双向反射分布函数BRDF 漫反射材质原理简介与模型 镜面反射材质原理简介与模型 基本光照定义 对于我们眼睛可见的光对于表面的作用,他们会发生,反射,穿透,折射,吸收,或者表面自发光. 对于所有物体的光照基本公式如下 如果表面不发光则EmittedLight为0. 接下来会讨论许多种形式的反射函数reflectance Fu

Direct3D 光照和材质

  今天我们来学习下Direct3D里面的光源和材质. 四大光照类型: 环境光 Ambient Light 一个物体没有被光照直接照射,通过每一些物体反射的光线到达这个物体,它也有可能被看到.这种称为环境光 漫反射光 Diffuse Light 这种类型光沿着特定的方向传播,当达到某一个表面,它会向四周方向均匀反射(重点考虑反射光的空间位置和方向) 镜面反射光 Specular Light 当此类光到达一个表面时,严格地沿着一个方向反射. 自发光 Emissive Light 自发光就是对象自己

【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] 本篇文章中,我们学习了Unity Shader的基本写法框架,以及学习了Shader中Properties(属性)的详细写法,光照.材质与颜色的具体写法.写了6个Shader作为本文S

iOS开发概述UIkit动力学,讲述UIKit的Dynamic特性,UIkit动力学是UIkit框架中模拟真实世界的一些特性。

转发:http://my.oschina.net/u/1378445/blog/335014 iOS UIKit动力学 Dynamics UIAttachmentBehavior 实现iMessage风格 目录[-] UIDynamicAnimator UIAttachmentBehavior(吸附) UIPushBehavior(推动) UIGravityBehavior(重力) UICollisionBehavior(碰撞) UISnapBehavior(捕捉) UICollectionVi

《逐梦旅程 WINDOWS游戏编程之从零开始》笔记8——光照与材质

第14章 绘制出质感的世界--光照与材质 1. 光照与光源 在Direct3D中的光源类型和光照类型是不同的两个概念,光照模型描述的是光线的反射特征,而光源类型主要强调的是能够产生这些光照模型的方式以及光线的位置,方向,强度等特征. 四大光照类型 环境光:基于整个自然界环境的整体亮度,称为环境光或者背景光,没有位置或者方向上的特征,只有一个颜色亮度值,不会衰减,在所有方向和所有物体表面上投射的环境光的数量是恒定不变的(有点像我们白天的自然光).在Direc3D中设置环境光可以直接使用setRen

进阶光照与材质之物体和材质

第四章主要介绍分析真实世界中某些常见材质的特性与细节,作者提醒我们应该时刻关注大自然真实世界中材质的特点,加强自己的思考与敏锐的观察力和感知力对渲染实现很有帮助.作者主要对如下材质进行了分析:塑料木头:树,木材,被油漆过的木材叶子和植物金属混凝土和石头:混凝土,砖石,自然界的石头皮肤头发和毛发大气半透明材质:玻璃,水油漆旧的磨损的材质 塑料  塑料有很多种颜色形状甚至有的上了不同的漆,但是它的材质构成是一致的.大部分塑料由白色或半透明的基质构成,这些基质充满了染色粒子,像下图这样 当 光照射到塑

OpenGL学习(五) 光照与材质

OpenGL中的光照     环境光:在环境中进行了充分的散射,无法分辨其方向的光. 散射光:来自某个方向. 镜面光:来自一个特定的方向,并且倾向于从表面某个特定的方向反射. 除了以上三种光外,材料可能具有一种发射颜色,它模拟那些源自某个物体的光. 为了实现明暗效果,必须启用光照计算,而且每种光源也必须被启用.对于单个光源,我们可以这样做: glEnable(GL_LIGHTING); glEnable(GL_LIGHT0) 注:一旦光照被启用,glColor*()指定的颜色值将不再使用. 指定

颜色,基础光照,材质。

本片blog主要是为了整理脑内一些混杂的知识. 颜色: 大自然中的物体都有着自己独一无二的颜色,我们需要用电脑去模拟这种颜色(尽管是用有限的电脑颜色去模拟无限的自然界存在的颜色,但是你基本看不出来区别). 严格地说,平时生活中我们看到的某一个物体的颜色并不是它本身的颜色,而是它所反射(reflected)出来的颜色:想象一下,你在黑暗中看到自己的手基本是黑乎乎的一片,这就是它在弱光条件下所反射出来的颜色.也就是说,在不同的光源条件下,物体会反射出不同的颜色(也就是物体不吸收的光).这也就是我们需

D3D9 光照和材质

pd3dDevice->SetRenderState(D3DRS_AMBIENT,D3DCOLOR_XRGB(36, 36, 36)); //设置环境光 <span style="margin: 0px; padding: 0px; border: none; background-color: rgb(245, 250, 226); font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18