参与介质
雾、云、带泥沙的水以及类似的介质对穿过的部分光进行散射。换句话说,这些介质参与了光传输过程(请参见 [Jensen 98])。若要模拟参与介质,需要使用一种体积着色器。
体积着色器
体积着色器 parti_volume 可以通过等向(漫反射)散射或各向异性散射来模拟均质(密度均匀)和非均质的参与介质。parti_volume 和 parti_volume_photon 使用一种双光锥散射模型,这意味着光在入射光方向同时向前和向后散射。此散射模型是由 Ch. Schlick 发明的,可以对灰尘、喷雾、雨滴等上的真实散射进行建模。
人们认为任何介质(真空环境除外)均包含悬浮粒子,这些悬浮粒子对穿过的光进行散射。散射在体积的着色中起着重要作用,粒子大小与光的波长之间的关系决定了散射的类型。如果粒子半径远小于光的波长,便不存在明显的散射,光会被吸收。仅当粒子略小于光的波长时才产生瑞利(Rayleigh)散射(香烟烟雾和灰尘)。如果粒子大小与光的波长大致相同,将产生米氏(Mie)散射(水滴或雾)。米氏(Mie)模型可适用于较小的粒子密度,也适用于较大的粒子密度,它们分别称为 Hazy Mie 和 Murky Mie。当粒子大小远大于光的波长时,会应用几何光学(标准实体表面)。Glassner 建议使用以下值:
函数 | r | g1 | g2
|
Rayleigh | 0.50 | -0.46 | 0.46
|
Hazy Mie | 0.12 | -0.50 | 0.70
|
Murky Mie | 0.19 | -0.65 | 0.91
|
parti_volume
color "parti_volume" (
integer "mode",
color "scatter",
scalar "extinction",
scalar "r",
scalar "g1",
scalar "g2",
scalar "nonuniform",
scalar "height",
scalar "min_step_len",
scalar "max_step_len",
scalar "light_dist",
integer "min_level",
boolean "no_globil_where_direct",
array light "lights")
- mode
- 模式为 0 时,参与介质填充整个体积。模式为 1 时,参与介质仅填充到指定高度,其上是纯净空气或真空。
- scatter
- 散射介质的颜色。该参数用以确定被介质散射的直接光和间接光的颜色。它还用作光子体积贴图中光子的光子能量的倍增。它与 extinction 系数的作用相反。
- extinction
- 介质的 extinction 系数。它确定了介质吸收或散射的光的量。0 表示纯净空气或真空。该系数越高,介质的密度就越大(光子散射就越大)。请注意,extinction 系数较大时,不允许光子深入到体积,因为它们进入一小段距离后便被散射。
- r
g1
g2 - 控制散射。如果 g1 和 g2 均为零(默认值),会对等向散射进行建模:所有散射方向具有相同的概率。有时,这种现象也称为漫散射。使用双光锥散射模型对各向异性反射进行建模。每个光锥均可以向后散射 (-1 < g < 0)、漫反射(等向,g = 0)或向前散射 (0 < g < 1)。第一个光锥的权重通过 r 计算,第二个光锥的权重通过 1 - r 计算。
- nonuniform
- 确定介质是均质(密度均匀)还是非均质(云状密度变化)。它是一个介于 0 到 1 之间的数字。值为 0 时,该介质完全为均质且仅取决于 extinction 参数。值为 1 时,会导致云状 Blinn 密度变化。值介于 0 和 1 之间时,情况介于两个极端之间。
- height
- 如果 mode 参数为 1,确定之上为纯净空气或真空的高度。
- min_step_len
max_step_len - 用于确定光线行进的步长。通常将最小值保留为最大值的 10%。最大值越小,精度越高,体积步长采样的过程尽管较慢,但可以实现可见性。在 parti_volume_photon 中使用同一参数以进行体积光子查找。
- light_dist
- 用于优化区域光源的采样。如果区域光源具有可选的较低采样,则使用该参数,例如
rectangle 0.5 0.0 0.0 0.0 0.0 0.5 10 10 3 2 2
- 为提高效率,parti_volume 始终使用较低的采样数(此处为 2 2)。通常情况下,这已经足够了,因为直接照明在光线行进期间在每条光线上的多个点进行计算。但是,应在靠近区域光源处使用较高的采样数(此处为 10 10)。light_dist 参数确定了距离光源多远时必须使用较高的采样数。
- min_level
- 已忽略(由相应的体积光子着色器使用)。
- no_globil_where_direct
- 告诉着色器不计算体积效果中的全局照明,而只计算直接照明。如果不需要此贡献,该参数用于优化。设定为 1(启用)时,对于间接照明,不考虑与散射效果( r、 g1和
g2 )的方向有关的参数,但对于直接照明,会对这些参数求值。
- lights
- 灯光实例的阵列。如果未指定灯光,则使用几何体实例中的灯光列表。如果未指定任何实例灯光列表,则使用场景中的所有灯光。
透明材质
已弃用。这是一种材质着色器,用于不是 mental ray
壳线 对象的参与介质或体积的辅助对象封闭曲面。它只是继续沿相同方向跟踪入射光线,且不与当前对象交互。这样的体积容器本身应不可见。
transmat
color "transmat" ()
没有任何参数。
Copyright © 1986, 2015 NVIDIA ARC GmbH. All rights reserved.