Group transform, defer smooth normal,

This commit is contained in:
Tanasart 2023-08-30 16:40:45 +02:00
parent 051553fa58
commit 9aa2aff5a3
72 changed files with 733 additions and 434 deletions

View file

@ -192,6 +192,7 @@
{"name":"biterator","order":2,"path":"folders/VCT/biterator.yy",},
{"name":"widget","order":3,"path":"folders/VCT/widget.yy",},
{"name":"widgets","order":5,"path":"folders/widgets.yy",},
{"name":"d3d compose","order":17,"path":"folders/nodes/data/3D/d3d compose.yy",},
],
"ResourceOrderSettings": [
{"name":"s_node_corner","order":16,"path":"sprites/s_node_corner/s_node_corner.yy",},
@ -220,7 +221,7 @@
{"name":"s_node_text_trim","order":7,"path":"sprites/s_node_text_trim/s_node_text_trim.yy",},
{"name":"s_node_pb_fx_shading","order":3,"path":"sprites/s_node_pb_fx_shading/s_node_pb_fx_shading.yy",},
{"name":"sh_noise_grid_hex","order":2,"path":"shaders/sh_noise_grid_hex/sh_noise_grid_hex.yy",},
{"name":"node_3d_obj","order":4,"path":"scripts/node_3d_obj/node_3d_obj.yy",},
{"name":"__node_3d_obj","order":4,"path":"scripts/__node_3d_obj/__node_3d_obj.yy",},
{"name":"__path","order":1,"path":"scripts/__path/__path.yy",},
{"name":"draw_text_path","order":25,"path":"scripts/draw_text_path/draw_text_path.yy",},
{"name":"sh_brush_outline","order":7,"path":"shaders/sh_brush_outline/sh_brush_outline.yy",},
@ -318,7 +319,7 @@
{"name":"sh_blend_max","order":8,"path":"shaders/sh_blend_max/sh_blend_max.yy",},
{"name":"s_node_color_out","order":6,"path":"sprites/s_node_color_out/s_node_color_out.yy",},
{"name":"bbmod_lerp_delta_time","order":1,"path":"scripts/bbmod_lerp_delta_time/bbmod_lerp_delta_time.yy",},
{"name":"_3D","order":8,"path":"scripts/_3D/_3D.yy",},
{"name":"__3D","order":8,"path":"scripts/__3D/__3D.yy",},
{"name":"node_vector_cross2D","order":11,"path":"scripts/node_vector_cross2D/node_vector_cross2D.yy",},
{"name":"sh_corner_erode","order":48,"path":"shaders/sh_corner_erode/sh_corner_erode.yy",},
{"name":"node_outline","order":11,"path":"scripts/node_outline/node_outline.yy",},
@ -446,7 +447,7 @@
{"name":"s_node_crop","order":2,"path":"sprites/s_node_crop/s_node_crop.yy",},
{"name":"__VFX","order":2,"path":"scripts/__VFX/__VFX.yy",},
{"name":"s_menu_black","order":2,"path":"sprites/s_menu_black/s_menu_black.yy",},
{"name":"node_3d_export","order":2,"path":"scripts/node_3d_export/node_3d_export.yy",},
{"name":"__node_3d_export","order":2,"path":"scripts/__node_3d_export/__node_3d_export.yy",},
{"name":"s_node_vfx_override","order":11,"path":"sprites/s_node_vfx_override/s_node_vfx_override.yy",},
{"name":"rotatorRange","order":12,"path":"scripts/rotatorRange/rotatorRange.yy",},
{"name":"node_3d_mesh_cone","order":6,"path":"scripts/node_3d_mesh_cone/node_3d_mesh_cone.yy",},
@ -677,7 +678,7 @@
{"name":"panel_addon","order":5,"path":"scripts/panel_addon/panel_addon.yy",},
{"name":"s_node_text_splice","order":6,"path":"sprites/s_node_text_splice/s_node_text_splice.yy",},
{"name":"__atlas","order":6,"path":"scripts/__atlas/__atlas.yy",},
{"name":"node_3d_transform","order":7,"path":"scripts/node_3d_transform/node_3d_transform.yy",},
{"name":"__node_3d_transform","order":7,"path":"scripts/__node_3d_transform/__node_3d_transform.yy",},
{"name":"__d3d_gizmo","order":2,"path":"scripts/__d3d_gizmo/__d3d_gizmo.yy",},
{"name":"sh_draw_single_channel","order":3,"path":"shaders/sh_draw_single_channel/sh_draw_single_channel.yy",},
{"name":"draw_sprite_ext_override","order":9,"path":"scripts/draw_sprite_ext_override/draw_sprite_ext_override.yy",},
@ -792,6 +793,7 @@
{"name":"s_node_array_remove","order":7,"path":"sprites/s_node_array_remove/s_node_array_remove.yy",},
{"name":"s_node_zigzag","order":18,"path":"sprites/s_node_zigzag/s_node_zigzag.yy",},
{"name":"s_key_display_mouse","order":1,"path":"sprites/s_key_display_mouse/s_key_display_mouse.yy",},
{"name":"node_3d_repeat","order":1,"path":"scripts/node_3d_repeat/node_3d_repeat.yy",},
{"name":"node_pb_fx_add","order":6,"path":"scripts/node_pb_fx_add/node_pb_fx_add.yy",},
{"name":"s_node_csv_file_write","order":8,"path":"sprites/s_node_csv_file_write/s_node_csv_file_write.yy",},
{"name":"s_node_csv_parse","order":15,"path":"sprites/s_node_csv_parse/s_node_csv_parse.yy",},
@ -849,7 +851,6 @@
{"name":"node_particle","order":14,"path":"scripts/node_particle/node_particle.yy",},
{"name":"node_pb_box_contract","order":8,"path":"scripts/node_pb_box_contract/node_pb_box_contract.yy",},
{"name":"histogram_drawer","order":2,"path":"scripts/histogram_drawer/histogram_drawer.yy",},
{"name":"node_3d_scene","order":15,"path":"scripts/node_3d_scene/node_3d_scene.yy",},
{"name":"sh_color_picker_side_value","order":3,"path":"shaders/sh_color_picker_side_value/sh_color_picker_side_value.yy",},
{"name":"node_array_range","order":12,"path":"scripts/node_array_range/node_array_range.yy",},
{"name":"node_animation_control","order":11,"path":"scripts/node_animation_control/node_animation_control.yy",},
@ -887,7 +888,7 @@
{"name":"s_node_stack","order":37,"path":"sprites/s_node_stack/s_node_stack.yy",},
{"name":"s_fade_up","order":3,"path":"sprites/s_fade_up/s_fade_up.yy",},
{"name":"panel_globalvar","order":2,"path":"scripts/panel_globalvar/panel_globalvar.yy",},
{"name":"node_3d_render","order":5,"path":"scripts/node_3d_render/node_3d_render.yy",},
{"name":"__node_3d_render","order":5,"path":"scripts/__node_3d_render/__node_3d_render.yy",},
{"name":"node_guide","order":10,"path":"scripts/node_guide/node_guide.yy",},
{"name":"fd_rectangle_get_velocity_surface","order":24,"path":"scripts/fd_rectangle_get_velocity_surface/fd_rectangle_get_velocity_surface.yy",},
{"name":"s_node_text_char_get","order":2,"path":"sprites/s_node_text_char_get/s_node_text_char_get.yy",},
@ -895,6 +896,7 @@
{"name":"node_timeline_preview","order":2,"path":"scripts/node_timeline_preview/node_timeline_preview.yy",},
{"name":"__polygon","order":2,"path":"scripts/__polygon/__polygon.yy",},
{"name":"o_dialog_fontscrollbox","order":4,"path":"objects/o_dialog_fontscrollbox/o_dialog_fontscrollbox.yy",},
{"name":"sh_d3d_normal_blur","order":25,"path":"shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.yy",},
{"name":"d3d_vertex","order":10,"path":"scripts/d3d_vertex/d3d_vertex.yy",},
{"name":"s_node_vfx_output","order":11,"path":"sprites/s_node_vfx_output/s_node_vfx_output.yy",},
{"name":"sh_greyscale","order":13,"path":"shaders/sh_greyscale/sh_greyscale.yy",},
@ -1183,7 +1185,7 @@
{"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":"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",},
{"name":"__node_3d_repeat","order":6,"path":"scripts/__node_3d_repeat/__node_3d_repeat.yy",},
{"name":"point_direction_positive","order":4,"path":"scripts/point_direction_positive/point_direction_positive.yy",},
{"name":"s_node_fluidSim_add_fluid","order":3,"path":"sprites/s_node_fluidSim_add_fluid/s_node_fluidSim_add_fluid.yy",},
{"name":"sh_replace_color","order":5,"path":"shaders/sh_replace_color/sh_replace_color.yy",},
@ -1209,7 +1211,7 @@
{"name":"toggleGroup","order":31,"path":"scripts/toggleGroup/toggleGroup.yy",},
{"name":"mouse_input","order":1,"path":"scripts/mouse_input/mouse_input.yy",},
{"name":"string_cut","order":2,"path":"scripts/string_cut/string_cut.yy",},
{"name":"node_3d_prim_cylinder","order":2,"path":"scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.yy",},
{"name":"__node_3d_prim_cylinder","order":2,"path":"scripts/__node_3d_prim_cylinder/__node_3d_prim_cylinder.yy",},
{"name":"s_discord","order":7,"path":"sprites/s_discord/s_discord.yy",},
{"name":"panel_nodes","order":2,"path":"scripts/panel_nodes/panel_nodes.yy",},
{"name":"sh_gradient_points","order":19,"path":"shaders/sh_gradient_points/sh_gradient_points.yy",},
@ -1242,10 +1244,10 @@
{"name":"node_path_trim","order":6,"path":"scripts/node_path_trim/node_path_trim.yy",},
{"name":"s_node_rigidSim_deactivate","order":7,"path":"sprites/s_node_rigidSim_deactivate/s_node_rigidSim_deactivate.yy",},
{"name":"sh_blend_contrast","order":16,"path":"shaders/sh_blend_contrast/sh_blend_contrast.yy",},
{"name":"node_3d_prim_cube","order":1,"path":"scripts/node_3d_prim_cube/node_3d_prim_cube.yy",},
{"name":"__node_3d_prim_cube","order":1,"path":"scripts/__node_3d_prim_cube/__node_3d_prim_cube.yy",},
{"name":"node_surface_from_buffer","order":3,"path":"scripts/node_surface_from_buffer/node_surface_from_buffer.yy",},
{"name":"s_node_fluidSim_add_collider","order":1,"path":"sprites/s_node_fluidSim_add_collider/s_node_fluidSim_add_collider.yy",},
{"name":"node_3d_plane","order":4,"path":"scripts/node_3d_plane/node_3d_plane.yy",},
{"name":"__node_3d_plane","order":4,"path":"scripts/__node_3d_plane/__node_3d_plane.yy",},
{"name":"node_display_text","order":3,"path":"scripts/node_display_text/node_display_text.yy",},
{"name":"s_biterator_b_shape_press","order":4,"path":"sprites/s_biterator_b_shape_press/s_biterator_b_shape_press.yy",},
{"name":"node_pb_layer","order":1,"path":"scripts/node_pb_layer/node_pb_layer.yy",},
@ -1264,7 +1266,7 @@
{"name":"s_node_pb_fx_interesct","order":6,"path":"sprites/s_node_pb_fx_interesct/s_node_pb_fx_interesct.yy",},
{"name":"node_path_eval","order":4,"path":"scripts/node_path_eval/node_path_eval.yy",},
{"name":"sh_3d_depth","order":6,"path":"shaders/sh_3d_depth/sh_3d_depth.yy",},
{"name":"node_3d_displace","order":1,"path":"scripts/node_3d_displace/node_3d_displace.yy",},
{"name":"__node_3d_displace","order":1,"path":"scripts/__node_3d_displace/__node_3d_displace.yy",},
{"name":"node_vector_dot","order":9,"path":"scripts/node_vector_dot/node_vector_dot.yy",},
{"name":"node_path_map_area","order":1,"path":"scripts/node_path_map_area/node_path_map_area.yy",},
{"name":"node_3d_mesh_icosphere","order":5,"path":"scripts/node_3d_mesh_icosphere/node_3d_mesh_icosphere.yy",},
@ -1353,6 +1355,7 @@
{"name":"sh_blend_add","order":7,"path":"shaders/sh_blend_add/sh_blend_add.yy",},
{"name":"s_node_FFT","order":15,"path":"sprites/s_node_FFT/s_node_FFT.yy",},
{"name":"node_de_stray","order":1,"path":"scripts/node_de_stray/node_de_stray.yy",},
{"name":"d3d_transformation","order":12,"path":"scripts/d3d_transformation/d3d_transformation.yy",},
{"name":"sh_channel_G","order":2,"path":"shaders/sh_channel_G/sh_channel_G.yy",},
{"name":"s_node_dilate","order":19,"path":"sprites/s_node_dilate/s_node_dilate.yy",},
{"name":"node_value","order":5,"path":"scripts/node_value/node_value.yy",},
@ -1443,7 +1446,7 @@
{"name":"node_pb_box_split","order":2,"path":"scripts/node_pb_box_split/node_pb_box_split.yy",},
{"name":"s_node_output","order":7,"path":"sprites/s_node_output/s_node_output.yy",},
{"name":"sh_atlas","order":26,"path":"shaders/sh_atlas/sh_atlas.yy",},
{"name":"node_3d_extrude","order":3,"path":"scripts/node_3d_extrude/node_3d_extrude.yy",},
{"name":"__node_3d_extrude","order":3,"path":"scripts/__node_3d_extrude/__node_3d_extrude.yy",},
{"name":"node_path_array","order":11,"path":"scripts/node_path_array/node_path_array.yy",},
{"name":"node_scale","order":8,"path":"scripts/node_scale/node_scale.yy",},
{"name":"panel_array_sequence","order":3,"path":"scripts/panel_array_sequence/panel_array_sequence.yy",},
@ -1499,7 +1502,7 @@
{"name":"draw_corner","order":19,"path":"scripts/draw_corner/draw_corner.yy",},
{"name":"o_dialog_preference","order":7,"path":"objects/o_dialog_preference/o_dialog_preference.yy",},
{"name":"node_wrap","order":2,"path":"scripts/node_wrap/node_wrap.yy",},
{"name":"node_3d_prim_sphere","order":3,"path":"scripts/node_3d_prim_sphere/node_3d_prim_sphere.yy",},
{"name":"__node_3d_prim_sphere","order":3,"path":"scripts/__node_3d_prim_sphere/__node_3d_prim_sphere.yy",},
{"name":"dialog_management","order":2,"path":"scripts/dialog_management/dialog_management.yy",},
{"name":"draw_shapes","order":10,"path":"scripts/draw_shapes/draw_shapes.yy",},
{"name":"sh_surface_replace_fast_replace","order":3,"path":"shaders/sh_surface_replace_fast_replace/sh_surface_replace_fast_replace.yy",},

View file

@ -230,6 +230,7 @@
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"biterator","folderPath":"folders/VCT/biterator.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"widget","folderPath":"folders/VCT/widget.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"widgets","folderPath":"folders/widgets.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"d3d compose","folderPath":"folders/nodes/data/3D/d3d compose.yy",},
],
"IncludedFiles": [
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"ApolloHelp.html","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":-1,"filePath":"datafiles",},
@ -739,7 +740,7 @@
{"id":{"name":"s_node_text_trim","path":"sprites/s_node_text_trim/s_node_text_trim.yy",},},
{"id":{"name":"s_node_pb_fx_shading","path":"sprites/s_node_pb_fx_shading/s_node_pb_fx_shading.yy",},},
{"id":{"name":"sh_noise_grid_hex","path":"shaders/sh_noise_grid_hex/sh_noise_grid_hex.yy",},},
{"id":{"name":"node_3d_obj","path":"scripts/node_3d_obj/node_3d_obj.yy",},},
{"id":{"name":"__node_3d_obj","path":"scripts/__node_3d_obj/__node_3d_obj.yy",},},
{"id":{"name":"__path","path":"scripts/__path/__path.yy",},},
{"id":{"name":"draw_text_path","path":"scripts/draw_text_path/draw_text_path.yy",},},
{"id":{"name":"sh_brush_outline","path":"shaders/sh_brush_outline/sh_brush_outline.yy",},},
@ -751,7 +752,7 @@
{"id":{"name":"node_pb_draw_roundrectangle","path":"scripts/node_pb_draw_roundrectangle/node_pb_draw_roundrectangle.yy",},},
{"id":{"name":"draw_text_function","path":"scripts/draw_text_function/draw_text_function.yy",},},
{"id":{"name":"o_dialog_file_name_collection","path":"objects/o_dialog_file_name_collection/o_dialog_file_name_collection.yy",},},
{"id":{"name":"node_3d_prim_cone","path":"scripts/node_3d_prim_cone/node_3d_prim_cone.yy",},},
{"id":{"name":"__node_3d_prim_cone","path":"scripts/__node_3d_prim_cone/__node_3d_prim_cone.yy",},},
{"id":{"name":"node_line","path":"scripts/node_line/node_line.yy",},},
{"id":{"name":"s_node_frame","path":"sprites/s_node_frame/s_node_frame.yy",},},
{"id":{"name":"s_node_fluidSim_turbulence","path":"sprites/s_node_fluidSim_turbulence/s_node_fluidSim_turbulence.yy",},},
@ -852,7 +853,7 @@
{"id":{"name":"sh_blend_max","path":"shaders/sh_blend_max/sh_blend_max.yy",},},
{"id":{"name":"s_node_color_out","path":"sprites/s_node_color_out/s_node_color_out.yy",},},
{"id":{"name":"bbmod_lerp_delta_time","path":"scripts/bbmod_lerp_delta_time/bbmod_lerp_delta_time.yy",},},
{"id":{"name":"_3D","path":"scripts/_3D/_3D.yy",},},
{"id":{"name":"__3D","path":"scripts/__3D/__3D.yy",},},
{"id":{"name":"node_vector_cross2D","path":"scripts/node_vector_cross2D/node_vector_cross2D.yy",},},
{"id":{"name":"sh_corner_erode","path":"shaders/sh_corner_erode/sh_corner_erode.yy",},},
{"id":{"name":"__init_view","path":"scripts/__init_view/__init_view.yy",},},
@ -997,7 +998,7 @@
{"id":{"name":"s_node_crop","path":"sprites/s_node_crop/s_node_crop.yy",},},
{"id":{"name":"__VFX","path":"scripts/__VFX/__VFX.yy",},},
{"id":{"name":"s_menu_black","path":"sprites/s_menu_black/s_menu_black.yy",},},
{"id":{"name":"node_3d_export","path":"scripts/node_3d_export/node_3d_export.yy",},},
{"id":{"name":"__node_3d_export","path":"scripts/__node_3d_export/__node_3d_export.yy",},},
{"id":{"name":"sh_blend_multiply","path":"shaders/sh_blend_multiply/sh_blend_multiply.yy",},},
{"id":{"name":"node_bevel","path":"scripts/node_bevel/node_bevel.yy",},},
{"id":{"name":"s_node_vfx_override","path":"sprites/s_node_vfx_override/s_node_vfx_override.yy",},},
@ -1267,7 +1268,7 @@
{"id":{"name":"panel_addon","path":"scripts/panel_addon/panel_addon.yy",},},
{"id":{"name":"s_node_text_splice","path":"sprites/s_node_text_splice/s_node_text_splice.yy",},},
{"id":{"name":"__atlas","path":"scripts/__atlas/__atlas.yy",},},
{"id":{"name":"node_3d_transform","path":"scripts/node_3d_transform/node_3d_transform.yy",},},
{"id":{"name":"__node_3d_transform","path":"scripts/__node_3d_transform/__node_3d_transform.yy",},},
{"id":{"name":"__d3d_gizmo","path":"scripts/__d3d_gizmo/__d3d_gizmo.yy",},},
{"id":{"name":"sh_draw_single_channel","path":"shaders/sh_draw_single_channel/sh_draw_single_channel.yy",},},
{"id":{"name":"draw_sprite_ext_override","path":"scripts/draw_sprite_ext_override/draw_sprite_ext_override.yy",},},
@ -1397,6 +1398,7 @@
{"id":{"name":"s_node_array_remove","path":"sprites/s_node_array_remove/s_node_array_remove.yy",},},
{"id":{"name":"s_node_zigzag","path":"sprites/s_node_zigzag/s_node_zigzag.yy",},},
{"id":{"name":"s_key_display_mouse","path":"sprites/s_key_display_mouse/s_key_display_mouse.yy",},},
{"id":{"name":"node_3d_repeat","path":"scripts/node_3d_repeat/node_3d_repeat.yy",},},
{"id":{"name":"node_pb_fx_add","path":"scripts/node_pb_fx_add/node_pb_fx_add.yy",},},
{"id":{"name":"s_node_csv_file_write","path":"sprites/s_node_csv_file_write/s_node_csv_file_write.yy",},},
{"id":{"name":"s_node_csv_parse","path":"sprites/s_node_csv_parse/s_node_csv_parse.yy",},},
@ -1500,7 +1502,7 @@
{"id":{"name":"s_node_stack","path":"sprites/s_node_stack/s_node_stack.yy",},},
{"id":{"name":"s_fade_up","path":"sprites/s_fade_up/s_fade_up.yy",},},
{"id":{"name":"panel_globalvar","path":"scripts/panel_globalvar/panel_globalvar.yy",},},
{"id":{"name":"node_3d_render","path":"scripts/node_3d_render/node_3d_render.yy",},},
{"id":{"name":"__node_3d_render","path":"scripts/__node_3d_render/__node_3d_render.yy",},},
{"id":{"name":"node_guide","path":"scripts/node_guide/node_guide.yy",},},
{"id":{"name":"fd_rectangle_get_velocity_surface","path":"scripts/fd_rectangle_get_velocity_surface/fd_rectangle_get_velocity_surface.yy",},},
{"id":{"name":"s_node_text_char_get","path":"sprites/s_node_text_char_get/s_node_text_char_get.yy",},},
@ -1509,6 +1511,7 @@
{"id":{"name":"__polygon","path":"scripts/__polygon/__polygon.yy",},},
{"id":{"name":"sh_morph_surface","path":"shaders/sh_morph_surface/sh_morph_surface.yy",},},
{"id":{"name":"o_dialog_fontscrollbox","path":"objects/o_dialog_fontscrollbox/o_dialog_fontscrollbox.yy",},},
{"id":{"name":"sh_d3d_normal_blur","path":"shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.yy",},},
{"id":{"name":"d3d_vertex","path":"scripts/d3d_vertex/d3d_vertex.yy",},},
{"id":{"name":"s_node_vfx_output","path":"sprites/s_node_vfx_output/s_node_vfx_output.yy",},},
{"id":{"name":"sh_greyscale","path":"shaders/sh_greyscale/sh_greyscale.yy",},},
@ -1836,7 +1839,7 @@
{"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":"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",},},
{"id":{"name":"__node_3d_repeat","path":"scripts/__node_3d_repeat/__node_3d_repeat.yy",},},
{"id":{"name":"point_direction_positive","path":"scripts/point_direction_positive/point_direction_positive.yy",},},
{"id":{"name":"s_node_fluidSim_add_fluid","path":"sprites/s_node_fluidSim_add_fluid/s_node_fluidSim_add_fluid.yy",},},
{"id":{"name":"sh_replace_color","path":"shaders/sh_replace_color/sh_replace_color.yy",},},
@ -1866,7 +1869,7 @@
{"id":{"name":"toggleGroup","path":"scripts/toggleGroup/toggleGroup.yy",},},
{"id":{"name":"mouse_input","path":"scripts/mouse_input/mouse_input.yy",},},
{"id":{"name":"string_cut","path":"scripts/string_cut/string_cut.yy",},},
{"id":{"name":"node_3d_prim_cylinder","path":"scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.yy",},},
{"id":{"name":"__node_3d_prim_cylinder","path":"scripts/__node_3d_prim_cylinder/__node_3d_prim_cylinder.yy",},},
{"id":{"name":"s_discord","path":"sprites/s_discord/s_discord.yy",},},
{"id":{"name":"panel_nodes","path":"scripts/panel_nodes/panel_nodes.yy",},},
{"id":{"name":"sh_gradient_points","path":"shaders/sh_gradient_points/sh_gradient_points.yy",},},
@ -1904,10 +1907,10 @@
{"id":{"name":"node_path_trim","path":"scripts/node_path_trim/node_path_trim.yy",},},
{"id":{"name":"s_node_rigidSim_deactivate","path":"sprites/s_node_rigidSim_deactivate/s_node_rigidSim_deactivate.yy",},},
{"id":{"name":"sh_blend_contrast","path":"shaders/sh_blend_contrast/sh_blend_contrast.yy",},},
{"id":{"name":"node_3d_prim_cube","path":"scripts/node_3d_prim_cube/node_3d_prim_cube.yy",},},
{"id":{"name":"__node_3d_prim_cube","path":"scripts/__node_3d_prim_cube/__node_3d_prim_cube.yy",},},
{"id":{"name":"node_surface_from_buffer","path":"scripts/node_surface_from_buffer/node_surface_from_buffer.yy",},},
{"id":{"name":"s_node_fluidSim_add_collider","path":"sprites/s_node_fluidSim_add_collider/s_node_fluidSim_add_collider.yy",},},
{"id":{"name":"node_3d_plane","path":"scripts/node_3d_plane/node_3d_plane.yy",},},
{"id":{"name":"__node_3d_plane","path":"scripts/__node_3d_plane/__node_3d_plane.yy",},},
{"id":{"name":"node_display_text","path":"scripts/node_display_text/node_display_text.yy",},},
{"id":{"name":"s_kenney","path":"sprites/s_kenney/s_kenney.yy",},},
{"id":{"name":"s_biterator_b_shape_press","path":"sprites/s_biterator_b_shape_press/s_biterator_b_shape_press.yy",},},
@ -1932,7 +1935,7 @@
{"id":{"name":"s_node_pb_fx_interesct","path":"sprites/s_node_pb_fx_interesct/s_node_pb_fx_interesct.yy",},},
{"id":{"name":"node_path_eval","path":"scripts/node_path_eval/node_path_eval.yy",},},
{"id":{"name":"sh_3d_depth","path":"shaders/sh_3d_depth/sh_3d_depth.yy",},},
{"id":{"name":"node_3d_displace","path":"scripts/node_3d_displace/node_3d_displace.yy",},},
{"id":{"name":"__node_3d_displace","path":"scripts/__node_3d_displace/__node_3d_displace.yy",},},
{"id":{"name":"node_vector_dot","path":"scripts/node_vector_dot/node_vector_dot.yy",},},
{"id":{"name":"o_dialog_arrayBox","path":"objects/o_dialog_arrayBox/o_dialog_arrayBox.yy",},},
{"id":{"name":"node_path_transform","path":"scripts/node_path_transform/node_path_transform.yy",},},
@ -2036,6 +2039,7 @@
{"id":{"name":"sh_blend_add","path":"shaders/sh_blend_add/sh_blend_add.yy",},},
{"id":{"name":"s_node_FFT","path":"sprites/s_node_FFT/s_node_FFT.yy",},},
{"id":{"name":"node_de_stray","path":"scripts/node_de_stray/node_de_stray.yy",},},
{"id":{"name":"d3d_transformation","path":"scripts/d3d_transformation/d3d_transformation.yy",},},
{"id":{"name":"sh_channel_G","path":"shaders/sh_channel_G/sh_channel_G.yy",},},
{"id":{"name":"s_node_dilate","path":"sprites/s_node_dilate/s_node_dilate.yy",},},
{"id":{"name":"node_collection","path":"scripts/node_collection/node_collection.yy",},},
@ -2092,7 +2096,7 @@
{"id":{"name":"s_node_feedback_output","path":"sprites/s_node_feedback_output/s_node_feedback_output.yy",},},
{"id":{"name":"sh_fd_repulse","path":"shaders/sh_fd_repulse/sh_fd_repulse.yy",},},
{"id":{"name":"sh_surface_replace_fast_find","path":"shaders/sh_surface_replace_fast_find/sh_surface_replace_fast_find.yy",},},
{"id":{"name":"node_3d_combine","path":"scripts/node_3d_combine/node_3d_combine.yy",},},
{"id":{"name":"__node_3d_combine","path":"scripts/__node_3d_combine/__node_3d_combine.yy",},},
{"id":{"name":"fd_rectangle_add_material","path":"scripts/fd_rectangle_add_material/fd_rectangle_add_material.yy",},},
{"id":{"name":"fd_rectangle_set_target","path":"scripts/fd_rectangle_set_target/fd_rectangle_set_target.yy",},},
{"id":{"name":"node_wav_file_read","path":"scripts/node_wav_file_read/node_wav_file_read.yy",},},
@ -2138,7 +2142,7 @@
{"id":{"name":"node_pb_box_split","path":"scripts/node_pb_box_split/node_pb_box_split.yy",},},
{"id":{"name":"s_node_output","path":"sprites/s_node_output/s_node_output.yy",},},
{"id":{"name":"sh_atlas","path":"shaders/sh_atlas/sh_atlas.yy",},},
{"id":{"name":"node_3d_extrude","path":"scripts/node_3d_extrude/node_3d_extrude.yy",},},
{"id":{"name":"__node_3d_extrude","path":"scripts/__node_3d_extrude/__node_3d_extrude.yy",},},
{"id":{"name":"node_path_array","path":"scripts/node_path_array/node_path_array.yy",},},
{"id":{"name":"node_scale","path":"scripts/node_scale/node_scale.yy",},},
{"id":{"name":"node_array_insert","path":"scripts/node_array_insert/node_array_insert.yy",},},
@ -2204,7 +2208,7 @@
{"id":{"name":"o_dialog_preference","path":"objects/o_dialog_preference/o_dialog_preference.yy",},},
{"id":{"name":"node_pb_fx","path":"scripts/node_pb_fx/node_pb_fx.yy",},},
{"id":{"name":"node_wrap","path":"scripts/node_wrap/node_wrap.yy",},},
{"id":{"name":"node_3d_prim_sphere","path":"scripts/node_3d_prim_sphere/node_3d_prim_sphere.yy",},},
{"id":{"name":"__node_3d_prim_sphere","path":"scripts/__node_3d_prim_sphere/__node_3d_prim_sphere.yy",},},
{"id":{"name":"o_dialog_about","path":"objects/o_dialog_about/o_dialog_about.yy",},},
{"id":{"name":"dialog_management","path":"scripts/dialog_management/dialog_management.yy",},},
{"id":{"name":"draw_shapes","path":"scripts/draw_shapes/draw_shapes.yy",},},

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "_3D",
"name": "__3D",
"isCompatibility": false,
"isDnD": false,
"parent": {

View file

@ -57,12 +57,12 @@ function Node_3D(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constr
var _c = _prev.getCenter();
if(_b == noone || _c == noone) continue;
D3D_GLOBAL_PREVIEW.custom_transform.set(_c);
D3D_GLOBAL_PREVIEW.custom_transform.position.set(_c._multiply(-1));
var _sca = 1 / _b.getMaximumScale();
D3D_GLOBAL_PREVIEW.custom_scale.set(_sca);
D3D_GLOBAL_PREVIEW.custom_transform.scale.set(_sca);
_prev.submitUI(D3D_GLOBAL_PREVIEW);
D3D_GLOBAL_PREVIEW.submitUI(_prev);
}
surface_reset_target();

View file

@ -1,4 +1,4 @@
function Node_3D_Combine(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
function __Node_3D_Combine(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
name = "3D Combine";
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF)

View file

@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "__node_3d_combine",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "__legacy",
"path": "folders/nodes/data/3D/__legacy.yy",
},
}

View file

@ -1,4 +1,4 @@
function Node_3D_Displace(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
function __Node_3D_Displace(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "3D Displace";
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF)

View file

@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "__node_3d_displace",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "__legacy",
"path": "folders/nodes/data/3D/__legacy.yy",
},
}

View file

@ -1,4 +1,4 @@
function Node_3D_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
function __Node_3D_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
name = "3D Export";
inputs[| 0] = nodeValue("Vertex data", self, JUNCTION_CONNECT.input, VALUE_TYPE.d3vertex, [] )

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_displace",
"name": "__node_3d_export",
"isCompatibility": false,
"isDnD": false,
"parent": {

View file

@ -1,4 +1,4 @@
function Node_3D_Extrude(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
function __Node_3D_Extrude(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "3D Extrude";
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);

View file

@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "__node_3d_extrude",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "__legacy",
"path": "folders/nodes/data/3D/__legacy.yy",
},
}

View file

@ -1,4 +1,4 @@
function Node_3D_Obj(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
function __Node_3D_Obj(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
name = "3D Object";
inputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.input, VALUE_TYPE.path, "")

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_obj",
"name": "__node_3d_obj",
"isCompatibility": false,
"isDnD": false,
"parent": {

View file

@ -9,7 +9,7 @@ function Node_3D_Object(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constr
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 1] = nodeValue("Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 1 ])
.setDisplay(VALUE_DISPLAY.vector);
.setDisplay(VALUE_DISPLAY.d3quarternion);
inputs[| 2] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ])
.setDisplay(VALUE_DISPLAY.vector);
@ -63,7 +63,7 @@ function Node_3D_Object(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constr
static drawGizmoPosition = function(index, object, _vpos, active, params, _mx, _my, _snx, _sny, _panel) { #region
#region ---- main ----
var _pos = inputs[| index].getValue(,,, true);
var _qrot = object == noone? new BBMOD_Quaternion() : object.rotation;
var _qrot = object == noone? new BBMOD_Quaternion() : object.transform.rotation;
var _qinv = new BBMOD_Quaternion().FromAxisAngle(new BBMOD_Vec3(1, 0, 0), 90);
var _camera = params.camera;
@ -274,7 +274,7 @@ function Node_3D_Object(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constr
static drawGizmoRotation = function(index, object, _vpos, active, params, _mx, _my, _snx, _sny, _panel) { #region
#region ---- main ----
var _rot = inputs[| index].getValue(,,, true);
var _qrot = object == noone? new BBMOD_Quaternion() : object.rotation;
var _qrot = object == noone? new BBMOD_Quaternion() : object.transform.rotation;
var _qinv = new BBMOD_Quaternion().FromAxisAngle(new BBMOD_Vec3(1, 0, 0), 90);
var _camera = params.camera;
@ -384,7 +384,7 @@ function Node_3D_Object(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constr
tool_attribute.context = 0;
#region ---- main ----
var _sca = inputs[| index].getValue(,,, true);
var _qrot = object == noone? new BBMOD_Quaternion() : object.rotation;
var _qrot = object == noone? new BBMOD_Quaternion() : object.transform.rotation;
var _qinv = new BBMOD_Quaternion().FromAxisAngle(new BBMOD_Vec3(1, 0, 0), 90);
var _camera = params.camera;
@ -595,9 +595,9 @@ function Node_3D_Object(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constr
var _rot = _data[1];
var _sca = _data[2];
object.position.set(_pos[0], _pos[1], _pos[2]);
object.rotation.set(_rot[0], _rot[1], _rot[2], _rot[3]);
object.scale.set(_sca[0], _sca[1], _sca[2]);
object.transform.position.set(_pos[0], _pos[1], _pos[2]);
object.transform.rotation.set(_rot[0], _rot[1], _rot[2], _rot[3]);
object.transform.scale.set(_sca[0], _sca[1], _sca[2]);
return object;
} #endregion

View file

@ -1,4 +1,4 @@
function Node_3D_Plane(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
function __Node_3D_Plane(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "3D Plane";
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_plane",
"name": "__node_3d_plane",
"isCompatibility": false,
"isDnD": false,
"parent": {

View file

@ -1,4 +1,4 @@
function Node_3D_Cone(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
function __Node_3D_Cone(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "3D Cone";
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF)

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_prim_cone",
"name": "__node_3d_prim_cone",
"isCompatibility": false,
"isDnD": false,
"parent": {

View file

@ -1,4 +1,4 @@
function Node_3D_Cube(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
function __Node_3D_Cube(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "3D Cube";
dimension_index = 1;

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_prim_cube",
"name": "__node_3d_prim_cube",
"isCompatibility": false,
"isDnD": false,
"parent": {

View file

@ -1,4 +1,4 @@
function Node_3D_Cylinder(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
function __Node_3D_Cylinder(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "3D Cylinder";
dimension_index = 2;

View file

@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "__node_3d_prim_cylinder",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "primitive",
"path": "folders/nodes/data/3D/__legacy/primitive.yy",
},
}

View file

@ -1,4 +1,4 @@
function Node_3D_Sphere(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
function __Node_3D_Sphere(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "3D Sphere";
dimension_index = 1;

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_prim_cylinder",
"name": "__node_3d_prim_sphere",
"isCompatibility": false,
"isDnD": false,
"parent": {

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_combine",
"name": "__node_3d_render",
"isCompatibility": false,
"isDnD": false,
"parent": {

View file

@ -0,0 +1,207 @@
function __Node_3D_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
name = "3D Repeat";
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF)
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 1] = nodeValue("Object position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 2] = nodeValue("Object rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 3] = nodeValue("Object scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 4] = nodeValue("Render position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 0.5 ])
.setDisplay(VALUE_DISPLAY.vector)
.setUnitRef( function() { return inputs[| 0].getValue(); }, VALUE_UNIT.reference);
inputs[| 5] = nodeValue("Render scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 6] = nodeValue("Light direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.rotation);
inputs[| 7] = nodeValue("Light height", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5)
.setDisplay(VALUE_DISPLAY.slider, [-1, 1, 0.01]);
inputs[| 8] = nodeValue("Light intensity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
.setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]);
inputs[| 9] = nodeValue("Light color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white);
inputs[| 10] = nodeValue("Ambient color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_grey);
inputs[| 11] = nodeValue("3D object", self, JUNCTION_CONNECT.input, VALUE_TYPE.d3object, noone)
.setVisible(true, true);
inputs[| 12] = nodeValue("Repeat", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1, "Amount of copies to be generated.");
inputs[| 13] = nodeValue("Repeat position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 0, 0 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 14] = nodeValue("Repeat rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 15] = nodeValue("Repeat scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 16] = nodeValue("Repeat pattern", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_button, [ "Linear", "Circular" ])
.rejectArray();
inputs[| 17] = nodeValue("Axis", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_button, [ "x", "y", "z" ]);
inputs[| 18] = nodeValue("Radius", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1);
inputs[| 19] = nodeValue("Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 360 ])
.setDisplay(VALUE_DISPLAY.rotation_range);
inputs[| 20] = nodeValue("Projection", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_button, [ "Orthographic", "Perspective" ])
.rejectArray();
inputs[| 21] = nodeValue("Field of view", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 60)
.setDisplay(VALUE_DISPLAY.slider, [ 1, 90, 1 ]);
inputs[| 22] = nodeValue("Scale view with dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true)
input_display_list = [ 11,
["Output", false], 0, 22,
["Object transform", true], 1, 2, 3,
["Camera", true], 20, 21, 4, 5,
["Light", true], 6, 7, 8, 9, 10,
["Repeat", false], 12, 16, 13, 14, 15, 17, 18, 19
];
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
outputs[| 1] = nodeValue("3D objects", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3object, function() { return submit_vertex(); });
outputs[| 2] = nodeValue("Normal pass", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
output_display_list = [
0, 2, 1
]
_3d_node_init(1, /*Transform*/ 4, 5, 1, 2, 3);
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
_3d_gizmo(active, _x, _y, _s, _mx, _my, _snx, _sny);
}
static submit_vertex = function() {
var _lpos = inputs[| 1].getValue();
var _lrot = inputs[| 2].getValue();
var _lsca = inputs[| 3].getValue();
var sv = inputs[| 11].getValue();
if(sv == noone) return;
var _samo = inputs[| 12].getValue();
var _patt = inputs[| 16].getValue();
var _srot = inputs[| 14].getValue();
var _ssca = inputs[| 15].getValue();
var _spos = inputs[| 13].getValue();
var _raxs = inputs[| 17].getValue();
var _rrad = inputs[| 18].getValue();
var _rrot = inputs[| 19].getValue();
_3d_local_transform(_lpos, _lrot, _lsca);
for( var i = 0; i < _samo; i++ ) {
if(_patt == 0) {
matrix_stack_push(matrix_build( _spos[0] * i, _spos[1] * i, _spos[2] * i, 0, 0, 0, 1, 1, 1 ));
matrix_stack_push(matrix_build( 0, 0, 0, _srot[0] * i, _srot[1] * i, _srot[2] * i, 1, 1, 1 ));
matrix_stack_push(matrix_build( 0, 0, 0, 0, 0, 0, power(_ssca[0], i), power(_ssca[1], i), power(_ssca[2], i)));
} else if(_patt == 1) {
var angle = _rrot[0] + i * (_rrot[1] - _rrot[0]) / _samo;
var ldx = lengthdir_x(_rrad, angle);
var ldy = lengthdir_y(_rrad, angle);
switch(_raxs) {
case 0 : matrix_stack_push(matrix_build( 0, ldx, ldy, 0, 0, 0, 1, 1, 1 )); break;
case 1 : matrix_stack_push(matrix_build( ldy, 0, ldx, 0, 0, 0, 1, 1, 1 )); break;
case 2 : matrix_stack_push(matrix_build( ldx, ldy, 0, 0, 0, 0, 1, 1, 1 )); break;
}
matrix_stack_push(matrix_build( 0, 0, 0, _srot[0] * i, _srot[1] * i, _srot[2] * i, 1, 1, 1));
matrix_stack_push(matrix_build( 0, 0, 0, 0, 0, 0, power(_ssca[0], i), power(_ssca[1], i), power(_ssca[2], i)));
}
matrix_set(matrix_world, matrix_stack_top());
if(is_array(sv)) {
var index = safe_mod(i, array_length(sv));
var _sv = sv[index];
_sv(index);
} else
sv();
matrix_stack_pop();
matrix_stack_pop();
matrix_stack_pop();
}
_3d_clear_local_transform();
}
static step = function() {
var _proj = inputs[| 20].getValue();
var _patt = inputs[| 16].getValue();
inputs[| 13].setVisible(_patt == 0);
inputs[| 17].setVisible(_patt == 1);
inputs[| 18].setVisible(_patt == 1);
inputs[| 19].setVisible(_patt == 1);
inputs[| 21].setVisible(_proj);
}
function update(frame = PROJECT.animator.current_frame) {
var _dim = inputs[| 0].getValue();
var _lpos = inputs[| 1].getValue();
var _lrot = inputs[| 2].getValue();
var _lsca = inputs[| 3].getValue();
var _pos = inputs[| 4].getValue();
var _sca = inputs[| 5].getValue();
var _ldir = inputs[| 6].getValue();
var _lhgt = inputs[| 7].getValue();
var _lint = inputs[| 8].getValue();
var _lclr = inputs[| 9].getValue();
var _aclr = inputs[| 10].getValue();
var _proj = inputs[| 20].getValue();
var _fov = inputs[| 21].getValue();
var _dimS = inputs[| 22].getValue();
var _patt = inputs[| 16].getValue();
for( var i = 0, n = array_length(output_display_list) - 1; i < n; i++ ) {
var ind = output_display_list[i];
var _outSurf = outputs[| ind].getValue();
var pass = "diff";
switch(ind) {
case 0 : pass = "diff" break;
case 2 : pass = "norm" break;
}
var _transform = new __3d_transform(_pos,, _sca, _lpos, _lrot, _lsca, false, _dimS );
var _light = new __3d_light(_ldir, _lhgt, _lint, _lclr, _aclr);
var _cam = new __3d_camera(_proj, _fov);
_outSurf = _3d_pre_setup(_outSurf, _dim, _transform, _light, _cam, pass);
submit_vertex();
_3d_post_setup();
outputs[| ind].setValue(_outSurf);
}
}
}

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_export",
"name": "__node_3d_repeat",
"isCompatibility": false,
"isDnD": false,
"parent": {

View file

@ -1,4 +1,4 @@
function Node_3D_Transform(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
function __Node_3D_Transform(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "3D Transform";
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF)

View file

@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "__node_3d_transform",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "__legacy",
"path": "folders/nodes/data/3D/__legacy.yy",
},
}

View file

@ -30,9 +30,9 @@ function __3dCamera_object() : __3dObject() constructor {
render_type = pr_linelist;
VB = build();
position.set(-5, -5, 5);
rotation.set(0, 30, 135);
scale.set(1, room_width / room_height, 1);
transform.position.set(-5, -5, 5);
transform.rotation.set(0, 30, 135);
transform.scale.set(1, room_width / room_height, 1);
static submitSel = function(params = {}) {
shader_set(sh_d3d_wireframe);

View file

@ -1,5 +1,6 @@
function __3dGroup() constructor {
objects = [];
transform = new __transform();
static getCenter = function() { #region
var _v = new __vec3();
@ -12,7 +13,10 @@ function __3dGroup() constructor {
_i++;
}
return _i == 0? new __vec3() : _v.multiply(1 / _i);
if(_i) _v = _v.multiply(1 / _i);
_v.add(transform.position);
return _v;
} #endregion
static getBBOX = function() { #region
@ -27,6 +31,9 @@ function __3dGroup() constructor {
if(_c == noone || _b == noone) continue;
_b.first.multiplyVec(transform.scale);
_b.second.multiplyVec(transform.scale);
var _n0 = _b.first.add(_c);
var _n1 = _b.second.add(_c);
@ -43,14 +50,16 @@ function __3dGroup() constructor {
} #endregion
static _submit = function(callback, scene = {}, shader = noone) { #region
transform.submitMatrix();
for( var i = 0, n = array_length(objects); i < n; i++ )
callback(objects[i], scene, shader);
transform.clearMatrix();
} #endregion
static submitShader = function(scene = {}) { _submit(function(_obj, scene) { _obj.submitShader(scene); }, scene); }
static submitSel = function(scene = {}) { _submit(function(_obj, scene) { _obj.submitSel(scene); }, scene); }
static submitUI = function(scene = {}, shader = noone) { _submit(function(_obj, scene, shader) { _obj.submitUI(scene, shader); }, scene, shader); }
static submit = function(scene = {}, shader = noone) { _submit(function(_obj, scene, shader) { _obj.submit(scene, shader); }, scene, shader); }
static submit = function(scene = {}, shader = noone) { _submit(function(_obj, scene, shader) { _obj.submit (scene, shader); }, scene, shader); }
static submitUI = function(scene = {}, shader = noone) { _submit(function(_obj, scene, shader) { _obj.submitUI (scene, shader); }, scene, shader); }
static submitSel = function(scene = {}, shader = noone) { _submit(function(_obj, scene, shader) { _obj.submitSel (scene, shader); }, scene, shader); }
static submitShader = function(scene = {}, shader = noone) { _submit(function(_obj, scene, shader) { _obj.submitShader (scene, shader); }, scene, shader); }
static map = function(callback, scene = {}) { #region
for( var i = 0, n = array_length(objects); i < n; i++ )

View file

@ -48,19 +48,19 @@ function __3dICOSphere(radius = 0.5, level = 2, smt = false) : __3dObject() cons
var b = 1.0 / phi;
icoverts = [
new __vec3Sub( 1, 1, 1)._normalize(),
new __vec3Sub( 0, b, -a)._normalize(),
new __vec3Sub( b, a, 0)._normalize(),
new __vec3Sub(-b, a, 0)._normalize(),
new __vec3Sub( 0, b, a)._normalize(),
new __vec3Sub( 0, -b, a)._normalize(),
new __vec3Sub(-a, 0, b)._normalize(),
new __vec3Sub( 0, -b, -a)._normalize(),
new __vec3Sub( a, 0, -b)._normalize(),
new __vec3Sub( a, 0, b)._normalize(),
new __vec3Sub(-a, 0, -b)._normalize(),
new __vec3Sub( b, -a, 0)._normalize(),
new __vec3Sub(-b, -a, 0)._normalize(),
new __vec3Sub( 1, 1, 1)._normalize()._multiply(radius),
new __vec3Sub( 0, b, -a)._normalize()._multiply(radius),
new __vec3Sub( b, a, 0)._normalize()._multiply(radius),
new __vec3Sub(-b, a, 0)._normalize()._multiply(radius),
new __vec3Sub( 0, b, a)._normalize()._multiply(radius),
new __vec3Sub( 0, -b, a)._normalize()._multiply(radius),
new __vec3Sub(-a, 0, b)._normalize()._multiply(radius),
new __vec3Sub( 0, -b, -a)._normalize()._multiply(radius),
new __vec3Sub( a, 0, -b)._normalize()._multiply(radius),
new __vec3Sub( a, 0, b)._normalize()._multiply(radius),
new __vec3Sub(-a, 0, -b)._normalize()._multiply(radius),
new __vec3Sub( b, -a, 0)._normalize()._multiply(radius),
new __vec3Sub(-b, -a, 0)._normalize()._multiply(radius),
]
array_foreach(icoverts, function(vert) { vert.old = true; })
@ -140,7 +140,11 @@ function __3dICOSphere(radius = 0.5, level = 2, smt = false) : __3dObject() cons
var _v = _vertices[| i];
var _n = _normals[| i];
vertex[0][i] = new __vertex(_v.x, _v.y, _v.z).setNormal(_n.x, _n.y, _n.z);
var _ha = point_direction(0, 0, _v.x, _v.y);
var _va = (point_direction(0, 0, _v.x, _v.z) + 90) % 360;
if(_va > 180) _va = 360 - _va;
vertex[0][i] = new __vertex(_v.x, _v.y, _v.z).setNormal(_n.x, _n.y, _n.z).setUV(_ha / 360, _va / 180);
}
ds_list_destroy(_vertices);

View file

@ -20,7 +20,7 @@ function __3dLight() : __3dObject() constructor {
static getCenter = function() { return noone; }
static getBBOX = function() { return noone; }
static submit = function(params = {}, shader = noone) {}
static submit = function(scene = {}, shader = noone) {}
static setShadow = function(active, shadowMapSize, shadowMapScale = shadow_map_scale) { #region
shadow_active = active;

View file

@ -6,7 +6,8 @@ function __3dLightDirectional() : __3dLight() constructor {
color = c_white;
intensity = 1;
position.set(4, 0, 0);
transform.position.set(4, 0, 0);
transform.scale.set(0.6);
shadow_mapper = sh_d3d_shadow_depth;
@ -19,19 +20,18 @@ function __3dLightDirectional() : __3dLight() constructor {
static submitShader = function(params = {}) { params.addLightDirectional(self); }
static preSubmitVertex = function(params = {}) { #region
var _rot = new __rot3(0, 0, 0).lookAt(position, params.camera.position);
var _rot = new __rot3(0, 0, 0).lookAt(transform.position, params.camera.position);
var rot = matrix_build(0, 0, 0,
_rot.x, _rot.y, _rot.z,
1, 1, 1);
var sca = matrix_build(0, 0, 0,
0, 0, 0,
0.6, 0.6, 0.6);
var pos = matrix_build(position.x, position.y, position.z,
transform.scale.x, transform.scale.y, transform.scale.z);
var pos = matrix_build(transform.position.x, transform.position.y, transform.position.z,
0, 0, 0,
1, 1, 1);
matrix_stack_clear();
matrix_stack_push(pos);
matrix_stack_push(rot);
@ -42,14 +42,17 @@ function __3dLightDirectional() : __3dLight() constructor {
matrix_set(matrix_world, matrix_stack_top());
vertex_submit(VB_UI[0], pr_linestrip, -1);
matrix_stack_clear();
matrix_stack_pop();
matrix_stack_pop();
matrix_stack_pop();
matrix_set(matrix_world, matrix_build_identity());
} #endregion
static shadowProjectBegin = function() { #region
shadow_map = surface_verify(shadow_map, shadow_map_size, shadow_map_size, surface_r32float);
shadow_map_view = matrix_build_lookat(position.x, position.y, position.z, 0, 0, 0, 0, 0, -1);
shadow_map_view = matrix_build_lookat(transform.position.x, transform.position.y, transform.position.z, 0, 0, 0, 0, 0, -1);
shadow_map_proj = matrix_build_projection_ortho(shadow_map_scale, shadow_map_scale, .01, 100);
surface_set_target(shadow_map);

View file

@ -18,7 +18,7 @@ function __3dLightPoint() : __3dLight() constructor {
static submitShader = function(params = {}) { params.addLightPoint(self); }
static preSubmitVertex = function(params = {}) { #region
var _rot = new __rot3(0, 0, 0).lookAt(position, params.camera.position);
var _rot = new __rot3(0, 0, 0).lookAt(transform.position, params.camera.position);
var rot = matrix_build(0, 0, 0,
_rot.x, _rot.y, _rot.z,
@ -29,11 +29,10 @@ function __3dLightPoint() : __3dLight() constructor {
var ran = matrix_build(0, 0, 0,
0, 0, 0,
radius * 2, radius * 2, radius * 2);
var pos = matrix_build(position.x, position.y, position.z,
var pos = matrix_build(transform.position.x, transform.position.y, transform.position.z,
0, 0, 0,
1, 1, 1);
matrix_stack_clear();
matrix_stack_push(pos);
matrix_stack_push(rot);
@ -50,7 +49,9 @@ function __3dLightPoint() : __3dLight() constructor {
vertex_submit(VB_UI[0], pr_linestrip, -1);
matrix_stack_pop();
matrix_stack_clear();
matrix_stack_pop();
matrix_stack_pop();
matrix_set(matrix_world, matrix_build_identity());
} #endregion
@ -80,6 +81,8 @@ function __3dLightPoint() : __3dLight() constructor {
for( var i = 0; i < 6; i++ )
shadow_maps[i] = surface_verify(shadow_maps[i], shadow_map_size, shadow_map_size, surface_r32float);
var position = transform.position;
shadow_map_views = array_create(6);
shadow_map_views[0] = matrix_build_lookat(position.x, position.y, position.z, position.x + 1, position.y, position.z, 0, 0, -1);
shadow_map_views[1] = matrix_build_lookat(position.x, position.y, position.z, position.x - 1, position.y, position.z, 0, 0, -1);

View file

@ -16,16 +16,18 @@ function __d3dMaterial(surface = noone) constructor {
return surface_get_texture(surface);
}
static submitGeometry = function() {
shader_set_i("use_normal", is_surface(normal));
shader_set_surface("normal_map", normal);
shader_set_f("normal_strength", normalStr);
}
static submitShader = function() {
shader_set_f("mat_diffuse", diffuse );
shader_set_f("mat_specular", specular );
shader_set_f("mat_shine", shine );
shader_set_i("mat_metalic", metalic );
shader_set_i("mat_use_normal", is_surface(normal));
shader_set_surface("mat_normal_map", normal);
shader_set_f("mat_normal_strength", normalStr);
shader_set_f("mat_reflective", reflective);
}
}

View file

@ -26,10 +26,8 @@ function __3dObject() constructor {
custom_shader = noone;
position = new __vec3(0);
rotation = new BBMOD_Quaternion();
scale = new __vec3(1);
size = new __vec3(1);
transform = new __transform();
size = new __vec3(1);
materials = [];
matrial_index = [];
@ -50,11 +48,10 @@ function __3dObject() constructor {
static onParameterUpdate = function() {}
static generateNormal = function() { #region
static generateNormal = function(_s = normal_draw_size) { #region
if(render_type != pr_trianglelist) return;
NVB = array_create(object_counts);
var _s = normal_draw_size;
for( var i = 0; i < object_counts; i++ ) {
NVB[i] = vertex_create_buffer();
@ -107,19 +104,17 @@ function __3dObject() constructor {
static preSubmitVertex = function(scene = {}) {}
static postSubmitVertex = function(scene = {}) {}
static getCenter = function() { return new __vec3(position.x, position.y, position.z); }
static getBBOX = function() { return new __bbox3D(size.multiplyVec(scale).multiply(-0.5), size.multiplyVec(scale).multiply(0.5)); }
static getCenter = function() { return new __vec3(transform.position.x, transform.position.y, transform.position.z); }
static getBBOX = function() { return new __bbox3D(size.multiplyVec(transform.scale).multiply(-0.5), size.multiplyVec(transform.scale).multiply(0.5)); }
static submitShader = function(scene = {}, shader = noone) {}
static submit = function(scene = {}, shader = noone) { submitVertex(scene, shader); }
static submitUI = function(scene = {}, shader = noone) { submitVertex(scene, shader); }
static submitSel = function(scene = {}) { #region
static submit = function(scene = {}, shader = noone) { submitVertex(scene, shader); }
static submitUI = function(scene = {}, shader = noone) { submitVertex(scene, shader); }
static submitSel = function(scene = {}, shader = noone) { #region
var _s = variable_clone(scene);
_s.show_normal = false;
submitVertex(_s, sh_d3d_silhouette);
} #endregion
static submitShader = function(scene = {}, shader = noone) {}
static submitVertex = function(scene = {}, shader = noone) { #region
var _shader = sh_d3d_default;
@ -137,61 +132,38 @@ function __3dObject() constructor {
preSubmitVertex(scene);
if(VB != noone) { #region
matrix_stack_clear();
transform.submitMatrix();
if(scene.apply_transform) {
var pos = matrix_build(position.x, position.y, position.z,
0, 0, 0,
1, 1, 1);
var rot = rotation.ToMatrix();
var sca = matrix_build(0, 0, 0,
0, 0, 0,
scale.x, scale.y, scale.z);
matrix_stack_push(pos);
matrix_stack_push(rot);
matrix_stack_push(sca);
matrix_set(matrix_world, matrix_stack_top());
} else {
var pos = matrix_build(position.x - scene.custom_transform.x, position.y - scene.custom_transform.y, position.z - scene.custom_transform.z,
0, 0, 0,
1, 1, 1);
var siz = matrix_build(0, 0, 0,
0, 0, 0,
scale.x, scale.y, scale.z);
var sca = matrix_build(0, 0, 0,
0, 0, 0,
scene.custom_scale.x, scene.custom_scale.y, scene.custom_scale.z);
matrix_stack_push(pos);
matrix_stack_push(siz);
matrix_stack_push(sca);
matrix_set(matrix_world, matrix_stack_top());
}
matrix_set(matrix_world, matrix_stack_top());
} #endregion
#region ++++ Submit & Material ++++
gpu_set_tex_repeat(true);
for( var i = 0, n = array_length(VB); i < n; i++ ) {
if(_shader == sh_d3d_default) {
var _ind = array_safe_get(matrial_index, i, i);
var _mat = array_safe_get(materials, _ind, noone);
var _ind = array_safe_get(matrial_index, i, i);
var _mat = array_safe_get(materials, _ind, noone);
if(_shader == sh_d3d_default) {
if(_mat == noone) {
shader_set_f("mat_diffuse", 1);
shader_set_f("mat_specular", 0);
shader_set_f("mat_shine", 1);
shader_set_i("mat_metalic", 0);
shader_set_i("mat_use_normal", 0);
shader_set_f("mat_reflective", 0);
} else
_mat.submitShader();
shader_set_i("mat_flip", texture_flip);
//print($"{instanceof(self)}: {i}, {_mat}");
var _tex = _mat == noone? -1 : _mat.getTexture();
vertex_submit(VB[i], render_type, _tex);
} else if(_shader == sh_d3d_geometry) {
if(_mat == noone)
shader_set_i("use_normal", 0);
else
_mat.submitGeometry();
vertex_submit(VB[i], render_type, -1);
} else
vertex_submit(VB[i], render_type, -1);
}
@ -201,7 +173,7 @@ function __3dObject() constructor {
shader_reset();
if(scene.show_normal && NVB != noone) { #region
if(scene.show_normal) { #region
if(NVB == noone) generateNormal();
if(NVB != noone) {
shader_set(sh_d3d_wireframe);
@ -211,7 +183,7 @@ function __3dObject() constructor {
}
} #endregion
matrix_stack_clear();
transform.clearMatrix();
matrix_set(matrix_world, matrix_build_identity());
postSubmitVertex(scene);
@ -234,5 +206,5 @@ function __3dObject() constructor {
static onDestroy = function() { }
static toString = function() { return $"[D3D Object\n\t{array_length(vertex)} vertex groups\n\tPosition: {position}\n\tRotation: {rotation}\n\tScale: {scale}]" }
static toString = function() { return $"[D3D Object\n\t{array_length(vertex)} vertex groups\n\tPosition: {transform.position}\n\tRotation: {transform.rotation}\n\tScale: {transform.scale}]" }
}

View file

@ -11,14 +11,15 @@
d3_view_camera.setMatrix();
D3D_GLOBAL_PREVIEW = new __3dScene(d3_view_camera);
D3D_GLOBAL_PREVIEW.apply_transform = false;
D3D_GLOBAL_PREVIEW.apply_transform = true;
D3D_GLOBAL_PREVIEW.defer_normal = false;
var d3_scene_light0 = new __3dLightDirectional();
d3_scene_light0.position.set(-1, -2, 3);
d3_scene_light0.transform.position.set(-1, -2, 3);
d3_scene_light0.color = $AAAAAA;
var d3_scene_light1 = new __3dLightDirectional();
d3_scene_light1.position.set(1, 2, 3);
d3_scene_light1.transform.position.set(1, 2, 3);
d3_scene_light1.color = $FFFFFF;
D3D_GLOBAL_PREVIEW.lightAmbient = $404040;
@ -31,9 +32,8 @@ function __3dScene(camera) constructor {
self.camera = camera;
name = "New scene";
apply_transform = true;
custom_transform = new __vec3();
custom_scale = new __vec3(1, 1, 1);
apply_transform = false;
custom_transform = new __transform();
lightAmbient = c_black;
lightDir_max = 16;
@ -45,9 +45,12 @@ function __3dScene(camera) constructor {
enviroment_map = noone;
gammaCorrection = true;
show_normal = false;
draw_background = false;
geometry_data = [];
defer_normal = true;
show_normal = false;
geometry_data = [ noone, noone, noone ];
ssao_enabled = false;
ssao = noone;
@ -86,10 +89,17 @@ function __3dScene(camera) constructor {
static applyCamera = function() { camera.applyCamera(); }
static resetCamera = function() { camera.resetCamera(); }
static submit = function(object, shader = noone) { object.submit(self, shader); }
static submitUI = function(object, shader = noone) { object.submitUI(self, shader); }
static submitSel = function(object, shader = noone) { object.submitSel(self, shader); }
static submitShader = function(object, shader = noone) { object.submitShader(self, shader); }
static _submit = function(callback, object, shader = noone) {
matrix_stack_clear();
if(apply_transform) custom_transform.submitMatrix();
callback(object, shader);
if(apply_transform) custom_transform.clearMatrix();
}
static submit = function(object, shader = noone) { _submit(function(object, shader) { object.submit (self, shader); }, object, shader) }
static submitUI = function(object, shader = noone) { _submit(function(object, shader) { object.submitUI (self, shader); }, object, shader) }
static submitSel = function(object, shader = noone) { _submit(function(object, shader) { object.submitSel (self, shader); }, object, shader) }
static submitShader = function(object, shader = noone) { _submit(function(object, shader) { object.submitShader (self, shader); }, object, shader) }
static deferPass = function(object, w, h) { #region
geometryPass(object, w, h);
@ -120,13 +130,13 @@ function __3dScene(camera) constructor {
} #endregion
static geometryPass = function(object, w = 512, h = 512) { #region
var world = surface_create(w, h, surface_rgba32float);
var view = surface_create(w, h, surface_rgba32float);
var normal = surface_create(w, h, surface_rgba32float);
geometry_data[0] = surface_verify(geometry_data[0], w, h, surface_rgba32float);
geometry_data[1] = surface_verify(geometry_data[1], w, h, surface_rgba32float);
geometry_data[2] = surface_verify(geometry_data[2], w, h, surface_rgba32float);
surface_set_target_ext(0, world);
surface_set_target_ext(1, view);
surface_set_target_ext(2, normal);
surface_set_target_ext(0, geometry_data[0]);
surface_set_target_ext(1, geometry_data[1]);
surface_set_target_ext(2, geometry_data[2]);
gpu_set_zwriteenable(true);
gpu_set_ztestenable(true);
@ -146,7 +156,15 @@ function __3dScene(camera) constructor {
gpu_set_ztestenable(false);
surface_reset_target();
geometry_data = [ world, view, normal ];
var _normal_blurred = surface_create_size(geometry_data[2], surface_rgba32float);
surface_set_shader(_normal_blurred, sh_d3d_normal_blur);
shader_set_f("radius", 5);
shader_set_dim("dimension", geometry_data[2]);
draw_surface_safe(geometry_data[2]);
surface_reset_shader();
surface_free(geometry_data[2]);
geometry_data[2] = _normal_blurred;
} #endregion
static ssaoPass = function() { #region
@ -219,11 +237,19 @@ function __3dScene(camera) constructor {
shader_set_f("light_pnt_shadow_bias", lightPnt_shadowBias);
} #endregion
if(defer_normal && array_length(geometry_data) > 2) {
shader_set_i("mat_defer_normal", 1);
shader_set_surface("mat_normal_map", geometry_data[2]);
} else
shader_set_i("mat_defer_normal", 0);
#region ---- camera ----
shader_set_f("cameraPosition", camera.position.toArray());
shader_set_i("gammaCorrection", gammaCorrection);
shader_set_f("planeNear", camera.view_near);
shader_set_f("planeFar", camera.view_far );
shader_set_f("viewProjMat", camera.getCombinedMatrix() );
#endregion
shader_reset();
} #endregion
@ -234,7 +260,7 @@ function __3dScene(camera) constructor {
return self;
}
array_append(lightDir_direction, [ light.position.x, light.position.y, light.position.z ]);
array_append(lightDir_direction, [ light.transform.position.x, light.transform.position.y, light.transform.position.z ]);
array_append(lightDir_color, colToVec4(light.color));
array_push(lightDir_intensity, light.intensity);
@ -261,7 +287,7 @@ function __3dScene(camera) constructor {
return self;
}
array_append(lightPnt_position, [ light.position.x, light.position.y, light.position.z ]);
array_append(lightPnt_position, [ light.transform.position.x, light.transform.position.y, light.transform.position.z ]);
array_append(lightPnt_color, colToVec4(light.color));
array_push(lightPnt_intensity, light.intensity);

View file

@ -0,0 +1,29 @@
function __transform() constructor {
parent = noone;
position = new __vec3(0);
rotation = new BBMOD_Quaternion();
scale = new __vec3(1);
static submitMatrix = function() {
if(parent) parent.submitMatrix();
var pos = matrix_build(position.x, position.y, position.z,
0, 0, 0,
1, 1, 1);
var rot = rotation.ToMatrix();
var sca = matrix_build(0, 0, 0,
0, 0, 0,
scale.x, scale.y, scale.z);
matrix_stack_push(pos);
matrix_stack_push(rot);
matrix_stack_push(sca);
}
static clearMatrix = function() {
matrix_stack_pop();
matrix_stack_pop();
matrix_stack_pop();
}
}

View file

@ -1,11 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_render",
"name": "d3d_transformation",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "__legacy",
"path": "folders/nodes/data/3D/__legacy.yy",
"name": "util",
"path": "folders/functions/3d/util.yy",
},
}

View file

@ -210,7 +210,7 @@ function Node_3D_Camera(_x, _y, _group = noone) : Node_3D_Object(_x, _y, _group)
if(!_for.isZero())
camera.rotation = new BBMOD_Quaternion().FromLookRotation(_for, camera.up).Mul(_qi1).Mul(_qi2);
lookat.position.set(_look);
lookat.transform.position.set(_look);
lookLine = new __3dGizmoLineDashed(camera.position, camera.focus, 0.25, c_gray, 1);
break;
case 2 :
@ -224,19 +224,19 @@ function Node_3D_Camera(_x, _y, _group = noone) : Node_3D_Object(_x, _y, _group)
if(!_for.isZero())
camera.rotation = new BBMOD_Quaternion().FromLookRotation(_for, camera.up.multiply(-1)).Mul(_qi1).Mul(_qi3);
lookat.position.set(_look);
lookat.transform.position.set(_look);
lookLine = new __3dGizmoLineDashed(camera.position, camera.focus, 0.25, c_gray, 1);
var _camRad = camera.position.subtract(camera.focus);
var _rad = point_distance(0, 0, _camRad.x, _camRad.y) * 2;
lookRad.scale.set(_rad, _rad, 1);
lookRad.position.set(new __vec3(camera.focus.x, camera.focus.y, camera.position.z));
lookRad.transform.scale.set(_rad, _rad, 1);
lookRad.transform.position.set(new __vec3(camera.focus.x, camera.focus.y, camera.position.z));
break;
} #endregion
object.position.set(camera.position);
object.rotation = camera.rotation.Clone();
object.scale.set(1, _dim[0] / _dim[1], 1);
object.transform.position.set(camera.position);
object.transform.rotation = camera.rotation.Clone();
object.transform.scale.set(1, _dim[0] / _dim[1], 1);
if(_scne == noone) return;
@ -256,6 +256,8 @@ function Node_3D_Camera(_x, _y, _group = noone) : Node_3D_Object(_x, _y, _group)
scene.ssao_bias = _aoBi;
scene.ssao_strength = _aoSr;
scene.draw_background = _dbg;
var _bgSurf = _dbg? scene.renderBackground(_dim[0], _dim[1]) : noone;
scene.deferPass(_scne, _dim[0], _dim[1]);

View file

@ -1,11 +0,0 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_extrude",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "__legacy",
"path": "folders/nodes/data/3D/__legacy.yy",
},
}

View file

@ -37,8 +37,8 @@ function Node_3D_Light_Directional(_x, _y, _group = noone) : Node_3D_Light(_x, _
object.setShadow(_shadow_active, _shadow_map_size, _shadow_map_scal);
object.shadow_bias = _shadow_bias;
var _rot = new __rot3().lookAt(object.position, new __vec3());
object.rotation.FromEuler(_rot.x, _rot.y, _rot.z);
var _rot = new __rot3().lookAt(object.transform.position, new __vec3());
object.transform.rotation.FromEuler(_rot.x, _rot.y, _rot.z);
return object;
}

View file

@ -1,11 +0,0 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_prim_sphere",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "primitive",
"path": "folders/nodes/data/3D/__legacy/primitive.yy",
},
}

View file

@ -1,207 +1,102 @@
function Node_3D_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
function Node_3D_Repeat(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constructor {
name = "3D Repeat";
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF)
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 1] = nodeValue("Object position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 2] = nodeValue("Object rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 3] = nodeValue("Object scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 4] = nodeValue("Render position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 0.5 ])
.setDisplay(VALUE_DISPLAY.vector)
.setUnitRef( function() { return inputs[| 0].getValue(); }, VALUE_UNIT.reference);
inputs[| 5] = nodeValue("Render scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 6] = nodeValue("Light direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.rotation);
inputs[| 7] = nodeValue("Light height", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5)
.setDisplay(VALUE_DISPLAY.slider, [-1, 1, 0.01]);
inputs[| 8] = nodeValue("Light intensity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
.setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]);
inputs[| 9] = nodeValue("Light color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white);
inputs[| 10] = nodeValue("Ambient color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_grey);
inputs[| 11] = nodeValue("3D object", self, JUNCTION_CONNECT.input, VALUE_TYPE.d3object, noone)
inputs[| 0] = nodeValue("Objects", self, JUNCTION_CONNECT.input, VALUE_TYPE.d3Mesh, noone )
.setArrayDepth(1)
.setVisible(true, true);
inputs[| 12] = nodeValue("Repeat", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1, "Amount of copies to be generated.");
inputs[| 13] = nodeValue("Repeat position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 0, 0 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 14] = nodeValue("Repeat rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 15] = nodeValue("Repeat scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ])
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 16] = nodeValue("Repeat pattern", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_button, [ "Linear", "Circular" ])
inputs[| 1] = nodeValue("Object Mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
.setDisplay(VALUE_DISPLAY.enum_button, [ "Duplicate", "Array" ] )
.rejectArray();
inputs[| 17] = nodeValue("Axis", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_button, [ "x", "y", "z" ]);
inputs[| 2] = nodeValue("Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1 );
inputs[| 18] = nodeValue("Radius", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1);
inputs[| 3] = nodeValue("Starting Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ] )
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 19] = nodeValue("Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 360 ])
.setDisplay(VALUE_DISPLAY.rotation_range);
inputs[| 4] = nodeValue("Starting Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 1 ] )
.setDisplay(VALUE_DISPLAY.d3quarternion);
inputs[| 20] = nodeValue("Projection", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_button, [ "Orthographic", "Perspective" ])
.rejectArray();
inputs[| 5] = nodeValue("Starting Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ] )
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 21] = nodeValue("Field of view", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 60)
.setDisplay(VALUE_DISPLAY.slider, [ 1, 90, 1 ]);
inputs[| 6] = nodeValue("Shift Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ] )
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 22] = nodeValue("Scale view with dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true)
inputs[| 7] = nodeValue("Shift Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 1 ] )
.setDisplay(VALUE_DISPLAY.d3quarternion);
input_display_list = [ 11,
["Output", false], 0, 22,
["Object transform", true], 1, 2, 3,
["Camera", true], 20, 21, 4, 5,
["Light", true], 6, 7, 8, 9, 10,
["Repeat", false], 12, 16, 13, 14, 15, 17, 18, 19
];
inputs[| 8] = nodeValue("Shift Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ] )
.setDisplay(VALUE_DISPLAY.vector);
outputs[| 0] = nodeValue("Scene", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3Scene, noone);
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
outputs[| 1] = nodeValue("3D objects", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3object, function() { return submit_vertex(); });
outputs[| 2] = nodeValue("Normal pass", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
output_display_list = [
0, 2, 1
input_display_list = [
["Objects", false], 0, 3, 4, 5,
["Repeat", false], 1, 2, 6, 7, 8,
]
_3d_node_init(1, /*Transform*/ 4, 5, 1, 2, 3);
static step = function() { #region
var _mode = array_safe_get(current_data, 1, 0);
//var _tran = array_safe_get(current_data, 9, 0);
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
_3d_gizmo(active, _x, _y, _s, _mx, _my, _snx, _sny);
}
inputs[| 0].setArrayDepth(_mode == 1);
static submit_vertex = function() {
var _lpos = inputs[| 1].getValue();
var _lrot = inputs[| 2].getValue();
var _lsca = inputs[| 3].getValue();
inputs[| 2].setVisible(_mode == 0);
var sv = inputs[| 11].getValue();
if(sv == noone) return;
//inputs[| 6].setVisible(_tran == 0);
//inputs[| 7].setVisible(_tran == 0);
//inputs[| 8].setVisible(_tran == 0);
} #endregion
var _samo = inputs[| 12].getValue();
var _patt = inputs[| 16].getValue();
static processData = function(_output, _data, _output_index, _array_index = 0) { #region
var _object = _data[0];
var _mode = _data[1];
var _Spos = _data[3];
var _Srot = _data[4];
var _Ssca = _data[5];
var _Rpos = _data[6];
var _Rrot = _data[7];
var _Rsca = _data[8];
var _srot = inputs[| 14].getValue();
var _ssca = inputs[| 15].getValue();
if(_mode == 1 && !is_array(_object)) return noone;
var _amo = _mode == 1? array_length(_object) : _data[2];
var _spos = inputs[| 13].getValue();
var _scene = new __3dGroup();
var _raxs = inputs[| 17].getValue();
var _rrad = inputs[| 18].getValue();
var _rrot = inputs[| 19].getValue();
for( var i = 0; i < _amo; i++ ) {
var _obj = _mode == 1? _object[i] : _object;
if(_obj == noone) continue;
_3d_local_transform(_lpos, _lrot, _lsca);
for( var i = 0; i < _samo; i++ ) {
if(_patt == 0) {
matrix_stack_push(matrix_build( _spos[0] * i, _spos[1] * i, _spos[2] * i, 0, 0, 0, 1, 1, 1 ));
matrix_stack_push(matrix_build( 0, 0, 0, _srot[0] * i, _srot[1] * i, _srot[2] * i, 1, 1, 1 ));
matrix_stack_push(matrix_build( 0, 0, 0, 0, 0, 0, power(_ssca[0], i), power(_ssca[1], i), power(_ssca[2], i)));
} else if(_patt == 1) {
var angle = _rrot[0] + i * (_rrot[1] - _rrot[0]) / _samo;
var ldx = lengthdir_x(_rrad, angle);
var ldy = lengthdir_y(_rrad, angle);
var _subScene = new __3dGroup();
switch(_raxs) {
case 0 : matrix_stack_push(matrix_build( 0, ldx, ldy, 0, 0, 0, 1, 1, 1 )); break;
case 1 : matrix_stack_push(matrix_build( ldy, 0, ldx, 0, 0, 0, 1, 1, 1 )); break;
case 2 : matrix_stack_push(matrix_build( ldx, ldy, 0, 0, 0, 0, 1, 1, 1 )); break;
}
var _sPos = [ _Spos[0] + _Rpos[0] * i,
_Spos[1] + _Rpos[1] * i,
_Spos[2] + _Rpos[2] * i ];
var _sSca = [ _Ssca[0] + _Rsca[0] * i,
_Ssca[1] + _Rsca[1] * i,
_Ssca[2] + _Rsca[2] * i ];
matrix_stack_push(matrix_build( 0, 0, 0, _srot[0] * i, _srot[1] * i, _srot[2] * i, 1, 1, 1));
matrix_stack_push(matrix_build( 0, 0, 0, 0, 0, 0, power(_ssca[0], i), power(_ssca[1], i), power(_ssca[2], i)));
}
var _sRot = new BBMOD_Quaternion(_Srot[0], _Srot[1], _Srot[2], _Srot[3]);
var _rRot = new BBMOD_Quaternion(_Rrot[0], _Rrot[1], _Rrot[2], _Rrot[3]);
matrix_set(matrix_world, matrix_stack_top());
var _sRotE = _sRot.ToEuler();
var _rRotE = _rRot.ToEuler();
if(is_array(sv)) {
var index = safe_mod(i, array_length(sv));
var _sv = sv[index];
_sv(index);
} else
sv();
var _fRotE = [ _sRotE.x + _rRotE.x * i,
_sRotE.y + _rRotE.y * i,
_sRotE.z + _rRotE.z * i ];
matrix_stack_pop();
matrix_stack_pop();
matrix_stack_pop();
}
_3d_clear_local_transform();
}
var _fRot = new BBMOD_Quaternion().FromEuler(_fRotE[0], _fRotE[1], _fRotE[2]);
static step = function() {
var _proj = inputs[| 20].getValue();
var _patt = inputs[| 16].getValue();
_subScene.transform.position.set(_sPos);
_subScene.transform.rotation.set(_fRot.X, _fRot.Y, _fRot.Z, _fRot.W);
_subScene.transform.scale.set(_sSca);
inputs[| 13].setVisible(_patt == 0);
inputs[| 17].setVisible(_patt == 1);
inputs[| 18].setVisible(_patt == 1);
inputs[| 19].setVisible(_patt == 1);
inputs[| 21].setVisible(_proj);
}
function update(frame = PROJECT.animator.current_frame) {
var _dim = inputs[| 0].getValue();
var _lpos = inputs[| 1].getValue();
var _lrot = inputs[| 2].getValue();
var _lsca = inputs[| 3].getValue();
var _pos = inputs[| 4].getValue();
var _sca = inputs[| 5].getValue();
var _ldir = inputs[| 6].getValue();
var _lhgt = inputs[| 7].getValue();
var _lint = inputs[| 8].getValue();
var _lclr = inputs[| 9].getValue();
var _aclr = inputs[| 10].getValue();
var _proj = inputs[| 20].getValue();
var _fov = inputs[| 21].getValue();
var _dimS = inputs[| 22].getValue();
var _patt = inputs[| 16].getValue();
for( var i = 0, n = array_length(output_display_list) - 1; i < n; i++ ) {
var ind = output_display_list[i];
var _outSurf = outputs[| ind].getValue();
var pass = "diff";
switch(ind) {
case 0 : pass = "diff" break;
case 2 : pass = "norm" break;
}
var _transform = new __3d_transform(_pos,, _sca, _lpos, _lrot, _lsca, false, _dimS );
var _light = new __3d_light(_ldir, _lhgt, _lint, _lclr, _aclr);
var _cam = new __3d_camera(_proj, _fov);
_outSurf = _3d_pre_setup(_outSurf, _dim, _transform, _light, _cam, pass);
submit_vertex();
_3d_post_setup();
outputs[| ind].setValue(_outSurf);
array_push(_subScene.objects, _obj);
array_push(_scene.objects, _subScene);
}
}
return _scene;
} #endregion
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "__legacy",
"path": "folders/nodes/data/3D/__legacy.yy",
"name": "d3d compose",
"path": "folders/nodes/data/3D/d3d compose.yy",
},
}

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "variable",
"path": "folders/nodes/data/variable.yy",
},
"resourceVersion": "1.0",
"name": "node_counter",
"tags": [],
"resourceType": "GMScript",
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "3D",
"path": "folders/nodes/data/3D.yy",
"name": "d3d compose",
"path": "folders/nodes/data/3D/d3d compose.yy",
},
}

View file

@ -1,11 +0,0 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_transform",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "__legacy",
"path": "folders/nodes/data/3D/__legacy.yy",
},
}

View file

@ -109,6 +109,14 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
return _f.lerpTo(_t, _lrp);
}
if(prop.display_type == VALUE_DISPLAY.d3quarternion) {
var _qf = new BBMOD_Quaternion(_f[0], _f[1], _f[2], _f[3]);
var _qt = new BBMOD_Quaternion(_t[0], _t[1], _t[2], _t[3]);
var _ql = _qf.Slerp(_qt, _lrp);
return _ql.ToArray();
}
if(prop.type == VALUE_TYPE.color) {
if(is_array(_f) && is_array(_t)) {
var _len = ceil(lerp(array_length(_f), array_length(_t), _lrp));

View file

@ -367,10 +367,13 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor {
addNodeObject(d3d, "Sprite Stack", s_node_stack, "Node_Sprite_Stack", [1, Node_Sprite_Stack],, "Create sprite stack either from repeating a single image or stacking different images using array.");
ds_list_add(d3d, "3D");
addNodeObject(d3d, "3D Scene", s_node_3d_scene, "Node_3D_Scene", [1, Node_3D_Scene]);
addNodeObject(d3d, "3D Camera", s_node_3d_camera, "Node_3D_Camera", [1, Node_3D_Camera]);
addNodeObject(d3d, "3D Material", s_node_3d_meterial, "Node_3D_Material", [1, Node_3D_Material]);
ds_list_add(d3d, "Compose");
addNodeObject(d3d, "3D Scene", s_node_3d_scene, "Node_3D_Scene", [1, Node_3D_Scene]);
addNodeObject(d3d, "3D Repeat", s_node_3d_scene, "Node_3D_Repeat", [1, Node_3D_Repeat]);
ds_list_add(d3d, "Mesh");
addNodeObject(d3d, "3D Object", s_node_3d_obj, "Node_3D_Mesh_Obj", [0, Node_create_3D_Obj],, "Load .obj file from your computer as a 3D object.");
addNodeObject(d3d, "3D Plane", s_node_3d_plane, "Node_3D_Mesh_Plane", [1, Node_3D_Mesh_Plane],, "Put 2D image on a plane in 3D space.");
@ -386,19 +389,19 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor {
addNodeObject(d3d, "Point Light", s_node_3d_light_point, "Node_3D_Light_Point", [1, Node_3D_Light_Point]);
ds_list_add(d3d, "Legacy"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////
addNodeObject(d3d, "3D Plane", s_node_3d_plane, "Node_3D_Plane", [1, Node_3D_Plane],, "Put 2D image on a plane in 3D space.").isDeprecated();
addNodeObject(d3d, "3D Cube", s_node_3d_cube, "Node_3D_Cube", [1, Node_3D_Cube]).isDeprecated();
addNodeObject(d3d, "3D Cylinder", s_node_3d_cylinder, "Node_3D_Cylinder", [1, Node_3D_Cylinder]).isDeprecated();
addNodeObject(d3d, "3D Sphere", s_node_3d_sphere, "Node_3D_Sphere", [1, Node_3D_Sphere]).setVersion(1090).isDeprecated();
addNodeObject(d3d, "3D Cone", s_node_3d_cone, "Node_3D_Cone", [1, Node_3D_Cone]).setVersion(1090).isDeprecated();
addNodeObject(d3d, "3D Extrude", s_node_3d_extrude, "Node_3D_Extrude", [1, Node_3D_Extrude],, "Extrude 2D image into 3D object.").isDeprecated();
addNodeObject(d3d, "3D Plane", s_node_3d_plane, "__Node_3D_Plane", [1, __Node_3D_Plane],, "Put 2D image on a plane in 3D space.").isDeprecated();
addNodeObject(d3d, "3D Cube", s_node_3d_cube, "__Node_3D_Cube", [1, __Node_3D_Cube]).isDeprecated();
addNodeObject(d3d, "3D Cylinder", s_node_3d_cylinder, "__Node_3D_Cylinder", [1, __Node_3D_Cylinder]).isDeprecated();
addNodeObject(d3d, "3D Sphere", s_node_3d_sphere, "__Node_3D_Sphere", [1, __Node_3D_Sphere]).setVersion(1090).isDeprecated();
addNodeObject(d3d, "3D Cone", s_node_3d_cone, "__Node_3D_Cone", [1, __Node_3D_Cone]).setVersion(1090).isDeprecated();
addNodeObject(d3d, "3D Extrude", s_node_3d_extrude, "__Node_3D_Extrude", [1, __Node_3D_Extrude],, "Extrude 2D image into 3D object.").isDeprecated();
addNodeObject(d3d, "3D Transform", s_node_3d_transform, "Node_3D_Transform", [1, Node_3D_Transform]).setVersion(1080).isDeprecated();
addNodeObject(d3d, "3D Combine", s_node_3d_obj_combine, "Node_3D_Combine", [1, Node_3D_Combine],, "Combine multiple 3D object to a single scene,").setVersion(1080).isDeprecated();
addNodeObject(d3d, "3D Repeat", s_node_3d_array, "Node_3D_Repeat", [1, Node_3D_Repeat], ["3d array"], "Repeat 3D object multiple times.").setVersion(1080).isDeprecated();
addNodeObject(d3d, "3D Displace", s_node_3d_displace, "Node_3D_Displace", [1, Node_3D_Displace]).setVersion(1143).isDeprecated();
addNodeObject(d3d, "3D Transform", s_node_3d_transform, "__Node_3D_Transform", [1, __Node_3D_Transform]).setVersion(1080).isDeprecated();
addNodeObject(d3d, "3D Combine", s_node_3d_obj_combine, "__Node_3D_Combine", [1, __Node_3D_Combine],, "Combine multiple 3D object to a single scene,").setVersion(1080).isDeprecated();
addNodeObject(d3d, "3D Repeat", s_node_3d_array, "__Node_3D_Repeat", [1, __Node_3D_Repeat], ["3d array"], "Repeat 3D object multiple times.").setVersion(1080).isDeprecated();
addNodeObject(d3d, "3D Displace", s_node_3d_displace, "__Node_3D_Displace", [1, __Node_3D_Displace]).setVersion(1143).isDeprecated();
addNodeObject(d3d, "3D Export", s_node_3d_export, "Node_3D_Export", [1, Node_3D_Export]).setVersion(1143).isDeprecated();
addNodeObject(d3d, "3D Export", s_node_3d_export, "__Node_3D_Export", [1, __Node_3D_Export]).setVersion(1143).isDeprecated();
#endregion
var generator = ds_list_create(); #region

View file

@ -100,8 +100,9 @@ enum VALUE_DISPLAY {
path_load,
path_font,
//vertex
//d3d
d3vertex,
d3quarternion,
}
enum KEYFRAME_END {
@ -250,6 +251,7 @@ function typeArray(_type) { #region
case VALUE_DISPLAY.text_array :
case VALUE_DISPLAY.d3vertex :
case VALUE_DISPLAY.d3quarternion :
return 1;
}
return 0;
@ -666,6 +668,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
extract_node = "Node_Number";
break; #endregion
case VALUE_DISPLAY.d3quarternion :
case VALUE_DISPLAY.vector : #region
var val = animator.getValue();
if(array_length(val) <= 4) {

View file

@ -36,7 +36,16 @@ function readObj(path) {
ds_list_add(vt, [ _u, _v ]);
break;
case "vn" :
ds_list_add(vn, [ toNumber(sep[1]), toNumber(sep[2]), toNumber(sep[3]) ]);
var _nx = toNumber(sep[1]);
var _ny = toNumber(sep[2]);
var _nz = toNumber(sep[3]);
var _di = sqrt(_nx * _nx + _ny * _ny + _nz * _nz);
_nx /= _di;
_ny /= _di;
_nz /= _di;
ds_list_add(vn, [ _nx, _ny, _nz ]);
break;
case "f" :
var _len = array_length(sep);

View file

@ -131,13 +131,13 @@ function Panel_Preview() : PanelContent() constructor {
d3_scene_light_enabled = true;
d3_scene_light0 = new __3dLightDirectional();
d3_scene_light0.position.set(-1, -2, 3);
d3_scene_light0.transform.position.set(-1, -2, 3);
d3_scene_light0.color = $FFFFFF;
d3_scene_light0.shadow_active = false;
d3_scene_light0.shadow_map_scale = 4;
d3_scene_light1 = new __3dLightDirectional();
d3_scene_light1.position.set(1, 2, -3);
d3_scene_light1.transform.position.set(1, 2, -3);
d3_scene_light1.color = $505050;
#endregion
@ -834,7 +834,7 @@ function Panel_Preview() : PanelContent() constructor {
d3_surface_outline = surface_verify(d3_surface_outline, w, h);
#region defer
if(_prev_node.is_3D && d3_scene_preview != d3_scene) {
if(_prev_node.is_3D) {
var _prev_obj = _prev_node.getPreviewObject();
d3_scene_preview.deferPass(_prev_obj, w, h);
}
@ -904,12 +904,16 @@ function Panel_Preview() : PanelContent() constructor {
switch(d3_preview_channel) {
case 0 :
draw_surface_safe(d3_surface_bg);
if(d3_scene_preview.draw_background)
draw_surface_safe(d3_surface_bg);
draw_surface_safe(d3_surface);
BLEND_MULTIPLY
draw_surface_safe(d3_scene_preview.ssao);
BLEND_NORMAL
//draw_clear(c_white);
//draw_surface_safe(d3_scene_preview.geometry_data[2]);
break;
case 1 : draw_surface_safe(d3_surface_normal); break;
case 2 : draw_surface_safe(d3_surface_depth); break;
@ -932,7 +936,7 @@ function Panel_Preview() : PanelContent() constructor {
gpu_set_ztestenable(false);
for( var i = 0, n = array_length(_inspect_obj); i < n; i++ ) {
if(_inspect_obj[i] == noone) continue;
_inspect_obj[i].submitSel(d3_scene);
_inspect_obj[i].submitSel(d3_scene_preview);
}
surface_reset_target();

View file

@ -27,8 +27,6 @@ varying float v_cameraDistance;
uniform float light_dir_shadow_bias[LIGHT_DIR_LIMIT];
uniform sampler2D light_dir_shadowmap_0;
uniform sampler2D light_dir_shadowmap_1;
uniform sampler2D light_dir_shadowmap_2;
uniform sampler2D light_dir_shadowmap_3;
#define LIGHT_PNT_LIMIT 16
uniform int light_pnt_count;
@ -43,8 +41,6 @@ varying float v_cameraDistance;
uniform float light_pnt_shadow_bias[LIGHT_DIR_LIMIT];
uniform sampler2D light_pnt_shadowmap_0;
uniform sampler2D light_pnt_shadowmap_1;
uniform sampler2D light_pnt_shadowmap_2;
uniform sampler2D light_pnt_shadowmap_3;
#endregion
#region ---- material ----
@ -56,7 +52,7 @@ varying float v_cameraDistance;
uniform int mat_metalic;
uniform float mat_reflective;
uniform int mat_use_normal;
uniform int mat_defer_normal;
uniform float mat_normal_strength;
uniform sampler2D mat_normal_map;
@ -70,6 +66,8 @@ varying float v_cameraDistance;
uniform int env_use_mapping;
uniform sampler2D env_map;
uniform vec2 env_map_dimension;
uniform mat4 viewProjMat;
#endregion
#region ++++ matrix ++++
@ -95,8 +93,6 @@ varying float v_cameraDistance;
float sampleDirShadowMap(int index, vec2 position) {
if(index == 0) return texture2D(light_dir_shadowmap_0, position).r;
if(index == 1) return texture2D(light_dir_shadowmap_1, position).r;
if(index == 2) return texture2D(light_dir_shadowmap_2, position).r;
if(index == 3) return texture2D(light_dir_shadowmap_3, position).r;
return 0.;
}
@ -109,8 +105,6 @@ varying float v_cameraDistance;
if(index == 0) return texture2D(light_pnt_shadowmap_0, position)[side];
if(index == 1) return texture2D(light_pnt_shadowmap_1, position)[side];
if(index == 2) return texture2D(light_pnt_shadowmap_2, position)[side];
if(index == 3) return texture2D(light_pnt_shadowmap_3, position)[side];
return 0.;
}
#endregion
@ -155,14 +149,17 @@ void main() {
vec4 final_color = mat_baseColor;
vec3 viewDirection = normalize(cameraPosition - v_worldPosition.xyz);
vec4 viewProjPos = viewProjMat * vec4(v_worldPosition.xyz, 1.);
viewProjPos /= viewProjPos.w;
viewProjPos = viewProjPos * 0.5 + 0.5;
#region ++++ normal ++++
vec3 _norm = v_vNormal;
if(mat_use_normal == 1) {
vec3 _sampled_normal = texture2D(mat_normal_map, uv_coord).rgb;
_norm += (_sampled_normal - 0.5) * 2. * mat_normal_strength;
}
vec3 normal = normalize(_norm);
if(mat_defer_normal == 1)
_norm = texture2D(mat_normal_map, viewProjPos.xy).rgb;
vec3 normal = normalize(_norm);
#endregion
#region ++++ environment ++++

View file

@ -21,7 +21,8 @@ void main() {
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
v_worldPosition = gm_Matrices[MATRIX_WORLD] * object_space_pos;
v_viewPosition = (gm_Matrices[MATRIX_WORLD_VIEW] * object_space_pos).xyz;
v_viewPosition = gl_Position.xyz;
v_vColour = in_Colour;
v_vTexcoord = in_TextureCoord;

View file

@ -1,9 +1,19 @@
varying vec2 v_vTexcoord;
varying vec4 v_worldPosition;
varying vec3 v_viewPosition;
varying vec3 v_vNormal;
uniform int use_normal;
uniform float normal_strength;
uniform sampler2D normal_map;
void main() {
gl_FragData[0] = vec4(v_worldPosition.xyz, 1.);
gl_FragData[1] = vec4(v_viewPosition, 1.);
gl_FragData[2] = vec4(v_vNormal, 1.);
vec3 normal = v_vNormal;
if(use_normal == 1)
normal += (texture2D(normal_map, v_vTexcoord).rgb * 2. - 1.) * normal_strength;
gl_FragData[2] = vec4(normalize(normal), 1.);
}

View file

@ -3,6 +3,7 @@ attribute vec3 in_Normal;
attribute vec4 in_Colour;
attribute vec2 in_TextureCoord;
varying vec2 v_vTexcoord;
varying vec4 v_worldPosition;
varying vec3 v_viewPosition;
varying vec3 v_vNormal;
@ -20,6 +21,8 @@ void main() {
//viewPos.z = (viewPos.z - planeNear - planeFar) / (planeFar - planeNear);
v_viewPosition = viewPos.xyz;
v_vTexcoord = in_TextureCoord;
vec3 worldNormal = normalize(gm_Matrices[MATRIX_WORLD] * vec4(in_Normal, 0.)).xyz;
v_vNormal = worldNormal;
}

View file

@ -0,0 +1,39 @@
//
// Simple passthrough fragment shader
//
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform vec2 dimension;
uniform float radius;
void main() {
vec3 current = texture2D( gm_BaseTexture, v_vTexcoord ).rgb;
if(length(current) == 0.) {
gl_FragColor = vec4(0.);
return;
}
vec2 tx = 1. / dimension;
vec3 sampled = vec3(0.);
float weight = 0.;
for(float i = -radius; i <= radius; i++)
for(float j = -radius; j <= radius; j++) {
vec2 pos = v_vTexcoord + vec2(i, j) * tx;
if(pos.x < 0. || pos.y < 0. || pos.x > 1. || pos.y > 1.)
continue;
float str = 1. - length(vec2(i, j)) / radius;
if(str < 0.) continue;
vec3 _sample = texture2D( gm_BaseTexture, pos ).rgb;
if(length(_sample) == 0.)
continue;
sampled += _sample * str;
weight += str;
}
gl_FragColor = vec4(sampled / weight, 1.);
}

View 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;
}

View file

@ -0,0 +1,10 @@
{
"resourceType": "GMShader",
"resourceVersion": "1.0",
"name": "sh_d3d_normal_blur",
"parent": {
"name": "3d",
"path": "folders/shader/3d.yy",
},
"type": 1,
}