- New Diffuse node.
|
@ -222,9 +222,7 @@
|
|||
{"name":"filter","order":4,"path":"folders/shader/filter.yy",},
|
||||
{"name":"color","order":53,"path":"folders/shader/filter/color.yy",},
|
||||
{"name":"shadow caster","order":46,"path":"folders/shader/filter/shadow caster.yy",},
|
||||
{"name":"FLIP","order":23,"path":"folders/shader/FLIP.yy",},
|
||||
{"name":"flood fill","order":11,"path":"folders/shader/flood fill.yy",},
|
||||
{"name":"fluid","order":20,"path":"folders/shader/fluid.yy",},
|
||||
{"name":"generator","order":1,"path":"folders/shader/generator.yy",},
|
||||
{"name":"blinker","order":30,"path":"folders/shader/generator/blinker.yy",},
|
||||
{"name":"cell","order":31,"path":"folders/shader/generator/cell.yy",},
|
||||
|
@ -243,6 +241,9 @@
|
|||
{"name":"morph","order":17,"path":"folders/shader/morph.yy",},
|
||||
{"name":"pixel builder","order":18,"path":"folders/shader/pixel builder.yy",},
|
||||
{"name":"shape seperator","order":5,"path":"folders/shader/shape seperator.yy",},
|
||||
{"name":"simulation","order":24,"path":"folders/shader/simulation.yy",},
|
||||
{"name":"diffuse","order":3,"path":"folders/shader/simulation/diffuse.yy",},
|
||||
{"name":"fluid","order":1,"path":"folders/shader/simulation/fluid.yy",},
|
||||
{"name":"sprites","order":2,"path":"folders/shader/sprites.yy",},
|
||||
{"name":"surface replace","order":16,"path":"folders/shader/surface replace.yy",},
|
||||
{"name":"transition","order":15,"path":"folders/shader/transition.yy",},
|
||||
|
@ -892,6 +893,7 @@
|
|||
{"name":"node_boolean","order":17,"path":"scripts/node_boolean/node_boolean.yy",},
|
||||
{"name":"node_grid_tri","order":3,"path":"scripts/node_grid_tri/node_grid_tri.yy",},
|
||||
{"name":"node_average","order":5,"path":"scripts/node_average/node_average.yy",},
|
||||
{"name":"sh_diffuse_flow","order":1,"path":"shaders/sh_diffuse_flow/sh_diffuse_flow.yy",},
|
||||
{"name":"node_mesh_transform","order":2,"path":"scripts/node_mesh_transform/node_mesh_transform.yy",},
|
||||
{"name":"node_fluid_turbulence","order":10,"path":"scripts/node_fluid_turbulence/node_fluid_turbulence.yy",},
|
||||
{"name":"sh_sdf","order":1,"path":"shaders/sh_sdf/sh_sdf.yy",},
|
||||
|
@ -959,6 +961,7 @@
|
|||
{"name":"node_path_builder","order":9,"path":"scripts/node_path_builder/node_path_builder.yy",},
|
||||
{"name":"o_dialog_gradient","order":1,"path":"objects/o_dialog_gradient/o_dialog_gradient.yy",},
|
||||
{"name":"sh_channel_R_grey","order":7,"path":"shaders/sh_channel_R_grey/sh_channel_R_grey.yy",},
|
||||
{"name":"s_node_diffuse","order":63,"path":"sprites/s_node_diffuse/s_node_diffuse.yy",},
|
||||
{"name":"node_array_sample","order":18,"path":"scripts/node_array_sample/node_array_sample.yy",},
|
||||
{"name":"sh_blend_subtract","order":5,"path":"shaders/sh_blend_subtract/sh_blend_subtract.yy",},
|
||||
{"name":"BBMOD_Vec4","order":6,"path":"scripts/BBMOD_Vec4/BBMOD_Vec4.yy",},
|
||||
|
@ -1070,6 +1073,7 @@
|
|||
{"name":"s_node_dynasurf","order":3,"path":"sprites/s_node_dynasurf/s_node_dynasurf.yy",},
|
||||
{"name":"obj_reader","order":2,"path":"scripts/obj_reader/obj_reader.yy",},
|
||||
{"name":"sh_invert","order":17,"path":"shaders/sh_invert/sh_invert.yy",},
|
||||
{"name":"node_diffuse","order":26,"path":"scripts/node_diffuse/node_diffuse.yy",},
|
||||
{"name":"preview_overlay_puppet","order":4,"path":"scripts/preview_overlay_puppet/preview_overlay_puppet.yy",},
|
||||
{"name":"s_icon_64","order":2,"path":"sprites/s_icon_64/s_icon_64.yy",},
|
||||
{"name":"panel_graph_export_image","order":4,"path":"scripts/panel_graph_export_image/panel_graph_export_image.yy",},
|
||||
|
@ -1471,6 +1475,7 @@
|
|||
{"name":"sh_noise_wavelet","order":12,"path":"shaders/sh_noise_wavelet/sh_noise_wavelet.yy",},
|
||||
{"name":"node_cache_base","order":18,"path":"scripts/node_cache_base/node_cache_base.yy",},
|
||||
{"name":"fd_rectangle_set_velocity_dissipation_type","order":13,"path":"scripts/fd_rectangle_set_velocity_dissipation_type/fd_rectangle_set_velocity_dissipation_type.yy",},
|
||||
{"name":"sh_diffuse_post","order":2,"path":"shaders/sh_diffuse_post/sh_diffuse_post.yy",},
|
||||
{"name":"node_color_replacement","order":3,"path":"scripts/node_color_replacement/node_color_replacement.yy",},
|
||||
{"name":"path_reader","order":5,"path":"scripts/path_reader/path_reader.yy",},
|
||||
{"name":"__node_3d_repeat","order":6,"path":"scripts/__node_3d_repeat/__node_3d_repeat.yy",},
|
||||
|
|
|
@ -254,9 +254,7 @@
|
|||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"filter","folderPath":"folders/shader/filter.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"color","folderPath":"folders/shader/filter/color.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"shadow caster","folderPath":"folders/shader/filter/shadow caster.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"FLIP","folderPath":"folders/shader/FLIP.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"flood fill","folderPath":"folders/shader/flood fill.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"fluid","folderPath":"folders/shader/fluid.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"generator","folderPath":"folders/shader/generator.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"blinker","folderPath":"folders/shader/generator/blinker.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"cell","folderPath":"folders/shader/generator/cell.yy",},
|
||||
|
@ -275,6 +273,10 @@
|
|||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"morph","folderPath":"folders/shader/morph.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"pixel builder","folderPath":"folders/shader/pixel builder.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"shape seperator","folderPath":"folders/shader/shape seperator.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"simulation","folderPath":"folders/shader/simulation.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"diffuse","folderPath":"folders/shader/simulation/diffuse.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"FLIP","folderPath":"folders/shader/simulation/FLIP.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"fluid","folderPath":"folders/shader/simulation/fluid.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"sprites","folderPath":"folders/shader/sprites.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"surface replace","folderPath":"folders/shader/surface replace.yy",},
|
||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"transition","folderPath":"folders/shader/transition.yy",},
|
||||
|
@ -1169,6 +1171,7 @@
|
|||
{"id":{"name":"node_boolean","path":"scripts/node_boolean/node_boolean.yy",},},
|
||||
{"id":{"name":"node_grid_tri","path":"scripts/node_grid_tri/node_grid_tri.yy",},},
|
||||
{"id":{"name":"node_average","path":"scripts/node_average/node_average.yy",},},
|
||||
{"id":{"name":"sh_diffuse_flow","path":"shaders/sh_diffuse_flow/sh_diffuse_flow.yy",},},
|
||||
{"id":{"name":"node_mesh_transform","path":"scripts/node_mesh_transform/node_mesh_transform.yy",},},
|
||||
{"id":{"name":"node_fluid_turbulence","path":"scripts/node_fluid_turbulence/node_fluid_turbulence.yy",},},
|
||||
{"id":{"name":"sh_sdf","path":"shaders/sh_sdf/sh_sdf.yy",},},
|
||||
|
@ -1248,6 +1251,7 @@
|
|||
{"id":{"name":"node_path_builder","path":"scripts/node_path_builder/node_path_builder.yy",},},
|
||||
{"id":{"name":"o_dialog_gradient","path":"objects/o_dialog_gradient/o_dialog_gradient.yy",},},
|
||||
{"id":{"name":"sh_channel_R_grey","path":"shaders/sh_channel_R_grey/sh_channel_R_grey.yy",},},
|
||||
{"id":{"name":"s_node_diffuse","path":"sprites/s_node_diffuse/s_node_diffuse.yy",},},
|
||||
{"id":{"name":"node_array_sample","path":"scripts/node_array_sample/node_array_sample.yy",},},
|
||||
{"id":{"name":"sh_blend_subtract","path":"shaders/sh_blend_subtract/sh_blend_subtract.yy",},},
|
||||
{"id":{"name":"BBMOD_Vec4","path":"scripts/BBMOD_Vec4/BBMOD_Vec4.yy",},},
|
||||
|
@ -1370,6 +1374,7 @@
|
|||
{"id":{"name":"s_node_dynasurf","path":"sprites/s_node_dynasurf/s_node_dynasurf.yy",},},
|
||||
{"id":{"name":"obj_reader","path":"scripts/obj_reader/obj_reader.yy",},},
|
||||
{"id":{"name":"sh_invert","path":"shaders/sh_invert/sh_invert.yy",},},
|
||||
{"id":{"name":"node_diffuse","path":"scripts/node_diffuse/node_diffuse.yy",},},
|
||||
{"id":{"name":"preview_overlay_puppet","path":"scripts/preview_overlay_puppet/preview_overlay_puppet.yy",},},
|
||||
{"id":{"name":"__mesh","path":"scripts/__mesh/__mesh.yy",},},
|
||||
{"id":{"name":"s_icon_64","path":"sprites/s_icon_64/s_icon_64.yy",},},
|
||||
|
@ -1617,6 +1622,7 @@
|
|||
{"id":{"name":"s_node_path_shift","path":"sprites/s_node_path_shift/s_node_path_shift.yy",},},
|
||||
{"id":{"name":"node_rigid_group","path":"scripts/node_rigid_group/node_rigid_group.yy",},},
|
||||
{"id":{"name":"sh_slice_spritesheet_empty_scan","path":"shaders/sh_slice_spritesheet_empty_scan/sh_slice_spritesheet_empty_scan.yy",},},
|
||||
{"id":{"name":"sh_diffuse_dissipate","path":"shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.yy",},},
|
||||
{"id":{"name":"s_node_grid_tri","path":"sprites/s_node_grid_tri/s_node_grid_tri.yy",},},
|
||||
{"id":{"name":"s_node_local_analyze","path":"sprites/s_node_local_analyze/s_node_local_analyze.yy",},},
|
||||
{"id":{"name":"_f_p0b","path":"fonts/_f_p0b/_f_p0b.yy",},},
|
||||
|
@ -1829,6 +1835,7 @@
|
|||
{"id":{"name":"sh_noise_wavelet","path":"shaders/sh_noise_wavelet/sh_noise_wavelet.yy",},},
|
||||
{"id":{"name":"node_cache_base","path":"scripts/node_cache_base/node_cache_base.yy",},},
|
||||
{"id":{"name":"fd_rectangle_set_velocity_dissipation_type","path":"scripts/fd_rectangle_set_velocity_dissipation_type/fd_rectangle_set_velocity_dissipation_type.yy",},},
|
||||
{"id":{"name":"sh_diffuse_post","path":"shaders/sh_diffuse_post/sh_diffuse_post.yy",},},
|
||||
{"id":{"name":"node_color_replacement","path":"scripts/node_color_replacement/node_color_replacement.yy",},},
|
||||
{"id":{"name":"path_reader","path":"scripts/path_reader/path_reader.yy",},},
|
||||
{"id":{"name":"__node_3d_repeat","path":"scripts/__node_3d_repeat/__node_3d_repeat.yy",},},
|
||||
|
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
90
scripts/node_diffuse/node_diffuse.gml
Normal file
|
@ -0,0 +1,90 @@
|
|||
function Node_Diffuse(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||
name = "Diffuse";
|
||||
|
||||
inputs[| 0] = nodeValue("Density field", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone );
|
||||
|
||||
inputs[| 1] = nodeValue("Dissipation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.05)
|
||||
.setDisplay(VALUE_DISPLAY.slider, { range: [ -0.2, 0.2, 0.001] });
|
||||
|
||||
inputs[| 2] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 4)
|
||||
|
||||
inputs[| 3] = nodeValue("Randomness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 100)
|
||||
|
||||
inputs[| 4] = nodeValue("Flow rate", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1)
|
||||
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 0.2, 0.001] });
|
||||
|
||||
inputs[| 5] = nodeValue("Thershold", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 0.7 ])
|
||||
.setDisplay(VALUE_DISPLAY.slider_range);
|
||||
|
||||
inputs[| 6] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random())
|
||||
|
||||
inputs[| 7] = nodeValue("External", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone );
|
||||
|
||||
inputs[| 8] = nodeValue("External strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.3)
|
||||
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01] });
|
||||
|
||||
inputs[| 9] = nodeValue("Detail", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1)
|
||||
|
||||
outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||
|
||||
input_display_list = [ 0, 6,
|
||||
["Diffuse", false], 1,
|
||||
["Flow", false], 2, 9, 3, 4,
|
||||
["Forces", false], 7, 8,
|
||||
["Rendering", false], 5,
|
||||
]
|
||||
|
||||
temp_surface = [ surface_create(1, 1), surface_create(1, 1) ];
|
||||
|
||||
static update = function() {
|
||||
var _surf = getInputData(0);
|
||||
var _diss = getInputData(1);
|
||||
var _scal = getInputData(2);
|
||||
var _rand = getInputData(3);
|
||||
var _flow = getInputData(4);
|
||||
var _thre = getInputData(5);
|
||||
var _seed = getInputData(6);
|
||||
var _forc = getInputData(7);
|
||||
var _fstr = getInputData(8);
|
||||
var _detl = getInputData(9);
|
||||
if(!is_surface(_surf)) return;
|
||||
|
||||
var _sw = surface_get_width_safe(_surf);
|
||||
var _sh = surface_get_height_safe(_surf);
|
||||
|
||||
var _outSurf = outputs[| 0].getValue();
|
||||
_outSurf = surface_verify(_outSurf, _sw, _sh);
|
||||
temp_surface[0] = surface_verify(temp_surface[0], _sw, _sh);
|
||||
temp_surface[1] = surface_verify(temp_surface[1], _sw, _sh);
|
||||
|
||||
surface_set_shader(temp_surface[0], sh_diffuse_dissipate);
|
||||
shader_set_f("dimension", _sw, _sh);
|
||||
shader_set_f("dissipation", 1 - _diss);
|
||||
|
||||
draw_surface_safe(_surf);
|
||||
surface_reset_shader();
|
||||
|
||||
surface_set_shader(temp_surface[1], sh_diffuse_flow);
|
||||
shader_set_f("dimension", _sw, _sh);
|
||||
shader_set_f("scale", _scal);
|
||||
shader_set_i("detail", _detl);
|
||||
shader_set_f("flowRate", _flow);
|
||||
shader_set_f("seed", _seed + CURRENT_FRAME / _rand);
|
||||
|
||||
shader_set_i("useExternal", is_surface(_forc));
|
||||
shader_set_f("externalStrength", _fstr);
|
||||
shader_set_surface("externalForce", _forc);
|
||||
|
||||
draw_surface_safe(temp_surface[0]);
|
||||
surface_reset_shader();
|
||||
|
||||
surface_set_shader(_outSurf, sh_diffuse_post);
|
||||
shader_set_f("dimension", _sw, _sh);
|
||||
shader_set_f("threshold", _thre);
|
||||
|
||||
draw_surface_safe(temp_surface[1]);
|
||||
surface_reset_shader();
|
||||
|
||||
outputs[| 0].setValue(_outSurf);
|
||||
}
|
||||
}
|
11
scripts/node_diffuse/node_diffuse.yy
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"resourceType": "GMScript",
|
||||
"resourceVersion": "1.0",
|
||||
"name": "node_diffuse",
|
||||
"isCompatibility": false,
|
||||
"isDnD": false,
|
||||
"parent": {
|
||||
"name": "generator",
|
||||
"path": "folders/nodes/data/generator.yy",
|
||||
},
|
||||
}
|
|
@ -492,7 +492,7 @@ function __initNodes() {
|
|||
addNodeObject(filter, "RGBA Combine", s_node_RGB_combine, "Node_Combine_RGB", [1, Node_Combine_RGB],, "Combine 4 image in to one. Each image use to control RGBA channel.").setVersion(1070);
|
||||
addNodeObject(filter, "HSV Combine", s_node_HSV_combine, "Node_Combine_HSV", [1, Node_Combine_HSV],, "Combine 4 image in to one. Each image use to control HSVA channel.").setVersion(1070);
|
||||
addNodeObject(filter, "Override Channel", s_node_ovreride_channel, "Node_Override_Channel", [1, Node_Override_Channel],, "Replace RGBA value of one surface with anothers.").setVersion(11640);
|
||||
|
||||
|
||||
ds_list_add(filter, "Blurs");
|
||||
addNodeObject(filter, "Blur", s_node_blur, "Node_Blur", [1, Node_Blur], ["gaussian blur"], "Blur image smoothly.");
|
||||
addNodeObject(filter, "Simple Blur", s_node_blur_simple, "Node_Blur_Simple", [1, Node_Blur_Simple],, "Blur image using simpler algorithm. Allowing for variable blur strength.").setVersion(1070);
|
||||
|
@ -502,7 +502,7 @@ function __initNodes() {
|
|||
addNodeObject(filter, "Lens Blur", s_node_bokeh, "Node_Blur_Bokeh", [1, Node_Blur_Bokeh], ["bokeh"], "Create bokeh effect. Blur lighter color in a lens-like manner.").setVersion(1110);
|
||||
addNodeObject(filter, "Contrast Blur", s_node_blur_contrast, "Node_Blur_Contrast", [1, Node_Blur_Contrast],, "Blur only pixel of a similiar color.");
|
||||
addNodeObject(filter, "Average", s_node_average, "Node_Average", [1, Node_Average],, "Average color of every pixels in the image.").setVersion(1110);
|
||||
|
||||
|
||||
ds_list_add(filter, "Warps");
|
||||
addNodeObject(filter, "Mirror", s_node_mirror, "Node_Mirror", [1, Node_Mirror],, "Reflect the image along a reflection line.").setVersion(1070);
|
||||
addNodeObject(filter, "Twirl", s_node_twirl, "Node_Twirl", [1, Node_Twirl], ["twist"], "Twist the image around a mid point.");
|
||||
|
@ -660,6 +660,7 @@ function __initNodes() {
|
|||
addNodeObject(generator, "FLIP Fluid", s_node_fluidSim_group, "Node_FLIP_Group_Inline", [1, Node_FLIP_Group_Inline],, "Create group for fluid simulation.").setVersion(11620);
|
||||
addNodeObject(generator, "SmokeSim", s_node_smokeSim_group, "Node_Fluid_Group_Inline", [1, Node_Fluid_Group_Inline],, "Create group for smoke simulation.").setVersion(1120);
|
||||
addNodeObject(generator, "StrandSim", s_node_strandSim, "Node_Strand_Group_Inline", [1, Node_Strand_Group_Inline], ["Hair"], "Create group for hair simulation.").setVersion(1140);
|
||||
addNodeObject(generator, "Diffuse", s_node_diffuse, "Node_Diffuse", [1, Node_Diffuse],, "Simulate diffusion like simulation.").setVersion(11640);
|
||||
addNodeObject(generator, "Reaction Diffusion", s_node_reaction_diffusion, "Node_RD", [1, Node_RD],, "Simulate reaction diffusion effect.").setVersion(11630);
|
||||
|
||||
ds_list_add(generator, "Region");
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
enum NODE_SHAPE_TYPE { rectangle, elipse, regular, star, arc, teardrop, cross, leaf, crescent }
|
||||
enum NODE_SHAPE_TYPE { rectangle, elipse, regular, star, arc, teardrop, cross, leaf, crescent, donut }
|
||||
|
||||
function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
||||
name = "Shape";
|
||||
|
@ -9,7 +9,7 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
|
|||
inputs[| 1] = nodeValue("Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false);
|
||||
|
||||
inputs[| 2] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Rectangle", "Ellipse", "Regular polygon", "Star", "Arc", "Teardrop", "Cross", "Leaf", "Crescent" ]);
|
||||
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Rectangle", "Ellipse", "Regular polygon", "Star", "Arc", "Teardrop", "Cross", "Leaf", "Crescent", "Donut" ]);
|
||||
|
||||
onSurfaceSize = function() { return getInputData(0, DEF_SURF); };
|
||||
inputs[| 3] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle ])
|
||||
|
@ -275,12 +275,21 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
|
|||
break;
|
||||
case NODE_SHAPE_TYPE.crescent :
|
||||
inputs[| 5].setVisible(true);
|
||||
inputs[| 7].setVisible(true);
|
||||
inputs[| 13].setVisible(true);
|
||||
|
||||
inputs[| 5].name = "Shift";
|
||||
inputs[| 13].name = "Inner circle";
|
||||
|
||||
shader_set_f("outer", _data[ 5]);
|
||||
shader_set_f("angle", -degtorad(_data[7]));
|
||||
shader_set_f("inner", _data[13]);
|
||||
break;
|
||||
case NODE_SHAPE_TYPE.donut :
|
||||
inputs[| 13].setVisible(true);
|
||||
|
||||
inputs[| 13].name = "Inner circle";
|
||||
|
||||
shader_set_f("inner", _data[13]);
|
||||
break;
|
||||
} #endregion
|
||||
|
|
|
@ -1088,7 +1088,7 @@ function Panel_Preview() : PanelContent() constructor {
|
|||
|
||||
var overlayHover = tool_hovering == noone && !overlay_hovering;
|
||||
overlayHover &= active && isHover;
|
||||
overlayHover &= point_in_rectangle(mx, my, toolbar_width, toolbar_height, w, h - toolbar_height);
|
||||
overlayHover &= point_in_rectangle(mx, my, (_node.tools != -1) * toolbar_width, toolbar_height, w, h - toolbar_height);
|
||||
overlayHover &= !key_mod_press(CTRL);
|
||||
var params = { w, h, toolbar_height };
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"name": "sh_FLIP_draw_droplet",
|
||||
"parent": {
|
||||
"name": "FLIP",
|
||||
"path": "folders/shader/FLIP.yy",
|
||||
"path": "folders/shader/simulation/FLIP.yy",
|
||||
},
|
||||
"type": 1,
|
||||
}
|
|
@ -4,7 +4,7 @@
|
|||
"name": "sh_FLIP_render_threshold",
|
||||
"parent": {
|
||||
"name": "FLIP",
|
||||
"path": "folders/shader/FLIP.yy",
|
||||
"path": "folders/shader/simulation/FLIP.yy",
|
||||
},
|
||||
"type": 1,
|
||||
}
|
24
shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.fsh
Normal file
|
@ -0,0 +1,24 @@
|
|||
varying vec2 v_vTexcoord;
|
||||
varying vec4 v_vColour;
|
||||
|
||||
uniform vec2 dimension;
|
||||
uniform float dissipation;
|
||||
|
||||
void main() {
|
||||
vec2 tx = 1. / dimension;
|
||||
|
||||
vec4 f0 = texture2D( gm_BaseTexture, v_vTexcoord + vec2(-tx.x, -tx.y) );
|
||||
vec4 f1 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( 0., -tx.y) );
|
||||
vec4 f2 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( tx.x, -tx.y) );
|
||||
|
||||
vec4 f3 = texture2D( gm_BaseTexture, v_vTexcoord + vec2(-tx.x, 0.) );
|
||||
vec4 f4 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( 0., 0.) );
|
||||
vec4 f5 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( tx.x, 0.) );
|
||||
|
||||
vec4 f6 = texture2D( gm_BaseTexture, v_vTexcoord + vec2(-tx.x, tx.y) );
|
||||
vec4 f7 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( 0., tx.y) );
|
||||
vec4 f8 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( tx.x, tx.y) );
|
||||
|
||||
vec4 clr = (f0 + f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8) / 9.;
|
||||
gl_FragColor = vec4(clr.rgb * dissipation, clr.a);
|
||||
}
|
19
shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.vsh
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// Simple passthrough vertex shader
|
||||
//
|
||||
attribute vec3 in_Position; // (x,y,z)
|
||||
//attribute vec3 in_Normal; // (x,y,z) unused in this shader.
|
||||
attribute vec4 in_Colour; // (r,g,b,a)
|
||||
attribute vec2 in_TextureCoord; // (u,v)
|
||||
|
||||
varying vec2 v_vTexcoord;
|
||||
varying vec4 v_vColour;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
|
||||
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
|
||||
|
||||
v_vColour = in_Colour;
|
||||
v_vTexcoord = in_TextureCoord;
|
||||
}
|
10
shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.yy
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"resourceType": "GMShader",
|
||||
"resourceVersion": "1.0",
|
||||
"name": "sh_diffuse_dissipate",
|
||||
"parent": {
|
||||
"name": "diffuse",
|
||||
"path": "folders/shader/simulation/diffuse.yy",
|
||||
},
|
||||
"type": 1,
|
||||
}
|
134
shaders/sh_diffuse_flow/sh_diffuse_flow.fsh
Normal file
|
@ -0,0 +1,134 @@
|
|||
varying vec2 v_vTexcoord;
|
||||
varying vec4 v_vColour;
|
||||
|
||||
uniform vec2 dimension;
|
||||
uniform float seed;
|
||||
uniform float scale;
|
||||
uniform int detail;
|
||||
uniform float flowRate;
|
||||
|
||||
uniform int useExternal;
|
||||
uniform float externalStrength;
|
||||
uniform sampler2D externalForce;
|
||||
|
||||
float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(21.456, 46.856), vec2(12.989, 78.233))) * 43758.545); }
|
||||
float grey (vec4 col) { return (col.r + col.g + col.b) / 3.; }
|
||||
|
||||
vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
|
||||
vec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
|
||||
vec4 permute(vec4 x) { return mod289(((x * 34.0) + 10.0) * x); }
|
||||
vec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }
|
||||
|
||||
float snoise(vec3 vec) { #region
|
||||
vec3 v = vec * 4.;
|
||||
|
||||
const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);
|
||||
const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
|
||||
|
||||
// First corner
|
||||
vec3 i = floor(v + dot(v, C.yyy));
|
||||
vec3 x0 = v - i + dot(i, C.xxx);
|
||||
|
||||
// Other corners
|
||||
vec3 g = step(x0.yzx, x0.xyz);
|
||||
vec3 l = 1.0 - g;
|
||||
vec3 i1 = min( g.xyz, l.zxy );
|
||||
vec3 i2 = max( g.xyz, l.zxy );
|
||||
|
||||
// x0 = x0 - 0.0 + 0.0 * C.xxx;
|
||||
// x1 = x0 - i1 + 1.0 * C.xxx;
|
||||
// x2 = x0 - i2 + 2.0 * C.xxx;
|
||||
// x3 = x0 - 1.0 + 3.0 * C.xxx;
|
||||
vec3 x1 = x0 - i1 + C.xxx;
|
||||
vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y
|
||||
vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y
|
||||
|
||||
// Permutations
|
||||
i = mod289(i);
|
||||
vec4 p = permute( permute( permute(
|
||||
i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
|
||||
+ i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
|
||||
+ i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
|
||||
|
||||
// Gradients: 7x7 points over a square, mapped onto an octahedron.
|
||||
// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
|
||||
float n_ = 0.142857142857; // 1.0/7.0
|
||||
vec3 ns = n_ * D.wyz - D.xzx;
|
||||
|
||||
vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)
|
||||
|
||||
vec4 x_ = floor(j * ns.z);
|
||||
vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)
|
||||
|
||||
vec4 x = x_ * ns.x + ns.yyyy;
|
||||
vec4 y = y_ * ns.x + ns.yyyy;
|
||||
vec4 h = 1.0 - abs(x) - abs(y);
|
||||
|
||||
vec4 b0 = vec4( x.xy, y.xy );
|
||||
vec4 b1 = vec4( x.zw, y.zw );
|
||||
|
||||
//vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
|
||||
//vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
|
||||
vec4 s0 = floor(b0) * 2.0 + 1.0;
|
||||
vec4 s1 = floor(b1) * 2.0 + 1.0;
|
||||
vec4 sh = -step(h, vec4(0.0));
|
||||
|
||||
vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy ;
|
||||
vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww ;
|
||||
|
||||
vec3 p0 = vec3(a0.xy, h.x);
|
||||
vec3 p1 = vec3(a0.zw, h.y);
|
||||
vec3 p2 = vec3(a1.xy, h.z);
|
||||
vec3 p3 = vec3(a1.zw, h.w);
|
||||
|
||||
//Normalise gradients
|
||||
vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
|
||||
p0 *= norm.x;
|
||||
p1 *= norm.y;
|
||||
p2 *= norm.z;
|
||||
p3 *= norm.w;
|
||||
|
||||
// Mix final noise value
|
||||
vec4 m = max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);
|
||||
m = m * m;
|
||||
|
||||
float n = 105.0 * dot( m * m, vec4( dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3) ) );
|
||||
n = mix(0.0, 0.5 + 0.5 * n, smoothstep(0.0, 0.003, vec.z));
|
||||
return n;
|
||||
} #endregion
|
||||
|
||||
float simplex(in vec2 st, in int itr) { #region
|
||||
vec2 p = st * 2.0 - 1.0;
|
||||
vec3 xyz = vec3(p, seed);
|
||||
|
||||
float amp = pow(2., float(itr) - 1.) / (pow(2., float(itr)) - 1.);
|
||||
float n = 0.;
|
||||
|
||||
for(int i = 0; i < 32; i++) {
|
||||
if(i >= itr) break;
|
||||
|
||||
n += snoise(xyz) * amp;
|
||||
|
||||
amp *= .5;
|
||||
xyz *= 2.;
|
||||
}
|
||||
|
||||
return n;
|
||||
} #endregion
|
||||
|
||||
void main() {
|
||||
vec2 tx = 1. / dimension;
|
||||
|
||||
float x0 = simplex((v_vTexcoord + vec2(-tx.x, 0.)) / scale, detail);
|
||||
float x1 = simplex((v_vTexcoord + vec2( tx.x, 0.)) / scale, detail);
|
||||
float y0 = simplex((v_vTexcoord + vec2(0., -tx.y)) / scale, detail);
|
||||
float y1 = simplex((v_vTexcoord + vec2(0., tx.y)) / scale, detail);
|
||||
|
||||
vec2 flow = vec2(x1 - x0, y1 - y0);
|
||||
if(useExternal == 1) {
|
||||
vec4 _forc = texture2D( externalForce, v_vTexcoord );
|
||||
flow -= (_forc.xy - 0.5) * 2. * externalStrength;
|
||||
}
|
||||
|
||||
gl_FragColor = texture2D( gm_BaseTexture, v_vTexcoord - flow * flowRate );
|
||||
}
|
19
shaders/sh_diffuse_flow/sh_diffuse_flow.vsh
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// Simple passthrough vertex shader
|
||||
//
|
||||
attribute vec3 in_Position; // (x,y,z)
|
||||
//attribute vec3 in_Normal; // (x,y,z) unused in this shader.
|
||||
attribute vec4 in_Colour; // (r,g,b,a)
|
||||
attribute vec2 in_TextureCoord; // (u,v)
|
||||
|
||||
varying vec2 v_vTexcoord;
|
||||
varying vec4 v_vColour;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
|
||||
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
|
||||
|
||||
v_vColour = in_Colour;
|
||||
v_vTexcoord = in_TextureCoord;
|
||||
}
|
10
shaders/sh_diffuse_flow/sh_diffuse_flow.yy
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"resourceType": "GMShader",
|
||||
"resourceVersion": "1.0",
|
||||
"name": "sh_diffuse_flow",
|
||||
"parent": {
|
||||
"name": "diffuse",
|
||||
"path": "folders/shader/simulation/diffuse.yy",
|
||||
},
|
||||
"type": 1,
|
||||
}
|
12
shaders/sh_diffuse_post/sh_diffuse_post.fsh
Normal file
|
@ -0,0 +1,12 @@
|
|||
varying vec2 v_vTexcoord;
|
||||
varying vec4 v_vColour;
|
||||
|
||||
uniform vec2 dimension;
|
||||
uniform vec2 threshold;
|
||||
|
||||
void main() {
|
||||
vec4 c = texture2D( gm_BaseTexture, v_vTexcoord );
|
||||
float a = (c.r + c.g + c.b) / 3.;
|
||||
|
||||
gl_FragColor = vec4(vec3(smoothstep(threshold[0], threshold[1], a)), 1.);
|
||||
}
|
19
shaders/sh_diffuse_post/sh_diffuse_post.vsh
Normal file
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// Simple passthrough vertex shader
|
||||
//
|
||||
attribute vec3 in_Position; // (x,y,z)
|
||||
//attribute vec3 in_Normal; // (x,y,z) unused in this shader.
|
||||
attribute vec4 in_Colour; // (r,g,b,a)
|
||||
attribute vec2 in_TextureCoord; // (u,v)
|
||||
|
||||
varying vec2 v_vTexcoord;
|
||||
varying vec4 v_vColour;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
|
||||
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
|
||||
|
||||
v_vColour = in_Colour;
|
||||
v_vTexcoord = in_TextureCoord;
|
||||
}
|
10
shaders/sh_diffuse_post/sh_diffuse_post.yy
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"resourceType": "GMShader",
|
||||
"resourceVersion": "1.0",
|
||||
"name": "sh_diffuse_post",
|
||||
"parent": {
|
||||
"name": "diffuse",
|
||||
"path": "folders/shader/simulation/diffuse.yy",
|
||||
},
|
||||
"type": 1,
|
||||
}
|
|
@ -4,7 +4,7 @@
|
|||
"name": "sh_fluid_bleach",
|
||||
"parent": {
|
||||
"name": "fluid",
|
||||
"path": "folders/shader/fluid.yy",
|
||||
"path": "folders/shader/simulation/fluid.yy",
|
||||
},
|
||||
"type": 1,
|
||||
}
|
|
@ -109,9 +109,16 @@ float sdVesica(vec2 p, float r, float d) { #region
|
|||
: length(p-vec2(-d,0.0))-r;
|
||||
} #endregion
|
||||
|
||||
float sdCrescent(vec2 p, float s, float c) { #region
|
||||
float sdCrescent(vec2 p, float s, float c, float a) { #region
|
||||
float o = length(p) - 1.;
|
||||
float i = length(p - vec2(1. - s * c, 0.)) / s - 1.;
|
||||
float i = length(p - vec2(cos(a) * (1. - s * c), sin(a) * (1. - s * c))) / s - 1.;
|
||||
|
||||
return max(o, -i);
|
||||
} #endregion
|
||||
|
||||
float sdDonut(vec2 p, float s) { #region
|
||||
float o = length(p) - 1.;
|
||||
float i = length(p) / s - 1.;
|
||||
|
||||
return max(o, -i);
|
||||
} #endregion
|
||||
|
@ -135,19 +142,13 @@ void main() {
|
|||
} else if(shape == 3) {
|
||||
d = sdStar( coord, 0.9 - corner, sides, 2. + inner * (float(sides) - 2.), angle );
|
||||
d -= corner;
|
||||
} else if(shape == 4) {
|
||||
d = sdArc( coord, vec2(sin(angle), cos(angle)), angle_range, 0.9 - inner, inner );
|
||||
} else if(shape == 5) {
|
||||
d = sdTearDrop( coord + vec2(0., 0.5), stRad, edRad, 1. );
|
||||
} else if(shape == 6) {
|
||||
d = sdCross( coord, vec2(1. + corner, outer), corner );
|
||||
} else if(shape == 7) {
|
||||
d = sdVesica( coord, inner, outer );
|
||||
} else if(shape == 8) {
|
||||
d = sdCrescent( coord, inner, outer );
|
||||
}
|
||||
} else if(shape == 4) d = sdArc( coord, vec2(sin(angle), cos(angle)), angle_range, 0.9 - inner, inner );
|
||||
else if(shape == 5) d = sdTearDrop( coord + vec2(0., 0.5), stRad, edRad, 1. );
|
||||
else if(shape == 6) d = sdCross( coord, vec2(1. + corner, outer), corner );
|
||||
else if(shape == 7) d = sdVesica( coord, inner, outer );
|
||||
else if(shape == 8) d = sdCrescent( coord, inner, outer, angle );
|
||||
else if(shape == 9) d = sdDonut( coord, inner );
|
||||
|
||||
//d = d;
|
||||
if(drawDF == 1)
|
||||
color = -d;
|
||||
else if(aa == 0)
|
||||
|
|
BIN
sprites/s_node_diffuse/d1e85f96-d61b-4899-8e77-6ea2e64c5d6d.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
74
sprites/s_node_diffuse/s_node_diffuse.yy
Normal file
|
@ -0,0 +1,74 @@
|
|||
{
|
||||
"resourceType": "GMSprite",
|
||||
"resourceVersion": "1.0",
|
||||
"name": "s_node_diffuse",
|
||||
"bbox_bottom": 63,
|
||||
"bbox_left": 0,
|
||||
"bbox_right": 63,
|
||||
"bbox_top": 0,
|
||||
"bboxMode": 0,
|
||||
"collisionKind": 1,
|
||||
"collisionTolerance": 0,
|
||||
"DynamicTexturePage": false,
|
||||
"edgeFiltering": false,
|
||||
"For3D": false,
|
||||
"frames": [
|
||||
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"d1e85f96-d61b-4899-8e77-6ea2e64c5d6d",},
|
||||
],
|
||||
"gridX": 0,
|
||||
"gridY": 0,
|
||||
"height": 64,
|
||||
"HTile": false,
|
||||
"layers": [
|
||||
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"97939aed-8fe8-4d7a-b6cb-3a8e69c6a402","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
|
||||
],
|
||||
"nineSlice": null,
|
||||
"origin": 4,
|
||||
"parent": {
|
||||
"name": "filter",
|
||||
"path": "folders/nodes/icons/filter.yy",
|
||||
},
|
||||
"preMultiplyAlpha": false,
|
||||
"sequence": {
|
||||
"resourceType": "GMSequence",
|
||||
"resourceVersion": "1.4",
|
||||
"name": "s_node_diffuse",
|
||||
"autoRecord": true,
|
||||
"backdropHeight": 768,
|
||||
"backdropImageOpacity": 0.5,
|
||||
"backdropImagePath": "",
|
||||
"backdropWidth": 1366,
|
||||
"backdropXOffset": 0.0,
|
||||
"backdropYOffset": 0.0,
|
||||
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||
"eventStubScript": null,
|
||||
"eventToFunction": {},
|
||||
"length": 1.0,
|
||||
"lockOrigin": false,
|
||||
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||
"playback": 1,
|
||||
"playbackSpeed": 30.0,
|
||||
"playbackSpeedType": 0,
|
||||
"showBackdrop": true,
|
||||
"showBackdropImage": false,
|
||||
"timeUnits": 1,
|
||||
"tracks": [
|
||||
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
|
||||
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"d1e85f96-d61b-4899-8e77-6ea2e64c5d6d","path":"sprites/s_node_diffuse/s_node_diffuse.yy",},},},"Disabled":false,"id":"fa33f3e1-5206-4403-8ae9-a15881009356","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
|
||||
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
|
||||
],
|
||||
"visibleRange": null,
|
||||
"volume": 1.0,
|
||||
"xorigin": 32,
|
||||
"yorigin": 32,
|
||||
},
|
||||
"swatchColours": null,
|
||||
"swfPrecision": 2.525,
|
||||
"textureGroupId": {
|
||||
"name": "Default",
|
||||
"path": "texturegroups/Default",
|
||||
},
|
||||
"type": 0,
|
||||
"VTile": false,
|
||||
"width": 64,
|
||||
}
|