Improve blend material import

This commit is contained in:
luboslenco
2019-07-10 07:58:56 +02:00
parent 0ece367774
commit 693cf8291e
+51 -4
View File
@@ -196,6 +196,7 @@ class ImportBlend {
UINodes.inst.updateCanvasMap();
var nodes = UINodes.inst.nodes;
var canvas = UINodes.inst.canvas;
canvas.name = mat.get("id").get("name").substr(2); // MAWood
var nout:TNode = null;
for (n in canvas.nodes) if (n.type == "OUTPUT_MATERIAL_PBR") { nout = n; break; }
for (n in canvas.nodes) if (n.name == "RGB") { nodes.removeNode(n, canvas); break; }
@@ -262,7 +263,7 @@ class ImportBlend {
pos++;
}
// Fill output socket values
// Fill button values
if (search == "teximage") {
var img = node.get("id", 0, "Image");
var file:String = img.get("name").substr(2); // '//desktop\logo.png'
@@ -272,6 +273,41 @@ class ImportBlend {
n.buttons[0].default_value = App.getAssetIndex(file);
n.buttons[0].data = App.mapEnum(App.getEnumTexts()[n.buttons[0].default_value]);
}
else if (search == "valtorgb") {
var ramp:Dynamic = node.get("storage", 0, "ColorBand");
n.buttons[0].data = ramp.get("ipotype") == 0 ? 0 : 1; // Linear / Constant
var elems:Array<Array<Float>> = n.buttons[0].default_value;
for (i in 0...ramp.get("tot")) {
if (i >= elems.length) elems.push([1.0, 1.0, 1.0, 1.0, 0.0]);
var cbdata:Dynamic = ramp.get("data", i, "CBData");
elems[i][0] = Std.int(cbdata.get("r") * 100) / 100;
elems[i][1] = Std.int(cbdata.get("g") * 100) / 100;
elems[i][2] = Std.int(cbdata.get("b") * 100) / 100;
elems[i][3] = Std.int(cbdata.get("a") * 100) / 100;
elems[i][4] = Std.int(cbdata.get("pos") * 100) / 100;
}
}
else if (search == "mixrgb" || search == "math") {
n.buttons[0].default_value = node.get("custom1");
n.buttons[1].default_value = node.get("custom2") & 2;
}
else if (search == "mapping") {
var storage = node.get("storage", 0, "TexMapping");
n.buttons[0].default_value = storage.get("loc");
n.buttons[1].default_value = storage.get("rot");
n.buttons[2].default_value = storage.get("size");
// var mat = storage.get("mat"); float[4][4]
// storage.flag & 1 // use_min
// storage.flag & 2 // use_max
// storage.min[0]
// storage.min[1]
// storage.min[2]
// storage.max[0]
// storage.max[1]
// storage.max[2]
}
// Fill output socket values
var outputs = node.get("outputs");
var sock:Dynamic = outputs.get("first", 0, "bNodeSocket");
var pos = 0;
@@ -367,13 +403,24 @@ class ImportBlend {
static function readBlendSocket(sock:Dynamic):Dynamic {
var idname = sock.get("idname");
if (idname.startsWith("NodeSocketVector")) {
return sock.get("default_value", 0, "bNodeSocketValueVector").get("value");
var v:Dynamic = sock.get("default_value", 0, "bNodeSocketValueVector").get("value");
v[0] = Std.int(v[0] * 100) / 100;
v[1] = Std.int(v[1] * 100) / 100;
v[2] = Std.int(v[2] * 100) / 100;
return v;
}
else if (idname.startsWith("NodeSocketColor")) {
return sock.get("default_value", 0, "bNodeSocketValueRGBA").get("value");
var v:Dynamic = sock.get("default_value", 0, "bNodeSocketValueRGBA").get("value");
v[0] = Std.int(v[0] * 100) / 100;
v[1] = Std.int(v[1] * 100) / 100;
v[2] = Std.int(v[2] * 100) / 100;
v[3] = Std.int(v[3] * 100) / 100;
return v;
}
else if (idname.startsWith("NodeSocketFloat")) {
return sock.get("default_value", 0, "bNodeSocketValueFloat").get("value");
var v:Dynamic = sock.get("default_value", 0, "bNodeSocketValueFloat").get("value");
v = Std.int(v * 100) / 100;
return v;
}
else if (idname.startsWith("NodeSocketInt")) {
return sock.get("default_value", 0, "bNodeSocketValueInt").get("value");