回到上一篇 POV-RAY基础教程 - CSG(3)
在任何光线追踪场景中,照亮物体及其表面所需的光线必须来自光源。POV-Ray中有多种光源,仔细使用正确的光源可以产生非常令人印象深刻的结果。我们花一点时间来探索一些不同类型的光源及其各种参数。
Pointlight(点光源)
点光源正是名称所指示的。点光源没有大小,是不可见的,无论距离光源有多远,都可以均匀地照亮场景中的所有物体(这种行为可以改变)。这是最简单和最基本的光源。只有两个重要参数,位置和颜色。让我们设计一个简单的场景并在其中放置一个点光源。我们创建一个新文件并命名litedemo.pov
。我们编辑如下:
#include "colors.inc"
#include "textures.inc"
camera {
location <-4, 3, -9>
look_at <0, 0, 0>
angle 48
}
plane {
y, -1
texture {
pigment {
checker
color rgb<0.5, 0, 0>
color rgb<0, 0.5, 0.5>
}
finish {
diffuse 0.4
ambient 0.2
phong 1
phong_size 100
reflection 0.25
}
}
}
torus {
1.5, 0.5
texture { Brown_Agate }
rotate <90, 160, 0>
translate <-1, 1, 3>
}
box {
<-1, -1, -1>, <1, 1, 1>
texture { DMFLightOak }
translate <2, 0, 2.3>
}
cone {
<0,1,0>, 0, <0,0,0>, 1
texture { PinkAlabaster }
scale <1, 3, 1>
translate <-2, -1, -1>
}
sphere {
<0,0,0>,1
texture { Sapphire_Agate }
translate <1.5, 0, -2>
}
渲染的图片如下:
现在我们添加一个点光源:
light_source {
<2, 10, -3>
color White
}
然后我们渲染,得到下图,大家可以感受一下
渲染后可以看到物体清晰可见,有清晰的阴影。最靠近光源的弯曲物体的侧面是最亮的,而远离光源的区域是最暗的。我们还注意到,方格平面一直均匀地照射到地平线上。
2 Spotlight(聚光灯)
聚光灯是一种非常有用的光源。它们可用于添加高光和照亮功能,因为摄影师使用斑点来做同样的事情。要创建聚光灯,只需将spotlight
关键字添加到常规点光源即可。聚光灯有几个参数比聚光灯更多。这是radius
, falloff
,tightness
和point_at
。radius
参数是完全照明锥体的角度。该falloff
参数是本影锥体的角度,其中光线从黑暗中落下。该tightness
参数确定光衰减的速率。该point_at
参数就是它所说的,聚光灯所指向的位置。让我们改变场景中的光线如下:
light_source {
<0, 10, -3>
color White
spotlight
radius 15
falloff 20
tightness 10
point_at <0, 0, 0>
}
然后我们渲染,得到下图,大家可以感受一下
我们渲染它,看到只有物体被照亮。平面的其余部分和物体的外部部分现在都没有点亮。有一个广泛的衰落区域,但阴影仍然是锐利的。让我们尝试摆弄其中的一些参数,看看他们做了什么。我们将衰减值更改为16(它必须始终大于半径值)并再次渲染。现在衰减非常狭窄,物体要么明亮,要么完全黑暗。现在我们将衰减更改回20并将紧密度值更改为100(更高更紧)并再次渲染。聚光灯似乎变得更小了,但真正发生的事情是衰减变得如此陡峭,以至于半径实际上看起来更小了。我们认为紧密度值10(默认值)和衰减值18对于这个聚光灯是最好的,我们现在想在场景周围放置一些点以产生效果。除了我们已经拥有的白色之外,让我们放置一个的蓝色和一个红色的聚光灯光源:
light_source {
<10, 10, -1>
color Red
spotlight
radius 12
falloff 14
tightness 10
point_at <2, 0, 0>
}
light_source {
<-12, 10, -1>
color Blue
spotlight
radius 12
falloff 14
tightness 10
point_at <-2, 0, 0>
}
图片如下
渲染这个我们看到现在的场景有一种神奇的效果。三个聚光灯全部聚集在物体上,一侧为蓝色,另一侧为红色,中间有足够的白色以提供平衡。
3 Cylinder(柱状光源)
聚光灯呈锥形,这意味着它们的效果会随着距离而变化。物体越远离聚光灯,表观半径越大。但是我们可能希望无论聚光灯有多远,半径和衰减都是特定的大小。因此,需要圆柱形光源。圆柱形光源就像聚光灯一样,除了半径和衰减区域外是相同的,无论我们的物体离光源有多远。因此,形状是圆柱而不是圆锥。我们可以通过用spotlight
关键字替换关键字来指定圆柱形光源cylinder
关键词。我们现在尝试使用我们的场景,用圆柱灯替换所有三个聚光灯并再次渲染。我们看到场景更加暗淡。这是因为圆柱形约束不会像聚光灯那样让光线散开。需要更大的半径和衰减值来完成这项工作。对于所有三个灯,我们尝试半径为20,衰减为30。
4 Area(区域光源)
到目前为止,我们所有的光源都有一个共同点。它们产生锐利的阴影。这是因为实际光源是无限小的点。物体要么直接看到光,在这种情况下它们是完全照明的,或者它们不是,在这种情况下它们是完全遮蔽的。在现实生活中,这种鲜明的光影情况只存在于太阳直射光穿透太空黑暗的外太空中。但是在地球上,光在物体周围弯曲,从物体上反弹,通常光源具有一定的尺寸,这意味着它可以部分地隐藏在视线之外(阴影不再是锐利的)。他们有一种所谓的本影,或者一个模糊的区域,那里既没有光照,也没有光影。为了模拟这些柔软 阴影,射线追踪者必须给它的光源尺寸。POV-Ray通过称为区域光的功能实现了这一点。区域灯具有两个轴的尺寸。这些由区域光源语法中的前两个向量指定。我们还必须指定阵列中有多少个灯。更多会给我们更干净柔和的阴影,但渲染时间会更长。通常3 * 3或5 * 5阵列就足够了。我们还可以选择指定自适应值。该 adaptive
关键字告诉光线跟踪器它可以适应这种情况并仅发送所需的光线来确定像素的值。如果未使用自适应,则将为区域光中的每个光发送单独的光线。这真的可以减缓事情的发展。自适应值越高,本影就越清洁,但痕迹越长。通常,自适应值为1就足够了。最后,我们可能应该使用 jitter关键词。这告诉光线追踪器稍微移动区域光线中每个光线的位置,使阴影看起来真正柔和,而不是给我们一个由紧密带状阴影组成的本影。好的,我们来试试吧。我们注意到圆柱灯并添加以下内容:
light_source {
<2, 10, -3>
color White
area_light <5, 0, 0>, <0, 0, 5>, 5, 5
adaptive 1
jitter
}
这是一个以<2,10,-3>为中心的白色区域光。它是5个单元(沿x轴)5个单元(沿z轴),其中有25(5 * 5)个灯。我们已经指定了自适应1和抖动。我们渲染并立即注意到两件事。跟踪点或聚光灯的轨迹需要相当长的时间,而且阴影不再清晰!他们周围都有很好的柔软的umbrae。等等,它变得更好。
聚光灯和圆柱灯也可以是区域灯!还记得我们场景中聚光灯的那些尖锐阴影吗?使用5 * 5阵列作为聚光灯是没有多大意义的,但是较小的阵列可以很好地为我们提供适当数量的本影聚光灯。我们来试试吧。如下所示:
light_source {
<2, 10, -3>
color White
spotlight
radius 15
falloff 18
tightness 10
area_light <1, 0, 0>, <0, 0, 1>, 2, 2
adaptive 1
jitter
point_at <0, 0, 0>
}
light_source {
<10, 10, -1>
color Red
spotlight
radius 12
falloff 14
tightness 10
area_light <1, 0, 0>, <0, 0, 1>, 2, 2
adaptive 1
jitter
point_at <2, 0, 0>
}
light_source {
<-12, 10, -1>
color Blue
spotlight
radius 12
falloff 14
tightness 10
area_light <1, 0, 0>, <0, 0, 1>, 2, 2
adaptive 1
jitter
point_at <-2, 0, 0>
}
图片如下
我们现在有三个区域聚光灯,一个单位正方形,由四个(2 * 2)灯组成,三种不同的颜色,都在我们的场景中闪耀。我们渲染它,它似乎完美。我们所有的阴影都有小而紧的本影,就像我们期望在真实聚光灯下的物体上找到的那种。
5 Ambient (环境光)
用于模拟间漫反射的效果。如果没有相互漫反射,则所有未被光源直接照射的区域将完全变暗。POV-Ray使用ambient
关键字来确定来自环境光源的光被表面反射的光量。默认情况下,环境光源在任何地方向所有方向发光,都是纯白色(rgb <1,1,1>)。改变颜色可用于创造有趣的效果。首先,可以轻松调整场景的整体亮度。不是改变每个表面处理中的所有环境值,而是仅修改环境光源。通过分配不同的颜色,我们可以创建出色的效果,如喜怒无常的微红色环境照明。以下是红色环境光源的示例。
global_settings {ambient_light rgb <1,0,0>}
效果图:
有关详细信息,请参阅环境光。
6 其他特殊光源属性
6.1 shadowless
可以为光源分配shadowless关键字,并且由于其存在于场景中而不会投射阴影。有时候,使用我们选择照亮物体的灯光很难正确照亮场景。将较高的环境值应用于场景中每个对象的纹理是不切实际且不现实的。相反,我们会在场景周围放置几个补光灯。填充灯只是调光灯,其shadowless关键字用于增强场景中可能无法点亮的其他区域的照明。让我们尝试在我们的场景中使用一个。添加以下内容:
light_source {
<0, 20, 0>
color Gray50
shadowless
}
效果图:
在场景中心,这是一个相当暗淡的20个单位。它将为所有对象(包括背景中的平面)提供昏暗的照明。我们渲染它并看到。
6.2 给光源加个形状
光源是看不见的。它们只是灯光来自的地方。它们没有真正的尺寸或形状。如果我们希望我们的光源是可见的形状,我们可以使用looks_like
关键字。我们可以指定我们的光源看起来像我们选择的任何对象。当我们使用时looks_like
,则no_shadow
自动应用于对象。这样做是为了使物体不会阻挡来自光源的任何照明。如果我们想要发生一些阻塞(如在灯罩中),最好简单地使用一个联合来做同样的事情。让我们将这样的对象添加到场景中。这是我们为此目的制作的一个灯泡:
#declare Lightbulb = union {
merge {
sphere { <0,0,0>,1 }
cylinder {
<0,0,1>, <0,0,0>, 1
scale <0.35, 0.35, 1.0>
translate 0.5*z
}
texture {
pigment {color rgb <1, 1, 1>}
finish {ambient .8 diffuse .6}
}
}
cylinder {
<0,0,1>, <0,0,0>, 1
scale <0.4, 0.4, 0.5>
texture { Brass_Texture }
translate 1.5*z
}
rotate -90*x
scale .5
}
现在我们添加光源:
light_source {
<0, 2, 0>
color White
looks_like { Lightbulb }
}
效果图:
渲染这个我们看到一个相当可信的灯泡现在照亮了场景。但是,如果我们没有指定高环境值,则灯泡不会被光源点亮。从好的方面来看,所有的阴影都会远离灯泡,就像在真实情况下一样。阴影是锐利的,所以让我们的灯泡成为一个区域:
light_source {
<0, 2, 0>
color White
area_light <1, 0, 0>, <0, 1, 0>, 2, 2
adaptive 1
jitter
looks_like { Lightbulb }
}
效果图:
我们注意到我们已将此区域放置在xy平面而不是xz平面上。我们还注意到灯泡的实际外观不受光源的任何影响。灯泡必须由其他光源照明,或者在这种情况下,由高环境值照明。
6.3 光线fading
在现实生活中,光线在行进时会散射,因此它会降低物体从其光源进一步照射的能力。为了模拟这一点,POV-Ray允许我们使用两个关键字:fade_distance,其指定实现完全照明的距离,以及指定fade_power衰减的实际速率的指数值。我们将这些关键字应用于我们的补光灯。首先,我们通过更改 Gray50为使填充光更亮一些Gray75。现在我们按如下方式更改补光灯:
light_source {
<0, 20, 0>
color Gray75
fade_distance 5
fade_power 1
shadowless
}
效果图:
这意味着填充光的全部值将在距光源5个单位的距离处实现。衰落功率为1意味着衰减将是线性的(光以恒定速率下降)。我们渲染这个以查看结果。绝对有效!
现在让我们尝试2的衰落功率和10的淡入淡出距离。再次,这很好用。衰落功率更快,衰减功率为2,因此我们不得不将衰落距离提高到10。
效果图:
小结:光源种类较多,属性较多,一些渲染区别不是很明显,建议大家自己动手试验。
继续阅读下一篇 POV-RAY基础教程 - 简单贴图/纹理设置(5)