Commit: d5ad01edf3e2e3158df1d2d8a52fd94da0a5f090
Author: Ankit Meel
Date: Tue Aug 4 21:27:29 2020 +0530
Branches: soc-2020-io-performance
https://developer.blender.org/rBd5ad01edf3e2e3158df1d2d8a52fd94da0a5f090
Fix bsdf_ being null; asserts for SOCK_RGBA
Use `ntreeType_Shader->idname` instead of manually entering the
ID to avoid mistakes (which I did!
`ShaderNodeTree` vs `ShaderNodetree`).
Add assert in case caller doesn't own the `nodetree_`.
Fix passing `float a, int b` to `Span` instead
of `float *, size_t size`.
===================================================================
M source/blender/io/wavefront_obj/intern/wavefront_obj_im_mtl.cc
M source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.hh
===================================================================
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_mtl.cc
b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_mtl.cc
index 4a3faf5b0a9..c4b7674c96c 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_mtl.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_mtl.cc
@@ -28,6 +28,8 @@
#include "DNA_node_types.h"
+#include "NOD_shader.h"
+
#include "wavefront_obj_im_mtl.hh"
namespace blender::io::obj {
@@ -51,13 +53,17 @@ static void set_property_of_socket(eNodeSocketDatatype
property_type,
break;
}
case SOCK_RGBA: {
- BLI_assert(value.size() == 4);
- copy_v4_v4(static_cast<bNodeSocketValueRGBA
*>(socket->default_value)->value, value.data());
+ /* Alpha will be manually added. It is not read from the MTL file
either. */
+ BLI_assert(value.size() == 3);
+ copy_v3_v3(static_cast<bNodeSocketValueRGBA
*>(socket->default_value)->value, value.data());
+ static_cast<bNodeSocketValueRGBA *>(socket->default_value)->value[3] =
1.0f;
+ break;
}
case SOCK_VECTOR: {
BLI_assert(value.size() == 3);
copy_v4_v4(static_cast<bNodeSocketValueVector
*>(socket->default_value)->value,
value.data());
+ break;
}
default: {
BLI_assert(0);
@@ -83,8 +89,8 @@ static void set_img_filepath(StringRef value, bNode *r_node)
*/
ShaderNodetreeWrap::ShaderNodetreeWrap(const MTLMaterial &mtl_mat)
{
- nodetree_.reset(ntreeAddTree(nullptr, "Shader Nodetree", "ShaderNodetree"));
- bsdf_.reset(add_node_to_tree(SH_NODE_BSDF_DIFFUSE));
+ nodetree_.reset(ntreeAddTree(nullptr, "Shader Nodetree",
ntreeType_Shader->idname));
+ bsdf_.reset(add_node_to_tree(SH_NODE_BSDF_PRINCIPLED));
shader_output_.reset(add_node_to_tree(SH_NODE_OUTPUT_MATERIAL));
set_bsdf_socket_values(mtl_mat);
@@ -99,6 +105,10 @@ ShaderNodetreeWrap::~ShaderNodetreeWrap()
/* If the destructor has been reached, we know that nodes and the nodetree
* have been added to the scene. */
shader_output_.release();
+ if (nodetree_) {
+ /* nodetree's ownership must be acquired by the caller. */
+ BLI_assert(0);
+ }
}
/**
@@ -137,9 +147,10 @@ void ShaderNodetreeWrap::link_sockets(unique_node_ptr
src_node,
void ShaderNodetreeWrap::set_bsdf_socket_values(const MTLMaterial &mtl_mat)
{
- set_property_of_socket(SOCK_FLOAT, "Specular", {mtl_mat.Ns, 1}, bsdf_.get());
- set_property_of_socket(SOCK_FLOAT, "Metallic", {mtl_mat.Ka, 1}, bsdf_.get());
- set_property_of_socket(SOCK_FLOAT, "IOR", {mtl_mat.Ni, 1}, bsdf_.get());
+ set_property_of_socket(SOCK_FLOAT, "Specular", {mtl_mat.Ns}, bsdf_.get());
+ /* Only one value is taken for Metallic. */
+ set_property_of_socket(SOCK_FLOAT, "Metallic", {mtl_mat.Ka[0]}, bsdf_.get());
+ set_property_of_socket(SOCK_FLOAT, "IOR", {mtl_mat.Ni}, bsdf_.get());
set_property_of_socket(SOCK_FLOAT, "Alpha", {mtl_mat.d}, bsdf_.get());
set_property_of_socket(SOCK_RGBA, "Base Color", {mtl_mat.Kd, 3},
bsdf_.get());
set_property_of_socket(SOCK_RGBA, "Emission", {mtl_mat.Ke, 3}, bsdf_.get());
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.hh
b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.hh
index 9a69cb94a87..dbbce9462d6 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.hh
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.hh
@@ -161,10 +161,10 @@ struct tex_map_XX {
struct MTLMaterial {
std::string name{};
float Ns{1.0f};
- float3 Ka;
- float3 Kd;
- float3 Ks;
- float3 Ke;
+ float3 Ka{0.0f};
+ float3 Kd{0.8f, 0.8f, 0.8f};
+ float3 Ks{1.0f};
+ float3 Ke{0.0f};
float Ni{1.0f};
float d{1.0f};
int illum{0};
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs