光线类型切换着色器
光线类型切换着色器
通用切换器
mip_rayswitch 和 mip_rayswitch_advanced 工具着色器允许不同类型的光线返回不同的结果。在很多情况下,此功能非常有用,其中包括但不限于:
将主光线和次光线分离到对其他着色器的调用中。
将不同的环境返回到眼光线(即屏幕背景的摄影背景图版)、反射光线(即可在反射中看到的球形高分辨率环境)和最终聚集光线(适合于照亮场景的已过滤环境)。
限制耗时的着色器,使其几乎不可见(避免通过磨砂玻璃看到折射中的复杂辅助照明或环境光遮挡着色器)
mip_rayswitch 着色器是一个简易的着色器,它可接受一组其他颜色(通常设置为其他子着色器)以应用于特定类别的光线。
declare shader "mip_rayswitch" (
color "eye",
color "transparent",
color "reflection",
color "refraction",
color "finalgather",
color "environment",
color "shadow",
color "photon",
color "default"
)
version 1
apply material, texture, environment
end declare
对于主光线,eye 设置了眼光线的结果。
对于次光线,transparent 是透明光线的结果,reflection 是反射光线的结果,而 environment 是环境光线的结果。
finalgather 是最终聚集光线以及最终聚集光线的子光线的结果。
同样,shadow 是阴影光线的结果,而 photon 捕捉所有光子光线。
最后,default 是任何其他光线类型的结果。但是,它不是全局默认值,无论是否连接到着色器,上述每个参数都返回其各自的结果(即,通常为 0 0 0 0 黑色)。
如果想要使用全局默认值,则必须使用高级版本的着色器:
declare shader "mip_rayswitch_advanced" (
shader "eye",
shader "transparent",
shader "reflection",
shader "refraction",
shader "finalgather",
shader "environment",
shader "any_secondary",
shader "shadow",
shader "photon",
shader "default"
)
version 1
apply material, texture, environment
end declare
此着色器的工作方式与 mip_rayswitch 非常类似;但是它接受“shader”类型的输入,而不接受“color”类型的输入。
它不再允许直接指定固定的颜色,而是允许指定全局默认值 。
每个参数的工作方式都是类似的:eye 是眼光线的着色器,transparent 是透明光线的着色器,reflection 是反射光线的着色器,而 refraction 是折射光线的着色器,等等。
区别在于,如果其中的一个着色器未指定 ,则适合全局情况的其中一个着色器将接管。如果特定次光线类型的任一着色器未指定,并且该类型的光线到达,则 any_secondary 充当任何未显式设置的次光线类型的通用着色器。
同样,default 参数用作其上方每个未指定着色器的通用着色器。
环境切换器
使用 mental ray 时遇到的经典问题是,“环境”只有一个概念,但在实际使用中通常需要将 背景的概念与 环境的概念分隔开。
此着色器完全实现了以下功能:
declare shader "mip_rayswitch_environment" (
color "background" default 0 0 0 0,
color "environment" default 0 0 0 0,
)
apply texture, environment
version 1
end declare
对于所有眼光线、透明光线(作为眼光线的子项)或任何已折射的光线(其传播方向与透明光线的传播方向相同,这是 miRAY_REFRACT 类型的光线,但已通过 IOR 1.0 折射且作为眼光线的直接子项),此着色器会返回 background 。
对于任何其他类型的光线(反射、折射和最终聚集等),此着色器返回 environment 颜色。
此着色器专门用作摄影机环境,但在许多需要区分“主”光线和“次”光线的情况下,它将在着色图表的任何位置作为光线切换节点运行。
例如,理想的着色器可以在主光线和次光线之间切换,以便支持 mip_matteshadow 的“两个世界同时获取最佳效果”用法(如两个世界同时获取最佳效果 页面所述)。
渲染阶段切换器
有时,用户希望使用不同的颜色或子着色器,具体取决于 mental ray 在渲染管道中的位置。例如,用户可能希望使特定材质对最终聚集光线完全不透明,或在发射光子或类似对象时灯光具有不同的颜色。
declare shader "mip_rayswitch_stage" (
color "unknown",
color "main_render",
color "finalgather_precomp",
color "ao_precomp",
color "caustic_photons",
color "globillum_photons",
color "importon_emit",
color "lightmapping"
)
version 1
apply material, texture, environment
end declare
对于其他所有切换器着色器,参数的工作方式都是类似的。
unknown 用于任何“未知”阶段。通常决不应调用此参数,但它作为安全预防措施而存在,以防将来的 mental ray 版本中引入此时未知的任何新渲染阶段。
在法线平铺渲染过程中,此着色器会返回 main_render 输入的值。
在最终聚集预计算阶段,此着色器会返回 finalgather_precomp 的值。
在环境光遮挡预计算阶段,此着色器会返回 ao_precomp 的值。请注意,在此阶段 mental ray 3.7 不会调用着色器,因此决不会调用此参数 - 但将来的 mental ray 版本可能会有所不同。
在焦散光子和全局照明光子跟踪期间,将分别使用 caustic_photons 和 globillum_photons 输入的值。
在重要性粒子发射阶段,将使用 importon_emit 中的值。
最后,在灯光映射预处理阶段(例如,由次表面散射着色器使用),将使用 lightmapping 中的值。