forked from blender/blender
Implement export of Shader BSDF nodes #13
@ -8,20 +8,51 @@ namespace blender::nodes::materialx {
|
|||||||
|
|
||||||
NodeItem AddShaderNodeParser::compute_bsdf()
|
NodeItem AddShaderNodeParser::compute_bsdf()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
NodeItem shader1 = get_input_shader(0, NodeItem::Type::BSDF);
|
||||||
return empty();
|
NodeItem shader2 = get_input_shader(1, NodeItem::Type::BSDF);
|
||||||
|
|
||||||
|
NodeItem res = empty();
|
||||||
|
if (shader1 && !shader2) {
|
||||||
|
res = shader1;
|
||||||
|
}
|
||||||
|
else if (!shader1 && shader2) {
|
||||||
|
res = shader2;
|
||||||
|
}
|
||||||
|
else if (shader1 && shader2) {
|
||||||
|
res = create_node("add", "BSDF");
|
||||||
|
res.set_input("in1", shader1);
|
||||||
|
res.set_input("in2", shader2);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem AddShaderNodeParser::compute_edf()
|
NodeItem AddShaderNodeParser::compute_edf()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
NodeItem shader1 = get_input_shader(0, NodeItem::Type::EDF);
|
||||||
return empty();
|
NodeItem shader2 = get_input_shader(1, NodeItem::Type::EDF);
|
||||||
|
|
||||||
|
NodeItem res = empty();
|
||||||
|
if (shader1 && !shader2) {
|
||||||
|
res = shader1;
|
||||||
|
}
|
||||||
|
else if (!shader1 && shader2) {
|
||||||
|
res = shader2;
|
||||||
|
}
|
||||||
|
else if (shader1 && shader2) {
|
||||||
|
res = create_node("add", "EDF");
|
||||||
|
res.set_input("in1", shader1);
|
||||||
|
res.set_input("in2", shader2);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem AddShaderNodeParser::compute_surface()
|
NodeItem AddShaderNodeParser::compute_surface()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
NodeItem res = get_input_shader(0, NodeItem::Type::SurfaceShader);
|
||||||
return empty();
|
if (!res) {
|
||||||
|
res = get_input_shader(1, NodeItem::Type::SurfaceShader);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace blender::nodes::materialx
|
} // namespace blender::nodes::materialx
|
||||||
|
@ -8,19 +8,26 @@ namespace blender::nodes::materialx {
|
|||||||
|
|
||||||
NodeItem BSDFDiffuseNodeParser::compute_bsdf()
|
NodeItem BSDFDiffuseNodeParser::compute_bsdf()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
NodeItem color = get_input_value("Color", NodeItem::Type::Color3);
|
||||||
return empty();
|
NodeItem roughness = get_input_value("Roughness", NodeItem::Type::Float);
|
||||||
|
NodeItem normal = get_input_link("Normal", NodeItem::Type::Vector3);
|
||||||
|
|
||||||
|
NodeItem res = create_node("oren_nayar_diffuse_bsdf", "BSDF");
|
||||||
|
res.set_input("color", color);
|
||||||
|
res.set_input("roughness", roughness);
|
||||||
|
if (normal) {
|
||||||
|
res.set_input("normal", normal);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem BSDFDiffuseNodeParser::compute_edf()
|
NodeItem BSDFDiffuseNodeParser::compute_edf()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
|
||||||
return empty();
|
return empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem BSDFDiffuseNodeParser::compute_surface()
|
NodeItem BSDFDiffuseNodeParser::compute_surface()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
|
||||||
return empty();
|
return empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,11 +8,13 @@ namespace blender::nodes::materialx {
|
|||||||
|
|
||||||
NodeItem BSDFPrincipledNodeParser::compute_bsdf()
|
NodeItem BSDFPrincipledNodeParser::compute_bsdf()
|
||||||
{
|
{
|
||||||
|
/* TODO: implement */
|
||||||
return empty();
|
return empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem BSDFPrincipledNodeParser::compute_edf()
|
NodeItem BSDFPrincipledNodeParser::compute_edf()
|
||||||
{
|
{
|
||||||
|
/* TODO: implement */
|
||||||
return empty();
|
return empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,19 +8,21 @@ namespace blender::nodes::materialx {
|
|||||||
|
|
||||||
NodeItem EmissionNodeParser::compute_bsdf()
|
NodeItem EmissionNodeParser::compute_bsdf()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
|
||||||
return empty();
|
return empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem EmissionNodeParser::compute_edf()
|
NodeItem EmissionNodeParser::compute_edf()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
NodeItem color = get_input_value("Color", NodeItem::Type::Color3);
|
||||||
return empty();
|
NodeItem strength = get_input_value("Strength", NodeItem::Type::Float);
|
||||||
|
|
||||||
|
NodeItem res = create_node("uniform_edf", "EDF");
|
||||||
|
res.set_input("color", color * strength);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem EmissionNodeParser::compute_surface()
|
NodeItem EmissionNodeParser::compute_surface()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
|
||||||
return empty();
|
return empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,20 +8,55 @@ namespace blender::nodes::materialx {
|
|||||||
|
|
||||||
NodeItem MixShaderNodeParser::compute_bsdf()
|
NodeItem MixShaderNodeParser::compute_bsdf()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
NodeItem fac = get_input_value(0, NodeItem::Type::Float);
|
||||||
return empty();
|
NodeItem shader1 = get_input_shader(1, NodeItem::Type::BSDF);
|
||||||
|
NodeItem shader2 = get_input_shader(2, NodeItem::Type::BSDF);
|
||||||
|
|
||||||
|
NodeItem res = empty();
|
||||||
|
if (shader1 && !shader2) {
|
||||||
|
res = shader1;
|
||||||
|
}
|
||||||
|
else if (!shader1 && shader2) {
|
||||||
|
res = shader2;
|
||||||
|
}
|
||||||
|
else if (shader1 && shader2) {
|
||||||
|
res = create_node("mix", "BSDF");
|
||||||
|
res.set_input("fg", shader1);
|
||||||
|
res.set_input("bg", shader2);
|
||||||
|
res.set_input("mix", fac);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem MixShaderNodeParser::compute_edf()
|
NodeItem MixShaderNodeParser::compute_edf()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
NodeItem fac = get_input_value(0, NodeItem::Type::Float);
|
||||||
return empty();
|
NodeItem shader1 = get_input_shader(1, NodeItem::Type::EDF);
|
||||||
|
NodeItem shader2 = get_input_shader(2, NodeItem::Type::EDF);
|
||||||
|
|
||||||
|
NodeItem res = empty();
|
||||||
|
if (shader1 && !shader2) {
|
||||||
|
res = shader1;
|
||||||
|
}
|
||||||
|
else if (!shader1 && shader2) {
|
||||||
|
res = shader2;
|
||||||
|
}
|
||||||
|
else if (shader1 && shader2) {
|
||||||
|
res = create_node("mix", "EDF");
|
||||||
|
res.set_input("fg", shader1);
|
||||||
|
res.set_input("bg", shader2);
|
||||||
|
res.set_input("mix", fac);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem MixShaderNodeParser::compute_surface()
|
NodeItem MixShaderNodeParser::compute_surface()
|
||||||
{
|
{
|
||||||
/* TODO: implement */
|
NodeItem res = get_input_shader(0, NodeItem::Type::SurfaceShader);
|
||||||
return empty();
|
if (!res) {
|
||||||
|
res = get_input_shader(1, NodeItem::Type::SurfaceShader);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace blender::nodes::materialx
|
} // namespace blender::nodes::materialx
|
||||||
|
@ -134,8 +134,7 @@ NodeItem NodeParser::get_input_link(const bNodeSocket &socket, NodeItem::Type to
|
|||||||
|
|
||||||
#define CASE_NODE_TYPE(type, T) \
|
#define CASE_NODE_TYPE(type, T) \
|
||||||
case type: \
|
case type: \
|
||||||
parser = \
|
parser = std::make_unique<T>(graph_, depsgraph_, material_, from_node, link->fromsock); \
|
||||||
std::make_unique<T>(graph_, depsgraph_, material_, from_node, link->fromsock); \
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
switch (from_node->typeinfo->type) {
|
switch (from_node->typeinfo->type) {
|
||||||
|
@ -127,5 +127,4 @@ DECLARE_SHADER_NODE_PARSER(EmissionNodeParser)
|
|||||||
DECLARE_SHADER_NODE_PARSER(MixShaderNodeParser)
|
DECLARE_SHADER_NODE_PARSER(MixShaderNodeParser)
|
||||||
DECLARE_SHADER_NODE_PARSER(SubsurfaceScatteringNodeParser)
|
DECLARE_SHADER_NODE_PARSER(SubsurfaceScatteringNodeParser)
|
||||||
|
|
||||||
|
|
||||||
} // namespace blender::nodes::materialx
|
} // namespace blender::nodes::materialx
|
||||||
|
Loading…
Reference in New Issue
Block a user