| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- function gradient_texture_node_init() {
- array_push(nodes_material_texture, gradient_texture_node_def);
- map_set(parser_material_node_vectors, "TEX_GRADIENT", gradient_texture_node_vector);
- map_set(parser_material_node_values, "TEX_GRADIENT", gradient_texture_node_value);
- }
- function parser_material_get_gradient(grad: string, co: string): string {
- if (grad == "LINEAR") {
- return co + ".x";
- }
- else if (grad == "QUADRATIC") {
- return "0.0";
- }
- else if (grad == "EASING") {
- return "0.0";
- }
- else if (grad == "DIAGONAL") {
- return "(" + co + ".x + " + co + ".y) * 0.5";
- }
- else if (grad == "RADIAL") {
- return "atan2(" + co + ".x, " + co + ".y) / (3.141592 * 2.0) + 0.5";
- }
- else if (grad == "QUADRATIC_SPHERE") {
- return "0.0";
- }
- else { // "SPHERICAL"
- return "max(1.0 - sqrt(" + co + ".x * " + co + ".x + " + co + ".y * " + co + ".y + " + co + ".z * " + co + ".z), 0.0)";
- }
- }
- function gradient_texture_node_vector(node: ui_node_t, socket: ui_node_socket_t): string {
- let co: string = parser_material_get_coord(node);
- let but: ui_node_button_t = node.buttons[0]; // gradient_type;
- let grad: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
- grad = string_replace_all(grad, " ", "_");
- let f: string = parser_material_get_gradient(grad, co);
- let res: string = parser_material_to_vec3("clamp(" + f + ", 0.0, 1.0)");
- return res;
- }
- function gradient_texture_node_value(node: ui_node_t, socket: ui_node_socket_t): string {
- let co: string = parser_material_get_coord(node);
- let but: ui_node_button_t = node.buttons[0]; // gradient_type;
- let grad: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
- grad = string_replace_all(grad, " ", "_");
- let f: string = parser_material_get_gradient(grad, co);
- let res: string = "(clamp(" + f + ", 0.0, 1.0))";
- return res;
- }
- let gradient_texture_node_def: ui_node_t = {
- 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("Factor"),
- 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,
- flags : 0
- };
|