let nodes_material_categories: string[] = [ _tr("Input"), _tr("Texture"), _tr("Color"), _tr("Vector"), _tr("Converter"), _tr("Group") ]; let nodes_material_input: ui_node_t[] = [ { id: 0, name: _tr("Attribute"), type: "ATTRIBUTE", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("Name"), type: "STRING", output: -1, default_value: f32_array_create_x(0), data: null, min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Camera Data"), type: "CAMERA", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("View Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("View Z Depth"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("View Distance"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Fresnel"), type: "FRESNEL", x: 0, y: 0, color: 0xffb34f5a, inputs: [ { id: 0, node_id: 0, name: _tr("IOR"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.45), min: 0.0, max: 3.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Normal"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Geometry"), type: "NEW_GEOMETRY", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Position"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Normal"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Tangent"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("True Normal"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Incoming"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Parametric"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Backfacing"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Pointiness"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Random Per Island"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Layer"), type: "LAYER", // extension x: 0, y: 0, color: 0xff4982a0, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Base Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.0, 0.0, 0.0, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Opacity"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Occlusion"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Roughness"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Metallic"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Normal Map"), type: "VECTOR", color: -10238109, default_value: f32_array_create_xyz(0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Emission"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Height"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Subsurface"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("Layer"), type: "ENUM", output: -1, default_value: f32_array_create_x(0), data: u8_array_create_from_string(""), min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Layer Mask"), type: "LAYER_MASK", // extension x: 0, y: 0, color: 0xff4982a0, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("Layer"), type: "ENUM", output: -1, default_value: f32_array_create_x(0), data: u8_array_create_from_string(""), min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Layer Weight"), type: "LAYER_WEIGHT", x: 0, y: 0, color: 0xffb34f5a, inputs: [ { id: 0, node_id: 0, name: _tr("Blend"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Normal"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Fresnel"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Facing"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Material"), type: "MATERIAL", // extension x: 0, y: 0, color: 0xff4982a0, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Base Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.0, 0.0, 0.0, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Opacity"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Occlusion"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Roughness"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Metallic"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Normal Map"), type: "VECTOR", color: -10238109, default_value: f32_array_create_xyz(0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Emission"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Height"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Subsurface"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("Material"), type: "ENUM", output: -1, default_value: f32_array_create_x(0), data: u8_array_create_from_string(""), min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Object Info"), type: "OBJECT_INFO", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Location"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.0, 0.0, 0.0, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Object Index"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Material Index"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Random"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Picker"), type: "PICKER", // extension x: 0, y: 0, color: 0xff4982a0, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Base Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.0, 0.0, 0.0, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Opacity"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Occlusion"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Roughness"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Metallic"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Normal Map"), type: "VECTOR", color: -10238109, default_value: f32_array_create_xyz(0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Emission"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Height"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Subsurface"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("RGB"), type: "RGB", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.5, 0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("default_value"), type: "RGBA", output: 0, default_value: f32_array_create_x(0), data: null, min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Script"), type: "SCRIPT_CPU", // extension x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: " ", type: "STRING", output: -1, default_value: f32_array_create_x(0), // "", data: null, min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Shader"), type: "SHADER_GPU", // extension x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: " ", type: "STRING", output: -1, default_value: f32_array_create_x(0), // "", data: null, min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Tangent"), type: "TANGENT", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Tangent"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Texture Coordinate"), type: "TEX_COORD", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Generated"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Normal"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("UV"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Object"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Camera"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Window"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Reflection"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [] }, { id: 0, name: _tr("UV Map"), type: "UVMAP", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("UV"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Value"), type: "VALUE", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("default_value"), type: "VALUE", output: 0, default_value: f32_array_create_x(0), data: null, min: 0.0, max: 10.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Vertex Color"), type: "VERTEX_COLOR", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Alpha"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Wireframe"), type: "WIREFRAME", x: 0, y: 0, color: 0xffb34f5a, inputs: [ { id: 0, node_id: 0, name: _tr("Size"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.01), min: 0.0, max: 0.1, precision: 100, display: 0 }, ], outputs: [ { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("Pixel Size"), type: "BOOL", output: 0, default_value: f32_array_create_x(0), data: null, min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, ]; // let nodes_material_output: ui_node_t[] = [ // { // id: 0, // name: _tr("Material Output"), // type: "OUTPUT_MATERIAL_PBR", // x: 0, // y: 0, // color: 0xffb34f5a, // inputs: [ // { // id: 0, // node_id: 0, // name: _tr("Base Color"), // type: "RGBA", // color: 0xffc7c729, // default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), // min: 0.0, // max: 1.0, // precision: 100, // display: 0 // }, // { // id: 0, // node_id: 0, // name: _tr("Opacity"), // type: "VALUE", // color: 0xffa1a1a1, // default_value: f32_array_create_x(1.0), // min: 0.0, // max: 1.0, // precision: 100, // display: 0 // }, // { // id: 0, // node_id: 0, // name: _tr("Occlusion"), // type: "VALUE", // color: 0xffa1a1a1, // default_value: f32_array_create_x(1.0), // min: 0.0, // max: 1.0, // precision: 100, // display: 0 // }, // { // id: 0, // node_id: 0, // name: _tr("Roughness"), // type: "VALUE", // color: 0xffa1a1a1, // default_value: f32_array_create_x(0.1), // min: 0.0, // max: 1.0, // precision: 100, // display: 0 // }, // { // id: 0, // node_id: 0, // name: _tr("Metallic"), // type: "VALUE", // color: 0xffa1a1a1, // default_value: f32_array_create_x(0.0), // min: 0.0, // max: 1.0, // precision: 100, // display: 0 // }, // { // id: 0, // node_id: 0, // name: _tr("Normal Map"), // type: "VECTOR", // color: -10238109, // default_value: f32_array_create_xyz(0.5, 0.5, 1.0), // min: 0.0, // max: 1.0, // precision: 100, // display: 0 // }, // { // id: 0, // node_id: 0, // name: _tr("Emission"), // type: "VALUE", // color: 0xffa1a1a1, // default_value: f32_array_create_x(0.0), // min: 0.0, // max: 1.0, // precision: 100, // display: 0 // }, // { // id: 0, // node_id: 0, // name: _tr("Height"), // type: "VALUE", // color: 0xffa1a1a1, // default_value: f32_array_create_x(0.0), // min: 0.0, // max: 1.0, // precision: 100, // display: 0 // }, // { // id: 0, // node_id: 0, // name: _tr("Subsurface"), // type: "VALUE", // color: 0xffa1a1a1, // default_value: f32_array_create_x(0.0), // min: 0.0, // max: 1.0, // precision: 100, // display: 0 // } // ], // outputs: [], // buttons: [], // width: 0 // } // ]; let nodes_material_texture: ui_node_t[] = [ { id: 0, name: _tr("Brick Texture"), type: "TEX_BRICK", x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Color 1"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyz(0.8, 0.8, 0.8), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Color 2"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyz(0.2, 0.2, 0.2), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Mortar"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Scale"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(5.0), min: 0.0, max: 10.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Checker Texture"), type: "TEX_CHECKER", x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Color 1"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyz(0.8, 0.8, 0.8), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Color 2"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyz(0.2, 0.2, 0.2), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Scale"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(5.0), min: 0.0, max: 10.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Curvature Bake"), type: "BAKE_CURVATURE", x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Strength"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 2.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Radius"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 2.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Offset"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: -2.0, max: 2.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Gradient Texture"), type: "TEX_GRADIENT", x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("gradient_type"), type: "ENUM", output: 0, default_value: f32_array_create_x(0), data: u8_array_create_from_string(_tr("Linear") + "\n" + _tr("Diagonal") + "\n" + _tr("Radial") + "\n" + _tr("Spherical")), min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Image Texture"), type: "TEX_IMAGE", x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.0, 0.0, 0.0, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Alpha"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("File"), type: "ENUM", output: -1, default_value: f32_array_create_x(0), data: u8_array_create_from_string(""), min: 0.0, max: 1.0, precision: 100, height: 0 }, { name: _tr("Color Space"), type: "ENUM", output: -1, default_value: f32_array_create_x(0), data: u8_array_create_from_string(_tr("Auto") + "\n" + _tr("Linear") + "\n" + _tr("sRGB") + "\n" + _tr("DirectX Normal Map")), min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Text Texture"), type: "TEX_TEXT", // extension x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.0, 0.0, 0.0, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Alpha"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: "text", type: "STRING", output: -1, default_value: f32_array_create_x(0), // "", data: null, min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Magic Texture"), type: "TEX_MAGIC", x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Scale"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(5.0), min: 0.0, max: 10.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Musgrave Texture"), type: "TEX_MUSGRAVE", x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Scale"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(5.0), min: 0.0, max: 10.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Height"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Noise Texture"), type: "TEX_NOISE", x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Scale"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(5.0), min: 0.0, max: 10.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Voronoi Texture"), type: "TEX_VORONOI", x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Scale"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(5.0), min: 0.0, max: 10.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("coloring"), type: "ENUM", output: 0, default_value: f32_array_create_x(0), data: u8_array_create_from_string(_tr("Intensity") + "\n" + _tr("Cells")), min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Wave Texture"), type: "TEX_WAVE", x: 0, y: 0, color: 0xff4982a0, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Scale"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(5.0), min: 0.0, max: 10.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 } ]; let nodes_material_color: ui_node_t[] = [ { id: 0, name: _tr("Blur"), type: "BLUR", // extension x: 0, y: 0, color: 0xff448c6d, inputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Strength"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Brightness/Contrast"), type: "BRIGHTCONTRAST", x: 0, y: 0, color: 0xff448c6d, inputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Bright"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Contrast"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Gamma"), type: "GAMMA", x: 0, y: 0, color: 0xff448c6d, inputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Gamma"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Hue/Saturation/Value"), type: "HUE_SAT", x: 0, y: 0, color: 0xff448c6d, inputs: [ { id: 0, node_id: 0, name: _tr("Hue"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Saturation"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Invert"), type: "INVERT", x: 0, y: 0, color: 0xff448c6d, inputs: [ { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.0, 0.0, 0.0, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Mix Color"), type: "MIX_RGB", x: 0, y: 0, color: 0xff448c6d, inputs: [ { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Color 1"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.5, 0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Color 2"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.5, 0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("blend_type"), type: "ENUM", output: 0, default_value: f32_array_create_x(0), data: u8_array_create_from_string(_tr("Mix") + "\n" + _tr("Darken") + "\n" + _tr("Multiply") + "\n" + _tr("Burn") + "\n" + _tr("Lighten") + "\n" + _tr("Screen") + "\n" + _tr("Dodge") + "\n" + _tr("Add") + "\n" + _tr("Overlay") + "\n" + _tr("Soft Light") + "\n" + _tr("Linear Light") + "\n" + _tr("Difference") + "\n" + _tr("Subtract") + "\n" + _tr("Divide") + "\n" + _tr("Hue") + "\n" + _tr("Saturation") + "\n" + _tr("Color") + "\n" + _tr("Value")), min: 0.0, max: 1.0, precision: 100, height: 0 }, { name: _tr("use_clamp"), type: "BOOL", output: 0, default_value: f32_array_create_x(0), data: null, min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Quantize"), type: "QUANTIZE", // extension x: 0, y: 0, color: 0xff448c6d, inputs: [ { id: 0, node_id: 0, name: _tr("Strength"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.1), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.0, 0.0, 0.0, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Replace Color"), type: "REPLACECOL", // extension x: 0, y: 0, color: 0xff448c6d, inputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0) }, { id: 0, node_id: 0, name: _tr("Old Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0) }, { id: 0, node_id: 0, name: _tr("New Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0) }, { id: 0, node_id: 0, name: _tr("Radius"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.1), min: 0.0, max: 1.74, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fuzziness"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0) } ], buttons: [] }, { id: 0, name: _tr("Warp"), type: "DIRECT_WARP", // extension x: 0, y: 0, color: 0xff448c6d, inputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Angle"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 360.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Mask"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 } ]; let nodes_material_vector: ui_node_t[] = [ { id: 0, name: _tr("Bump"), type: "BUMP", x: 0, y: 0, color: 0xff522c99, inputs: [ { id: 0, node_id: 0, name: _tr("Strength"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Distance"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Height"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Normal"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Normal Map"), type: "VECTOR", color: -10238109, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Mapping"), type: "MAPPING", x: 0, y: 0, color: 0xff522c99, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Location"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 1 }, { id: 0, node_id: 0, name: _tr("Rotation"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 360.0, precision: 100, display: 1 }, { id: 0, node_id: 0, name: _tr("Scale"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(1.0, 1.0, 1.0), min: 0.0, max: 1.0, precision: 100, display: 1 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Mix Normal Map"), type: "MIX_NORMAL_MAP", // extension x: 0, y: 0, color: 0xff522c99, inputs: [ { id: 0, node_id: 0, name: _tr("Normal Map 1"), type: "VECTOR", color: -10238109, default_value: f32_array_create_xyz(0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Normal Map 2"), type: "VECTOR", color: -10238109, default_value: f32_array_create_xyz(0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Normal Map"), type: "VECTOR", color: -10238109, default_value: f32_array_create_xyz(0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("blend_type"), type: "ENUM", output: 0, default_value: f32_array_create_x(0), data: u8_array_create_from_string(_tr("Partial Derivative") + "\n" + _tr("Whiteout") + "\n" + _tr("Reoriented")), min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Normal"), type: "NORMAL", x: 0, y: 0, color: 0xff522c99, inputs: [ { id: 0, node_id: 0, name: _tr("Normal"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Normal"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Dot"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("Vector"), type: "VECTOR", output: 0, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), data: null, min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Normal Map"), type: "NORMAL_MAP", x: 0, y: 0, color: 0xff522c99, inputs: [ { id: 0, node_id: 0, name: _tr("Strength"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 2.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Normal Map"), type: "VECTOR", color: -10238109, default_value: f32_array_create_xyz(0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Normal Map"), type: "VECTOR", color: -10238109, default_value: f32_array_create_xyz(0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Vector Curves"), type: "CURVE_VEC", x: 0, y: 0, color: 0xff522c99, inputs: [ { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: "nodes_material_vector_curves_button", type: "CUSTOM", output: 0, default_value: f32_array_create(96 + 3), // x - [0, 32], y - [33, 64], z - [65, 96], x_len, y_len, z_len data: null, min: 0.0, max: 1.0, precision: 100, height: 8.5 } ], width: 0 } ]; let nodes_material_converter: ui_node_t[] = [ { id: 0, name: _tr("Clamp"), type: "CLAMP", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Min"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Max"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("operation"), type: "ENUM", output: 0, default_value: f32_array_create_x(0), data: u8_array_create_from_string(_tr("Min Max") + "\n" + _tr("Range")), min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Color Ramp"), type: "VALTORGB", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("Fac"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.0, 0.0, 0.0, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Alpha"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: "nodes_material_color_ramp_button", type: "CUSTOM", output: 0, default_value: f32_array_create_xyzwv(1.0, 1.0, 1.0, 1.0, 0.0), data: u8_array_create(1), min: 0.0, max: 1.0, precision: 100, height: 4.5 } ], width: 0 }, { id: 0, name: _tr("Color Mask"), type: "COLMASK", // extension x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Mask Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Radius"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.1), min: 0.0, max: 1.74, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Fuzziness"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Mask"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Combine HSV"), type: "COMBHSV", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("H"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("S"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("V"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Combine RGB"), type: "COMBRGB", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("R"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("G"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("B"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Combine XYZ"), type: "COMBXYZ", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("X"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Y"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Z"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Map Range"), type: "MAPRANGE", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("From Min"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("From Max"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("To Min"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("To Max"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("use_clamp"), type: "BOOL", output: 0, default_value: f32_array_create_x(0), data: null, min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("Math"), type: "MATH", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.5), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("operation"), type: "ENUM", output: 0, default_value: f32_array_create_x(0), data: u8_array_create_from_string(_tr("Add") + "\n" + _tr("Subtract") + "\n" + _tr("Multiply") + "\n" + _tr("Divide") + "\n" + _tr("Power") + "\n" + _tr("Logarithm") + "\n" + _tr("Square Root") + "\n" + _tr("Inverse Square Root") + "\n" + _tr("Absolute") + "\n" + _tr("Exponent") + "\n" + _tr("Minimum") + "\n" + _tr("Maximum") + "\n" + _tr("Less Than") + "\n" + _tr("Greater Than") + "\n" + _tr("Sign") + "\n" + _tr("Round") + "\n" + _tr("Floor") + "\n" + _tr("Ceil") + "\n" + _tr("Truncate") + "\n" + _tr("Fraction") + "\n" + _tr("Modulo") + "\n" + _tr("Snap") + "\n" + _tr("Ping-Pong") + "\n" + _tr("Sine") + "\n" + _tr("Cosine") + "\n" + _tr("Tangent") + "\n" + _tr("Arcsine") + "\n" + _tr("Arccosine") + "\n" + _tr("Arctangent") + "\n" + _tr("Arctan2") + "\n" + _tr("Hyperbolic Sine") + "\n" + _tr("Hyperbolic Cosine") + "\n" + _tr("Hyperbolic Tangent") + "\n" + _tr("To Radians") + "\n" + _tr("To Degrees")), min: 0.0, max: 1.0, precision: 100, height: 0 }, { name: _tr("use_clamp"), type: "BOOL", output: 0, default_value: f32_array_create_x(0), data: null, min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 }, { id: 0, name: _tr("RGB to BW"), type: "RGBTOBW", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.0, 0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Val"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Separate HSV"), type: "SEPHSV", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.5, 0.5, 0.5, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("H"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("S"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("V"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Separate RGB"), type: "SEPRGB", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("Color"), type: "RGBA", color: 0xffc7c729, default_value: f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("R"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("G"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("B"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Separate XYZ"), type: "SEPXYZ", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("X"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Y"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Z"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [], width: 0 }, { id: 0, name: _tr("Vector Math"), type: "VECT_MATH", x: 0, y: 0, color: 0xff62676d, inputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], outputs: [ { id: 0, node_id: 0, name: _tr("Vector"), type: "VECTOR", color: 0xff6363c7, default_value: f32_array_create_xyz(0.0, 0.0, 0.0), min: 0.0, max: 1.0, precision: 100, display: 0 }, { id: 0, node_id: 0, name: _tr("Value"), type: "VALUE", color: 0xffa1a1a1, default_value: f32_array_create_x(0.0), min: 0.0, max: 1.0, precision: 100, display: 0 } ], buttons: [ { name: _tr("operation"), type: "ENUM", output: 0, default_value: f32_array_create_x(0), data: u8_array_create_from_string(_tr("Add") + "\n" + _tr("Subtract") + "\n" + _tr("Multiply") + "\n" + _tr("Divide") + "\n" + _tr("Average") + "\n" + _tr("Cross Product") + "\n" + _tr("Project") + "\n" + _tr("Reflect") + "\n" + _tr("Dot Product") + "\n" + _tr("Distance") + "\n" + _tr("Length") + "\n" + _tr("Scale") + "\n" + _tr("Normalize") + "\n" + _tr("Absolute") + "\n" + _tr("Minimum") + "\n" + _tr("Maximum") + "\n" + _tr("Floor") + "\n" + _tr("Ceil") + "\n" + _tr("Fraction") + "\n" + _tr("Modulo") + "\n" + _tr("Snap") + "\n" + _tr("Sine") + "\n" + _tr("Cosine") + "\n" + _tr("Tangent")), min: 0.0, max: 1.0, precision: 100, height: 0 } ], width: 0 } ]; let nodes_material_group: ui_node_t[] = [ { id: 0, name: _tr("New Group"), type: "GROUP", x: 0, y: 0, color: 0xffb34f5a, inputs: [], outputs: [], buttons: [ { name: "nodes_material_new_group_button", type: "CUSTOM", output: -1, default_value: f32_array_create_x(0), data: null, min: 0.0, max: 1.0, precision: 100, height: 1 } ], width: 0 } ]; type node_list_t = ui_node_t[]; let nodes_material_list: node_list_t[] = [ nodes_material_input, nodes_material_texture, nodes_material_color, nodes_material_vector, nodes_material_converter, nodes_material_group ]; let _nodes_material_nodes: ui_nodes_t; let _nodes_material_node: ui_node_t; let _nodes_material_sockets: ui_node_socket_t[]; function nodes_material_init() { map_set(ui_nodes_custom_buttons, "nodes_material_vector_curves_button", nodes_material_vector_curves_button); map_set(ui_nodes_custom_buttons, "nodes_material_color_ramp_button", nodes_material_color_ramp_button); map_set(ui_nodes_custom_buttons, "nodes_material_new_group_button", nodes_material_new_group_button); map_set(ui_nodes_custom_buttons, "nodes_material_group_input_button", nodes_material_group_input_button); map_set(ui_nodes_custom_buttons, "nodes_material_group_output_button", nodes_material_group_output_button); } function nodes_material_vector_curves_button(node_id: i32) { let ui: ui_t = ui_nodes_ui; let nodes: ui_nodes_t = ui_nodes_get_nodes(); let node: ui_node_t = ui_get_node(ui_nodes_get_canvas(true).nodes, node_id); let but: ui_node_button_t = node.buttons[0]; let nhandle: ui_handle_t = ui_nest(ui_handle(__ID__), node.id); ui_row3(); ui_radio(ui_nest(ui_nest(nhandle, 0), 1), 0, "X"); ui_radio(ui_nest(ui_nest(nhandle, 0), 1), 1, "Y"); ui_radio(ui_nest(ui_nest(nhandle, 0), 1), 2, "Z"); // Preview let axis: i32 = ui_nest(ui_nest(nhandle, 0), 1).position; let val: f32[] = but.default_value; ui._y += ui_nodes_LINE_H() * 5; let num: i32 = val[96 + axis]; if (num == 0) { // Init val[96 + 0] = 1; val[96 + 1] = 1; val[96 + 2] = 1; } // Edit let row: f32[] = [1 / 5, 1 / 5, 3 / 5]; ui_row(row); if (ui_button("+")) { val[axis * 32 + num * 2 + 0] = 0.0; val[axis * 32 + num * 2 + 1] = 0.0; num++; val[96 + axis] = num; } if (ui_button("-")) { if (num > 1) { num--; val[96 + axis] = num; } } let ihandle: ui_handle_t = ui_nest(ui_nest(ui_nest(nhandle, 0), 2), axis); if (ihandle.init) { ihandle.position = 0; } let i: i32 = math_floor(ui_slider(ihandle, "Index", 0, num - 1, false, 1, true, ui_align_t.LEFT)); if (i >= num || i < 0) { ihandle.value = i = num - 1; // Stay in bounds } ui_row2(); ui_nest(ui_nest(nhandle, 0), 3).value = val[axis * 32 + i * 2 + 0]; ui_nest(ui_nest(nhandle, 0), 4).value = val[axis * 32 + i * 2 + 1]; let h1: ui_handle_t = ui_nest(ui_nest(nhandle, 0), 3); if (h1.init) { h1.value = 0.0; } let h2: ui_handle_t = ui_nest(ui_nest(nhandle, 0), 4); if (h2.init) { h2.value = 0.0; } val[axis * 32 + i * 2 + 0] = ui_slider(h1, "X", -1, 1, true, 100, true, ui_align_t.LEFT); val[axis * 32 + i * 2 + 1] = ui_slider(h2, "Y", -1, 1, true, 100, true, ui_align_t.LEFT); } function nodes_material_color_ramp_button(node_id: i32) { let ui: ui_t = ui_nodes_ui; let nodes: ui_nodes_t = ui_nodes_get_nodes(); let node: ui_node_t = ui_get_node(ui_nodes_get_canvas(true).nodes, node_id); let but: ui_node_button_t = node.buttons[0]; let nhandle: ui_handle_t = ui_nest(ui_handle(__ID__), node.id); let nx: f32 = ui._x; let ny: f32 = ui._y; // Preview let vals: f32[] = but.default_value; // [r, g, b, a, pos, r, g, b, a, pos, ..] let sw: f32 = ui._w / ui_nodes_SCALE(); for (let i: i32 = 0; i < vals.length / 5; ++i) { let pos: f32 = vals[i * 5 + 4]; let col: i32 = color_from_floats(vals[i * 5 + 0], vals[i * 5 + 1], vals[i * 5 + 2], 1.0); ui_fill(pos * sw, 0, (1.0 - pos) * sw, ui_nodes_LINE_H() - 2 * ui_nodes_SCALE(), col); } ui._y += ui_nodes_LINE_H(); // Edit let ihandle: ui_handle_t = ui_nest(ui_nest(nhandle, 0), 2); let row: f32[] = [1 / 4, 1 / 4, 2 / 4]; ui_row(row); if (ui_button("+")) { array_push(vals, vals[vals.length - 5]); // r array_push(vals, vals[vals.length - 5]); // g array_push(vals, vals[vals.length - 5]); // b array_push(vals, vals[vals.length - 5]); // a array_push(vals, 1.0); // pos ihandle.value += 1; } if (ui_button("-") && vals.length > 5) { array_pop(vals); array_pop(vals); array_pop(vals); array_pop(vals); array_pop(vals); ihandle.value -= 1; } let h: ui_handle_t = ui_nest(ui_nest(nhandle, 0), 1); if (h.init) { h.position = but.data[0]; } let interpolate_combo: string[] = [tr("Linear"), tr("Constant")]; but.data[0] = ui_combo(h, interpolate_combo, tr("Interpolate")); ui_row2(); let i: i32 = math_floor(ui_slider(ihandle, "Index", 0, (vals.length / 5) - 1, false, 1, true, ui_align_t.LEFT)); if (i >= (vals.length * 5) || i < 0) { ihandle.value = i = (vals.length / 5) - 1; // Stay in bounds } ui_nest(ui_nest(nhandle, 0), 3).value = vals[i * 5 + 4]; vals[i * 5 + 4] = ui_slider(ui_nest(ui_nest(nhandle, 0), 3), "Pos", 0, 1, true, 100, true, ui_align_t.LEFT); if (vals[i * 5 + 4] > 1.0) { vals[i * 5 + 4] = 1.0; // Stay in bounds } else if (vals[i * 5 + 4] < 0.0) { vals[i * 5 + 4] = 0.0; } let chandle: ui_handle_t = ui_nest(ui_nest(nhandle, 0), 4); chandle.color = color_from_floats(vals[i * 5 + 0], vals[i * 5 + 1], vals[i * 5 + 2], 1.0); if (ui_text("", ui_align_t.RIGHT, chandle.color) == ui_state_t.STARTED) { let rx: f32 = nx + ui._w - ui_nodes_p(37); let ry: f32 = ny - ui_nodes_p(5); nodes._input_started = ui.input_started = false; ui_nodes_rgba_popup(chandle, vals.buffer + i * 5, math_floor(rx), math_floor(ry + ui_ELEMENT_H(ui))); } vals[i * 5 + 0] = color_get_rb(chandle.color) / 255; vals[i * 5 + 1] = color_get_gb(chandle.color) / 255; vals[i * 5 + 2] = color_get_bb(chandle.color) / 255; } function nodes_material_new_group_button(node_id: i32) { let ui: ui_t = ui_nodes_ui; let nodes: ui_nodes_t = ui_nodes_get_nodes(); let node: ui_node_t = ui_get_node(ui_nodes_get_canvas(true).nodes, node_id); if (node.name == "New Group") { for (let i: i32 = 1; i < 999; ++i) { node.name = tr("Group") + " " + i; let found: bool = false; for (let i: i32 = 0; i < project_material_groups.length; ++i) { let g: node_group_t = project_material_groups[i]; let cname: string = g.canvas.name; if (cname == node.name) { found = true; break; } } if (!found) { break; } } let canvas: ui_node_canvas_t = { name: node.name, nodes: [ { id: 0, name: _tr("Group Input"), type: "GROUP_INPUT", x: 50, y: 200, color: 0xff448c6d, inputs: [], outputs: [], buttons: [ { name: "nodes_material_group_input_button", type: "CUSTOM", height: 1 } ] }, { id: 1, name: _tr("Group Output"), type: "GROUP_OUTPUT", x: 450, y: 200, color: 0xff448c6d, inputs: [], outputs: [], buttons: [ { name: "nodes_material_group_output_button", type: "CUSTOM", height: 1 } ] } ], links: [] }; let ng: node_group_t = { canvas: canvas, nodes: ui_nodes_create() }; array_push(project_material_groups, ng); } let group: node_group_t = null; for (let i: i32 = 0; i < project_material_groups.length; ++i) { let g: node_group_t = project_material_groups[i]; let cname: string = g.canvas.name; if (cname == node.name) { group = g; break; } } if (ui_button(tr("Nodes"))) { array_push(ui_nodes_group_stack, group); } } function nodes_material_group_input_button(node_id: i32) { let ui: ui_t = ui_nodes_ui; let nodes: ui_nodes_t = ui_nodes_get_nodes(); let node: ui_node_t = ui_get_node(ui_nodes_get_canvas(true).nodes, node_id); nodes_material_add_socket_button(ui, nodes, node, node.outputs); } function nodes_material_group_output_button(node_id: i32) { let ui: ui_t = ui_nodes_ui; let nodes: ui_nodes_t = ui_nodes_get_nodes(); let node: ui_node_t = ui_get_node(ui_nodes_get_canvas(true).nodes, node_id); nodes_material_add_socket_button(ui, nodes, node, node.inputs); } function nodes_material_add_socket_button(ui: ui_t, nodes: ui_nodes_t, node: ui_node_t, sockets: ui_node_socket_t[]) { if (ui_button(tr("Add"))) { _nodes_material_nodes = nodes; _nodes_material_node = node; _nodes_material_sockets = sockets; ui_menu_draw(function (ui: ui_t) { let nodes: ui_nodes_t = _nodes_material_nodes; let node: ui_node_t = _nodes_material_node; let sockets: ui_node_socket_t[] = _nodes_material_sockets; let group_stack: node_group_t[] = ui_nodes_group_stack; let c: ui_node_canvas_t = group_stack[group_stack.length - 1].canvas; if (ui_menu_button(tr("RGBA"))) { array_push(sockets, nodes_material_create_socket(nodes, node, null, "RGBA", c)); nodes_material_sync_sockets(node); } if (ui_menu_button(tr("Vector"))) { array_push(sockets, nodes_material_create_socket(nodes, node, null, "VECTOR", c)); nodes_material_sync_sockets(node); } if (ui_menu_button(tr("Value"))) { array_push(sockets, nodes_material_create_socket(nodes, node, null, "VALUE", c)); nodes_material_sync_sockets(node); } }); } } function nodes_material_sync_sockets(node: ui_node_t) { let group_stack: node_group_t[] = ui_nodes_group_stack; let c: ui_node_canvas_t = group_stack[group_stack.length - 1].canvas; for (let i: i32 = 0; i < project_materials.length; ++i) { let m: slot_material_t = project_materials[i]; nodes_material_sync_group_sockets(m.canvas, c.name, node); } for (let i: i32 = 0; i < project_material_groups.length; ++i) { let g: node_group_t = project_material_groups[i]; nodes_material_sync_group_sockets(g.canvas, c.name, node); } } function nodes_material_sync_group_sockets(canvas: ui_node_canvas_t, group_name: string, node: ui_node_t) { for (let i: i32 = 0; i < canvas.nodes.length; ++i) { let n: ui_node_t = canvas.nodes[i]; if (n.type == "GROUP" && n.name == group_name) { let is_inputs: bool = node.name == "Group Input"; let old_sockets: ui_node_socket_t[] = is_inputs ? n.inputs : n.outputs; let sockets: ui_node_socket_t[] = util_clone_canvas_sockets(is_inputs ? node.outputs : node.inputs); if (is_inputs) { n.inputs = sockets; } else { n.outputs = sockets; } for (let i: i32 = 0; i < sockets.length; ++i) { let s: ui_node_socket_t = sockets[i]; s.node_id = n.id; } let num_sockets: i32 = sockets.length < old_sockets.length ? sockets.length : old_sockets.length; for (let i: i32 = 0; i < num_sockets; ++i) { if (sockets[i].type == old_sockets[i].type) { sockets[i].default_value = old_sockets[i].default_value; } } } } } function nodes_material_get_socket_color(type: string): i32 { return type == "RGBA" ? 0xffc7c729 : type == "VECTOR" ? 0xff6363c7 : 0xffa1a1a1; } function nodes_material_get_socket_default_value(type: string): f32_array_t { return type == "RGBA" ? f32_array_create_xyzw(0.8, 0.8, 0.8, 1.0) : type == "VECTOR" ? f32_array_create_xyz(0.0, 0.0, 0.0) : f32_array_create_x(0.0); } function nodes_material_get_socket_name(type: string): string { return type == "RGBA" ? _tr("Color") : type == "VECTOR" ? _tr("Vector") : _tr("Value"); } function nodes_material_create_socket(nodes: ui_nodes_t, node: ui_node_t, name: string, type: string, canvas: ui_node_canvas_t, min: f32 = 0.0, max: f32 = 1.0, default_value: any = null): ui_node_socket_t { let soc: ui_node_socket_t = { id: ui_get_socket_id(canvas.nodes), node_id: node.id, name: name == null ? nodes_material_get_socket_name(type) : name, type: type, color: nodes_material_get_socket_color(type), default_value: default_value == null ? nodes_material_get_socket_default_value(type) : default_value, min: min, max: max }; return soc; } function nodes_material_get_node_t(node_type: string): ui_node_t { for (let i: i32 = 0; i < nodes_material_list.length; ++i) { let c: ui_node_t[] = nodes_material_list[i]; for (let i: i32 = 0; i < c.length; ++i) { let n: ui_node_t = c[i]; if (n.type == node_type) { return n; } } } return null; } function nodes_material_create_node(node_type: string, group: node_group_t = null): ui_node_t { let n: ui_node_t = nodes_material_get_node_t(node_type); if (n == null) { return null; } let canvas: ui_node_canvas_t = group != null ? group.canvas : context_raw.material.canvas; let nodes: ui_nodes_t = group != null ? group.nodes : context_raw.material.nodes; let node: ui_node_t = ui_nodes_make_node(n, nodes, canvas); array_push(canvas.nodes, node); return node; }