光照贴图

mental ray 支持光照贴图。这是对某些对象(其材质包含光照贴图着色器)运行的一个两阶段过程,用于计算照明或其他信息,然后将结果写入纹理或其他位置。第一个阶段是在顶点模式下为对象的每个顶点调用光照贴图着色器,然后收集返回的信息。第二个阶段是在输出模式下调用光照贴图着色器,通过循环该对象的所有三角形使用所收集的信息绘制纹理或其他输出数据。

基础着色器库中的光照贴图着色器收集直接和间接照明,并根据它创建可写的纹理贴图。尽管 mental ray 只能识别一个光照贴图着色器,基础光照贴图着色器还是分割为用于处理输出阶段的主着色器和一个单独用于顶点阶段的着色器(由主着色器调用)。这样更易于仅使用用户编写的着色器替换一个阶段。

照明采样

光照贴图照明采样着色器是一个简单的颜色着色器,用于对曲面灯光流入密度采样。该着色器可以聚集直接照明和(可选)间接照明。不应在材质中使用;而是应该将其 指定给 mib_lightmap_write 着色器的 input 参数。

mib_lightmap_sample
color "mib_lightmap_sample" (
    boolean         "indirect",
    integer         "flip",
    array light     "lights")
indirect
告知着色器也采样间接照明。
flip
为整数值,选择几何体中要照明的一面。值为 0 时,选择法线的方向(前面),值为 1 时,选择相反的方向(后面),值为 2 时,选择从两个方向对照明进行采样并合并。
lights
要进行直接照明采样的灯光数组。

光照贴图生成

光照贴图生成着色器是主要的光照贴图着色器。该着色器收集三角形顶点的几何信息和纹理坐标,然后写入每个三角形的三角形纹理区域。对于三角形覆盖的纹理的每个像素,调用一个采样函数并将结果写入该着色器。使用 lightmap 关键字将光照贴图着色器附加到某种材质。

mib_lightmap_write
struct {
    vector          "point",
    vector          "normal",
    vector          "tex"
} "mib_lightmap_write" (
    color texture   "texture",
    vector texture  "coord",
    color texture   "input",
    integer         "fg_mode")
texture
是用于写入光照贴图的可写纹理。必须已使用 writable 关键字声明。
coord
是返回当前特定点的纹理 UV 坐标的着色器(例如 mib_texture_remap)。
input
是返回要写入每个纹理像素的数据的着色器。例如,此处使用 mib_lightmap_sample 可聚集照明以写入光照贴图。
fg_mode
当启用最终聚集时,该模式允许通过控制在整个曲面放置最终聚集点来优化质量。通常在对象的背面、超出摄影机视角的区域,以及依赖 mental ray 最终聚集视图的优化可能不会覆盖的地方实现良好的质量时,需要使用该项。支持的值如下:
-1禁用
0在(细分几何体的)每个顶点上强制放置最终聚集点
1在每个纹理像素(纹理元素)上强制放置最终聚集点
2...每两个纹理元素
3...每三个纹理元素(默认)
n (n > 3)...每 n 个纹理元素

Copyright © 1986, 2015 NVIDIA ARC GmbH. All rights reserved.