forked from bartvdbraak/blender
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] 35cb6a83e2
Differential Revision: https://developer.blender.org/D13912
This commit is contained in:
parent
b06fff4737
commit
46ae083113
@ -32,6 +32,7 @@
|
|||||||
#include "util/color.h"
|
#include "util/color.h"
|
||||||
#include "util/foreach.h"
|
#include "util/foreach.h"
|
||||||
#include "util/log.h"
|
#include "util/log.h"
|
||||||
|
#include "util/string.h"
|
||||||
#include "util/transform.h"
|
#include "util/transform.h"
|
||||||
|
|
||||||
#include "kernel/tables.h"
|
#include "kernel/tables.h"
|
||||||
@ -462,8 +463,12 @@ void ImageTextureNode::compile(OSLCompiler &compiler)
|
|||||||
const ustring known_colorspace = metadata.colorspace;
|
const ustring known_colorspace = metadata.colorspace;
|
||||||
|
|
||||||
if (handle.svm_slot() == -1) {
|
if (handle.svm_slot() == -1) {
|
||||||
|
/* OIIO currently does not support <UVTILE> substitutions natively. Replace with a format they
|
||||||
|
* understand. */
|
||||||
|
std::string osl_filename = filename.string();
|
||||||
|
string_replace(osl_filename, "<UVTILE>", "<U>_<V>");
|
||||||
compiler.parameter_texture(
|
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 {
|
else {
|
||||||
compiler.parameter_texture("filename", handle.svm_slot());
|
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) ||
|
const bool unassociate_alpha = !(ColorSpaceManager::colorspace_is_data(colorspace) ||
|
||||||
alpha_type == IMAGE_ALPHA_CHANNEL_PACKED ||
|
alpha_type == IMAGE_ALPHA_CHANNEL_PACKED ||
|
||||||
alpha_type == IMAGE_ALPHA_IGNORE);
|
alpha_type == IMAGE_ALPHA_IGNORE);
|
||||||
const bool is_tiled = (filename.find("<UDIM>") != string::npos);
|
const bool is_tiled = (filename.find("<UDIM>") != string::npos ||
|
||||||
|
filename.find("<UVTILE>") != string::npos);
|
||||||
|
|
||||||
compiler.parameter(this, "projection");
|
compiler.parameter(this, "projection");
|
||||||
compiler.parameter(this, "projection_blend");
|
compiler.parameter(this, "projection_blend");
|
||||||
|
Loading…
Reference in New Issue
Block a user