纹理

这些着色器依赖于上述的一个纹理空间映射函数,以生成 coord 纹理顶点,并生成该顶点的颜色。生成 2D 映射的着色器仅使用纹理顶点的 xy 分量。

其中大多数着色器返回颜色。由于颜色可以指定给其他着色器的标量参数,因此这些着色器可以与基于贴图标量从颜色扩散中选择颜色的混合着色器结合使用。这将与纹理着色器的淡出和平滑参数进行交互。

图像查找

在半开间隔 [0, 1)中查找纹理图像。此间隔外的点将映射到 R=G=B=A=0

mib_texture_lookup
color "mib_texture_lookup" (
    color texture   "tex",
    vector          "coord")
tex
要查找的纹理图像。
coord
要查找的坐标。

基本上,这是着色器界面函数的 mi_lookup_color_texture 系列的前端。

mib_texture_lookup2
color "mib_texture_lookup2" (
    color texture   "tex",
    scalar          "factor")

mib_texture_lookup 的替代项。它使用 state 中的第一组纹理坐标,而不是作为连接的参数获得它们。

tex
要查找的纹理图像。
factor
纹理的重复因子。

过滤的图像查找

使用椭圆过滤查找纹理图像。

mib_texture_filter_lookup
color "mib_texture_filter_lookup" (
    color texture   "tex",
    vector          "coord",
    scalar          "eccmax",
    scalar          "maxminor",
    scalar          "disc_r",
    boolean         "bilinear",
    integer         "space",
    shader          "remap")
tex
要查找的纹理图像。它必须是纹理图像,而不是纹理着色器;否则,会以未过滤方式查找纹理。
coord
纹理采样的中心位置。
eccmax
椭圆的最大允许偏心率。
maxminor
椭圆次半径的最大纹理像素数。
disc_r
用于计算屏幕到纹理空间的变换。如果 disc_r 为零或未指定,则使用默认值 0.3。对于具有高度弯曲曲面的场景,如果出现锯齿瑕疵,则在范围 (0.0...0.3] 中选择值非常有用。
bilinear
如果设定为 true,则允许纹理采样的双线性插值。这样会使放大区域模糊,并避免块状瑕疵。
space
纹理空间索引,范围为 [0...63]
remap
一种着色器,用于调用以重新映射附加纹理坐标。

该着色器使用给定的 space 参数调用 mi_texture_filter_project,以在光栅空间和纹理空间获得三个相应点。这三个纹理坐标通过调用指定的 remap 着色器重新映射;用于重新映射的实际纹理坐标作为 mi_call_shader_x 的第四个参数传递(这意味着调用的着色器必须设计为检查其第四个参数)。重新映射着色器必须在着色器参数使用它,而不是提供的纹理坐标向量。

过滤的纹理查找所需的投影变换矩阵通过调用 mi_texture_filter_transform 着色器界面函数并使用三个光栅空间和重新映射的纹理空间坐标计算得出。矩阵中的平移分量设定为 coord。请注意,始终为当前光栅位置计算投影变换,但可以使用 coord 平移纹理空间中的椭圆。这对于凹凸贴图非常有用。

基本上,这是着色器界面函数的 mi_lookup_filter_color_texture 系列的前端。椭圆过滤参数 bilinearmib_texture_filter_lookup 中设定为 false,对于 circle_radius,使用默认值。如果无法正确计算投影矩阵,或纹理是着色器而不是图像,或反射级别不为零,则使用未过滤的纹理查找。

棋盘格

将单位立方体划分为 8 个子立方体,每个子立方体具有一种单独的 RGBA 颜色。左侧、底部和前侧部分的宽度可编程,允许使用此着色器生成条纹和二维或三维的棋盘格。该函数对于预览着色器球场景也很有用。

mib_texture_checkerboard
color "mib_texture_checkerboard" (
    vector          "coord",
    scalar          "xsize",
    scalar          "ysize",
    scalar          "zsize",
    color           "color000",
    color           "color001",
    color           "color010",
    color           "color011",
    color           "color100",
    color           "color101",
    color           "color110",
    color           "color111")
coord
纹理的坐标。
*size
指定每个方向上左 (x)、底 (y) 和前 (z) 半立方体的分数,范围为 [0, 1)
color***
指定子立方体的颜色。三个数字代表 XYZ 坐标:000 表示前下左,100 表示前下右,111 表示后上右。

圆点花纹

将具有可编程直径的圆盘绘制为单位方形,然后将具有可编程直径的球体绘制为单位立方体。前景色和背景色都是可编程的。

mib_texture_polkadot
color "mib_texture_polkadot" (
    vector          "coord",
    scalar          "radius",
    color           "fgcolor",
    color           "bgcolor")
mib_texture_polkasphere
color "mib_texture_polkasphere" (
    vector          "coord",
    scalar          "radius",
    color           "fgcolor",
    color           "bgcolor")
coord
纹理的坐标。
radius
分别为单位方形或单位立方体中圆盘或球体的半径。
fgcolor
圆盘或球体的前景色。
bgcolor
圆盘或球体周围的背景色。

湍流

在单位立方体中创建湍流标量图案。可以在极坐标中计算一个、两个或所有三个纹理向量分量,从而生成球面贴图。

mib_texture_turbulence
scalar "mib_texture_turbulence" (
    vector          "coord",
    scalar          "spacing",
    scalar          "strength",
    scalar          "power",
    integer         "iteration",
    integer         "polar_dim")
coord
纹理的坐标。
spacing
单位立方体中噪波的密度。如果为 0,则使用默认值 1。
strength
描述扭曲强度的权重。如果为 0,则使用默认值 1。
power
指定湍流的程度。如果为 0,则使用默认值 1。
iteration
设定合成湍流过程数,其中每个过程根据 power 参数的指定贡献湍流的逐渐减少量。如果为 0,则使用默认值 2。最大值为 8。
polar_dim
指定在计算复合噪波值之前,应转化为极坐标的纹理向量分量数。0 创建各向异性噪波,1 创建线,2 创建圆柱体。

创建 U、V 和 W 方向的余弦波,每个波都有可编程振幅。(可使用纹理重贴图基础着色器控制频率和偏移。)结果为灰度颜色 R=G=B=A;可以使用颜色贴图基础着色器重新贴图该颜色。其范围为 [o-s ... o+s] ,其中 s 是振幅的和,O 是偏移。

mib_texture_wave
color "mib_texture_wave" (
    vector          "coord",
    scalar          "amplitude_x",
    scalar          "amplitude_y",
    scalar          "amplitude_z",
    scalar          "offset")
coord
纹理的坐标。
amplitude_*
在与结果相加之前与生成的波相乘的因子。默认值是 0(无贡献)。
offset
将一个常量值与加权余弦的总和相加。可以用于将结果转换为正数。

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