| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- function geometry_node_init() {
- array_push(nodes_material_input, geometry_node_def);
- map_set(parser_material_node_vectors, "NEW_GEOMETRY", geometry_node_vector);
- map_set(parser_material_node_values, "NEW_GEOMETRY", geometry_node_value);
- }
- function geometry_node_vector(node: ui_node_t, socket: ui_node_socket_t): string {
- if (socket == node.outputs[0]) { // Position
- parser_material_kong.frag_wposition = true;
- return "input.wposition";
- }
- else if (socket == node.outputs[1]) { // Normal
- parser_material_kong.frag_n = true;
- return "n";
- }
- else if (socket == node.outputs[2]) { // Tangent
- parser_material_kong.frag_wtangent = true;
- return "input.wtangent";
- }
- else if (socket == node.outputs[3]) { // True Normal
- parser_material_kong.frag_n = true;
- return "n";
- }
- else if (socket == node.outputs[4]) { // Incoming
- parser_material_kong.frag_vvec = true;
- return "vvec";
- }
- else { // Parametric
- parser_material_kong.frag_mposition = true;
- return "input.mposition";
- }
- }
- function geometry_node_value(node: ui_node_t, socket: ui_node_socket_t): string {
- if (socket == node.outputs[6]) { // Backfacing
- return "0.0"; // SV_IsFrontFace
- // return "(1.0 - float(gl_FrontFacing))";
- }
- else if (socket == node.outputs[7]) { // Pointiness
- let strength: f32 = 1.0;
- let radius: f32 = 1.0;
- let offset: f32 = 0.0;
- let store: string = parser_material_store_var_name(node);
- parser_material_kong.frag_n = true;
- parser_material_write(parser_material_kong, "var " + store + "_dx: float3 = ddx3(n);");
- parser_material_write(parser_material_kong, "var " + store + "_dy: float3 = ddy3(n);");
- parser_material_write(parser_material_kong,
- "var " + store + "_curvature: float = max(dot(" + store + "_dx, " + store + "_dx), dot(" + store + "_dy, " + store + "_dy));");
- parser_material_write(parser_material_kong, store + "_curvature = clamp(pow(" + store + "_curvature, (1.0 / " + radius + ") * 0.25) * " + strength +
- " * 2.0 + " + offset + " / 10.0, 0.0, 1.0);");
- return store + "_curvature";
- }
- else { // Random Per Island
- return "0.0";
- }
- }
- let geometry_node_def: ui_node_t = {
- 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,
- flags : 0
- };
|