You're breathtaking!
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved.
|
||||
|
||||
#if COMPILE_WITH_MATERIAL_GRAPH
|
||||
|
||||
#include "MaterialGenerator.h"
|
||||
|
||||
void MaterialGenerator::ProcessGroupTools(Box* box, Node* node, Value& value)
|
||||
{
|
||||
switch (node->TypeID)
|
||||
{
|
||||
// Fresnel
|
||||
case 1:
|
||||
case 4:
|
||||
{
|
||||
// Gets constants
|
||||
auto cameraVector = getCameraVector(node);
|
||||
|
||||
// Get inputs
|
||||
Value exponent = tryGetValue(node->GetBox(0), 0, Value(5.0f)).AsFloat();
|
||||
Value fraction = tryGetValue(node->GetBox(1), 1, Value(0.04f)).AsFloat();
|
||||
Value normal = tryGetValue(node->GetBox(2), getNormal).AsVector3();
|
||||
|
||||
// Write operations
|
||||
auto local1 = writeFunction2(node, normal, cameraVector, TEXT("dot"), VariantType::Float);
|
||||
auto local2 = writeFunction2(node, Value::Zero, local1, TEXT("max"));
|
||||
auto local3 = writeOperation2(node, Value::One, local2, '-');
|
||||
auto local4 = writeFunction2(node, local3, exponent, TEXT("ClampedPow"), VariantType::Float);
|
||||
auto local5 = writeLocal(VariantType::Float, String::Format(TEXT("{0} * (1.0 - {1})"), local4.Value, fraction.Value), node);
|
||||
auto local6 = writeOperation2(node, local5, fraction, '+');
|
||||
_includes.Add(TEXT("./Flax/Math.hlsl"));
|
||||
|
||||
// Gets value
|
||||
value = local6;
|
||||
break;
|
||||
}
|
||||
// Desaturation
|
||||
case 2:
|
||||
{
|
||||
// Get inputs
|
||||
Value input = tryGetValue(node->GetBox(0), Value::Zero).AsVector3();
|
||||
Value scale = tryGetValue(node->GetBox(1), Value::Zero).AsFloat();
|
||||
Value luminanceFactors = Value(node->Values[0].AsVector3());
|
||||
|
||||
// Write operations
|
||||
auto dot = writeFunction2(node, input, luminanceFactors, TEXT("dot"), VariantType::Float);
|
||||
value = writeFunction3(node, input, dot, scale, TEXT("lerp"), VariantType::Vector3);
|
||||
break;
|
||||
}
|
||||
// Time
|
||||
case 3:
|
||||
{
|
||||
value = getTime;
|
||||
break;
|
||||
}
|
||||
// Panner
|
||||
case 6:
|
||||
{
|
||||
// Get inputs
|
||||
const Value uv = tryGetValue(node->GetBox(0), getUVs).AsVector2();
|
||||
const Value time = tryGetValue(node->GetBox(1), getTime).AsFloat();
|
||||
const Value speed = tryGetValue(node->GetBox(2), Value::One).AsVector2();
|
||||
const bool useFractionalPart = (bool)node->Values[0];
|
||||
|
||||
// Write operations
|
||||
auto local1 = writeOperation2(node, speed, time, '*');
|
||||
if (useFractionalPart)
|
||||
local1 = writeFunction1(node, local1, TEXT("frac"));
|
||||
value = writeOperation2(node, uv, local1, '+');
|
||||
break;
|
||||
}
|
||||
// Linearize Depth
|
||||
case 7:
|
||||
{
|
||||
// Get input
|
||||
const Value depth = tryGetValue(node->GetBox(0), Value::Zero).AsFloat();
|
||||
|
||||
// Linearize raw device depth
|
||||
linearizeSceneDepth(node, depth, value);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
ShaderGenerator::ProcessGroupTools(box, node, value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user