diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 582cf359d..2af2f5176 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -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",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 7b8e74546..ec7f040b9 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -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",},}, diff --git a/scripts/_3D/_3D.gml b/scripts/__3D/__3D.gml similarity index 100% rename from scripts/_3D/_3D.gml rename to scripts/__3D/__3D.gml diff --git a/scripts/_3D/_3D.yy b/scripts/__3D/__3D.yy similarity index 91% rename from scripts/_3D/_3D.yy rename to scripts/__3D/__3D.yy index 749b6d39b..4fe894ee5 100644 --- a/scripts/_3D/_3D.yy +++ b/scripts/__3D/__3D.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "_3D", + "name": "__3D", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/__node_3d/__node_3d.gml b/scripts/__node_3d/__node_3d.gml index ba4e9d779..51e1fea9a 100644 --- a/scripts/__node_3d/__node_3d.gml +++ b/scripts/__node_3d/__node_3d.gml @@ -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(); diff --git a/scripts/node_3d_combine/node_3d_combine.gml b/scripts/__node_3d_combine/__node_3d_combine.gml similarity index 98% rename from scripts/node_3d_combine/node_3d_combine.gml rename to scripts/__node_3d_combine/__node_3d_combine.gml index 2979a4794..ef5c5582e 100644 --- a/scripts/node_3d_combine/node_3d_combine.gml +++ b/scripts/__node_3d_combine/__node_3d_combine.gml @@ -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) diff --git a/scripts/__node_3d_combine/__node_3d_combine.yy b/scripts/__node_3d_combine/__node_3d_combine.yy new file mode 100644 index 000000000..15df4bb0c --- /dev/null +++ b/scripts/__node_3d_combine/__node_3d_combine.yy @@ -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", + }, +} \ No newline at end of file diff --git a/scripts/node_3d_combine/node_3d_prim_cube.yy b/scripts/__node_3d_combine/node_3d_prim_cube.yy similarity index 100% rename from scripts/node_3d_combine/node_3d_prim_cube.yy rename to scripts/__node_3d_combine/node_3d_prim_cube.yy diff --git a/scripts/node_3d_displace/node_3d_displace.gml b/scripts/__node_3d_displace/__node_3d_displace.gml similarity index 98% rename from scripts/node_3d_displace/node_3d_displace.gml rename to scripts/__node_3d_displace/__node_3d_displace.gml index c901d3536..18c75e097 100644 --- a/scripts/node_3d_displace/node_3d_displace.gml +++ b/scripts/__node_3d_displace/__node_3d_displace.gml @@ -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) diff --git a/scripts/__node_3d_displace/__node_3d_displace.yy b/scripts/__node_3d_displace/__node_3d_displace.yy new file mode 100644 index 000000000..3ce4f11e5 --- /dev/null +++ b/scripts/__node_3d_displace/__node_3d_displace.yy @@ -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", + }, +} \ No newline at end of file diff --git a/scripts/node_3d_displace/node_3d_prim_cube.yy b/scripts/__node_3d_displace/node_3d_prim_cube.yy similarity index 100% rename from scripts/node_3d_displace/node_3d_prim_cube.yy rename to scripts/__node_3d_displace/node_3d_prim_cube.yy diff --git a/scripts/node_3d_export/node_3d_export.gml b/scripts/__node_3d_export/__node_3d_export.gml similarity index 97% rename from scripts/node_3d_export/node_3d_export.gml rename to scripts/__node_3d_export/__node_3d_export.gml index e65d76a77..b19b81571 100644 --- a/scripts/node_3d_export/node_3d_export.gml +++ b/scripts/__node_3d_export/__node_3d_export.gml @@ -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, [] ) diff --git a/scripts/node_3d_displace/node_3d_displace.yy b/scripts/__node_3d_export/__node_3d_export.yy similarity index 86% rename from scripts/node_3d_displace/node_3d_displace.yy rename to scripts/__node_3d_export/__node_3d_export.yy index 3cd88df28..70e312d4d 100644 --- a/scripts/node_3d_displace/node_3d_displace.yy +++ b/scripts/__node_3d_export/__node_3d_export.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "node_3d_displace", + "name": "__node_3d_export", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/node_3d_extrude/node_3d_extrude.gml b/scripts/__node_3d_extrude/__node_3d_extrude.gml similarity index 99% rename from scripts/node_3d_extrude/node_3d_extrude.gml rename to scripts/__node_3d_extrude/__node_3d_extrude.gml index 567f92390..6d17feed8 100644 --- a/scripts/node_3d_extrude/node_3d_extrude.gml +++ b/scripts/__node_3d_extrude/__node_3d_extrude.gml @@ -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); diff --git a/scripts/__node_3d_extrude/__node_3d_extrude.yy b/scripts/__node_3d_extrude/__node_3d_extrude.yy new file mode 100644 index 000000000..982a65466 --- /dev/null +++ b/scripts/__node_3d_extrude/__node_3d_extrude.yy @@ -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", + }, +} \ No newline at end of file diff --git a/scripts/node_3d_extrude/node_3d_prim_cube.yy b/scripts/__node_3d_extrude/node_3d_prim_cube.yy similarity index 100% rename from scripts/node_3d_extrude/node_3d_prim_cube.yy rename to scripts/__node_3d_extrude/node_3d_prim_cube.yy diff --git a/scripts/node_3d_obj/node_3D_obj.gml b/scripts/__node_3d_obj/__node_3d_obj.gml similarity index 99% rename from scripts/node_3d_obj/node_3D_obj.gml rename to scripts/__node_3d_obj/__node_3d_obj.gml index a1fde5c8f..2c8ac8e56 100644 --- a/scripts/node_3d_obj/node_3D_obj.gml +++ b/scripts/__node_3d_obj/__node_3d_obj.gml @@ -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, "") diff --git a/scripts/node_3d_obj/node_3D_obj.yy b/scripts/__node_3d_obj/__node_3d_obj.yy similarity index 88% rename from scripts/node_3d_obj/node_3D_obj.yy rename to scripts/__node_3d_obj/__node_3d_obj.yy index 3f57caaf7..b550efa09 100644 --- a/scripts/node_3d_obj/node_3D_obj.yy +++ b/scripts/__node_3d_obj/__node_3d_obj.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "node_3d_obj", + "name": "__node_3d_obj", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/__node_3d_object/__node_3d_object.gml b/scripts/__node_3d_object/__node_3d_object.gml index 0ac3a97f9..1c3989b55 100644 --- a/scripts/__node_3d_object/__node_3d_object.gml +++ b/scripts/__node_3d_object/__node_3d_object.gml @@ -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 diff --git a/scripts/node_3d_plane/node_3d_plane.gml b/scripts/__node_3d_plane/__node_3d_plane.gml similarity index 98% rename from scripts/node_3d_plane/node_3d_plane.gml rename to scripts/__node_3d_plane/__node_3d_plane.gml index 752f2d780..25490e84c 100644 --- a/scripts/node_3d_plane/node_3d_plane.gml +++ b/scripts/__node_3d_plane/__node_3d_plane.gml @@ -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); diff --git a/scripts/node_3d_plane/node_3d_plane.yy b/scripts/__node_3d_plane/__node_3d_plane.yy similarity index 87% rename from scripts/node_3d_plane/node_3d_plane.yy rename to scripts/__node_3d_plane/__node_3d_plane.yy index 360127934..8ff20f966 100644 --- a/scripts/node_3d_plane/node_3d_plane.yy +++ b/scripts/__node_3d_plane/__node_3d_plane.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "node_3d_plane", + "name": "__node_3d_plane", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/node_3d_prim_cone/node_3d_prim_cone.gml b/scripts/__node_3d_prim_cone/__node_3d_prim_cone.gml similarity index 98% rename from scripts/node_3d_prim_cone/node_3d_prim_cone.gml rename to scripts/__node_3d_prim_cone/__node_3d_prim_cone.gml index 7a0db6177..01250d7e6 100644 --- a/scripts/node_3d_prim_cone/node_3d_prim_cone.gml +++ b/scripts/__node_3d_prim_cone/__node_3d_prim_cone.gml @@ -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) diff --git a/scripts/node_3d_prim_cone/node_3d_prim_cone.yy b/scripts/__node_3d_prim_cone/__node_3d_prim_cone.yy similarity index 86% rename from scripts/node_3d_prim_cone/node_3d_prim_cone.yy rename to scripts/__node_3d_prim_cone/__node_3d_prim_cone.yy index 4cc66a3d7..10fac8f0d 100644 --- a/scripts/node_3d_prim_cone/node_3d_prim_cone.yy +++ b/scripts/__node_3d_prim_cone/__node_3d_prim_cone.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "node_3d_prim_cone", + "name": "__node_3d_prim_cone", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/node_3d_prim_cone/node_3d_prim_cube.yy b/scripts/__node_3d_prim_cone/node_3d_prim_cube.yy similarity index 100% rename from scripts/node_3d_prim_cone/node_3d_prim_cube.yy rename to scripts/__node_3d_prim_cone/node_3d_prim_cube.yy diff --git a/scripts/node_3d_prim_cube/node_3d_prim_cube.gml b/scripts/__node_3d_prim_cube/__node_3d_prim_cube.gml similarity index 98% rename from scripts/node_3d_prim_cube/node_3d_prim_cube.gml rename to scripts/__node_3d_prim_cube/__node_3d_prim_cube.gml index 10dd99871..5f8bd359b 100644 --- a/scripts/node_3d_prim_cube/node_3d_prim_cube.gml +++ b/scripts/__node_3d_prim_cube/__node_3d_prim_cube.gml @@ -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; diff --git a/scripts/node_3d_prim_cube/node_3d_prim_cube.yy b/scripts/__node_3d_prim_cube/__node_3d_prim_cube.yy similarity index 86% rename from scripts/node_3d_prim_cube/node_3d_prim_cube.yy rename to scripts/__node_3d_prim_cube/__node_3d_prim_cube.yy index 67db0e917..2e9389e1e 100644 --- a/scripts/node_3d_prim_cube/node_3d_prim_cube.yy +++ b/scripts/__node_3d_prim_cube/__node_3d_prim_cube.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "node_3d_prim_cube", + "name": "__node_3d_prim_cube", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.gml b/scripts/__node_3d_prim_cylinder/__node_3d_prim_cylinder.gml similarity index 98% rename from scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.gml rename to scripts/__node_3d_prim_cylinder/__node_3d_prim_cylinder.gml index a4317bad0..122a5fc5c 100644 --- a/scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.gml +++ b/scripts/__node_3d_prim_cylinder/__node_3d_prim_cylinder.gml @@ -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; diff --git a/scripts/__node_3d_prim_cylinder/__node_3d_prim_cylinder.yy b/scripts/__node_3d_prim_cylinder/__node_3d_prim_cylinder.yy new file mode 100644 index 000000000..9c1e9a59c --- /dev/null +++ b/scripts/__node_3d_prim_cylinder/__node_3d_prim_cylinder.yy @@ -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", + }, +} \ No newline at end of file diff --git a/scripts/node_3d_prim_cylinder/node_3d_prim_cube.yy b/scripts/__node_3d_prim_cylinder/node_3d_prim_cube.yy similarity index 100% rename from scripts/node_3d_prim_cylinder/node_3d_prim_cube.yy rename to scripts/__node_3d_prim_cylinder/node_3d_prim_cube.yy diff --git a/scripts/node_3d_prim_sphere/node_3d_prim_sphere.gml b/scripts/__node_3d_prim_sphere/__node_3d_prim_sphere.gml similarity index 98% rename from scripts/node_3d_prim_sphere/node_3d_prim_sphere.gml rename to scripts/__node_3d_prim_sphere/__node_3d_prim_sphere.gml index 6844f3de2..f76732574 100644 --- a/scripts/node_3d_prim_sphere/node_3d_prim_sphere.gml +++ b/scripts/__node_3d_prim_sphere/__node_3d_prim_sphere.gml @@ -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; diff --git a/scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.yy b/scripts/__node_3d_prim_sphere/__node_3d_prim_sphere.yy similarity index 85% rename from scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.yy rename to scripts/__node_3d_prim_sphere/__node_3d_prim_sphere.yy index 7bc832563..f889c5b50 100644 --- a/scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.yy +++ b/scripts/__node_3d_prim_sphere/__node_3d_prim_sphere.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "node_3d_prim_cylinder", + "name": "__node_3d_prim_sphere", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/node_3d_prim_sphere/node_3d_prim_cube.yy b/scripts/__node_3d_prim_sphere/node_3d_prim_cube.yy similarity index 100% rename from scripts/node_3d_prim_sphere/node_3d_prim_cube.yy rename to scripts/__node_3d_prim_sphere/node_3d_prim_cube.yy diff --git a/scripts/node_3d_render/node_3d_render.gml b/scripts/__node_3d_render/__node_3d_render.gml similarity index 100% rename from scripts/node_3d_render/node_3d_render.gml rename to scripts/__node_3d_render/__node_3d_render.gml diff --git a/scripts/node_3d_combine/node_3d_combine.yy b/scripts/__node_3d_render/__node_3d_render.yy similarity index 86% rename from scripts/node_3d_combine/node_3d_combine.yy rename to scripts/__node_3d_render/__node_3d_render.yy index 2a7b4fb46..48ecf26ec 100644 --- a/scripts/node_3d_combine/node_3d_combine.yy +++ b/scripts/__node_3d_render/__node_3d_render.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "node_3d_combine", + "name": "__node_3d_render", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/__node_3d_repeat/__node_3d_repeat.gml b/scripts/__node_3d_repeat/__node_3d_repeat.gml new file mode 100644 index 000000000..03d77729c --- /dev/null +++ b/scripts/__node_3d_repeat/__node_3d_repeat.gml @@ -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); + } + } +} \ No newline at end of file diff --git a/scripts/node_3d_export/node_3d_export.yy b/scripts/__node_3d_repeat/__node_3d_repeat.yy similarity index 86% rename from scripts/node_3d_export/node_3d_export.yy rename to scripts/__node_3d_repeat/__node_3d_repeat.yy index fddfe63b6..547dabaea 100644 --- a/scripts/node_3d_export/node_3d_export.yy +++ b/scripts/__node_3d_repeat/__node_3d_repeat.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "node_3d_export", + "name": "__node_3d_repeat", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/node_3d_repeat/node_3d_prim_cube.yy b/scripts/__node_3d_repeat/node_3d_prim_cube.yy similarity index 100% rename from scripts/node_3d_repeat/node_3d_prim_cube.yy rename to scripts/__node_3d_repeat/node_3d_prim_cube.yy diff --git a/scripts/node_3d_transform/node_3d_transform.gml b/scripts/__node_3d_transform/__node_3d_transform.gml similarity index 97% rename from scripts/node_3d_transform/node_3d_transform.gml rename to scripts/__node_3d_transform/__node_3d_transform.gml index 4309c0b00..bb455545f 100644 --- a/scripts/node_3d_transform/node_3d_transform.gml +++ b/scripts/__node_3d_transform/__node_3d_transform.gml @@ -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) diff --git a/scripts/__node_3d_transform/__node_3d_transform.yy b/scripts/__node_3d_transform/__node_3d_transform.yy new file mode 100644 index 000000000..9b8ed0665 --- /dev/null +++ b/scripts/__node_3d_transform/__node_3d_transform.yy @@ -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", + }, +} \ No newline at end of file diff --git a/scripts/node_3d_transform/node_3d_prim_cube.yy b/scripts/__node_3d_transform/node_3d_prim_cube.yy similarity index 100% rename from scripts/node_3d_transform/node_3d_prim_cube.yy rename to scripts/__node_3d_transform/node_3d_prim_cube.yy diff --git a/scripts/d3d_camera_object/d3d_camera_object.gml b/scripts/d3d_camera_object/d3d_camera_object.gml index 0801f7f85..2e3d49a6c 100644 --- a/scripts/d3d_camera_object/d3d_camera_object.gml +++ b/scripts/d3d_camera_object/d3d_camera_object.gml @@ -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); diff --git a/scripts/d3d_group/d3d_group.gml b/scripts/d3d_group/d3d_group.gml index 438a5b5f0..46de9a595 100644 --- a/scripts/d3d_group/d3d_group.gml +++ b/scripts/d3d_group/d3d_group.gml @@ -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++ ) diff --git a/scripts/d3d_icosphere/d3d_icosphere.gml b/scripts/d3d_icosphere/d3d_icosphere.gml index b54c20d3e..e1cb260f7 100644 --- a/scripts/d3d_icosphere/d3d_icosphere.gml +++ b/scripts/d3d_icosphere/d3d_icosphere.gml @@ -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); diff --git a/scripts/d3d_light/d3d_light.gml b/scripts/d3d_light/d3d_light.gml index eff4a6af2..bfecaade0 100644 --- a/scripts/d3d_light/d3d_light.gml +++ b/scripts/d3d_light/d3d_light.gml @@ -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; diff --git a/scripts/d3d_light_directional/d3d_light_directional.gml b/scripts/d3d_light_directional/d3d_light_directional.gml index 7c9954a03..e5b1fcdb1 100644 --- a/scripts/d3d_light_directional/d3d_light_directional.gml +++ b/scripts/d3d_light_directional/d3d_light_directional.gml @@ -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); diff --git a/scripts/d3d_light_point/d3d_light_point.gml b/scripts/d3d_light_point/d3d_light_point.gml index 9077a98f9..e19c0b41a 100644 --- a/scripts/d3d_light_point/d3d_light_point.gml +++ b/scripts/d3d_light_point/d3d_light_point.gml @@ -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); diff --git a/scripts/d3d_material/d3d_material.gml b/scripts/d3d_material/d3d_material.gml index 011ed8308..5bd549254 100644 --- a/scripts/d3d_material/d3d_material.gml +++ b/scripts/d3d_material/d3d_material.gml @@ -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); } } \ No newline at end of file diff --git a/scripts/d3d_object/d3d_object.gml b/scripts/d3d_object/d3d_object.gml index bd0e4bf4d..efd44fe77 100644 --- a/scripts/d3d_object/d3d_object.gml +++ b/scripts/d3d_object/d3d_object.gml @@ -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}]" } } \ No newline at end of file diff --git a/scripts/d3d_scene/d3d_scene.gml b/scripts/d3d_scene/d3d_scene.gml index d957e9d75..5d79b3ea8 100644 --- a/scripts/d3d_scene/d3d_scene.gml +++ b/scripts/d3d_scene/d3d_scene.gml @@ -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); diff --git a/scripts/d3d_transformation/d3d_transformation.gml b/scripts/d3d_transformation/d3d_transformation.gml new file mode 100644 index 000000000..7aff51eea --- /dev/null +++ b/scripts/d3d_transformation/d3d_transformation.gml @@ -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(); + } +} \ No newline at end of file diff --git a/scripts/node_3d_render/node_3d_render.yy b/scripts/d3d_transformation/d3d_transformation.yy similarity index 55% rename from scripts/node_3d_render/node_3d_render.yy rename to scripts/d3d_transformation/d3d_transformation.yy index 07bbfd8a4..67477acd2 100644 --- a/scripts/node_3d_render/node_3d_render.yy +++ b/scripts/d3d_transformation/d3d_transformation.yy @@ -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", }, } \ No newline at end of file diff --git a/scripts/node_3d_camera/node_3d_camera.gml b/scripts/node_3d_camera/node_3d_camera.gml index af2e25669..6ef4ca36c 100644 --- a/scripts/node_3d_camera/node_3d_camera.gml +++ b/scripts/node_3d_camera/node_3d_camera.gml @@ -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]); diff --git a/scripts/node_3d_extrude/node_3d_extrude.yy b/scripts/node_3d_extrude/node_3d_extrude.yy deleted file mode 100644 index 91efc0e58..000000000 --- a/scripts/node_3d_extrude/node_3d_extrude.yy +++ /dev/null @@ -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", - }, -} \ No newline at end of file diff --git a/scripts/node_3d_light_directional/node_3d_light_directional.gml b/scripts/node_3d_light_directional/node_3d_light_directional.gml index 1af804ba1..0461bb378 100644 --- a/scripts/node_3d_light_directional/node_3d_light_directional.gml +++ b/scripts/node_3d_light_directional/node_3d_light_directional.gml @@ -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; } diff --git a/scripts/node_3d_prim_sphere/node_3d_prim_sphere.yy b/scripts/node_3d_prim_sphere/node_3d_prim_sphere.yy deleted file mode 100644 index c60a5840e..000000000 --- a/scripts/node_3d_prim_sphere/node_3d_prim_sphere.yy +++ /dev/null @@ -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", - }, -} \ No newline at end of file diff --git a/scripts/node_3d_repeat/node_3d_repeat.gml b/scripts/node_3d_repeat/node_3d_repeat.gml index c837c11ba..a4f4a7256 100644 --- a/scripts/node_3d_repeat/node_3d_repeat.gml +++ b/scripts/node_3d_repeat/node_3d_repeat.gml @@ -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[| 21] = nodeValue("Field of view", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 60) - .setDisplay(VALUE_DISPLAY.slider, [ 1, 90, 1 ]); + inputs[| 5] = nodeValue("Starting Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ] ) + .setDisplay(VALUE_DISPLAY.vector); - inputs[| 22] = nodeValue("Scale view with dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true) + inputs[| 6] = nodeValue("Shift Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ] ) + .setDisplay(VALUE_DISPLAY.vector); - 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[| 7] = nodeValue("Shift Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 1 ] ) + .setDisplay(VALUE_DISPLAY.d3quarternion); + inputs[| 8] = nodeValue("Shift Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ] ) + .setDisplay(VALUE_DISPLAY.vector); - outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); + outputs[| 0] = nodeValue("Scene", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3Scene, 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); + + inputs[| 0].setArrayDepth(_mode == 1); + + inputs[| 2].setVisible(_mode == 0); + + //inputs[| 6].setVisible(_tran == 0); + //inputs[| 7].setVisible(_tran == 0); + //inputs[| 8].setVisible(_tran == 0); + } #endregion - 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(); + 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 sv = inputs[| 11].getValue(); - if(sv == noone) return; + if(_mode == 1 && !is_array(_object)) return noone; + var _amo = _mode == 1? array_length(_object) : _data[2]; - var _samo = inputs[| 12].getValue(); - var _patt = inputs[| 16].getValue(); + var _scene = new __3dGroup(); - 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(); + for( var i = 0; i < _amo; i++ ) { + var _obj = _mode == 1? _object[i] : _object; + if(_obj == noone) continue; - 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); + var _subScene = new __3dGroup(); - _outSurf = _3d_pre_setup(_outSurf, _dim, _transform, _light, _cam, pass); - submit_vertex(); - _3d_post_setup(); + 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 ]; - outputs[| ind].setValue(_outSurf); + 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]); + + var _sRotE = _sRot.ToEuler(); + var _rRotE = _rRot.ToEuler(); + + var _fRotE = [ _sRotE.x + _rRotE.x * i, + _sRotE.y + _rRotE.y * i, + _sRotE.z + _rRotE.z * i ]; + + var _fRot = new BBMOD_Quaternion().FromEuler(_fRotE[0], _fRotE[1], _fRotE[2]); + + _subScene.transform.position.set(_sPos); + _subScene.transform.rotation.set(_fRot.X, _fRot.Y, _fRot.Z, _fRot.W); + _subScene.transform.scale.set(_sSca); + + array_push(_subScene.objects, _obj); + array_push(_scene.objects, _subScene); } - } + + return _scene; + } #endregion } \ No newline at end of file diff --git a/scripts/node_3d_repeat/node_3d_repeat.yy b/scripts/node_3d_repeat/node_3d_repeat.yy index 12e4c6c07..4f7174368 100644 --- a/scripts/node_3d_repeat/node_3d_repeat.yy +++ b/scripts/node_3d_repeat/node_3d_repeat.yy @@ -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", }, } \ No newline at end of file diff --git a/scripts/node_3d_repeat/node_counter.yy b/scripts/node_3d_repeat/node_counter.yy new file mode 100644 index 000000000..10832a0b0 --- /dev/null +++ b/scripts/node_3d_repeat/node_counter.yy @@ -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", +} \ No newline at end of file diff --git a/scripts/node_3d_scene/node_3d_scene.yy b/scripts/node_3d_scene/node_3d_scene.yy index 8be8b0f2b..d8571ab5d 100644 --- a/scripts/node_3d_scene/node_3d_scene.yy +++ b/scripts/node_3d_scene/node_3d_scene.yy @@ -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", }, } \ No newline at end of file diff --git a/scripts/node_3d_transform/node_3d_transform.yy b/scripts/node_3d_transform/node_3d_transform.yy deleted file mode 100644 index 6728673e9..000000000 --- a/scripts/node_3d_transform/node_3d_transform.yy +++ /dev/null @@ -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", - }, -} \ No newline at end of file diff --git a/scripts/node_keyframe/node_keyframe.gml b/scripts/node_keyframe/node_keyframe.gml index 73ffca8e8..af26a498f 100644 --- a/scripts/node_keyframe/node_keyframe.gml +++ b/scripts/node_keyframe/node_keyframe.gml @@ -108,6 +108,14 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor { if(!struct_has(_f, "lerpTo")) return _f; 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)) { diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 85bd9aace..d9f7325bf 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -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 diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index 277c95ce7..039651c33 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -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) { diff --git a/scripts/obj_reader/obj_reader.gml b/scripts/obj_reader/obj_reader.gml index e07683879..35e0619af 100644 --- a/scripts/obj_reader/obj_reader.gml +++ b/scripts/obj_reader/obj_reader.gml @@ -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); diff --git a/scripts/panel_preview/panel_preview.gml b/scripts/panel_preview/panel_preview.gml index d39a5b6e3..02a0e53e5 100644 --- a/scripts/panel_preview/panel_preview.gml +++ b/scripts/panel_preview/panel_preview.gml @@ -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(); diff --git a/shaders/sh_d3d_default/sh_d3d_default.fsh b/shaders/sh_d3d_default/sh_d3d_default.fsh index 64315dc13..fb4713262 100644 --- a/shaders/sh_d3d_default/sh_d3d_default.fsh +++ b/shaders/sh_d3d_default/sh_d3d_default.fsh @@ -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 ++++ diff --git a/shaders/sh_d3d_default/sh_d3d_default.vsh b/shaders/sh_d3d_default/sh_d3d_default.vsh index 23c0d0f9e..ca245900a 100644 --- a/shaders/sh_d3d_default/sh_d3d_default.vsh +++ b/shaders/sh_d3d_default/sh_d3d_default.vsh @@ -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; diff --git a/shaders/sh_d3d_geometry/sh_d3d_geometry.fsh b/shaders/sh_d3d_geometry/sh_d3d_geometry.fsh index ffd77ee38..a9d5ad5fb 100644 --- a/shaders/sh_d3d_geometry/sh_d3d_geometry.fsh +++ b/shaders/sh_d3d_geometry/sh_d3d_geometry.fsh @@ -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.); } diff --git a/shaders/sh_d3d_geometry/sh_d3d_geometry.vsh b/shaders/sh_d3d_geometry/sh_d3d_geometry.vsh index 79b2017e1..a43176e1d 100644 --- a/shaders/sh_d3d_geometry/sh_d3d_geometry.vsh +++ b/shaders/sh_d3d_geometry/sh_d3d_geometry.vsh @@ -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; } diff --git a/shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.fsh b/shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.fsh new file mode 100644 index 000000000..4df9ae21b --- /dev/null +++ b/shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.fsh @@ -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.); +} diff --git a/shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.vsh b/shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.vsh @@ -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; +} diff --git a/shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.yy b/shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.yy new file mode 100644 index 000000000..b7ac4d65b --- /dev/null +++ b/shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_d3d_normal_blur", + "parent": { + "name": "3d", + "path": "folders/shader/3d.yy", + }, + "type": 1, +} \ No newline at end of file