这些着色器负责选择、创建和重新映射纹理空间,计算基础向量和其他在可以应用颜色或置换之前必须执行的任务。其中某些函数具有 select 参数,它具有下列值之一:
0..63 | 选择一个纹理向量。如果超出了定义的纹理空间数,默认设置为 -1(空间中的点)。 |
−1 | 直接选择空间中的 3D 点,并且可能应用空间点变换。 |
−2 | 选择法线向量,并且可能应用空间向量变换。 |
−3 | 选择运动向量,并且可能应用空间向量变换。 |
−4 | 选择光线方向,并且可能应用空间向量变换。 |
−5..−9 | 选择曲面导数向量,并且可能应用空间向量变换。这些值包括 ∂P⁄∂U、∂P⁄∂V、∂²P⁄∂U²、∂²P⁄∂V² 和 ∂²P⁄(∂U∂V)。必须将对象定义为包含导数。 |
−10 | 选择 2D 背景图版,屏幕左下角的坐标为 (0, 0, 0),刚好位于屏幕右上角之外的坐标为 (1, 1, 0)。 selspace 在该模式下不起作用。变换类似于 mib_lookup_background 中的变换。 |
−11 | 在 state 中选择纹理坐标,它通常由材质着色器在对类型纹理的参数求值时放置,以供纹理着色器使用。 |
空间变换允许变换向对象坐标、世界坐标或摄影机坐标投影所基于的向量。 selspace 可能具有以下值:
0 | 不应用变换,使用内部空间。 |
1 | 将向量转化为对象空间。 |
2 | 将向量转化为世界空间。 |
3 | 将向量转化为摄影机空间。 |
4 | 以 [0,0... 1,1) 间隔返回当前屏幕空间坐标。 |
通过设定 project 参数可以将附加投影应用于生成的向量:
0 | 禁用投影。 |
1 | 选择 UV 投影(如果可用)。 |
2 | 选择正交 XY 投影。 |
3 | 选择正交 XZ 投影。 |
4 | 选择正交 YZ 投影。 |
5 | 选择球形投影。 |
6 | 选择圆柱形投影。U=0 位于 +X,V=0 位于 +Y。Y 也是圆柱体轴。 |
7 | 选择棒棒糖形投影,它将纹理的中心(纹理向量规格化之后)置于 X=0.5 Z=1 处,将角点置于参数角点处。在球体上,纹理中心位于北极,纹理角点位于南极,就像一个棒棒糖包裹器。 |
返回源于空间三维点(XY、XZ、YZ)的正交投影以及非正交投影(球形或圆柱形)的纹理向量;或返回纹理向量列表中带编号的纹理向量。该着色器也可以基于对象空间、摄影机空间、世界空间或屏幕空间进行计算。
vector "mib_texture_vector" ( integer "select", integer "selspace", integer "vertex", integer "project")
接受纹理顶点和比例,并且旋转、平移、裁剪和连接纹理。运算顺序是先变换,然后重复、交替、螺绕,最后是最小化/最大化裁剪。将返回结果(并存储在 state→tex 中,其他着色器可以从中拾取该结果)。
vector "mib_texture_remap" ( vector "input", transform "transform", vector "repeat", boolean "alt_x", boolean "alt_y", boolean "alt_z", boolean "torus_x", boolean "torus_y", boolean "torus_z", vector "min", vector "max", vector "offset")
使用角度围绕曲面法线旋转曲面方向。返回正交向量对;该向量对与其正交的法线一起定义旋转方向。这对各向异性反射尤为适用(请参见下文)。
struct { vector "u", vector "v" } "mib_texture_rotate" ( vector "input", scalar "angle", scalar "min", scalar "max")
给定相交点,基于投影方法(如上所述:UV、XY、XZ、YZ、球形或圆柱形)计算一对凹凸基础向量。
struct { vector "u", vector "v" } "mib_bump_basis" ( integer "project", integer "ntex")
将纹理应用于法线向量,方法是对多点的纹理求值以计算出 U 和 V 渐变,以便与基础向量相乘,与原始法线组合,规格化,然后被写回。也返回法线。state→tex 保留为未定义。
vector "mib_bump_map" ( vector "u", vector "v", vector "coord", vector "step", scalar "factor", boolean "torus_u", boolean "torus_v", boolean "alpha", color texture "tex", boolean "clamp")
以下着色器与上一个着色器相同(包括参数),但它返回颜色而不是向量。此颜色不会被修改。这允许在材质着色器列表中使用该着色器,只需将该着色器添加到实际材质着色器的前面。此配置中,该着色器会首先调用,并在材质着色器使用法线向量计算照明之前先修改 state 中法线向量。同时,它不会以任何方式影响计算的结果颜色。
vector "mib_passthrough_bump_map" ( vector "u", vector "v", vector "coord", vector "step", scalar "factor", boolean "torus_u", boolean "torus_v", boolean "alpha", color texture "tex", boolean "clamp")
有关参数的描述,请参见上文。
这是凹凸贴图着色器的另一种方法,其与前面的方法不同,该方法修改 state→normal,然后计算连接到 color 输入的任何着色图形。这样,扰动的法线将对连接的着色器或树可见。通常,照明着色器(如 Phong)应连接到 color 参数。
凹凸贴图将查看纹理中的 3 个纹理采样,并使用纹理空间 0。3 个返回值的差异指示法线的弯曲。法线将在 bump_vectors(如果存在)的方向弯曲,否则在导数的方向弯曲。在调用 color 的求值之前,修改的法线保存在 state 中。之后,附加到 color 的所有着色器将使用此修改的法线。结束时法线设定回其原始值。
color "mib_bump_map2" ( scalar "factor", scalar "scale", color texture "tex", color "color")
Copyright © 1986, 2015 NVIDIA ARC GmbH. All rights reserved.