跳转到内容

texture

vector|vector4 texture(string map, ...)

在着色上下文中使用全局S和T坐标对纹理进行采样。这些签名仅在着色上下文中可用。

vector|vector4 texture(string map, float ss, float tt, ...)

在给定的S和T坐标处采样纹理,使用基于该点S和T导数的滤波宽度。如果在着色上下文之外使用此函数,滤波宽度将为0。

vector|vector4 texture(string map, float s0, float t0, float s1, float t1, float s2, float t2, float s3, float t3, ...)

使用显式采样四边形,其角点为(s0, t0)、(s1, t1)、(s2, t2)和(s3, t3)。

返回值

从纹理中采样的颜色值。

如果以vector4返回类型调用该函数,则第四分量将包含纹理的alpha值。

图像滤波选项

指定滤波参数的示例:

colormap(map, u, v, "smode", "decal", "tmode", "repeat", "border", {.1,1,1});
colormap(map, u, v, "mode", "clamp", "width", 1.3);
colormap(map, u, v, "filter", "gauss", "width", 1.3, "mode", "repeat");

如果纹理是深度.rat文件,可以使用"channel"关键字参数指定文件中的通道:

string channelname = "N";
cf = colormap(map, u, v, "channel", channelname);
  • 当读取非Houdini原生格式(如.pic.rat)的纹理时,Houdini使用OpenImageIO从文件中读取图像数据。在这种情况下,下面的一些可变参数可能无效。

  • 当纹理函数评估非Houdini格式的纹理时,Houdini会切换到使用OpenImageIO进行纹理评估。虽然许多可变关键字有对应的值,但有些关键字在OpenImageIO中没有等效功能。

  • 默认情况下,OIIO不会为没有多分辨率图像的图像创建MIP贴图。可以通过在OPENIMAGEIO_IMAGECACHE_OPTIONS环境变量中添加automip=1来启用此功能。

没有MIP贴图时,模糊和滤波可能无法按预期工作。 * 也可以使用OPENIMAGEIO_IMAGECACHE_OPTIONS来覆盖OIIO用于缓存的内存大小。

默认情况下,Houdini会将缓存内存设置为计算机物理内存的1/8。如果设置了OPENIMAGEIO_IMAGECACHE_OPTIONS变量,它将覆盖计算出的缓存大小。

wrap”, string ="repeat"

repeatperiodic

图像贴图将在0到1范围之外重复。 基本上,纹理坐标的整数部分被忽略。这是默认设置。

clampedgestreak

纹理坐标将被限制在0到1范围内。这会导致范围外的评估结果为图像最边缘的颜色(边界像素在范围外被拉伸)。

blackdecalcolor

0到1范围之外的坐标将评估为边框颜色(而不是图像中的颜色)。默认边框颜色为黑色(即0)。

uwrap”, string

(又名swrap) 指定当u坐标超出0到1范围时的行为。值与wrap相同。

vwrap”, string

(又名twrap) 指定当v坐标超出0到1范围时的行为。值与wrap相同。

border”, float|vector|vector4 =0

指定使用Black/Decal/Color包裹时的边框颜色。 对OpenImageIO格式无效

default_color”, float|vector|vector4

指定当找不到纹理贴图时使用的颜色。如果未提供此参数,颜色将由HOUDINI_DEFAULT_TEXTURE_COLOR变量设置。

channel”,

指定具有多个颜色通道的纹理的颜色通道(例如diffuse_indirectN)。 对于ptex图像,这指定第一个通道的索引(例如04)。

blur”, float

在x和y方向进行模糊处理。模糊量以图像大小的百分比衡量——因此0.1的模糊量将模糊图像宽度的10%。如果需要不同维度的模糊量,请使用xbluryblur

xblur”,

(又名ublursblur) x图像方向的模糊量。

yblur”,

(又名vblurtblur) y图像方向的模糊量。

pixelblur”, float

以像素数为单位模糊纹理。 对OpenImageIO格式无效

Cf = texture("map.rat", ss, tt, "pixelblur", 2.0);

xpixelblur”, float

在X方向以像素数为单位模糊纹理。

ypixelblur”, float

在Y方向以像素数为单位模糊纹理。

filter”, string ="box"

指定用于评估的抗锯齿滤波器类型。

对于Houdini原生格式,以下值应为指定以下之一的字符串:

"point"

点采样(即无滤波)

"box"

盒式滤波器(默认)

"gauss"

高斯滤波器

"bartlett"

Bartlett/三角滤波器

"sinc"

Sinc锐化滤波器

"hanning"

汉宁滤波器

"blackman"

布莱克曼滤波器

"catrom"

Catmull-Rom滤波器

对于其他格式(由OpenImageIO加载),指定"point"滤波器会将OIIO插值模式设置为"closest"并禁用MIP贴图。任何其他值都使用OIIO智能双三次插值。可以使用"filtermode"可变参数进行更精细的控制(见下文)。

xfilter”, string

(又名ufiltersfilter) 指定X方向的滤波器。滤波器与filter相同。

yfilter”, string

(又名vfiltertfilter) 指定Y方向的滤波器。滤波器与filter相同。

filtermode”, string

对于Houdini原生格式,VEX还支持更简单的滤波。filtermode可以设置为以下之一:

filter

使用filter关键字参数指定的滤波器。

bilinear

使用简单的双线性滤波。这是最快的专用滤波模式,但提供的滤波质量最低。

biquadratic

使用简单的二次滤波(三阶滤波)。

bicubic

使用简单的双三次滤波。

filtermode设置为bilinearbiquadraticbicubic时, 会忽略几个参数(如filterwidth),转而使用固定的插值滤波器。其他参数(特别是lerpblur关键字)仍然有效。

对于其他格式(由OpenImageIO加载),可以将filtermode设置为"filter"(见上文"filter")、"bilinear""biquadratic""bicubic"

width”, float =1.0

对于Houdini原生格式,这设置X和Y方向的滤波宽度。

对于其他格式(由OpenImageIO加载),这设置OIIO的swidthtwidth选项。

xwidth”, float

(又名uwidthswidth) X方向的滤波宽度。

ywidth”, float

(又名vwidthtwidth) Y方向的滤波宽度。

zwidth”, float

Z方向的滤波宽度(用于阴影贴图)。 与其他宽度参数不同,这是以世界空间单位衡量的。

extrapolate”, int

是否在计算抗锯齿信息时使用导数外推。 默认启用导数外推。参数应为0或1。

lerp”, int

对于Houdini原生格式,这指定RAT文件是否应在不同MIP级别之间插值。默认情况下,此功能关闭。启用插值将有助于消除访问.rat文件不同MIP级别时的不连续性。然而,纹理评估的结果会稍微模糊(即更柔和)并且需要更多时间。

此参数有三个可能的值。

0

禁用MIP贴图插值(最快)。

1

近似MIP贴图插值(较快)。

2

高质量MIP贴图插值(较慢但质量最高)。

对于其他格式(由OpenImageIO加载),值为0表示单个MIP级别,任何其他值表示三线性插值。

depthinterp”, string

指定深度阴影贴图的深度插值模式, 控制在两个z记录之间采样时返回的不透明度值。

参数必须为字符串。

discrete

(默认)返回采样点之前的第一个z记录。

linear

线性插值采样点前后的z记录的不透明度。

有关两种模式之间的差异,请参阅深度阴影贴图

beerlambert”, int

评估体积深度阴影贴图时,这将启用Beer-Lambert不透明度插值。Beer-Lambert是一种更准确但更昂贵的插值形式。

参数应为0或1。

srccolorspace”, string

指定纹理存储的颜色空间。 访问纹理值时,如果需要,它们将从该空间转换为线性空间进行渲染。

auto

(默认)根据文件确定源颜色空间。目前,这将假定8位纹理为sRGB颜色空间,其他所有纹理为线性。

linear

转换为线性空间。目前这仅影响8位纹理,因为其他纹理已假定为线性空间。使用此选项强制线性解释用于凹凸或位移贴图的纹理。

sRGB

无论纹理的位深度或通道数如何,强制从sRGB颜色空间转换为线性空间。

rec709

从Rec709颜色空间转换为线性空间。

gamma22

从Gamma 2.2颜色空间转换为线性空间。

raw

直接使用贴图颜色,不进行转换

srccolorspace参数也可以是OpenColorIO已知的任何颜色空间。

face”,

使用Ptex纹理贴图时,face参数用于指定ptexture查找的面。 对OpenImageIO格式无效

ptexorient”, int

使用Ptex纹理时,多边形上的隐式纹理坐标用作纹理查找的插值(结合face)。然而,不同软件可能对缠绕和方向有不同的理解。此关键字参数允许您控制Houdini多边形方向的解释。ptexorient需要一个整数参数,该参数由位字段组成

  • 位0×01:补码s坐标
  • 位0×02:补码t坐标
  • 位0×04:交换st坐标

例如,值为6(0×4|0×2)相当于调用texture(map, 1-t, s)而不是texture(map, s, t)

默认ptexorient为0,这与http://ptex.us上的示例正常工作。

对OpenImageIO格式无效

iesnormalization”, string ="maxvalue"

通过environment()函数查询时,选择不同的IES贴图输出值归一化方法。

none

使用标头中坎德拉乘数缩放的原始值。

maxvalue

(默认)按最大值归一化。这是mantra默认灯光着色器使用的传统行为。

preserveenergy

按覆盖角度积分值归一化,以便IES配置文件影响灯光的形状,同时保持其总能量输出。