天空和太阳
简介
mental ray 物理太阳和天空着色器专为启用物理正确的日光模拟和精确的日光场景渲染而设计。
分析使用
该着色器库提供了一些用于照明分析的工具。还为标准 CIE 天空模型(晴天或阴天)提供一个着色器。该着色器为灰度(无颜色),用于分析,而非生成赏心悦目的图像。详细信息请参见 ciesky 页。mia_physicalsky 着色器支持 Perez 天空模型中与分析相关的参数,mia_physicalsun 支持显式照度参数。
概述
mia_physicalsun 和 mia_physicalsky 往往一起使用,mia_physicalsun 着色器适用于表示太阳光的平行光,mia_physicalsky 着色器用作场景的摄影机环境着色器。通过最终聚集(必须启用)可以将环境着色器用于照亮场景,通过最终聚集漫反射反弹或通过 GI(光子)可以处理太阳的反射光。
为了提高室内拍摄的质量,可以将天空与天空入口页上所述的 mia_portal_light 着色器结合使用。
单位
太阳和天空使用真正的光度单位,但通过 rgb_unit_conversion 参数可以将输出转化为其他单位。
如果将其设定为 1 1 1,则通过 mi_luminance 函数发送时,mental ray 着色器 API 函数 mi_sample_light(太阳光)和 mi_compute_avg_radiance(天光)返回的值可以视作光照度值,以勒克斯为单位。
由于大气外的太阳强度被校准为 5900 开氏度黑体辐射(提供 127500 勒克斯的照度),因此,与灯光强度通常为 0 到 1 的“传统”渲染相比,这是非常明亮的。
rgb_unit_conversion 参数可以作为倍增应用,并设定为低于 1.0 的值(例如 0.001 0.001 0.001),以将原始勒克斯值转化为更易“度量”的单位。
为了方便起见,在内部设定 rgb_unit_conversion 特殊值 0 0 0,以使 80000 勒克斯(大约为晴天的光照量)等于传统光照水平 1.0。
一种有趣的替代方法是将 rgb_unit_conversion 设定为 0.318 0.318 0.318。然后,图像中的最终渲染像素(使用 mia_material 或遵循着色约定的着色器渲染时或通过 mi_luminance 函数发送时)是真正的光照度值,以每平方米烛光1为单位。
这些真正的亮度值完全适合作为色调映射器页中所述的摄影色调映射器的输入值,其 cm2_factor 设定为 1.0。
快速 SSS 和 SunSky 的重要说明
要结合使用 mental ray 快速 SSS 着色器以及高动态范围间接太阳光和天光,请务必启用 Indirect参数,以便 SSS 着色器散射天光(被认为间接光)。
同样请务必禁用 Screen composit参数(否则,SSS 着色器的输出将钳制为低动态范围且渲染黑色)。
公用参数
某些参数在 mia_physicalsun 和 mia_physicalsky 上都存在,且都执行相同的操作。要保证物理正确性,太阳和天空中的这些参数彼此之间需要保持同步。例如,太阳的薄雾值不同于天空薄雾值时无法保证其物理真实性。
最重要的公用参数是那些控制整个着色模型和明暗模型的参数:
- haze 设定空气中的薄雾量。取值范围为 0(非常晴朗的天气)到 15(非常阴暗的天气,或撒哈拉沙尘暴)。薄雾值影响天空和地平线的亮度和颜色、太阳光的亮度和颜色、太阳阴影的柔和度、太阳周围光晕的柔和度以及空间透视的强度。

Haze=0

Haze=3

Haze=8

Haze=15
- redblueshift 对光的红色程度进行艺术控制。默认值 0.0 是物理校正值2,但可以使用此参数进行更改,范围从 -1.0(极蓝)到 1.0(极红)。

Redness=-0.3

Redness=+0.3
- saturation 也是一个艺术控制,其中,1.0 表示物理计算的饱和度级别。参数的范围在 0.0(黑和白)与 2.0(极高的饱和度)之间。
太阳参数
mia_physicalsun 负责太阳光的颜色和强度,以及从太阳发射光子。该着色器在平行光源上应该用作灯光着色器和光子发射着色器(它不会处理任何其他灯光类型)。
declare shader "mia_physicalsun" (
boolean "on" default on,
scalar "multiplier" default 1.0,
color "rgb_unit_conversion" default 0.0001 0.0001 0.0001,
scalar "haze" default 0.0,
scalar "redblueshift" default 0.0,
scalar "saturation" default 1.0,
scalar "horizon_height" default 0.0,
scalar "shadow_softness" default 1.0,
integer "samples" default 8,
vector "photon_bbox_min",
vector "photon_bbox_max",
boolean "automatic_photon_energy",
boolean "y_is_up",
integer "illuminance_mode" default 0,
scalar "direct_normal_illuminance" default 0.0
)
version 6
apply light
end declare
如上所述,mia_physicalsun 包含几个在 mia_physicalsky中也显示的常用参数(haze、redblueshift 等)。mia_physicalsun 中的这些参数的值应该与 mia_physicalsky 中的匹配。特定于 mia_physicalsun 的参数如下所示:
- samples 是软阴影的阴影采样数。如果设定为 0,则不会生成软阴影。
- shadow_softness 是软阴影的柔和度。值 1.0 是最精确匹配实际太阳阴影的柔和度的值。值越低,阴影越锐利;值越高,阴影越柔和。
- 如果 photon_bbox_min 和 photon_bbox_max 保留 0,0,0 设置,着色器会自动计算光子边界框。如果对它们进行设置,它们在灯光坐标系中定义光子的目标边界框。此设置可以用于将 GI 光子“聚焦”在关注区域上。例如,如果用户已建模一个大城市并将其作为背景,但仅要渲染房间内部,则默认情况下 mental ray 将对整个城市投射光子,但可能仅少数光子可找到该房间。使用 photon_bbox_max 和 photon_bbox_min 参数可以聚焦 mia_physicalsun 的光子发射,使其仅指向关注的窗,从而大大加快速度且增强内部渲染的质量。
- automatic_photon_energy 启用自动光子能量计算。启用此选项后,光源不需要使有效能量值与太阳的能量值匹配(但是,一定需要非零能量值或 mental ray 禁用光子发射)。将自动计算光子正确的能量和颜色。如果禁用该参数,光子能量将由光能值定义。
- 如果 illuminance_mode 为 0,则使用与早期版本库兼容的默认太阳强度(基于 haze、太阳角度、光学空气质量等在内部计算)。如果 illuminance_mode 为 1,太阳光将通过 direct_normal_illuminance 参数设定直接法线照度(以勒克斯为单位)。太阳光颜色和以前一样由 haze 决定,只有强度被修改。
天空参数
mia_physicalsky 着色器负责创建表示大气天顶的颜色渐变,然后通过最终聚集和/或天空入口(请参见天空入口页)将其用于照亮场景。mia_physicalsky 用作环境着色器时,也向摄影机显示天空以及在反射中显示。
mia_physicalsky 还会在模型“下方”创建虚拟地平面。这使得不必始终以地平线为基准来实际对几何体建模 - 虚拟地平面提供这种地面的视觉效果和反弹光。
declare shader "mia_physicalsky" (
boolean "on" default on,
scalar "multiplier" default 1.0,
color "rgb_unit_conversion" default 0.0001 0.0001 0.0001,
scalar "haze" default 0.0,
scalar "redblueshift" default 0.0,
scalar "saturation" default 1.0,
scalar "horizon_height" default 0.0,
scalar "horizon_blur" default 0.1,
color "ground_color" default 0.2 0.2 0.2,
color "night_color" default 0 0 0,
vector "sun_direction",
light "sun",
# The following parameters are only useful
# when the shader is used as environment
scalar "sun_disk_intensity" default 1.0,
scalar "sun_disk_scale" default 4.0,
scalar "sun_glow_intensity" default 1.0,
boolean "use_background",
shader "background",
# For the lens/volume shader mode
scalar "visibility_distance",
boolean "y_is_up",
integer "flags",
integer "sky_luminance_mode" default 0,
scalar "zenith_luminance" default 0.0,
scalar "diffuse_horizontal_illuminance" default 0.0,
# Perez model luminance distribution parameters
scalar "a",
scalar "b",
scalar "c",
scalar "d",
scalar "e",
boolean "physically_scaled_sun"
)
version 5
apply environment, texture, lens, volume
end declare
- on 启用或禁用着色器。默认设置为启用。
- multiplier 是灯光输出的标量倍增。默认值为 1.0。
- 使用 rgb_unit_conversion 可以设定单位,更多细节如上所示。特殊值 0 0 0 将 80000 勒克斯(晴天的灯光级别)与输出值 1 匹配,适合低动态范围渲染。
- horizon_height 设定地平线的“标高”。默认值 0.0 使地平线处于标准“高度”。然而,因为地平线无穷远,所以可能会导致很难接合假设代表地面的任何有限几何体。这也可能会导致渲染假设处于高海拔的位置(如,山顶或纽约摩天大楼楼顶,这种情况下,地平线显然“低于”观察者的位置)时出现问题。
使用此参数可以调整地平线的位置。请注意,地平线并不是实际存在于 3D 空间中的任何特定高度 - 它是光线从低于某个特定的角度照射而产生的着色效果。此参数可以调整该角度。全部可用范围有些大,从 -10.0(地平线为“直下”)到 10.0(地平线处于最高点)。实际上,只有很小的值才有用,例如,值 -0.2 可以将地平线向下推动到有限可视地平面边的正下方。
注意:horizon_height 不仅仅影响 mia_physicalsky 着色器中的地平线视觉表达,还影响 mia_physicalsun 本身的颜色,即,太阳“落山”的点将确实针对非零的 horizon_height 而更改。
- horizon_blur 设定渲染地平线时使用的“模糊度”。值为 0.0 时地平线是非常尖锐的。一般来说,使用低值(低于 0.5),但是如果地平线只包含模糊则其整个范围将达到 10.0,这时候根本没有实际地平线。
horizon_height=0.0,
horizon_blur=0.0
horizon_height=-0.3,
horizon_blur=0.2
- ground_color 是虚拟地平面的颜色。请注意,这是一个漫反射比值(即漫反射系数)。地面看起来像一个具有此漫反射颜色的 Lambertian 反射镜,照明只是来自太阳和天空,不接收任何阴影。

红色地面

绿色地面
请注意,在上面的图像中,来自地面的反弹光如何对房屋的墙染色。还请注意,虚拟地平面不接收阴影。
有些天空模型忽视来自地面的反弹光的影响,而假定只有天空为场景照明。例如,如果将 mia_physicalsky 用于 IES 天空模型,则要比较输出,必须将 ground_color 设定为黑色。
- night_color 是天空的最少颜色 - 天空的黑暗程度值永远不会低于此值。它可以用于添加月亮、星星以及高海拔卷云等事物,并且这些事物在日落后很长一段时间内仍然保持光亮。日落后且天空变黑时,night_color 的作用不会受影响并且仍然保持为“灯光的基础级别”。
- sun_direction 是手动指定时太阳表面的方向。如果使用 sun 参数,将忽略该参数。
- sun 是一种自动设定太阳方向的方法。它应是包含表示太阳的平行光的灯光实例的标记 - 即具有 mia_physicalsun 着色器的相同灯光。这将使可见太阳表面自动跟随实际太阳光的方向。
- “空间透视”是一个术语,绘制人员使用它来解释远距离的对象视为 Hazier 以及以光谱蓝端染色的原理。mia_physicalsky 使用 visibility_distance 参数模拟此过程。该值为非零时,它定义“10 距离”,即距离大约为 10 的薄雾在 haze 级别 0.0 时可见。
要使用此效果,着色器必须用作镜头着色器或摄影机体积着色器
。
- y_is_up 定义“上方向”的轴。mental ray 的某些 OEM 集成将 Z 轴作为“上方向”的轴,因此应该禁用该参数 - 其他情况将 Y 轴作为“上方向”的轴,在这种情况下应该启用该参数
。
- flags 用于将来的扩展、测试和内部算法控制。应设定为零。
- 如果 sky_luminance_mode 为 0,则基于 haze 级别、太阳位置等自动计算天空亮度,此天空亮度与前一版本的着色器兼容。
但是,如果 sky_luminance_mode 为非零,则天顶上的亮度分布将遵循 Perez 模型,该模型由 a、b、c、d 和 e 五个参数决定。因此,要使用此模式,则必须有一组有效的 Perez 系数。{天顶上的颜色分布仍由 haze 参数决定!}
如果 sky_luminance_mode 为 1,则可以通过设定 zenith_luminance 参数(以每平方米烛光为单位)或通过设定已知的 diffuse_horizontal_illuminance 值(以勒克斯为单位)定义天空亮度,但不能同时设定这两个参数。
如果 sky_luminance_mode 为 2,则从 CIE Clearsky 模型计算天顶亮度。
请务必注意,mia_physicalsky 着色器以不同的方式处理光线。来自摄影机的直接光线以及反射和折射光线可看到“整个”效果,包括下面所述的“太阳表面”。但是,由于照明已经具有代表太阳的直接光(使用 mia_physicalsun 着色器),因此最终聚集射线看不到太阳表面3。
这些参数不影响最终聚集结果,仅影响“可见”结果,即摄影机看到的内容以及反射和折射中看到的内容:
- sun_intensity 和 glow_intensity 是可见太阳表面及其光晕的强度,可用于调整太阳“外观”。
glow_intensity=5
glow_intensity=0.1
- physically_scaled_sun 使太阳强度物理缩放。sun_intensity 为 1.0 时,太阳会与真实世界中的太阳一样明亮。sun_intensity 也可以用于调整强度(即值为 2.0 时,太阳的亮度将变为真实太阳的两倍)。glow_intensity 和 sun_scale 也可以用于调整太阳纵横比,但是它们不影响总能量,总能量会自动调整以进行补偿。
- sun_scale 设定可见太阳表面的大小。值 1.0 是“物理校正”大小,但是由于用户容易将照片中太阳的正确大小判断错误,因此默认值为更易识别的 4.0。
sun_scale=1
sun_scale=4
- 启用了 use_background 但未设定 background 时,渲染的背景为透明黑色,即正好适合外部合成。如果提供了 background 着色器,则渲染背景将来自该着色器(例如,在实际位置或类似位置查找背景照片的纹理着色器)。在任何一种情况下,mia_physicalsky 仍在折射和反射中都可见。
CIE 天空模型
CIE 天空模型是照明分析中使用的标准模型。它是无色(灰度)模型,因此不适用于创建产品级质量图像,但其优点是符合标准化(已知)的亮度分布。
declare shader "mia_ciesky" (
boolean "on" default on,
color "rgb_unit_conversion" default 0.0001 0.0001 0.0001,
# Luminance parameters
boolean "auto_luminance" default on,
scalar "zenith_luminance" default 0.0,
scalar "diffuse_horizontal_illuminance" default 0.0,
# CIE specific parameters. 0 = clear sky, 1 = overcast
scalar "overcast" default 0.0,
# Sun direction
vector "sun_direction",
light "sun",
# Y vector
boolean "y_is_up",
)
version 1
apply environment, texture
end declare
该着色器与 mia_physicalsky 共享许多参数且这些参数的作用都相同,这包括 on、rgb_unit_conversion、sun_direction 和 y_is_up 参数。详细信息请参见 mi_shader__mia_physicalsky 页。
以下参数是 mia_ciesky 着色器特有的:
- auto_luminance。启用该参数后,可以通过设定 zenith_luminance 参数(以每平方米烛光为单位)或通过设定已知的 diffuse_horizontal_illuminance 值(以勒克斯为单位)定义天空亮度,但不能同时设定这两个参数。
- 当 overcast 为 0 时,使用“CIE 晴天”模型。当 overcast 为 1.0 时,使用“CIE 阴天”模型。中间值是两个模型的线性插值。
天空和环境入口
问题
计算机图形中的典型问题是,通过间接灯光(如来自天空或来自获取的 HDRI 或类似对象中的其他“环境”光)单独为场景照明。
在 mental ray 中使用最终聚集(以下简称 FG)完成此操作,并通过跟踪大量“最终聚集射线”以查看照亮环境(或其他照明曲面)的光完成此操作。由于有大量光线数,结果将在最终聚集点进行缓存(改善性能)并对结果插值,从而“平滑”结果。
通过最终聚集射线“看到”大量非常均匀的灯光时,表示其正常工作。通常,场景中的灯光级别非常均匀时,最终聚集会提供最佳结果;其通过天空(大多数最终聚集射线“看到”天空)可以很好地照亮室外场景,并可以很好地反弹房间中的次要灯光,该房间中的大多数曲面由直接光照明(大多数最终聚集射线“看到”一些已照明的曲面)。
但是,以下场景更容易出现问题,房间黑暗没有任何灯光且只有一个朝向天空的窗:
在右侧图像中,几乎所有最终聚集射线都将“看到”黑色,只有少数射线可以从狭窄的窗中“逃出”而照亮天空。要准确解决此问题,需要发出很多最终聚集射线,这将对性能产生不利影响。
进一步的区别是,在前两个场景(室外场景和光线充足的室内场景)中已经存在造成高质量直接阴影的直接灯光,这解决了场景中的细节;最终聚集只用于其他反弹照明或天空照明,不提供批量照明。因此,有最终聚集点插值引起的任何“过度平滑”问题由其他光线盖过(或使用 mia_material 中的 AO 予以解决)。
但是最右侧的场景并不具有该优势,所有灯光都是间接的天光。因插值引起的任何过度平滑问题都清晰可见,这意味着同时需要高的最终聚集射线数和高的最终聚集点密度以创建满意的渲染,从而提供更长的渲染时间。
许多用户进行内部渲染使用的常见技术是在窗中放置一个区域光,以提供天空照明,而不是依靠最终聚集“查找”天空。但是这样又引申出一个问题“该灯光的亮度和颜色应该如何?”
解决方法
要解决所有这些问题,需要引入入口光概念。入口光是放置在窗的(矩形)区域光,它从窗外的天空中获得正确的强度和颜色(即,环境着色器,如 mia_physicalsky 或类似设备)以及可以“看到”的天空的大小4。
实际上,这使得入口光相当于“最终聚集集线器”,因此,无需在场景周围发送数千个最终聚集射线以“查找”窗,入口光实际上阻止最终聚集射线,且将其从超出窗的光线转化为直接光,该直接光的高质量区域阴影不具有与插值相关的问题。
最终聚集将看到非常明亮的房间而非黑暗的房间,且能够以更低的最终聚集射线数执行。此外,由于来自窗的光现在是直接光,因此,可以“免费”获得一个附加的灯光反弹。
mia_portal_light
mia_portal_light 着色器在矩形区域光上应该同时用作灯光和光子发射器着色器。mental ray 灯光实例必须设定为可见(这是入口光可用于“阻止”最终聚集射线的技术要求。但是,灯光实际在渲染时是否可见是由着色器处理的)。
此外,必须设定 mental ray 灯光实例,例如在灯光自身坐标空间的 X/Y 平面中扩展矩形区域光,且必须使用灯光实例的变换5处理灯光的任何变换。
存在以下参数:
declare shader "mia_portal_light" (
boolean "on" default on,
scalar "multiplier" default 1.0,
color "tint_color" default 1 1 1,
boolean "reverse" default off,
scalar "cutoff_threshold" default 0.005,
boolean "shadows" default true,
boolean "use_custom_environment" default off,
shader "custom_environment",
boolean "visible" default off,
boolean "lookup_using_fg_rays" default on,
scalar "shadow_ray_extension" default 0.0,
boolean "emit_direct_photons" default off,
color "transparency" default 1 1 1
)
version 9
apply light, emitter
end declare
on 启用或禁用灯光。
multiplier 设定强度,tin_color 修改灯光颜色。颜色为白色且 multiplier 是 1.0 时,发出的灯光在强度(和颜色)上等于最终聚集看到的环境灯光(如果允许发送数千个最终聚集射线)6。
通常灯光沿灯光实例的坐标空间的正 Z 方向照射。如果启用了 reverse,它将沿负 Z 方向照射。
cutoff_threshold 是性能优化选项。任何低于该级别的灯光都被忽略,且不跟踪任何阴影光线(其消耗大量的区域光的渲染时间)。当然,由于灯光被忽略,因此场景会稍微变暗,但是可以节省大量额外的渲染时间。
shadows 可以启用和禁用阴影。
如果禁用了 use_custom_environment,则着色器在全局摄影机环境中查找灯光颜色。如果启用,则调用作为 custom_environment 传递的着色器以查找颜色。
提示:将着色器用作环境入口时,也可以通过将返回纯色的着色器作为 custom_environment 来将该着色器用作“光卡”着色器,例如,使用 mib_blackbody 创建具有给定色温的光卡。
如果启用了 use_custom_environment,但实际上没有传递任何 custom_environment,则着色器将用作白色光卡。
visible 定义光源发射曲面是否可见。禁用该参数后,眼光线、反射光线等光线将直接穿过,仅入口光本身保留不可见(但我们从窗外仍可以“看到”)。启用该参数后,对于眼光线、反射光线等光线,实际灯光发射曲面可见(但对窗外的我们不再可见,即使我们仍可以“看到”环境着色器结果)。将 mia_portal_light 用作光卡着色器时,使用启用模式非常有用。
禁用了 lookup_using_fg_rays 后,使用 mi_trace_environment() 的常规调用来查找环境着色器。但是,如果一些着色器由最终聚集射线或其他射线调用,则这些着色器的工作方式将有所不同(例如,mia_physicalsky 着色器不显示最终聚集射线可见的太阳的“图像”)。由于 mia_portal_light 的用途是作为“最终聚集集线器”,因此,应该遵循该工作方式。因此,启用 lookup_using_fg_rays 后,它会调用将光线类型设定为 miRAY_FINALGATHER 的环境,以便基于此切换工作方式的着色器可以返回适合最终聚集射线的颜色。
如果 shadow_ray_extension 为 0,则着色器开始跟踪灯光“此处”的阴影光线。如果为正值,则阴影光线实际从“窗外”距离为该值处开始。因此,如果窗外刚好有一个大的对象,则其阴影会考虑在内。反之,负值允许阴影光线从“窗内”距离为该值处开始,可以允许它们“跳过”窗附近麻烦的几何体(花、窗帘),否则这些几何体将会给阴影引入噪波。
启用了 emit_direct_photons 后,灯光将仅射出直接光子,不会实际射出任何直接光。
transparency 参数有两个函数。
- 启用了 visible 后,它将用作区域光的“可见颜色”的倍增。该参数为白色时,直接“可见”的颜色取决于发射此数量灯光的曲面的物理定律。
通过将参数更改为非白色,可以人工更改可见结果(通过更改该参数来更改)和发射灯光的强度(不受该参数影响)之间的平衡。这可用于避免噪波。
- 禁用了 visible 后,它将定义区域光的透明度。
这样允许将 mia_portal_light 着色器也用作窗上的“胶”,以掩盖窗外看到的强度,否则会出现过暴。实际发射的灯光强度不会受此影响,它也不会影响透过窗进来的其他光线的强度,它仅影响眼睛、折射或反射可见的光线。
示例
在本节中,将使用入口光与以前版本 mental ray 中可用的光线进行比较以检查其优点。
使用以下场景7:

我们的场景、使用入口光、GI 和 FG。
场景的照明只来自太阳和天空,房间内部没有任何类型的光源。
不使用入口光
若要清楚地介绍以下场景中什么是直接灯光和间接灯光,我们需要在此处显示禁用入口、全局照明和最终聚集的场景。

我们场景的直接照明
上面的图像显示孤立的直接灯光。这意味着该结果最终聚集将“看到”- 非常高对比度的场景,包含完整的黑度、地板上直接太阳光的热点和非常明亮的天空,以及太阳照射的外部地面 - 最终聚集算法的次优输入。
如果以相对较低的设置启用最终聚集,将获取以下图像:

具有 50 束光线且密度为 0.1 的 FG
此图像一点都不美观。它上面有斑点,工具架似乎“悬浮”在墙上,更糟的是,它还非常暗。为什么会这样?
原因是高对比度输入。最终聚集包含一个过滤器,用于在某些离群的最终聚集射线照亮一个非常明亮的对象时避免斑点结果,因此该过滤器会移除最亮的光线。但是,我们的场景是高对比度,实际上我们期望某些光线比其他光线更亮。

使用 FG 过滤器 = 0
在本实例中,过滤器实际上是执行我们尝试执行的操作。可以禁用过滤器,如上图所示,这将帮助我们进行灯光分布,但不是斑点,也不是断开工具架与墙的连接。
由于我们正在使用 mia_material,因此我们可以使用内置环境光遮挡帮助完全解决这些情况。但是,调大该设置仅起到部分作用:

添加 AO - 帮助有限
过去可用的单一解决方法是简单地提高最终聚集设置的质量。自然我们将使用非常低的设置,因此,此阶段的质量很差也就不足为奇。调大按钮:

具有 250 束光线且密度为 0.8 的 FG

具有 500 束光线且密度为 1.5 的 FG
是,增加射线的数量和密度有所帮助,但这将大大影响渲染时间。即使使用高设置,我们仍然无法获得最佳结果。我们不得不提高设置以解析所有细节!
将高的最终聚集设置向下调节片刻,集中进行光线传输。场景仍然很暗,因为我们仅获取一个最终聚集反弹,且因为天空照明是间接照明,因此无法获得该灯光的反弹!意义:在该场景中,太阳光反弹一次,但天光根本不反弹!
将反弹次数提高到 3:

反弹次数为 3 的 FG
这样可获得更多的灯光。由于我们将“高的”最终聚集设置调低,因此,照明不平滑且缺少详细信息。
使用最终聚集多次反弹只是 mental ray 传输场景中灯光的一种方法。替代方法是使用光子(全局照明)。但是切记,启用了光子后,最终聚集返回到单个反弹,使光子处理所有剩余的反弹:

具有 GI(光子)的 FG
现在发生某些奇怪的事情:颜色向黄色移动。为什么会这样?这是因为天空不会生成任何光子。因此,现在具有多个高质量的太阳反弹,但我们回到零个天空反弹!
使用入口光
现在转换为入口光。首先禁用所有最终聚集和全局照明,且只简单地向具有默认设置的窗添加一个入口光。生成的图像如下所示:

仅入口光,没有 FG 或光子
其颜色看起来类似于上面的之前最终聚集结果,但细节级别高很多。由于没有继续插值,因此工具架安全地挂在墙上。所有阴影包含详细信息的细节。
由于现在它是直接光,启用了它后会被最终聚集选中。比较使用入口光和不使用入口光这两种情况下最终聚集“看到”的内容:

不使用入口光

使用入口光
左侧是不使用入口光时最终聚集“看到”的超高对比度结果,而右侧是一个良好的平衡场景。不仅使用细微的直接光填充了它 - 对于最终聚集,天空本身实际上不可见,因此它永远不会出现照亮高对比度区域的情况8,且最终聚集过滤器的美观问题也就随之消失。
直接的入口光的第二个功能是启用了最终聚集后,可以“免费”获得一次灯光反弹:

天空照明的一次免费反弹,入口光作用
请注意,窗内的墙上现在具有一些天光的反弹光,即使我们使用具有单个反弹的最终聚集!

使用入口光和 3 个漫反射反弹

使用 GI(光子)
启用多个漫反射反弹(在左侧)使图像更生动。启用全局照明(光子)现在会产生更加平衡的图像,因为入口光实际上发射光子!不再偏向于反弹太阳光,同样也反弹光子形式的天光。
最后,启用一个室内灯光,然后使用入口光 transparency 参数阻止室外视图的过度曝光,以便获得最终图像:

最终图像
总结:入口光在以下方面起作用...
- ...减少渲染时间(通过减少使用极高的最终聚集设置的需要)。
- ...保持场景中的灯光平衡(通过将环境光转化为光子,光子可以如太阳光一样在室内反弹)。
- ...提高天空照明的质量,使平滑区域平滑且没有斑点,以及以全保真度显示最微小的细节。
- ...显著降低场景的设置时间(不需要进行任何调整,始终生成“最佳”图像,即装即用)。

天光的细微相互作用,入口光作用
光度学灯光
问题
使用基础 mental ray 着色器渲染具有全局照明(使用光子)的物理校正场景时存在的一个问题是正确平衡光子能量和直接光。原因是强度通常指定为某些给定方向的强度(例如,聚光灯上的峰值强度),但是能量是所有方向中的所有这些强度的总和(或从技术上讲,积分)。
例如,对于聚光灯,强度峰值相同时,需要的不同光子能量取决于聚光灯圆锥体的宽度和该圆锥体内强度分布的形状。虽然可以计算数学定义的强度分布(如聚光灯圆锥体),那灯光剖面定义任意分布呢?
此外,为确保灯光的光子解决方法的最佳收敛,该灯光的强度基于灯光方向而发生变化(例如,聚光灯或使用灯光剖面的灯光),用户应该以不同的密度发射类似能量的光子,而不是在不同的方向发射不同能量的光子。因此,给定点的每区域能量值(光子能量的密度)必须匹配到达该点的直接灯光。
解决方法
要解决所有这些问题,需要引入 mia_photometric_light。它使用灯光强度来平衡光子能量,方法是对所选的灯光强度分布进行数字化整合,以自动计算出正确的光子能量,并且还自动调整光子密度以适应强度分布。
若要使用它,只需使用与光源的两个灯光和光子着色器都相同的着色器实例即可。光源必须具有原点(即,该着色器对无限光源无效)。必须将光源设定为发射光子,并且必须为其指定非零能量值(虽然实际值将被着色器所覆盖,但非零的能量值是必需的;否则 mental ray 不会为该光源发射任何光子)。指数应始终为 2。如果光源是聚光灯,应使用扩散值。有光灯光的信息,请参见 mental ray 手册。
shader "myLight" "mia_photometric_light" (
"on" true,
"color" 1 1 1,
...
)
light "theLight" = "myLight"
emitter = "myLight"
origin 0 0 0
energy 1 1 1
exponent 2
caustic photons 20000
globillum photons 20000
end light
着色器声明如下所示:
declare shader "mia_photometric_light" (
boolean "on" default on,
scalar "multiplier" default 1.0,
color "color" default 1.0 1.0 1.0,
# How to define the light intensity
# 0 = using a manual peak intensity in cd
# 1 = using a total amount of lumen
# 2 = using the information stored in the IES file
integer "intensity_mode",
scalar "manual_peak_intensity_cd",
scalar "manual_flux_lm",
# How to define the light distribution
# 0 = Isotropic spherical distribution
# 1 = Spotlight distribution
# 2 = using the information stored in the IES file
integer "distribution_mode" default 0,
scalar "spotlight_cosine_bias",
lightprofile "profile",
# Scene and lighting unit management
scalar "units_to_meter_scale" default 1.0,
scalar "cm2_factor" default 1.0
)
version 2
apply light, emitter
end declare
on 启用或禁用灯光。
multiplier 允许调整强度,如黑暗。仅当该值为 1.0 时,下面提到的强度设置才精确。
color 是灯光的颜色。仅当这是一个规格化的颜色(即,颜色的 mi_luminance () 为 1.0)时,下面提到的强度设置才精确。幸运的是,函数(如 mib_cie_d 和 mib_blackbody)都返回规格化的颜色。
intensity_mode 指明定义灯光强度的参数以及单位:
- intensity_mode 为 0 时,灯光的峰值强度由 manual_peak_intensity_cd 参数定义(以烛光为单位)。
- intensity_mode 为 1 时,总的光通量由 maual_flux_lm 参数定义(以流明为单位)。
- intensity_mode 为 2 时,强度直接来自存储在指定给 profile 参数的 IES 剖面中的值。
distribution_mode 定义灯光在不同方向的分布:
- distribution_mode 为 0 时,灯光是各向同性的,即它在所有方向上的照射正好都相同。
- distribution_mode 为 1 时,灯光是聚光灯。灯光必须具有 spread 参数来定义光束的宽度。圆锥体内灯光的分布遵循余弦函数,最高点接近 spotlight_cosine_bias 参数的幂。因此,偏移低于 1.0 时会将灯光朝圆锥体的边缘推动,偏移高于 1.0 时会将灯光朝圆锥体的中心推动。
- distribution_mode 为 2 时,灯光的强度分布来自存储在指定给 profile 参数的 IES 剖面中的值。请注意,将此分布模式与手动强度模式 0 或 1 组合使用是合法的。在这些情况下,IES 剖面用于相对模式,尝试容纳所需强度,但仍容纳 IES 文件的平行分布。
由于使用现实世界单位的物理照明高度依赖比例,因此,units_to_meter_scale 定义了多少个场景单位等于一米。例如,如果一个场景单位是 1 毫米,则将有 1000 个场景单位。
最后,cm2_factor 是像素值和每平方米烛光亮度值之间的转化因子。简而言之,此选项应匹配 mia_exposure_photographic 着色器的 cm2_factor 以生成在摄影上正确的渲染和强度。请参见单位页。
脚注- 1
- 值 0.318 (1/pi) 源自理论上完美的 Lambertian 反射镜的照度/亮度比。
- 2
- 针对 6500k 白点计算得出。
- 3
- 否则,这将会导致最终聚集解决方法中产生噪波且向场景添加的灯光过多。。
- 4
- 从着色点看到的窗的对向立体角。
- 5
- 这是大多数 OEM 应用程序设置 mental ray 区域光实例的方式。。
- 6
- 对于最终聚集过滤器 0,无偏模式。
- 7
- 示例场景几何体的大部分由 Giorgio Adolfo Krenkel 提供。
- 8
-
尽管因太阳引起的直接照亮地板上灯光池的最终聚集射线将确实看到高对比度。