跳转到内容

expand_udim

string  expand_udim(float u, float v, string path, ...)

扫描输入路径中的特殊转换字符,执行UDIM或UVTILE风格的文件名扩展。

这与texprintf类似,但有两点显著区别:

  • 没有可变打印参数。仅执行UDIM/UVTILE扩展。
  • 如果执行了UDIM/UVTILE扩展,该函数会检查纹理是否存在且可访问。

u, v

要转换为UDIM瓦片规格的纹理坐标。

path

文件路径。路径中的特殊字符序列将根据给定的UV坐标扩展为UDIM标识符。特殊转换序列包括:

%(UDIM)d<UDIM>UDIM坐标,计算公式为 1000 + int(u)+1 + int(v)*10
%(U)dUVTILE风格的u坐标 (int(u)+1)
%(V)dUVTILE风格的v坐标 (int(v)+1)
%(UVTILE)d<UVTILE>u%d_v%d 形式扩展u和v坐标。

用于纹理标识的 d 转换说明符可以通过字段修饰符进行修改。例如 %(U)02d%(V)04d

“checkfile”, int =1

通常,该函数会检查扩展后的路径是否存在且可读。如果传入 "checkfile", 0 参数对,函数将不执行此检查。

返回值

替换了所有UDIM控制序列的路径。

如果扩展后的文件路径不存在或不可读,函数将返回空字符串,除非关闭 checkfile 可变参数。

示例

  • expand_udim(3.1, 4.15, "map_<UDIM>.rat") - 返回 “map_1044.rat”
  • expand_udim(3.1, 4.15, "map_%(U)02d_%(V)02d.rat") - 返回 “map_04_05.rat”
  • expand_udim(3.14, 11.5, "map_u%(U)d_v%(V)d.rat") - 返回 “map_u4_v12.rat”
  • expand_udim(3.14, 11.5, "missing_file<UDIM>.rat") - 对于缺失文件返回 ""
  • expand_udim(3.14, 11.5, "missing_file<UDIM>.rat", "checkfile", 0) - 返回 “missing_file1044.rat”,因为禁用了”checkfile”
  • expand_udim(3.14, 11.5, "/path/file.rat") - 返回 “/path/file.rat”(无论文件是否存在),因为没有UDIM/UVTILE扩展
// sprintf()会保留%(UDIM)d格式序列不做修改
string map = sprintf("%s/%s_%(UDIM)d.rat", texture_path, texture_base);
// 扩展<UDIM>,如果贴图不存在则返回空字符串
map = expand_udim(u, v, map);
if (map != "")
Cf = texture(map, u, v);