From 46ae083113487d88a8cce8fc3ee38839e2ebd070 Mon Sep 17 00:00:00 2001 From: Jesse Yurkovich Date: Tue, 25 Jan 2022 22:00:23 -0800 Subject: Fix: OSL not recognizing UVTILE images The OSL image compilation step needed to be taught about the new UVTILE format for UDIM textures. A small missing feature from OIIO[1] means this is a bit uglier than it needs to be. Once we update to a version of OIIO with the fix we can remove the string replace part. [1] https://github.com/OpenImageIO/oiio/commit/35cb6a83e28d77bd9eb30e153abd9df4248863c5 Differential Revision: https://developer.blender.org/D13912 --- intern/cycles/scene/shader_nodes.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'intern') diff --git a/intern/cycles/scene/shader_nodes.cpp b/intern/cycles/scene/shader_nodes.cpp index 7f3625c0c69..34675be8e80 100644 --- a/intern/cycles/scene/shader_nodes.cpp +++ b/intern/cycles/scene/shader_nodes.cpp @@ -32,6 +32,7 @@ #include "util/color.h" #include "util/foreach.h" #include "util/log.h" +#include "util/string.h" #include "util/transform.h" #include "kernel/tables.h" @@ -462,8 +463,12 @@ void ImageTextureNode::compile(OSLCompiler &compiler) const ustring known_colorspace = metadata.colorspace; if (handle.svm_slot() == -1) { + /* OIIO currently does not support substitutions natively. Replace with a format they + * understand. */ + std::string osl_filename = filename.string(); + string_replace(osl_filename, "", "_"); compiler.parameter_texture( - "filename", filename, compress_as_srgb ? u_colorspace_raw : known_colorspace); + "filename", ustring(osl_filename), compress_as_srgb ? u_colorspace_raw : known_colorspace); } else { compiler.parameter_texture("filename", handle.svm_slot()); @@ -472,7 +477,8 @@ void ImageTextureNode::compile(OSLCompiler &compiler) const bool unassociate_alpha = !(ColorSpaceManager::colorspace_is_data(colorspace) || alpha_type == IMAGE_ALPHA_CHANNEL_PACKED || alpha_type == IMAGE_ALPHA_IGNORE); - const bool is_tiled = (filename.find("") != string::npos); + const bool is_tiled = (filename.find("") != string::npos || + filename.find("") != string::npos); compiler.parameter(this, "projection"); compiler.parameter(this, "projection_blend"); -- cgit v1.2.3