orillusion入门系列五 | 光源02
-
上一次了解到了光照的基本三类光源,这三类光源似乎在现实中不存在的,只是一种理想抽象,今天以光源为基础学习更多的光照功能,体验一下orilluson其它的光照功能。
现实生活中我们被各种光包围,在光源发出光之后,环境会吸收光,反射光,我们可以称之为环境光。今天我们将这些实际中会遇到的光照效果一一验证,通过orilluson可以入门3D的光照吗,带着疑问来动手作吧。太阳
天空中的太阳是直接光的典型元素,通常说的平行光在现实中很好的参照光源就是太阳。这里我们忽略场景的其它部分,就场景内置的太阳是环境光重要的一部分,现在来熟悉一下太阳的用法,这里要打起精神,竟然可以定制太阳。以我简陋的专业知识来推测,太阳似乎只是一个发光体加一个平行光源来实现的,既然引擎有这个便利的工具要实操起来。
场景添加一个大气天空盒组件就可以支持,我们先看一下太阳支持的主要参数:- displaySun:这是一个开关,是否显示太阳,经过实际测试后要特别注意,关闭后太阳的光照效果仍然存在,只是太阳本身的物体会隐藏。
- sunX:太阳本地的X坐标,调整这个参数太阳本体会移动,光照的方向和效果也会变化,与真实的太阳效果类似,配合Y坐标可以模拟太阳在天空移动的效果,所谓日升日落,斗转星移不在话下。
- sunY:与sunX类似,是太阳的Y坐标。
- sunRadius:设置太阳的半径。
- sunRadiance:曝光强度,默认是10,取值范围一般0至100,数值越大整个场景的光越强烈,数值越小整个场景越暗,直到为0时只有太阳有光亮,整个场景已经没有曝光度。
- sunBrightness:太阳本体的曝光强度,调整这个参数可以看到本体的亮度出现变化。
用法
AtmosphericScatteringSky 类是大气散射纹理,太阳的设置在这个类中,包括前面介绍的太阳参数。因为太阳是天空盒的属性,而天空盒一般加载在场景中,因此需要从场景开始。
这里只记录最核心的代码:// 创建一个场景对象 let scene3D:Scene3D = new Scene3D(); // envMap 是场景的环境贴图变量,这里将环境转换为大气散射类型 let sky = (scene.envMap as AtmosphericScatteringSky); // 以下参数可以参照前面的参数介绍 sky.sunX = 0.55; sky.sunY = 0.8; sky.eyePos = 3607; sky.sunRadius = 500; sky.sunRadiance = 0.8; sky.sunBrightness = 1; // ...
以上代码可以将一个场景的太阳进行配置,之后添加物体就会有阳光的可适配效果了。
阴影
有光自然有阴影,阴影需要配置的方面比较少,前面已经用过许多次这里专门记录一下使用思路。
阴影的配置
在尝试使用光照阴影相关的功能时,遇到过几个问题是因为对阴影的配置不了解,这里把遇到问题的配置项进行一个记录。
阴影的配置路径在Engine3D.setting.shadow下。- debug:调试开关,打开这个开关可以在控制面板操作参数值,仍然是依赖引擎的GUIHelp工具实现。
- autoUpdate:阴影是否自动更新,这个配置项非常重要,在试用光照阴影效果时尝试过移动物体但阴影不动,打开这个开会会自动更新阴影。
产生阴影
目前只有平行光源会产生阴影,平行光组件需要将castShadow打开,在物体材质上调整光照的角度会产生阴影的效果。
对比
普通阴影和全局光照的阴影效果有很大的差别,这里将两个效果做个对比,上面是普通阴影,下面是开启了全局光照的效果。
同样的材质和光照强度以及场景环境,下面加了全局光照有了更厚重逼真的感觉,这差距好比女人之间八卦产生的友谊和男人之间战斗建立的友谊一样大。小结
光照是非常核心又非常高级的部分,在3D中渲染效果的好坏以及性如何和对光的处理有直接的关系,从上一次的三种光源可以使场景内有光,根据不同的用途可不同的光源,到今天学习的环境光,使场景内有了一轮太阳,尽管这轮太阳是天空盒材质的,不过不影响我们把它当成一个光源,到最后的全局光照使的场景内的环境更真实逼真,全局光照还有许多特性和新技术,需要不断的去学习接受挑战。
作为3D新手,后续会不断的记录学习过程,期待与你一起学习一起飞!