forked from blender/blender
MaterialX: Implement Gradient Texture node. #28
@ -233,7 +233,8 @@ NodeItem NodeItem::max(const NodeItem &other) const
|
||||
|
||||
NodeItem NodeItem::dotproduct(const NodeItem &other) const
|
||||
{
|
||||
NodeItem d = arithmetic(other, "dotproduct", [](float a, float b) { return a * b; });
|
||||
NodeItem d = arithmetic(
|
||||
other, "dotproduct", [](float a, float b) { return a * b; }, Type::Float);
|
||||
if (d.value) {
|
||||
float f = 0.0f;
|
||||
switch (d.type()) {
|
||||
@ -830,12 +831,13 @@ NodeItem NodeItem::arithmetic(const std::string &category, std::function<float(f
|
||||
|
||||
NodeItem NodeItem::arithmetic(const NodeItem &other,
|
||||
const std::string &category,
|
||||
std::function<float(float, float)> func) const
|
||||
std::function<float(float, float)> func,
|
||||
Type to_type) const
|
||||
{
|
||||
NodeItem res = empty();
|
||||
NodeItem item1 = *this;
|
||||
NodeItem item2 = other;
|
||||
Type to_type = cast_types(item1, item2);
|
||||
to_type = (to_type == Type::Any) ? cast_types(item1, item2) : to_type;
|
||||
if (to_type == Type::Empty) {
|
||||
return res;
|
||||
}
|
||||
|
@ -127,7 +127,8 @@ class NodeItem {
|
||||
NodeItem arithmetic(const std::string &category, std::function<float(float)> func) const;
|
||||
NodeItem arithmetic(const NodeItem &other,
|
||||
const std::string &category,
|
||||
std::function<float(float, float)> func) const;
|
||||
std::function<float(float, float)> func,
|
||||
Type to_type = Type::Any) const;
|
||||
};
|
||||
|
||||
template<class T> NodeItem NodeItem::val(const T &data) const
|
||||
|
@ -177,13 +177,11 @@ NODE_SHADER_MATERIALX_BEGIN
|
||||
res = vector.extract(1).atan2(vector.extract(0)) / (val(float(M_PI * 2.0f))) + val(0.5f);
|
||||
break;
|
||||
case SHD_BLEND_QUADRATIC_SPHERE:
|
||||
res = create_node("dotproduct", NodeItem::Type::Float, {{"in1", vector}, {"in2", vector}}).sqrt();
|
||||
res = (val(0.999999f) - res).max(val(0.0f));
|
||||
res = (val(0.999999f) - vector.dotproduct(vector).sqrt()).max(val(0.0f));
|
||||
res = res * res;
|
||||
break;
|
||||
case SHD_BLEND_SPHERICAL:
|
||||
res = create_node("dotproduct", NodeItem::Type::Float, {{"in1", vector}, {"in2", vector}}).sqrt();
|
||||
res = (val(0.999999f) - res).max(val(0.0f));
|
||||
res = (val(0.999999f) - vector.dotproduct(vector).sqrt()).max(val(0.0f));
|
||||
break;
|
||||
default:
|
||||
BLI_assert_unreachable();
|
||||
|
Loading…
Reference in New Issue
Block a user