diff --git a/addons/terrain_3d/LICENSE.txt b/addons/terrain_3d/LICENSE.txt new file mode 100644 index 0000000..b4293b7 --- /dev/null +++ b/addons/terrain_3d/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Cory Petkovsek, Roope Palmroos, and Contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/addons/terrain_3d/README.md b/addons/terrain_3d/README.md new file mode 100644 index 0000000..47f2953 --- /dev/null +++ b/addons/terrain_3d/README.md @@ -0,0 +1,56 @@ + + +# Terrain3D +A high performance, editable terrain system for Godot 4. + +## Features +* Written in C++ as a GDExtension addon, which works with official engine builds +* Can be accessed by GDScript, C#, and any language Godot supports +* Geometric Clipmap Mesh Terrain, as used in The Witcher 3. See [System Architecture](https://terrain3d.readthedocs.io/en/stable/docs/system_architecture.html) +* Up to 16k x 16k in 1k regions (imagine multiple islands without paying for 16k^2 vram) +* Up to 32 textures +* Up to 10 levels of detail +* Foliage instancing +* Sculpting, holes, texture painting, texture detiling, painting colors and wetness +* Imports heightmaps from [HTerrain](https://github.com/Zylann/godot_heightmap_plugin/), WorldMachine, Unity, Unreal and any tool that can export a heightmap (raw/r16/exr/+). See [importing data](https://terrain3d.readthedocs.io/en/stable/docs/import_export.html) + +See [Project Status](https://terrain3d.readthedocs.io/en/stable/docs/project_status.html) for details. + +## Getting Started + +1. Read the [Installation & Upgrades](https://terrain3d.readthedocs.io/en/stable/docs/installation.html) instructions. + +2. For support, read [Getting Help](https://terrain3d.readthedocs.io/en/stable/docs/getting_help.html) or join our [Discord server](https://tokisan.com/discord). + +3. Watch the tutorial videos: + +**Installation, Setup, Basic Usage** + +[![Using Terrain3D - Part 1](https://i.ytimg.com/vi/oV8c9alXVwU/hqdefault.jpg)](https://youtu.be/oV8c9alXVwU) + +**Texture Painting, Holes, Navigation, Advanced Usage** + +[![Using Terrain3D - Part 2](https://i.ytimg.com/vi/YtiAI2F6Xkk/hqdefault.jpg)](https://youtu.be/YtiAI2F6Xkk) + + +## Credit +Developed for the Godot community by: + +||| +|--|--| +| **Cory Petkovsek, Tokisan Games** | [](https://twitter.com/TokisanGames) [](https://github.com/TokisanGames) [](https://tokisan.com/) [](https://tokisan.com/discord) [](https://www.youtube.com/@TokisanGames)| +| **Roope Palmroos, Outobugi Games** | [](https://twitter.com/outobugi) [](https://github.com/outobugi) [](https://outobugi.com/) [](https://www.youtube.com/@outobugi)| + +And other contributors displayed on the right of the github page and in [AUTHORS.md](https://github.com/TokisanGames/Terrain3D/blob/main/AUTHORS.md). + +Geometry clipmap mesh code created by [Mike J. Savage](https://mikejsavage.co.uk/blog/geometry-clipmaps.html). Blog and repository code released under the MIT license per email communication with Mike. + +## Contributing + +Please see [CONTRIBUTING.md](https://github.com/TokisanGames/Terrain3D/blob/main/CONTRIBUTING.md) if you would like to help make Terrain3D the best terrain system for Godot. + + +## License + +This addon has been released under the [MIT License](https://github.com/TokisanGames/Terrain3D/blob/main/LICENSE.txt). + diff --git a/addons/terrain_3d/bin/libterrain.android.debug.arm32.so b/addons/terrain_3d/bin/libterrain.android.debug.arm32.so new file mode 100644 index 0000000..4429d13 Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.android.debug.arm32.so differ diff --git a/addons/terrain_3d/bin/libterrain.android.debug.arm64.so b/addons/terrain_3d/bin/libterrain.android.debug.arm64.so new file mode 100644 index 0000000..1e2905f Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.android.debug.arm64.so differ diff --git a/addons/terrain_3d/bin/libterrain.android.release.arm32.so b/addons/terrain_3d/bin/libterrain.android.release.arm32.so new file mode 100644 index 0000000..8e6ba2f Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.android.release.arm32.so differ diff --git a/addons/terrain_3d/bin/libterrain.android.release.arm64.so b/addons/terrain_3d/bin/libterrain.android.release.arm64.so new file mode 100644 index 0000000..6ff140b Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.android.release.arm64.so differ diff --git a/addons/terrain_3d/bin/libterrain.ios.debug.universal.dylib b/addons/terrain_3d/bin/libterrain.ios.debug.universal.dylib new file mode 100644 index 0000000..58c56bc Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.ios.debug.universal.dylib differ diff --git a/addons/terrain_3d/bin/libterrain.ios.release.universal.dylib b/addons/terrain_3d/bin/libterrain.ios.release.universal.dylib new file mode 100644 index 0000000..be5b107 Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.ios.release.universal.dylib differ diff --git a/addons/terrain_3d/bin/libterrain.linux.debug.x86_64.so b/addons/terrain_3d/bin/libterrain.linux.debug.x86_64.so new file mode 100644 index 0000000..e78a649 Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.linux.debug.x86_64.so differ diff --git a/addons/terrain_3d/bin/libterrain.linux.release.x86_64.so b/addons/terrain_3d/bin/libterrain.linux.release.x86_64.so new file mode 100644 index 0000000..8f8756c Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.linux.release.x86_64.so differ diff --git a/addons/terrain_3d/bin/libterrain.macos.debug.framework/libterrain.macos.debug b/addons/terrain_3d/bin/libterrain.macos.debug.framework/libterrain.macos.debug new file mode 100644 index 0000000..d340a95 Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.macos.debug.framework/libterrain.macos.debug differ diff --git a/addons/terrain_3d/bin/libterrain.macos.release.framework/libterrain.macos.release b/addons/terrain_3d/bin/libterrain.macos.release.framework/libterrain.macos.release new file mode 100644 index 0000000..9d39905 Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.macos.release.framework/libterrain.macos.release differ diff --git a/addons/terrain_3d/bin/libterrain.windows.debug.x86_64.dll b/addons/terrain_3d/bin/libterrain.windows.debug.x86_64.dll new file mode 100644 index 0000000..1904d12 Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.windows.debug.x86_64.dll differ diff --git a/addons/terrain_3d/bin/libterrain.windows.release.x86_64.dll b/addons/terrain_3d/bin/libterrain.windows.release.x86_64.dll new file mode 100644 index 0000000..ed84c94 Binary files /dev/null and b/addons/terrain_3d/bin/libterrain.windows.release.x86_64.dll differ diff --git a/addons/terrain_3d/brushes/.gdignore b/addons/terrain_3d/brushes/.gdignore new file mode 100644 index 0000000..e69de29 diff --git a/addons/terrain_3d/brushes/acrylic1.exr b/addons/terrain_3d/brushes/acrylic1.exr new file mode 100644 index 0000000..14b66d6 Binary files /dev/null and b/addons/terrain_3d/brushes/acrylic1.exr differ diff --git a/addons/terrain_3d/brushes/circle0.exr b/addons/terrain_3d/brushes/circle0.exr new file mode 100644 index 0000000..78937f1 Binary files /dev/null and b/addons/terrain_3d/brushes/circle0.exr differ diff --git a/addons/terrain_3d/brushes/circle1.exr b/addons/terrain_3d/brushes/circle1.exr new file mode 100644 index 0000000..e91d97e Binary files /dev/null and b/addons/terrain_3d/brushes/circle1.exr differ diff --git a/addons/terrain_3d/brushes/circle2.exr b/addons/terrain_3d/brushes/circle2.exr new file mode 100644 index 0000000..f6931ba Binary files /dev/null and b/addons/terrain_3d/brushes/circle2.exr differ diff --git a/addons/terrain_3d/brushes/circle3.exr b/addons/terrain_3d/brushes/circle3.exr new file mode 100644 index 0000000..477ab7e Binary files /dev/null and b/addons/terrain_3d/brushes/circle3.exr differ diff --git a/addons/terrain_3d/brushes/circle4.exr b/addons/terrain_3d/brushes/circle4.exr new file mode 100644 index 0000000..b466f92 Binary files /dev/null and b/addons/terrain_3d/brushes/circle4.exr differ diff --git a/addons/terrain_3d/brushes/hill1.exr b/addons/terrain_3d/brushes/hill1.exr new file mode 100644 index 0000000..a668ab6 Binary files /dev/null and b/addons/terrain_3d/brushes/hill1.exr differ diff --git a/addons/terrain_3d/brushes/hill2.exr b/addons/terrain_3d/brushes/hill2.exr new file mode 100644 index 0000000..068e22b Binary files /dev/null and b/addons/terrain_3d/brushes/hill2.exr differ diff --git a/addons/terrain_3d/brushes/mountain1.exr b/addons/terrain_3d/brushes/mountain1.exr new file mode 100644 index 0000000..be71748 Binary files /dev/null and b/addons/terrain_3d/brushes/mountain1.exr differ diff --git a/addons/terrain_3d/brushes/mountain2.exr b/addons/terrain_3d/brushes/mountain2.exr new file mode 100644 index 0000000..ca30373 Binary files /dev/null and b/addons/terrain_3d/brushes/mountain2.exr differ diff --git a/addons/terrain_3d/brushes/mountain3.exr b/addons/terrain_3d/brushes/mountain3.exr new file mode 100644 index 0000000..ca07a1e Binary files /dev/null and b/addons/terrain_3d/brushes/mountain3.exr differ diff --git a/addons/terrain_3d/brushes/mountain4.exr b/addons/terrain_3d/brushes/mountain4.exr new file mode 100644 index 0000000..f8197fe Binary files /dev/null and b/addons/terrain_3d/brushes/mountain4.exr differ diff --git a/addons/terrain_3d/brushes/peak1.exr b/addons/terrain_3d/brushes/peak1.exr new file mode 100644 index 0000000..49d341e Binary files /dev/null and b/addons/terrain_3d/brushes/peak1.exr differ diff --git a/addons/terrain_3d/brushes/peak2.exr b/addons/terrain_3d/brushes/peak2.exr new file mode 100644 index 0000000..db74297 Binary files /dev/null and b/addons/terrain_3d/brushes/peak2.exr differ diff --git a/addons/terrain_3d/brushes/peak3.exr b/addons/terrain_3d/brushes/peak3.exr new file mode 100644 index 0000000..9383681 Binary files /dev/null and b/addons/terrain_3d/brushes/peak3.exr differ diff --git a/addons/terrain_3d/brushes/ring1.exr b/addons/terrain_3d/brushes/ring1.exr new file mode 100644 index 0000000..6396804 Binary files /dev/null and b/addons/terrain_3d/brushes/ring1.exr differ diff --git a/addons/terrain_3d/brushes/smoke.exr b/addons/terrain_3d/brushes/smoke.exr new file mode 100644 index 0000000..021947b Binary files /dev/null and b/addons/terrain_3d/brushes/smoke.exr differ diff --git a/addons/terrain_3d/brushes/square1.exr b/addons/terrain_3d/brushes/square1.exr new file mode 100644 index 0000000..3aff9cd Binary files /dev/null and b/addons/terrain_3d/brushes/square1.exr differ diff --git a/addons/terrain_3d/brushes/square2.exr b/addons/terrain_3d/brushes/square2.exr new file mode 100644 index 0000000..230113c Binary files /dev/null and b/addons/terrain_3d/brushes/square2.exr differ diff --git a/addons/terrain_3d/brushes/square3.exr b/addons/terrain_3d/brushes/square3.exr new file mode 100644 index 0000000..6da88b8 Binary files /dev/null and b/addons/terrain_3d/brushes/square3.exr differ diff --git a/addons/terrain_3d/brushes/square4.exr b/addons/terrain_3d/brushes/square4.exr new file mode 100644 index 0000000..350cd7d Binary files /dev/null and b/addons/terrain_3d/brushes/square4.exr differ diff --git a/addons/terrain_3d/brushes/square5.exr b/addons/terrain_3d/brushes/square5.exr new file mode 100644 index 0000000..f0832e0 Binary files /dev/null and b/addons/terrain_3d/brushes/square5.exr differ diff --git a/addons/terrain_3d/brushes/stones.exr b/addons/terrain_3d/brushes/stones.exr new file mode 100644 index 0000000..7ef5977 Binary files /dev/null and b/addons/terrain_3d/brushes/stones.exr differ diff --git a/addons/terrain_3d/brushes/terrain1.exr b/addons/terrain_3d/brushes/terrain1.exr new file mode 100644 index 0000000..8366b52 Binary files /dev/null and b/addons/terrain_3d/brushes/terrain1.exr differ diff --git a/addons/terrain_3d/brushes/terrain2.exr b/addons/terrain_3d/brushes/terrain2.exr new file mode 100644 index 0000000..d11a069 Binary files /dev/null and b/addons/terrain_3d/brushes/terrain2.exr differ diff --git a/addons/terrain_3d/brushes/terrain3.exr b/addons/terrain_3d/brushes/terrain3.exr new file mode 100644 index 0000000..61bfe0f Binary files /dev/null and b/addons/terrain_3d/brushes/terrain3.exr differ diff --git a/addons/terrain_3d/brushes/terrain4.exr b/addons/terrain_3d/brushes/terrain4.exr new file mode 100644 index 0000000..e8f4ce4 Binary files /dev/null and b/addons/terrain_3d/brushes/terrain4.exr differ diff --git a/addons/terrain_3d/brushes/terrain5.exr b/addons/terrain_3d/brushes/terrain5.exr new file mode 100644 index 0000000..ad3fe5b Binary files /dev/null and b/addons/terrain_3d/brushes/terrain5.exr differ diff --git a/addons/terrain_3d/brushes/terrain6.exr b/addons/terrain_3d/brushes/terrain6.exr new file mode 100644 index 0000000..0a15419 Binary files /dev/null and b/addons/terrain_3d/brushes/terrain6.exr differ diff --git a/addons/terrain_3d/brushes/texture1.exr b/addons/terrain_3d/brushes/texture1.exr new file mode 100644 index 0000000..f456b77 Binary files /dev/null and b/addons/terrain_3d/brushes/texture1.exr differ diff --git a/addons/terrain_3d/brushes/texture2.exr b/addons/terrain_3d/brushes/texture2.exr new file mode 100644 index 0000000..2624d3b Binary files /dev/null and b/addons/terrain_3d/brushes/texture2.exr differ diff --git a/addons/terrain_3d/brushes/texture3.exr b/addons/terrain_3d/brushes/texture3.exr new file mode 100644 index 0000000..690fe5e Binary files /dev/null and b/addons/terrain_3d/brushes/texture3.exr differ diff --git a/addons/terrain_3d/brushes/texture4.exr b/addons/terrain_3d/brushes/texture4.exr new file mode 100644 index 0000000..a2d96aa Binary files /dev/null and b/addons/terrain_3d/brushes/texture4.exr differ diff --git a/addons/terrain_3d/brushes/texture5.exr b/addons/terrain_3d/brushes/texture5.exr new file mode 100644 index 0000000..62aad60 Binary files /dev/null and b/addons/terrain_3d/brushes/texture5.exr differ diff --git a/addons/terrain_3d/brushes/vegetation1.exr b/addons/terrain_3d/brushes/vegetation1.exr new file mode 100644 index 0000000..d65bc6e Binary files /dev/null and b/addons/terrain_3d/brushes/vegetation1.exr differ diff --git a/addons/terrain_3d/editor.gd b/addons/terrain_3d/editor.gd new file mode 100644 index 0000000..14062ef --- /dev/null +++ b/addons/terrain_3d/editor.gd @@ -0,0 +1,299 @@ +@tool +extends EditorPlugin +#class_name Terrain3DEditorPlugin Cannot be named until Godot #75388 + + +# Includes +const UI: Script = preload("res://addons/terrain_3d/src/ui.gd") +const RegionGizmo: Script = preload("res://addons/terrain_3d/src/region_gizmo.gd") +const ASSET_DOCK: String = "res://addons/terrain_3d/src/asset_dock.tscn" +const PS_DOCK_POSITION: String = "terrain3d/config/dock_position" +const PS_DOCK_PINNED: String = "terrain3d/config/dock_pinned" + +var terrain: Terrain3D +var _last_terrain: Terrain3D +var nav_region: NavigationRegion3D + +var editor: Terrain3DEditor +var ui: Node # Terrain3DUI see Godot #75388 +var asset_dock: PanelContainer +var region_gizmo: RegionGizmo +var visible: bool +var current_region_position: Vector2 +var mouse_global_position: Vector3 = Vector3.ZERO + +# Track negative input (CTRL) +var _negative_input: bool = false +# Track state prior to pressing CTRL: -1 not tracked, 0 false, 1 true +var _prev_enable_state: int = -1 + + +func _enter_tree() -> void: + editor = Terrain3DEditor.new() + ui = UI.new() + ui.plugin = self + add_child(ui) + + region_gizmo = RegionGizmo.new() + + scene_changed.connect(_on_scene_changed) + + asset_dock = load(ASSET_DOCK).instantiate() + asset_dock.initialize(self) + + +func _exit_tree() -> void: + asset_dock.remove_dock(true) + asset_dock.queue_free() + ui.queue_free() + editor.free() + + scene_changed.disconnect(_on_scene_changed) + + +func _handles(p_object: Object) -> bool: + if p_object is Terrain3D: + return true + + # Terrain3DObjects requires access to EditorUndoRedoManager. The only way to make sure it + # always has it, is to pass it in here. _edit is NOT called if the node is cut and pasted. + if p_object is Terrain3DObjects: + p_object.editor_setup(self) + elif p_object is Node3D and p_object.get_parent() is Terrain3DObjects: + p_object.get_parent().editor_setup(self) + + if is_instance_valid(_last_terrain) and _last_terrain.is_inside_tree() and p_object is NavigationRegion3D: + return true + + return false + + +func _edit(p_object: Object) -> void: + if !p_object: + _clear() + + if p_object is Terrain3D: + if p_object == terrain: + return + terrain = p_object + _last_terrain = terrain + editor.set_terrain(terrain) + region_gizmo.set_node_3d(terrain) + terrain.add_gizmo(region_gizmo) + terrain.set_plugin(self) + + # Connect to new Assets resource + if not terrain.assets_changed.is_connected(asset_dock.update_assets): + terrain.assets_changed.connect(asset_dock.update_assets) + asset_dock.update_assets() + # Connect to new Storage resource + if not terrain.storage_changed.is_connected(_load_storage): + terrain.storage_changed.connect(_load_storage) + _load_storage() + else: + _clear() + + if is_instance_valid(_last_terrain) and _last_terrain.is_inside_tree(): + if p_object is NavigationRegion3D: + nav_region = p_object + else: + nav_region = null + + +func _make_visible(p_visible: bool, p_redraw: bool = false) -> void: + visible = p_visible + ui.set_visible(visible) + update_region_grid() + asset_dock.update_dock(visible) + + +func _clear() -> void: + if is_terrain_valid(): + terrain.storage_changed.disconnect(_load_storage) + + terrain.clear_gizmos() + terrain = null + editor.set_terrain(null) + + ui.clear_picking() + + region_gizmo.clear() + + +func _forward_3d_gui_input(p_viewport_camera: Camera3D, p_event: InputEvent) -> int: + if not is_terrain_valid(): + return AFTER_GUI_INPUT_PASS + + ## Track negative input (CTRL) + if p_event is InputEventKey and not p_event.echo and p_event.keycode == KEY_CTRL: + if p_event.is_pressed(): + _negative_input = true + _prev_enable_state = int(ui.toolbar_settings.get_setting("enable")) + ui.toolbar_settings.set_setting("enable", false) + else: + _negative_input = false + ui.toolbar_settings.set_setting("enable", bool(_prev_enable_state)) + _prev_enable_state = -1 + + ## Handle mouse movement + if p_event is InputEventMouseMotion: + if Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT): + return AFTER_GUI_INPUT_PASS + + if _prev_enable_state >= 0 and not Input.is_key_pressed(KEY_CTRL): + _negative_input = false + ui.toolbar_settings.set_setting("enable", bool(_prev_enable_state)) + _prev_enable_state = -1 + + ## Setup for active camera & viewport + + # Snap terrain to current camera + terrain.set_camera(p_viewport_camera) + + # Detect if viewport is set to half_resolution + # Structure is: Node3DEditorViewportContainer/Node3DEditorViewport(4)/SubViewportContainer/SubViewport/Camera3D + var editor_vpc: SubViewportContainer = p_viewport_camera.get_parent().get_parent() + var full_resolution: bool = false if editor_vpc.stretch_shrink == 2 else true + + ## Get mouse location on terrain + + # Project 2D mouse position to 3D position and direction + var mouse_pos: Vector2 = p_event.position if full_resolution else p_event.position/2 + var camera_pos: Vector3 = p_viewport_camera.project_ray_origin(mouse_pos) + var camera_dir: Vector3 = p_viewport_camera.project_ray_normal(mouse_pos) + + # If region tool, grab mouse position without considering height + if editor.get_tool() == Terrain3DEditor.REGION: + var t = -Vector3(0, 1, 0).dot(camera_pos) / Vector3(0, 1, 0).dot(camera_dir) + mouse_global_position = (camera_pos + t * camera_dir) + else: + # Else look for intersection with terrain + var intersection_point: Vector3 = terrain.get_intersection(camera_pos, camera_dir) + if intersection_point.z > 3.4e38 or is_nan(intersection_point.z): # max double or nan + return AFTER_GUI_INPUT_STOP + mouse_global_position = intersection_point + + ## Update decal + ui.decal.global_position = mouse_global_position + ui.decal.albedo_mix = 1.0 + if ui.decal_timer.is_stopped(): + ui.update_decal() + else: + ui.decal_timer.start() + + ## Update region highlight + var region_size = terrain.get_storage().get_region_size() + var region_position: Vector2 = ( Vector2(mouse_global_position.x, mouse_global_position.z) \ + / (region_size * terrain.get_mesh_vertex_spacing()) ).floor() + if current_region_position != region_position: + current_region_position = region_position + update_region_grid() + + if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) and editor.is_operating(): + editor.operate(mouse_global_position, p_viewport_camera.rotation.y) + return AFTER_GUI_INPUT_STOP + + elif p_event is InputEventMouseButton: + ui.update_decal() + + if p_event.get_button_index() == MOUSE_BUTTON_LEFT: + if p_event.is_pressed(): + if Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT): + return AFTER_GUI_INPUT_STOP + + # If picking + if ui.is_picking(): + ui.pick(mouse_global_position) + if not ui.operation_builder or not ui.operation_builder.is_ready(): + return AFTER_GUI_INPUT_STOP + + # If adjusting regions + if editor.get_tool() == Terrain3DEditor.REGION: + # Skip regions that already exist or don't + var has_region: bool = terrain.get_storage().has_region(mouse_global_position) + var op: int = editor.get_operation() + if ( has_region and op == Terrain3DEditor.ADD) or \ + ( not has_region and op == Terrain3DEditor.SUBTRACT ): + return AFTER_GUI_INPUT_STOP + + # If an automatic operation is ready to go (e.g. gradient) + if ui.operation_builder and ui.operation_builder.is_ready(): + ui.operation_builder.apply_operation(editor, mouse_global_position, p_viewport_camera.rotation.y) + return AFTER_GUI_INPUT_STOP + + # Mouse clicked, start editing + editor.start_operation(mouse_global_position) + editor.operate(mouse_global_position, p_viewport_camera.rotation.y) + return AFTER_GUI_INPUT_STOP + + elif editor.is_operating(): + # Mouse released, save undo data + editor.stop_operation() + return AFTER_GUI_INPUT_STOP + + return AFTER_GUI_INPUT_PASS + + +func _load_storage() -> void: + if terrain: + update_region_grid() + + +func update_region_grid() -> void: + if not region_gizmo: + return + + region_gizmo.set_hidden(not visible) + + if is_terrain_valid(): + region_gizmo.show_rect = editor.get_tool() == Terrain3DEditor.REGION + region_gizmo.use_secondary_color = editor.get_operation() == Terrain3DEditor.SUBTRACT + region_gizmo.region_position = current_region_position + region_gizmo.region_size = terrain.get_storage().get_region_size() * terrain.get_mesh_vertex_spacing() + region_gizmo.grid = terrain.get_storage().get_region_offsets() + + terrain.update_gizmos() + return + + region_gizmo.show_rect = false + region_gizmo.region_size = 1024 + region_gizmo.grid = [Vector2i.ZERO] + + +func _on_scene_changed(scene_root: Node) -> void: + if not scene_root: + return + + for node in scene_root.find_children("", "Terrain3DObjects"): + node.editor_setup(self) + + asset_dock.update_assets() + await get_tree().create_timer(2).timeout + asset_dock.update_thumbnails() + + +func is_terrain_valid(p_terrain: Terrain3D = null) -> bool: + var t: Terrain3D + if p_terrain: + t = p_terrain + else: + t = terrain + if is_instance_valid(t) and t.is_inside_tree() and t.get_storage(): + return true + return false + + +func is_selected() -> bool: + var selected: Array[Node] = get_editor_interface().get_selection().get_selected_nodes() + for node in selected: + if node.get_instance_id() == _last_terrain.get_instance_id(): + return true + + return false + + +func select_terrain() -> void: + if is_instance_valid(_last_terrain) and is_terrain_valid(_last_terrain) and not is_selected(): + var es: EditorSelection = get_editor_interface().get_selection() + es.clear() + es.add_node(_last_terrain) diff --git a/addons/terrain_3d/extras/import_sgt.gd b/addons/terrain_3d/extras/import_sgt.gd new file mode 100644 index 0000000..b8b45aa --- /dev/null +++ b/addons/terrain_3d/extras/import_sgt.gd @@ -0,0 +1,41 @@ +## Import From SimpleGrassTextured +# +# This script demonstrates how to import transforms from SimpleGrassTextured. To use it: +# +# 1. Setup the mesh asset you wish to use in the asset dock. +# 1. Select your Terrain3D node. +# 1. In the inspector, click Script (very bottom) and Quick Load import_sgt.gd. +# 1. At the very top, assign your SimpleGrassTextured node. +# 1. Input the desired mesh asset ID. +# 1. Click import. The output window and console will report when finished. +# 1. Clear the script from your Terrain3D node, and save your scene. +# +# The instance transforms are now stored in your Storage resource. +# +# Use clear_instances to erase all instances that match the assign_mesh_id. +# +# The add_transforms function (called by add_multimesh) applies the height_offset specified in the +# Terrain3DMeshAsset. +# Once the transforms are imported, you can reassign any mesh you like into this mesh slot. + +@tool +extends Terrain3D + +@export var simple_grass_textured: MultiMeshInstance3D +@export var assign_mesh_id: int +@export var import: bool = false : set = import_sgt +@export var clear_instances: bool = false : set = clear_multimeshes + + +func clear_multimeshes(value: bool) -> void: + get_instancer().clear_by_mesh(assign_mesh_id) + + +func import_sgt(value: bool) -> void: + var sgt_mm: MultiMesh = simple_grass_textured.multimesh + var global_xform: Transform3D = simple_grass_textured.global_transform + print("Starting to import %d instances from SimpleGrassTextured using mesh id %d" % [ sgt_mm.instance_count, assign_mesh_id]) + var time: int = Time.get_ticks_msec() + get_instancer().add_multimesh(assign_mesh_id, sgt_mm, simple_grass_textured.global_transform) + print("Import complete in %.2f seconds" % [ float(Time.get_ticks_msec() - time)/1000. ]) + diff --git a/addons/terrain_3d/extras/minimum.gdshader b/addons/terrain_3d/extras/minimum.gdshader new file mode 100644 index 0000000..1cedd32 --- /dev/null +++ b/addons/terrain_3d/extras/minimum.gdshader @@ -0,0 +1,146 @@ +// This shader is the minimum needed to allow the terrain to function, without any texturing. + +shader_type spatial; +render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_burley,specular_schlick_ggx; + +// Private uniforms +uniform float _region_size = 1024.0; +uniform float _region_texel_size = 0.0009765625; // = 1/1024 +uniform float _mesh_vertex_spacing = 1.0; +uniform float _mesh_vertex_density = 1.0; // = 1/_mesh_vertex_spacing +uniform int _region_map_size = 16; +uniform int _region_map[256]; +uniform vec2 _region_offsets[256]; +uniform sampler2DArray _height_maps : repeat_disable; +uniform usampler2DArray _control_maps : repeat_disable; +uniform sampler2DArray _color_maps : source_color, filter_linear_mipmap_anisotropic, repeat_disable; +uniform sampler2DArray _texture_array_albedo : source_color, filter_linear_mipmap_anisotropic, repeat_enable; +uniform sampler2DArray _texture_array_normal : hint_normal, filter_linear_mipmap_anisotropic, repeat_enable; + +uniform float _texture_uv_scale_array[32]; +uniform float _texture_uv_rotation_array[32]; +uniform vec4 _texture_color_array[32]; +uniform uint _background_mode = 1u; // NONE = 0, FLAT = 1, NOISE = 2 +uniform uint _mouse_layer = 0x80000000u; // Layer 32 + +varying flat vec2 v_uv_offset; +varying flat vec2 v_uv2_offset; + +//////////////////////// +// Vertex +//////////////////////// + +// Takes in UV world space coordinates, returns ivec3 with: +// XY: (0 to _region_size) coordinates within a region +// Z: layer index used for texturearrays, -1 if not in a region +ivec3 get_region_uv(vec2 uv) { + uv *= _region_texel_size; + ivec2 pos = ivec2(floor(uv)) + (_region_map_size / 2); + int bounds = int(pos.x>=0 && pos.x<_region_map_size && pos.y>=0 && pos.y<_region_map_size); + int layer_index = _region_map[ pos.y * _region_map_size + pos.x ] * bounds - 1; + return ivec3(ivec2((uv - _region_offsets[layer_index]) * _region_size), layer_index); +} + +// Takes in UV2 region space coordinates, returns vec3 with: +// XY: (0 to 1) coordinates within a region +// Z: layer index used for texturearrays, -1 if not in a region +vec3 get_region_uv2(vec2 uv) { + // Vertex function added half a texel to UV2, to center the UV's. vertex(), fragment() and get_height() + // call this with reclaimed versions of UV2, so to keep the last row/column within the correct + // window, take back the half pixel before the floor(). + ivec2 pos = ivec2(floor(uv - vec2(_region_texel_size * 0.5))) + (_region_map_size / 2); + int bounds = int(pos.x>=0 && pos.x<_region_map_size && pos.y>=0 && pos.y<_region_map_size); + int layer_index = _region_map[ pos.y * _region_map_size + pos.x ] * bounds - 1; + // The return value is still texel-centered. + return vec3(uv - _region_offsets[layer_index], float(layer_index)); +} + +// 1 lookup +float get_height(vec2 uv) { + highp float height = 0.0; + vec3 region = get_region_uv2(uv); + if (region.z >= 0.) { + height = texture(_height_maps, region).r; + } + return height; +} + +void vertex() { + // Get vertex of flat plane in world coordinates and set world UV + vec3 vertex = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz; + + // UV coordinates in world space. Values are 0 to _region_size within regions + UV = round(vertex.xz * _mesh_vertex_density); + + // Discard vertices for Holes. 1 lookup + ivec3 region = get_region_uv(UV); + uint control = texelFetch(_control_maps, region, 0).r; + bool hole = bool(control >>2u & 0x1u); + // Show holes to all cameras except mouse camera (on exactly 1 layer) + if ( !(CAMERA_VISIBLE_LAYERS == _mouse_layer) && + (hole || (_background_mode == 0u && region.z < 0)) ) { + VERTEX.x = 0./0.; + } else { + // UV coordinates in region space + texel offset. Values are 0 to 1 within regions + UV2 = (UV + vec2(0.5)) * _region_texel_size; + + // Get final vertex location and save it + VERTEX.y = get_height(UV2); + } + + // Transform UVs to local to avoid poor precision during varying interpolation. + v_uv_offset = MODEL_MATRIX[3].xz * _mesh_vertex_density; + UV -= v_uv_offset; + v_uv2_offset = v_uv_offset * _region_texel_size; + UV2 -= v_uv2_offset; +} + +//////////////////////// +// Fragment +//////////////////////// + +// 3 lookups +vec3 get_normal(vec2 uv, out vec3 tangent, out vec3 binormal) { + // Get the height of the current vertex + float height = get_height(uv); + + // Get the heights to the right and in front, but because of hardware + // interpolation on the edges of the heightmaps, the values are off + // causing the normal map to look weird. So, near the edges of the map + // get the heights to the left or behind instead. Hacky solution that + // reduces the artifact, but doesn't fix it entirely. See #185. + float u, v; + if(mod(uv.y*_region_size, _region_size) > _region_size-2.) { + v = get_height(uv + vec2(0, -_region_texel_size)) - height; + } else { + v = height - get_height(uv + vec2(0, _region_texel_size)); + } + if(mod(uv.x*_region_size, _region_size) > _region_size-2.) { + u = get_height(uv + vec2(-_region_texel_size, 0)) - height; + } else { + u = height - get_height(uv + vec2(_region_texel_size, 0)); + } + + vec3 normal = vec3(u, _mesh_vertex_spacing, v); + normal = normalize(normal); + tangent = cross(normal, vec3(0, 0, 1)); + binormal = cross(normal, tangent); + return normal; +} + +void fragment() { + // Recover UVs + vec2 uv = UV + v_uv_offset; + vec2 uv2 = UV2 + v_uv2_offset; + + // Calculate Terrain Normals. 4 lookups + vec3 w_tangent, w_binormal; + vec3 w_normal = get_normal(uv2, w_tangent, w_binormal); + NORMAL = mat3(VIEW_MATRIX) * w_normal; + TANGENT = mat3(VIEW_MATRIX) * w_tangent; + BINORMAL = mat3(VIEW_MATRIX) * w_binormal; + + // Apply PBR + ALBEDO=vec3(.2); +} + diff --git a/addons/terrain_3d/extras/project_on_terrain3d.gd b/addons/terrain_3d/extras/project_on_terrain3d.gd new file mode 100644 index 0000000..976fd4f --- /dev/null +++ b/addons/terrain_3d/extras/project_on_terrain3d.gd @@ -0,0 +1,90 @@ +# This script is an addon for HungryProton's Scatter https://github.com/HungryProton/scatter +# It provides a `Project on Terrain3D` modifier, which allows Scatter +# to detect the terrain height from Terrain3D without using collision. +# Copy this file into /addons/proton_scatter/src/modifiers +# Then uncomment everything below +# In the editor, add this modifier to Scatter, then set your Terrain3D node + +# This script is an addon for HungryProton's Scatter https://github.com/HungryProton/scatter +# It allows Scatter to detect the terrain height from Terrain3D +# Copy this file into /addons/proton_scatter/src/modifiers +# Then uncomment everything below (select, press CTRL+K) +# In the editor, add this modifier, then set your Terrain3D node + +#@tool +#extends "base_modifier.gd" +# +# +#signal projection_completed +# +# +#@export var terrain_node : NodePath +#@export var align_with_collision_normal := false +# +#var _terrain: Terrain3D +# +# +#func _init() -> void: + #display_name = "Project On Terrain3D" + #category = "Edit" + #can_restrict_height = false + #global_reference_frame_available = true + #local_reference_frame_available = true + #individual_instances_reference_frame_available = true + #use_global_space_by_default() +# + #documentation.add_paragraph( + #"This is a duplicate of `Project on Colliders` that queries the terrain system + #for height and sets the transform height appropriately. +# + #This modifier must have terrain_node set to a Terrain3D node.") +# + #var p := documentation.add_parameter("Terrain Node") + #p.set_type("NodePath") + #p.set_description("Set your Terrain3D node.") + # + #p = documentation.add_parameter("Align with collision normal") + #p.set_type("bool") + #p.set_description( + #"Rotate the transform to align it with the collision normal in case + #the ray cast hit a collider.") +# +# +#func _process_transforms(transforms, domain, _seed) -> void: + #if transforms.is_empty(): + #return +# + #if terrain_node: + #_terrain = domain.get_root().get_node_or_null(terrain_node) +# + #if not _terrain: + #warning += """No Terrain3D node found""" + #return +# + #if not _terrain.storage: + #warning += """Terrain3D storage is not initialized""" + #return +# + ## Get global transform + #var gt: Transform3D = domain.get_global_transform() + #var gt_inverse := gt.affine_inverse() + #for i in transforms.list.size(): + #var location: Vector3 = (gt * transforms.list[i]).origin + #var height: float = _terrain.storage.get_height(location) + #var normal: Vector3 = _terrain.storage.get_normal(location) + # + #if align_with_collision_normal and not is_nan(normal.x): + #transforms.list[i].basis.y = normal + #transforms.list[i].basis.x = -transforms.list[i].basis.z.cross(normal) + #transforms.list[i].basis = transforms.list[i].basis.orthonormalized() +# + #transforms.list[i].origin.y = gt.origin.y if is_nan(height) else height - gt.origin.y +# + #if transforms.is_empty(): + #warning += """Every point has been removed. Possible reasons include: \n + #+ No collider is close enough to the shapes. + #+ Ray length is too short. + #+ Ray direction is incorrect. + #+ Collision mask is not set properly. + #+ Max slope is too low. + #""" diff --git a/addons/terrain_3d/icons/autoshader.svg b/addons/terrain_3d/icons/autoshader.svg new file mode 100644 index 0000000..5e6ee1a --- /dev/null +++ b/addons/terrain_3d/icons/autoshader.svg @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/terrain_3d/icons/autoshader.svg.import b/addons/terrain_3d/icons/autoshader.svg.import new file mode 100644 index 0000000..1551553 --- /dev/null +++ b/addons/terrain_3d/icons/autoshader.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bdwolwswwy8wr" +path="res://.godot/imported/autoshader.svg-9998e61bbc6afd5b134b767acd17a425.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/autoshader.svg" +dest_files=["res://.godot/imported/autoshader.svg-9998e61bbc6afd5b134b767acd17a425.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/color_paint.svg b/addons/terrain_3d/icons/color_paint.svg new file mode 100644 index 0000000..317b742 --- /dev/null +++ b/addons/terrain_3d/icons/color_paint.svg @@ -0,0 +1,175 @@ + +image/svg+xml diff --git a/addons/terrain_3d/icons/color_paint.svg.import b/addons/terrain_3d/icons/color_paint.svg.import new file mode 100644 index 0000000..56d0d5d --- /dev/null +++ b/addons/terrain_3d/icons/color_paint.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://krrmpalen8xu" +path="res://.godot/imported/color_paint.svg-2a416ebf35da04135017e5c6ef53ea57.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/color_paint.svg" +dest_files=["res://.godot/imported/color_paint.svg-2a416ebf35da04135017e5c6ef53ea57.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/height_add.svg b/addons/terrain_3d/icons/height_add.svg new file mode 100644 index 0000000..299a1b8 --- /dev/null +++ b/addons/terrain_3d/icons/height_add.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/terrain_3d/icons/height_add.svg.import b/addons/terrain_3d/icons/height_add.svg.import new file mode 100644 index 0000000..e1bbbad --- /dev/null +++ b/addons/terrain_3d/icons/height_add.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcmbqryggekg1" +path="res://.godot/imported/height_add.svg-9e680ce71fa4c541748e081b99167369.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/height_add.svg" +dest_files=["res://.godot/imported/height_add.svg-9e680ce71fa4c541748e081b99167369.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/height_div.svg b/addons/terrain_3d/icons/height_div.svg new file mode 100644 index 0000000..79a6111 --- /dev/null +++ b/addons/terrain_3d/icons/height_div.svg @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/terrain_3d/icons/height_div.svg.import b/addons/terrain_3d/icons/height_div.svg.import new file mode 100644 index 0000000..c894274 --- /dev/null +++ b/addons/terrain_3d/icons/height_div.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://danh7tb2v6rx7" +path="res://.godot/imported/height_div.svg-449a465f9fdd11ab59f2f1c78815408c.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/height_div.svg" +dest_files=["res://.godot/imported/height_div.svg-449a465f9fdd11ab59f2f1c78815408c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/height_flat.svg b/addons/terrain_3d/icons/height_flat.svg new file mode 100644 index 0000000..98973fe --- /dev/null +++ b/addons/terrain_3d/icons/height_flat.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/terrain_3d/icons/height_flat.svg.import b/addons/terrain_3d/icons/height_flat.svg.import new file mode 100644 index 0000000..fd0e685 --- /dev/null +++ b/addons/terrain_3d/icons/height_flat.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://crj0xfyiyr45u" +path="res://.godot/imported/height_flat.svg-be726a006bf06e05a7a8867510f3996e.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/height_flat.svg" +dest_files=["res://.godot/imported/height_flat.svg-be726a006bf06e05a7a8867510f3996e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/height_mul.svg b/addons/terrain_3d/icons/height_mul.svg new file mode 100644 index 0000000..ef4f92e --- /dev/null +++ b/addons/terrain_3d/icons/height_mul.svg @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/terrain_3d/icons/height_mul.svg.import b/addons/terrain_3d/icons/height_mul.svg.import new file mode 100644 index 0000000..b20aadc --- /dev/null +++ b/addons/terrain_3d/icons/height_mul.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bu3q0645kb3el" +path="res://.godot/imported/height_mul.svg-2dca20fa42a85408713e9bfe411f3c79.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/height_mul.svg" +dest_files=["res://.godot/imported/height_mul.svg-2dca20fa42a85408713e9bfe411f3c79.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/height_slope.svg b/addons/terrain_3d/icons/height_slope.svg new file mode 100644 index 0000000..fe2903d --- /dev/null +++ b/addons/terrain_3d/icons/height_slope.svg @@ -0,0 +1,105 @@ + + + + diff --git a/addons/terrain_3d/icons/height_slope.svg.import b/addons/terrain_3d/icons/height_slope.svg.import new file mode 100644 index 0000000..ed55b14 --- /dev/null +++ b/addons/terrain_3d/icons/height_slope.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0cd7so4kw7da" +path="res://.godot/imported/height_slope.svg-e20540c5538d0c57a9d229a772b3d1b3.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/height_slope.svg" +dest_files=["res://.godot/imported/height_slope.svg-e20540c5538d0c57a9d229a772b3d1b3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/height_smooth.svg b/addons/terrain_3d/icons/height_smooth.svg new file mode 100644 index 0000000..81154c3 --- /dev/null +++ b/addons/terrain_3d/icons/height_smooth.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/addons/terrain_3d/icons/height_smooth.svg.import b/addons/terrain_3d/icons/height_smooth.svg.import new file mode 100644 index 0000000..eef9e53 --- /dev/null +++ b/addons/terrain_3d/icons/height_smooth.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://chrbx4xnxyiel" +path="res://.godot/imported/height_smooth.svg-d8fc43572f5984eef64c886a49988c06.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/height_smooth.svg" +dest_files=["res://.godot/imported/height_smooth.svg-d8fc43572f5984eef64c886a49988c06.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/height_sub.svg b/addons/terrain_3d/icons/height_sub.svg new file mode 100644 index 0000000..bb0d2a7 --- /dev/null +++ b/addons/terrain_3d/icons/height_sub.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/terrain_3d/icons/height_sub.svg.import b/addons/terrain_3d/icons/height_sub.svg.import new file mode 100644 index 0000000..4dc17eb --- /dev/null +++ b/addons/terrain_3d/icons/height_sub.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mo3hnbk3ffjs" +path="res://.godot/imported/height_sub.svg-1a14a9bb856f3db0faa02dba3c807b50.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/height_sub.svg" +dest_files=["res://.godot/imported/height_sub.svg-1a14a9bb856f3db0faa02dba3c807b50.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/holes.svg b/addons/terrain_3d/icons/holes.svg new file mode 100644 index 0000000..da639d9 --- /dev/null +++ b/addons/terrain_3d/icons/holes.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/addons/terrain_3d/icons/holes.svg.import b/addons/terrain_3d/icons/holes.svg.import new file mode 100644 index 0000000..8117195 --- /dev/null +++ b/addons/terrain_3d/icons/holes.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bsmaxekrmnuy2" +path="res://.godot/imported/holes.svg-a7cb97bb50d7879cd274646e207b9213.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/holes.svg" +dest_files=["res://.godot/imported/holes.svg-a7cb97bb50d7879cd274646e207b9213.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/layers.svg b/addons/terrain_3d/icons/layers.svg new file mode 100644 index 0000000..5c9c4c9 --- /dev/null +++ b/addons/terrain_3d/icons/layers.svg @@ -0,0 +1,102 @@ + + diff --git a/addons/terrain_3d/icons/layers.svg.import b/addons/terrain_3d/icons/layers.svg.import new file mode 100644 index 0000000..559cd21 --- /dev/null +++ b/addons/terrain_3d/icons/layers.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cs1la1mashf2e" +path="res://.godot/imported/layers.svg-4a679bb626c5179d3773f33e77e4a5e4.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/layers.svg" +dest_files=["res://.godot/imported/layers.svg-4a679bb626c5179d3773f33e77e4a5e4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/multimesh.svg b/addons/terrain_3d/icons/multimesh.svg new file mode 100644 index 0000000..a62e5f9 --- /dev/null +++ b/addons/terrain_3d/icons/multimesh.svg @@ -0,0 +1,40 @@ + + + + + + diff --git a/addons/terrain_3d/icons/multimesh.svg.import b/addons/terrain_3d/icons/multimesh.svg.import new file mode 100644 index 0000000..1493feb --- /dev/null +++ b/addons/terrain_3d/icons/multimesh.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjlcl5lf20ve0" +path="res://.godot/imported/multimesh.svg-5487b93b04ddbaae37b5d3e91f10750b.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/multimesh.svg" +dest_files=["res://.godot/imported/multimesh.svg-5487b93b04ddbaae37b5d3e91f10750b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/navigation.svg b/addons/terrain_3d/icons/navigation.svg new file mode 100644 index 0000000..1056202 --- /dev/null +++ b/addons/terrain_3d/icons/navigation.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/terrain_3d/icons/navigation.svg.import b/addons/terrain_3d/icons/navigation.svg.import new file mode 100644 index 0000000..d8ac263 --- /dev/null +++ b/addons/terrain_3d/icons/navigation.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://f3po5pogkv2b" +path="res://.godot/imported/navigation.svg-1e4cf210c589be8d2911c522d4a17d78.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/navigation.svg" +dest_files=["res://.godot/imported/navigation.svg-1e4cf210c589be8d2911c522d4a17d78.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/picker.svg b/addons/terrain_3d/icons/picker.svg new file mode 100644 index 0000000..0ce7af4 --- /dev/null +++ b/addons/terrain_3d/icons/picker.svg @@ -0,0 +1,40 @@ + + + + + + diff --git a/addons/terrain_3d/icons/picker.svg.import b/addons/terrain_3d/icons/picker.svg.import new file mode 100644 index 0000000..4a7369e --- /dev/null +++ b/addons/terrain_3d/icons/picker.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c11ip32w7ln4v" +path="res://.godot/imported/picker.svg-0ed48f8d7e66014d2aac4b303bc65df6.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/picker.svg" +dest_files=["res://.godot/imported/picker.svg-0ed48f8d7e66014d2aac4b303bc65df6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/picker_checked.svg b/addons/terrain_3d/icons/picker_checked.svg new file mode 100644 index 0000000..653d57e --- /dev/null +++ b/addons/terrain_3d/icons/picker_checked.svg @@ -0,0 +1,43 @@ + + + + + + + diff --git a/addons/terrain_3d/icons/picker_checked.svg.import b/addons/terrain_3d/icons/picker_checked.svg.import new file mode 100644 index 0000000..ff53b15 --- /dev/null +++ b/addons/terrain_3d/icons/picker_checked.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bg8x6o32ggt88" +path="res://.godot/imported/picker_checked.svg-81f35b6ae38bccc8aa9e7ae22b530168.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/picker_checked.svg" +dest_files=["res://.godot/imported/picker_checked.svg-81f35b6ae38bccc8aa9e7ae22b530168.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/region_add.svg b/addons/terrain_3d/icons/region_add.svg new file mode 100644 index 0000000..56d7c92 --- /dev/null +++ b/addons/terrain_3d/icons/region_add.svg @@ -0,0 +1,95 @@ + +image/svg+xml diff --git a/addons/terrain_3d/icons/region_add.svg.import b/addons/terrain_3d/icons/region_add.svg.import new file mode 100644 index 0000000..e50c30b --- /dev/null +++ b/addons/terrain_3d/icons/region_add.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c0tn453fsckv5" +path="res://.godot/imported/region_add.svg-a05dc161a452dd3e024f9835a737d9f0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/region_add.svg" +dest_files=["res://.godot/imported/region_add.svg-a05dc161a452dd3e024f9835a737d9f0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/region_remove.svg b/addons/terrain_3d/icons/region_remove.svg new file mode 100644 index 0000000..315657d --- /dev/null +++ b/addons/terrain_3d/icons/region_remove.svg @@ -0,0 +1,102 @@ + +image/svg+xml diff --git a/addons/terrain_3d/icons/region_remove.svg.import b/addons/terrain_3d/icons/region_remove.svg.import new file mode 100644 index 0000000..6ded856 --- /dev/null +++ b/addons/terrain_3d/icons/region_remove.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cbpo5eamf3bx2" +path="res://.godot/imported/region_remove.svg-5710e8aeb34f1eaa06e637634f4a7d16.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/region_remove.svg" +dest_files=["res://.godot/imported/region_remove.svg-5710e8aeb34f1eaa06e637634f4a7d16.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/terrain3d.svg b/addons/terrain_3d/icons/terrain3d.svg new file mode 100644 index 0000000..ca8c661 --- /dev/null +++ b/addons/terrain_3d/icons/terrain3d.svg @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/terrain_3d/icons/terrain3d.svg.import b/addons/terrain_3d/icons/terrain3d.svg.import new file mode 100644 index 0000000..c077de1 --- /dev/null +++ b/addons/terrain_3d/icons/terrain3d.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bnsydn4jkyeyn" +path="res://.godot/imported/terrain3d.svg-eb45756f1a003759fda81eaa1db10769.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/terrain3d.svg" +dest_files=["res://.godot/imported/terrain3d.svg-eb45756f1a003759fda81eaa1db10769.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/texture_paint.svg b/addons/terrain_3d/icons/texture_paint.svg new file mode 100644 index 0000000..908d3f4 --- /dev/null +++ b/addons/terrain_3d/icons/texture_paint.svg @@ -0,0 +1,151 @@ + +image/svg+xml diff --git a/addons/terrain_3d/icons/texture_paint.svg.import b/addons/terrain_3d/icons/texture_paint.svg.import new file mode 100644 index 0000000..8a09d92 --- /dev/null +++ b/addons/terrain_3d/icons/texture_paint.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://duo8valena3a2" +path="res://.godot/imported/texture_paint.svg-72da4fd2096377e625a8fe09cdacb0e4.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/texture_paint.svg" +dest_files=["res://.godot/imported/texture_paint.svg-72da4fd2096377e625a8fe09cdacb0e4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/texture_spray.svg b/addons/terrain_3d/icons/texture_spray.svg new file mode 100644 index 0000000..bfc3e82 --- /dev/null +++ b/addons/terrain_3d/icons/texture_spray.svg @@ -0,0 +1,165 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/terrain_3d/icons/texture_spray.svg.import b/addons/terrain_3d/icons/texture_spray.svg.import new file mode 100644 index 0000000..c4acc6f --- /dev/null +++ b/addons/terrain_3d/icons/texture_spray.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://16yfxe7xe703" +path="res://.godot/imported/texture_spray.svg-326fee11cf418653e621bc222a470861.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/texture_spray.svg" +dest_files=["res://.godot/imported/texture_spray.svg-326fee11cf418653e621bc222a470861.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/icons/wetness.svg b/addons/terrain_3d/icons/wetness.svg new file mode 100644 index 0000000..90c3d03 --- /dev/null +++ b/addons/terrain_3d/icons/wetness.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/terrain_3d/icons/wetness.svg.import b/addons/terrain_3d/icons/wetness.svg.import new file mode 100644 index 0000000..9379330 --- /dev/null +++ b/addons/terrain_3d/icons/wetness.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcgg0srmqsh3n" +path="res://.godot/imported/wetness.svg-9b2ddec096ab7734492b77b20c75c82b.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/terrain_3d/icons/wetness.svg" +dest_files=["res://.godot/imported/wetness.svg-9b2ddec096ab7734492b77b20c75c82b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/terrain_3d/plugin.cfg b/addons/terrain_3d/plugin.cfg new file mode 100644 index 0000000..b738b1d --- /dev/null +++ b/addons/terrain_3d/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Terrain3D" +description="A high performance, editable terrain system for Godot 4." +author="Cory Petkovsek & Roope Palmroos" +version="0.9.2" +script="editor.gd" diff --git a/addons/terrain_3d/src/asset_dock.gd b/addons/terrain_3d/src/asset_dock.gd new file mode 100644 index 0000000..b4fea39 --- /dev/null +++ b/addons/terrain_3d/src/asset_dock.gd @@ -0,0 +1,832 @@ +@tool +extends PanelContainer +#class_name Terrain3DAssetDock + +signal confirmation_closed +signal confirmation_confirmed +signal confirmation_canceled + +const PS_DOCK_SLOT: String = "terrain3d/config/dock_slot" +const PS_DOCK_TILE_SIZE: String = "terrain3d/config/dock_tile_size" +const PS_DOCK_FLOATING: String = "terrain3d/config/dock_floating" +const PS_DOCK_PINNED: String = "terrain3d/config/dock_always_on_top" +const PS_DOCK_WINDOW_POSITION: String = "terrain3d/config/dock_window_position" +const PS_DOCK_WINDOW_SIZE: String = "terrain3d/config/dock_window_size" + +var texture_list: ListContainer +var mesh_list: ListContainer +var _current_list: ListContainer +var _last_thumb_update_time: int = 0 +const MAX_UPDATE_TIME: int = 1000 + +var placement_opt: OptionButton +var floating_btn: Button +var pinned_btn: Button +var size_slider: HSlider +var box: BoxContainer +var buttons: BoxContainer +var textures_btn: Button +var meshes_btn: Button +var asset_container: ScrollContainer +var confirm_dialog: ConfirmationDialog +var _confirmed: bool = false + +# Used only for editor, so change to single visible/hiddden +enum { + HIDDEN = -1, + SIDEBAR = 0, + BOTTOM = 1, + WINDOWED = 2, +} +var state: int = HIDDEN + +var window: Window +var _godot_editor_window: Window # The main Godot Editor window +var _godot_last_state: Window.Mode = Window.MODE_FULLSCREEN + +enum { + POS_LEFT_UL = 0, + POS_LEFT_BL = 1, + POS_LEFT_UR = 2, + POS_LEFT_BR = 3, + POS_RIGHT_UL = 4, + POS_RIGHT_BL = 5, + POS_RIGHT_UR = 6, + POS_RIGHT_BR = 7, + POS_BOTTOM = 8, + POS_MAX = 9, +} +var slot: int = POS_RIGHT_BR +var _initialized: bool = false +var plugin: EditorPlugin +var editor_settings: EditorSettings + + +func initialize(p_plugin: EditorPlugin) -> void: + if p_plugin: + plugin = p_plugin + + # Get editor window. Structure is root:Window/EditorNode/Base Control + _godot_editor_window = plugin.get_editor_interface().get_base_control().get_parent().get_parent() + _godot_last_state = _godot_editor_window.mode + + placement_opt = $Box/Buttons/PlacementOpt + pinned_btn = $Box/Buttons/Pinned + floating_btn = $Box/Buttons/Floating + floating_btn.owner = null + size_slider = $Box/Buttons/SizeSlider + size_slider.owner = null + box = $Box + buttons = $Box/Buttons + textures_btn = $Box/Buttons/TexturesBtn + meshes_btn = $Box/Buttons/MeshesBtn + asset_container = $Box/ScrollContainer + + texture_list = ListContainer.new() + texture_list.plugin = plugin + texture_list.type = Terrain3DAssets.TYPE_TEXTURE + asset_container.add_child(texture_list) + mesh_list = ListContainer.new() + mesh_list.plugin = plugin + mesh_list.type = Terrain3DAssets.TYPE_MESH + mesh_list.visible = false + asset_container.add_child(mesh_list) + _current_list = texture_list + + editor_settings = EditorInterface.get_editor_settings() + load_editor_settings() + + # Connect signals + resized.connect(update_layout) + textures_btn.pressed.connect(_on_textures_pressed) + meshes_btn.pressed.connect(_on_meshes_pressed) + placement_opt.item_selected.connect(set_slot) + floating_btn.pressed.connect(make_dock_float) + pinned_btn.toggled.connect(_on_pin_changed) + pinned_btn.visible = false + size_slider.value_changed.connect(_on_slider_changed) + plugin.ui.toolbar.tool_changed.connect(_on_tool_changed) + + meshes_btn.add_theme_font_size_override("font_size", 16 * EditorInterface.get_editor_scale()) + textures_btn.add_theme_font_size_override("font_size", 16 * EditorInterface.get_editor_scale()) + + _initialized = true + update_dock(plugin.visible) + update_layout() + + +func _ready() -> void: + if not _initialized: + return + + # Setup styles + set("theme_override_styles/panel", get_theme_stylebox("panel", "Panel")) + # Avoid saving icon resources in tscn when editing w/ a tool script + if plugin.get_editor_interface().get_edited_scene_root() != self: + pinned_btn.icon = get_theme_icon("Pin", "EditorIcons") + pinned_btn.text = "" + floating_btn.icon = get_theme_icon("MakeFloating", "EditorIcons") + floating_btn.text = "" + + update_thumbnails() + confirm_dialog = ConfirmationDialog.new() + add_child(confirm_dialog) + confirm_dialog.hide() + confirm_dialog.confirmed.connect(func(): _confirmed = true; \ + emit_signal("confirmation_closed"); \ + emit_signal("confirmation_confirmed") ) + confirm_dialog.canceled.connect(func(): _confirmed = false; \ + emit_signal("confirmation_closed"); \ + emit_signal("confirmation_canceled") ) + + +func get_current_list() -> ListContainer: + return _current_list + + +## Dock placement + +func set_slot(p_slot: int) -> void: + p_slot = clamp(p_slot, 0, POS_MAX-1) + + if slot != p_slot: + slot = p_slot + placement_opt.selected = slot + save_editor_settings() + plugin.select_terrain() + update_dock(plugin.visible) + + +func remove_dock(p_force: bool = false) -> void: + if state == SIDEBAR: + plugin.remove_control_from_docks(self) + state = HIDDEN + + elif state == BOTTOM: + plugin.remove_control_from_bottom_panel(self) + state = HIDDEN + + # If windowed and destination is not window or final exit, otherwise leave + elif state == WINDOWED and p_force: + if not window: + return + var parent: Node = get_parent() + if parent: + parent.remove_child(self) + _godot_editor_window.mouse_entered.disconnect(_on_godot_window_entered) + _godot_editor_window.focus_entered.disconnect(_on_godot_focus_entered) + _godot_editor_window.focus_exited.disconnect(_on_godot_focus_exited) + window.hide() + window.queue_free() + window = null + floating_btn.button_pressed = false + floating_btn.visible = true + pinned_btn.visible = false + placement_opt.visible = true + state = HIDDEN + update_dock(plugin.visible) # return window to side/bottom + + +func update_dock(p_visible: bool) -> void: + update_assets() + if not _initialized: + return + + if window: + return + elif floating_btn.button_pressed: + # No window, but floating button pressed, occurs when from editor settings + make_dock_float() + return + + remove_dock() + # Add dock to new destination + # Sidebar + if slot < POS_BOTTOM: + state = SIDEBAR + plugin.add_control_to_dock(slot, self) + elif slot == POS_BOTTOM: + state = BOTTOM + plugin.add_control_to_bottom_panel(self, "Terrain3D") + if p_visible: + plugin.make_bottom_panel_item_visible(self) + + +func update_layout() -> void: + if not _initialized: + return + + # Detect if we have a new window from Make floating, grab it so we can free it properly + if not window and get_parent() and get_parent().get_parent() is Window: + window = get_parent().get_parent() + make_dock_float() + return # Will call this function again upon display + + var size_parent: Control = size_slider.get_parent() + # Vertical layout in window / sidebar + if window or slot < POS_BOTTOM: + box.vertical = true + buttons.vertical = false + + if size.x >= 500 and size_parent != buttons: + size_slider.reparent(buttons) + buttons.move_child(size_slider, 3) + elif size.x < 500 and size_parent != box: + size_slider.reparent(box) + box.move_child(size_slider, 1) + floating_btn.reparent(buttons) + buttons.move_child(floating_btn, 4) + + # Wide layout on bottom bar + else: + size_slider.reparent(buttons) + buttons.move_child(size_slider, 3) + floating_btn.reparent(box) + box.vertical = false + buttons.vertical = true + + save_editor_settings() + + +func update_thumbnails() -> void: + if not is_instance_valid(plugin.terrain): + return + if _current_list.type == Terrain3DAssets.TYPE_MESH and \ + Time.get_ticks_msec() - _last_thumb_update_time > MAX_UPDATE_TIME: + plugin.terrain.assets.create_mesh_thumbnails() + _last_thumb_update_time = Time.get_ticks_msec() + for mesh_asset in mesh_list.entries: + mesh_asset.queue_redraw() +## Dock Button handlers + + +func _on_pin_changed(toggled: bool) -> void: + if window: + window.always_on_top = pinned_btn.button_pressed + save_editor_settings() + + +func _on_slider_changed(value: float) -> void: + if texture_list: + texture_list.set_entry_width(value) + if mesh_list: + mesh_list.set_entry_width(value) + save_editor_settings() + + +func _on_textures_pressed() -> void: + _current_list = texture_list + texture_list.update_asset_list() + texture_list.visible = true + mesh_list.visible = false + textures_btn.button_pressed = true + meshes_btn.button_pressed = false + texture_list.set_selected_id(texture_list.selected_id) + plugin.get_editor_interface().edit_node(plugin.terrain) + + +func _on_meshes_pressed() -> void: + _current_list = mesh_list + mesh_list.update_asset_list() + mesh_list.visible = true + texture_list.visible = false + meshes_btn.button_pressed = true + textures_btn.button_pressed = false + mesh_list.set_selected_id(mesh_list.selected_id) + plugin.get_editor_interface().edit_node(plugin.terrain) + update_thumbnails() + + +func _on_tool_changed(p_tool: Terrain3DEditor.Tool, p_operation: Terrain3DEditor.Operation) -> void: + if p_tool == Terrain3DEditor.INSTANCER: + _on_meshes_pressed() + elif p_tool == Terrain3DEditor.TEXTURE: + _on_textures_pressed() + + +## Update Dock Contents + + +func update_assets() -> void: + if not _initialized: + return + + # Verify signals to individual lists + if plugin.is_terrain_valid() and plugin.terrain.assets: + if not plugin.terrain.assets.textures_changed.is_connected(texture_list.update_asset_list): + plugin.terrain.assets.textures_changed.connect(texture_list.update_asset_list) + if not plugin.terrain.assets.meshes_changed.is_connected(mesh_list.update_asset_list): + plugin.terrain.assets.meshes_changed.connect(mesh_list.update_asset_list) + + _current_list.update_asset_list() + +## Window Management + + +func make_dock_float() -> void: + # If already created (eg from editor Make Floating) + if not window: + remove_dock() + create_window() + + state = WINDOWED + pinned_btn.visible = true + floating_btn.visible = false + placement_opt.visible = false + window.title = "Terrain3D Asset Dock" + window.always_on_top = pinned_btn.button_pressed + window.close_requested.connect(remove_dock.bind(true)) + visible = true # Is hidden when pops off of bottom. ?? + _godot_editor_window.grab_focus() + + +func create_window() -> void: + window = Window.new() + window.wrap_controls = true + var mc := MarginContainer.new() + mc.set_anchors_preset(PRESET_FULL_RECT, false) + mc.add_child(self) + window.add_child(mc) + window.set_transient(false) + window.set_size(get_setting(PS_DOCK_WINDOW_SIZE, Vector2i(512, 512))) + window.set_position(get_setting(PS_DOCK_WINDOW_POSITION, Vector2i(704, 284))) + plugin.add_child(window) + window.show() + window.window_input.connect(_on_window_input) + window.focus_exited.connect(_on_window_focus_exited) + _godot_editor_window.mouse_entered.connect(_on_godot_window_entered) + _godot_editor_window.focus_entered.connect(_on_godot_focus_entered) + _godot_editor_window.focus_exited.connect(_on_godot_focus_exited) + + +func _on_window_input(event: InputEvent) -> void: + # Capture CTRL+S when doc focused to save scene) + if event is InputEventKey and event.keycode == KEY_S and event.pressed and event.is_command_or_control_pressed(): + save_editor_settings() + plugin.get_editor_interface().save_scene() + + +func _on_window_focus_exited() -> void: + # Capture window position w/o other changes + save_editor_settings() + + +func _on_godot_window_entered() -> void: + if is_instance_valid(window) and window.has_focus(): + _godot_editor_window.grab_focus() + + +func _on_godot_focus_entered() -> void: + # If asset dock is windowed, and Godot was minimized, and now is not, restore asset dock window + if is_instance_valid(window): + if _godot_last_state == Window.MODE_MINIMIZED and _godot_editor_window.mode != Window.MODE_MINIMIZED: + window.show() + _godot_last_state = _godot_editor_window.mode + _godot_editor_window.grab_focus() + + +func _on_godot_focus_exited() -> void: + if is_instance_valid(window) and _godot_editor_window.mode == Window.MODE_MINIMIZED: + window.hide() + _godot_last_state = _godot_editor_window.mode + + +## Manage Editor Settings + + +func get_setting(p_str: String, p_default: Variant) -> Variant: + if editor_settings.has_setting(p_str): + return editor_settings.get_setting(p_str) + else: + return p_default + + +func load_editor_settings() -> void: + floating_btn.button_pressed = get_setting(PS_DOCK_FLOATING, false) + pinned_btn.button_pressed = get_setting(PS_DOCK_PINNED, true) + size_slider.value = get_setting(PS_DOCK_TILE_SIZE, 83) + set_slot(get_setting(PS_DOCK_SLOT, POS_BOTTOM)) + _on_slider_changed(size_slider.value) + # Window pos/size set on window creation in update_dock + update_dock(plugin.visible) + + +func save_editor_settings() -> void: + if not _initialized: + return + editor_settings.set_setting(PS_DOCK_SLOT, slot) + editor_settings.set_setting(PS_DOCK_TILE_SIZE, size_slider.value) + editor_settings.set_setting(PS_DOCK_FLOATING, floating_btn.button_pressed) + editor_settings.set_setting(PS_DOCK_PINNED, pinned_btn.button_pressed) + if window: + editor_settings.set_setting(PS_DOCK_WINDOW_SIZE, window.size) + editor_settings.set_setting(PS_DOCK_WINDOW_POSITION, window.position) + + +############################################################## +## class ListContainer +############################################################## + + +class ListContainer extends Container: + var plugin: EditorPlugin + var type := Terrain3DAssets.TYPE_TEXTURE + var entries: Array[ListEntry] + var selected_id: int = 0 + var height: float = 0 + var width: float = 83 + var focus_style: StyleBox + + + func _ready() -> void: + set_v_size_flags(SIZE_EXPAND_FILL) + set_h_size_flags(SIZE_EXPAND_FILL) + focus_style = get_theme_stylebox("focus", "Button").duplicate() + focus_style.set_border_width_all(2) + focus_style.set_border_color(Color(1, 1, 1, .67)) + + + func clear() -> void: + for e in entries: + e.get_parent().remove_child(e) + e.queue_free() + entries.clear() + + + func update_asset_list() -> void: + clear() + + # Grab terrain + var t: Terrain3D + if plugin.is_terrain_valid(): + t = plugin.terrain + elif is_instance_valid(plugin._last_terrain) and plugin.is_terrain_valid(plugin._last_terrain): + t = plugin._last_terrain + else: + return + + if not t.assets: + return + + if type == Terrain3DAssets.TYPE_TEXTURE: + var texture_count: int = t.assets.get_texture_count() + for i in texture_count: + var texture: Terrain3DTextureAsset = t.assets.get_texture(i) + add_item(texture) + if texture_count < Terrain3DAssets.MAX_TEXTURES: + add_item() + else: + var mesh_count: int = t.assets.get_mesh_count() + for i in mesh_count: + var mesh: Terrain3DMeshAsset = t.assets.get_mesh_asset(i) + add_item(mesh, t.assets) + if mesh_count < Terrain3DAssets.MAX_MESHES: + add_item() + if selected_id >= mesh_count or selected_id < 0: + set_selected_id(0) + + + func add_item(p_resource: Resource = null, p_assets: Terrain3DAssets = null) -> void: + var entry: ListEntry = ListEntry.new() + entry.focus_style = focus_style + var id: int = entries.size() + + entry.set_edited_resource(p_resource) + entry.hovered.connect(_on_resource_hovered.bind(id)) + entry.selected.connect(set_selected_id.bind(id)) + entry.inspected.connect(_on_resource_inspected) + entry.changed.connect(_on_resource_changed.bind(id)) + entry.type = type + entry.asset_list = p_assets + add_child(entry) + entries.push_back(entry) + + if p_resource: + entry.set_selected(id == selected_id) + if not p_resource.id_changed.is_connected(set_selected_after_swap): + p_resource.id_changed.connect(set_selected_after_swap) + + + func _on_resource_hovered(p_id: int): + if type == Terrain3DAssets.TYPE_MESH: + if plugin.terrain: + plugin.terrain.assets.create_mesh_thumbnails(p_id) + + + func set_selected_after_swap(p_type: Terrain3DAssets.AssetType, p_old_id: int, p_new_id: int) -> void: + set_selected_id(clamp(p_new_id, 0, entries.size() - 2)) + + + func set_selected_id(p_id: int) -> void: + selected_id = p_id + + for i in entries.size(): + var entry: ListEntry = entries[i] + entry.set_selected(i == selected_id) + + plugin.select_terrain() + + # Select Paint tool if clicking a texture + if type == Terrain3DAssets.TYPE_TEXTURE and plugin.editor.get_tool() != Terrain3DEditor.TEXTURE: + var paint_btn: Button = plugin.ui.toolbar.get_node_or_null("PaintBaseTexture") + if paint_btn: + paint_btn.set_pressed(true) + plugin.ui._on_tool_changed(Terrain3DEditor.TEXTURE, Terrain3DEditor.REPLACE) + + elif type == Terrain3DAssets.TYPE_MESH and plugin.editor.get_tool() != Terrain3DEditor.INSTANCER: + var instancer_btn: Button = plugin.ui.toolbar.get_node_or_null("InstanceMeshes") + if instancer_btn: + instancer_btn.set_pressed(true) + plugin.ui._on_tool_changed(Terrain3DEditor.INSTANCER, Terrain3DEditor.ADD) + + # Update editor with selected brush + plugin.ui._on_setting_changed() + + + func _on_resource_inspected(p_resource: Resource) -> void: + await get_tree().create_timer(.01).timeout + plugin.get_editor_interface().edit_resource(p_resource) + + + func _on_resource_changed(p_resource: Resource, p_id: int) -> void: + if not p_resource: + var asset_dock: Control = get_parent().get_parent().get_parent() + if type == Terrain3DAssets.TYPE_TEXTURE: + asset_dock.confirm_dialog.dialog_text = "Are you sure you want to clear this texture?" + else: + asset_dock.confirm_dialog.dialog_text = "Are you sure you want to clear this mesh and delete all instances?" + asset_dock.confirm_dialog.popup_centered() + await asset_dock.confirmation_closed + if not asset_dock._confirmed: + update_asset_list() + return + + if not plugin.is_terrain_valid(): + plugin.select_terrain() + await get_tree().create_timer(.01).timeout + + if plugin.is_terrain_valid(): + if type == Terrain3DAssets.TYPE_TEXTURE: + plugin.terrain.get_assets().set_texture(p_id, p_resource) + else: + plugin.terrain.get_assets().set_mesh_asset(p_id, p_resource) + await get_tree().create_timer(.01).timeout + plugin.terrain.assets.create_mesh_thumbnails(p_id) + + # If removing an entry, clear inspector + if not p_resource: + plugin.get_editor_interface().inspect_object(null) + + # If null resource, remove last + if not p_resource: + var last_offset: int = 2 + if p_id == entries.size()-2: + last_offset = 3 + set_selected_id(clamp(selected_id, 0, entries.size() - last_offset)) + + # Update editor with selected brush + plugin.ui._on_setting_changed() + + + func get_selected_id() -> int: + return selected_id + + + + func set_entry_width(value: float) -> void: + width = clamp(value, 56, 230) + redraw() + + + func get_entry_width() -> float: + return width + + + func redraw() -> void: + height = 0 + var id: int = 0 + var separation: float = 4 + var columns: int = 3 + columns = clamp(size.x / width, 1, 100) + + for c in get_children(): + if is_instance_valid(c): + c.size = Vector2(width, width) - Vector2(separation, separation) + c.position = Vector2(id % columns, id / columns) * width + \ + Vector2(separation / columns, separation / columns) + height = max(height, c.position.y + width) + id += 1 + + + # Needed to enable ScrollContainer scroll bar + func _get_minimum_size() -> Vector2: + return Vector2(0, height) + + + func _notification(p_what) -> void: + if p_what == NOTIFICATION_SORT_CHILDREN: + redraw() + + +############################################################## +## class ListEntry +############################################################## + + +class ListEntry extends VBoxContainer: + signal hovered() + signal selected() + signal changed(resource: Resource) + signal inspected(resource: Resource) + + var resource: Resource + var type := Terrain3DAssets.TYPE_TEXTURE + var _thumbnail: Texture2D + var drop_data: bool = false + var is_hovered: bool = false + var is_selected: bool = false + var asset_list: Terrain3DAssets + + var button_clear: TextureButton + var button_edit: TextureButton + var name_label: Label + + @onready var add_icon: Texture2D = get_theme_icon("Add", "EditorIcons") + @onready var clear_icon: Texture2D = get_theme_icon("Close", "EditorIcons") + @onready var edit_icon: Texture2D = get_theme_icon("Edit", "EditorIcons") + @onready var background: StyleBox = get_theme_stylebox("pressed", "Button") + var focus_style: StyleBox + + + func _ready() -> void: + var icon_size: Vector2 = Vector2(12, 12) + + button_clear = TextureButton.new() + button_clear.set_texture_normal(clear_icon) + button_clear.set_custom_minimum_size(icon_size) + button_clear.set_h_size_flags(Control.SIZE_SHRINK_END) + button_clear.set_visible(resource != null) + button_clear.pressed.connect(clear) + add_child(button_clear) + + button_edit = TextureButton.new() + button_edit.set_texture_normal(edit_icon) + button_edit.set_custom_minimum_size(icon_size) + button_edit.set_h_size_flags(Control.SIZE_SHRINK_END) + button_edit.set_visible(resource != null) + button_edit.pressed.connect(edit) + add_child(button_edit) + + name_label = Label.new() + add_child(name_label, true) + name_label.visible = false + name_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + name_label.vertical_alignment = VERTICAL_ALIGNMENT_BOTTOM + name_label.size_flags_vertical = Control.SIZE_EXPAND_FILL + name_label.add_theme_color_override("font_shadow_color", Color.BLACK) + name_label.add_theme_constant_override("shadow_offset_x", 1) + name_label.add_theme_constant_override("shadow_offset_y", 1) + name_label.add_theme_font_size_override("font_size", 15) + name_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + name_label.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS + if type == Terrain3DAssets.TYPE_TEXTURE: + name_label.text = "Add Texture" + else: + name_label.text = "Add Mesh" + + + func _notification(p_what) -> void: + match p_what: + NOTIFICATION_DRAW: + var rect: Rect2 = Rect2(Vector2.ZERO, get_size()) + if !resource: + draw_style_box(background, rect) + draw_texture(add_icon, (get_size() / 2) - (add_icon.get_size() / 2)) + else: + if type == Terrain3DAssets.TYPE_TEXTURE: + name_label.text = (resource as Terrain3DTextureAsset).get_name() + self_modulate = resource.get_albedo_color() + _thumbnail = resource.get_albedo_texture() + if _thumbnail: + draw_texture_rect(_thumbnail, rect, false) + texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST_WITH_MIPMAPS + else: + name_label.text = (resource as Terrain3DMeshAsset).get_name() + var id: int = (resource as Terrain3DMeshAsset).get_id() + _thumbnail = resource.get_thumbnail() + if _thumbnail: + draw_texture_rect(_thumbnail, rect, false) + texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS + else: + draw_rect(rect, Color(.15, .15, .15, 1.)) + name_label.add_theme_font_size_override("font_size", 4 + rect.size.x/10) + if drop_data: + draw_style_box(focus_style, rect) + if is_hovered: + draw_rect(rect, Color(1, 1, 1, 0.2)) + if is_selected: + draw_style_box(focus_style, rect) + NOTIFICATION_MOUSE_ENTER: + is_hovered = true + name_label.visible = true + emit_signal("hovered") + queue_redraw() + NOTIFICATION_MOUSE_EXIT: + is_hovered = false + name_label.visible = false + drop_data = false + queue_redraw() + + + func _gui_input(p_event: InputEvent) -> void: + if p_event is InputEventMouseButton: + if p_event.is_pressed(): + match p_event.get_button_index(): + MOUSE_BUTTON_LEFT: + # If `Add new` is clicked + if !resource: + if type == Terrain3DAssets.TYPE_TEXTURE: + set_edited_resource(Terrain3DTextureAsset.new(), false) + else: + set_edited_resource(Terrain3DMeshAsset.new(), false) + edit() + else: + emit_signal("selected") + MOUSE_BUTTON_RIGHT: + if resource: + edit() + MOUSE_BUTTON_MIDDLE: + if resource: + clear() + + + func _can_drop_data(p_at_position: Vector2, p_data: Variant) -> bool: + drop_data = false + if typeof(p_data) == TYPE_DICTIONARY: + if p_data.files.size() == 1: + queue_redraw() + drop_data = true + return drop_data + + + func _drop_data(p_at_position: Vector2, p_data: Variant) -> void: + if typeof(p_data) == TYPE_DICTIONARY: + var res: Resource = load(p_data.files[0]) + if res is Texture2D and type == Terrain3DAssets.TYPE_TEXTURE: + var ta := Terrain3DTextureAsset.new() + if resource is Terrain3DTextureAsset: + ta.id = resource.id + ta.set_albedo_texture(res) + set_edited_resource(ta, false) + resource = ta + elif res is Terrain3DTextureAsset and type == Terrain3DAssets.TYPE_TEXTURE: + if resource is Terrain3DTextureAsset: + res.id = resource.id + set_edited_resource(res, false) + elif res is PackedScene and type == Terrain3DAssets.TYPE_MESH: + var ma := Terrain3DMeshAsset.new() + if resource is Terrain3DMeshAsset: + ma.id = resource.id + ma.set_scene_file(res) + set_edited_resource(ma, false) + resource = ma + elif res is Terrain3DMeshAsset and type == Terrain3DAssets.TYPE_MESH: + if resource is Terrain3DMeshAsset: + res.id = resource.id + set_edited_resource(res, false) + emit_signal("selected") + emit_signal("inspected", resource) + + + + func set_edited_resource(p_res: Resource, p_no_signal: bool = true) -> void: + resource = p_res + if resource: + resource.setting_changed.connect(_on_resource_changed) + resource.file_changed.connect(_on_resource_changed) + + if button_clear: + button_clear.set_visible(resource != null) + + queue_redraw() + if !p_no_signal: + emit_signal("changed", resource) + + + func _on_resource_changed() -> void: + emit_signal("changed", resource) + + + func set_selected(value: bool) -> void: + is_selected = value + queue_redraw() + + + func clear() -> void: + if resource: + set_edited_resource(null, false) + + + func edit() -> void: + emit_signal("selected") + emit_signal("inspected", resource) diff --git a/addons/terrain_3d/src/asset_dock.tscn b/addons/terrain_3d/src/asset_dock.tscn new file mode 100644 index 0000000..16a0586 --- /dev/null +++ b/addons/terrain_3d/src/asset_dock.tscn @@ -0,0 +1,93 @@ +[gd_scene load_steps=2 format=3 uid="uid://dkb6hii5e48m2"] + +[ext_resource type="Script" path="res://addons/terrain_3d/src/asset_dock.gd" id="1_e23pg"] + +[node name="Terrain3D" type="PanelContainer"] +custom_minimum_size = Vector2(256, 95) +offset_right = 766.0 +offset_bottom = 100.0 +script = ExtResource("1_e23pg") + +[node name="Box" type="BoxContainer" parent="."] +layout_mode = 2 +size_flags_vertical = 3 +vertical = true + +[node name="Buttons" type="BoxContainer" parent="Box"] +layout_mode = 2 + +[node name="TexturesBtn" type="Button" parent="Box/Buttons"] +custom_minimum_size = Vector2(80, 30) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 0 +theme_override_font_sizes/font_size = 16 +toggle_mode = true +button_pressed = true +text = "Textures" + +[node name="MeshesBtn" type="Button" parent="Box/Buttons"] +custom_minimum_size = Vector2(80, 30) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 0 +theme_override_font_sizes/font_size = 16 +toggle_mode = true +text = "Meshes" + +[node name="PlacementOpt" type="OptionButton" parent="Box/Buttons"] +custom_minimum_size = Vector2(80, 30) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 0 +item_count = 9 +selected = 7 +popup/item_0/text = "Left_UL" +popup/item_0/id = 0 +popup/item_1/text = "Left_BL" +popup/item_1/id = 1 +popup/item_2/text = "Left_UR" +popup/item_2/id = 2 +popup/item_3/text = "Left_BR" +popup/item_3/id = 3 +popup/item_4/text = "Right_UL" +popup/item_4/id = 4 +popup/item_5/text = "Right_BL " +popup/item_5/id = 5 +popup/item_6/text = "Right_UR" +popup/item_6/id = 6 +popup/item_7/text = "Right_BR" +popup/item_7/id = 7 +popup/item_8/text = "Bottom" +popup/item_8/id = 8 + +[node name="SizeSlider" type="HSlider" parent="Box/Buttons"] +custom_minimum_size = Vector2(80, 10) +layout_mode = 2 +size_flags_horizontal = 3 +min_value = 56.0 +max_value = 230.0 +value = 83.0 + +[node name="Floating" type="Button" parent="Box/Buttons"] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 0 +tooltip_text = "Pop this dock out to a floating window." +toggle_mode = true +text = "F" +flat = true + +[node name="Pinned" type="Button" parent="Box/Buttons"] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 0 +tooltip_text = "Make this window \"Always on top\"." +toggle_mode = true +text = "P" +flat = true + +[node name="ScrollContainer" type="ScrollContainer" parent="Box"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 diff --git a/addons/terrain_3d/src/bake_lod_dialog.gd b/addons/terrain_3d/src/bake_lod_dialog.gd new file mode 100644 index 0000000..f73c82c --- /dev/null +++ b/addons/terrain_3d/src/bake_lod_dialog.gd @@ -0,0 +1,28 @@ +@tool +extends ConfirmationDialog + +var lod: int = 0 +var description: String = "" + + +func _ready() -> void: + set_unparent_when_invisible(true) + about_to_popup.connect(_on_about_to_popup) + visibility_changed.connect(_on_visibility_changed) + %LodBox.value_changed.connect(_on_lod_box_value_changed) + + +func _on_about_to_popup() -> void: + lod = %LodBox.value + + +func _on_visibility_changed() -> void: + # Change text on the autowrap label only when the popup is visible. + # Works around Godot issue #47005: + # https://github.com/godotengine/godot/issues/47005 + if visible: + %DescriptionLabel.text = description + + +func _on_lod_box_value_changed(p_value: float) -> void: + lod = %LodBox.value diff --git a/addons/terrain_3d/src/bake_lod_dialog.tscn b/addons/terrain_3d/src/bake_lod_dialog.tscn new file mode 100644 index 0000000..1011c72 --- /dev/null +++ b/addons/terrain_3d/src/bake_lod_dialog.tscn @@ -0,0 +1,41 @@ +[gd_scene load_steps=2 format=3 uid="uid://bhvrrmb8bk1bt"] + +[ext_resource type="Script" path="res://addons/terrain_3d/src/bake_lod_dialog.gd" id="1_sf76d"] + +[node name="bake_lod_dialog" type="ConfirmationDialog"] +title = "Bake Terrain3D Mesh" +position = Vector2i(0, 36) +size = Vector2i(400, 115) +visible = true +script = ExtResource("1_sf76d") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -49.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 +theme_override_constants/separation = 20 + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "LOD:" + +[node name="LodBox" type="SpinBox" parent="VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +max_value = 8.0 +value = 4.0 + +[node name="DescriptionLabel" type="Label" parent="VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +autowrap_mode = 2 diff --git a/addons/terrain_3d/src/baker.gd b/addons/terrain_3d/src/baker.gd new file mode 100644 index 0000000..0a53ba4 --- /dev/null +++ b/addons/terrain_3d/src/baker.gd @@ -0,0 +1,385 @@ +extends Node + +const BakeLodDialog: PackedScene = preload("res://addons/terrain_3d/src/bake_lod_dialog.tscn") +const BAKE_MESH_DESCRIPTION: String = "This will create a child MeshInstance3D. LOD4+ is recommended. LOD0 is slow and dense with vertices every 1 unit. It is not an optimal mesh." +const BAKE_OCCLUDER_DESCRIPTION: String = "This will create a child OccluderInstance3D. LOD4+ is recommended and will take 5+ seconds per region to generate. LOD0 is unnecessarily dense and slow." +const SET_UP_NAVIGATION_DESCRIPTION: String = "This operation will: + +- Create a NavigationRegion3D node, +- Assign it a blank NavigationMesh resource, +- Move the Terrain3D node to be a child of the new node, +- And bake the nav mesh. + +Once setup is complete, you can modify the settings on your nav mesh, and rebake +without having to run through the setup again. + +If preferred, this setup can be canceled and the steps performed manually. For +the best results, adjust the settings on the NavigationMesh resource to match +the settings of your navigation agents and collisions." + +var plugin: EditorPlugin +var bake_method: Callable +var bake_lod_dialog: ConfirmationDialog +var confirm_dialog: ConfirmationDialog + + +func _enter_tree() -> void: + bake_lod_dialog = BakeLodDialog.instantiate() + bake_lod_dialog.hide() + bake_lod_dialog.confirmed.connect(func(): bake_method.call()) + bake_lod_dialog.set_unparent_when_invisible(true) + + confirm_dialog = ConfirmationDialog.new() + confirm_dialog.hide() + confirm_dialog.confirmed.connect(func(): bake_method.call()) + confirm_dialog.set_unparent_when_invisible(true) + + +func _exit_tree() -> void: + bake_lod_dialog.queue_free() + confirm_dialog.queue_free() + + +func bake_mesh_popup() -> void: + if plugin.terrain: + bake_method = _bake_mesh + bake_lod_dialog.description = BAKE_MESH_DESCRIPTION + plugin.get_editor_interface().popup_dialog_centered(bake_lod_dialog) + + +func _bake_mesh() -> void: + var mesh: Mesh = plugin.terrain.bake_mesh(bake_lod_dialog.lod, Terrain3DStorage.HEIGHT_FILTER_NEAREST) + if !mesh: + push_error("Failed to bake mesh from Terrain3D") + return + + var undo: EditorUndoRedoManager = plugin.get_undo_redo() + undo.create_action("Terrain3D Bake ArrayMesh") + + var mesh_instance := plugin.terrain.get_node_or_null(^"MeshInstance3D") as MeshInstance3D + if !mesh_instance: + mesh_instance = MeshInstance3D.new() + mesh_instance.name = &"MeshInstance3D" + mesh_instance.set_skeleton_path(NodePath()) + mesh_instance.mesh = mesh + + undo.add_do_method(plugin.terrain, &"add_child", mesh_instance, true) + undo.add_undo_method(plugin.terrain, &"remove_child", mesh_instance) + undo.add_do_property(mesh_instance, &"owner", plugin.terrain.owner) + undo.add_do_reference(mesh_instance) + + else: + undo.add_do_property(mesh_instance, &"mesh", mesh) + undo.add_undo_property(mesh_instance, &"mesh", mesh_instance.mesh) + + if mesh_instance.mesh.resource_path: + var path := mesh_instance.mesh.resource_path + undo.add_do_method(mesh, &"take_over_path", path) + undo.add_undo_method(mesh_instance.mesh, &"take_over_path", path) + undo.add_do_method(ResourceSaver, &"save", mesh) + undo.add_undo_method(ResourceSaver, &"save", mesh_instance.mesh) + + undo.commit_action() + + +func bake_occluder_popup() -> void: + if plugin.terrain: + bake_method = _bake_occluder + bake_lod_dialog.description = BAKE_OCCLUDER_DESCRIPTION + plugin.get_editor_interface().popup_dialog_centered(bake_lod_dialog) + + +func _bake_occluder() -> void: + var mesh: Mesh = plugin.terrain.bake_mesh(bake_lod_dialog.lod, Terrain3DStorage.HEIGHT_FILTER_MINIMUM) + if !mesh: + push_error("Failed to bake mesh from Terrain3D") + return + assert(mesh.get_surface_count() == 1) + + var undo: EditorUndoRedoManager = plugin.get_undo_redo() + undo.create_action("Terrain3D Bake Occluder3D") + + var occluder := ArrayOccluder3D.new() + var arrays: Array = mesh.surface_get_arrays(0) + assert(arrays.size() > Mesh.ARRAY_INDEX) + assert(arrays[Mesh.ARRAY_INDEX] != null) + occluder.set_arrays(arrays[Mesh.ARRAY_VERTEX], arrays[Mesh.ARRAY_INDEX]) + + var occluder_instance := plugin.terrain.get_node_or_null(^"OccluderInstance3D") as OccluderInstance3D + if !occluder_instance: + occluder_instance = OccluderInstance3D.new() + occluder_instance.name = &"OccluderInstance3D" + occluder_instance.occluder = occluder + + undo.add_do_method(plugin.terrain, &"add_child", occluder_instance, true) + undo.add_undo_method(plugin.terrain, &"remove_child", occluder_instance) + undo.add_do_property(occluder_instance, &"owner", plugin.terrain.owner) + undo.add_do_reference(occluder_instance) + + else: + undo.add_do_property(occluder_instance, &"occluder", occluder) + undo.add_undo_property(occluder_instance, &"occluder", occluder_instance.occluder) + + if occluder_instance.occluder.resource_path: + var path := occluder_instance.occluder.resource_path + undo.add_do_method(occluder, &"take_over_path", path) + undo.add_undo_method(occluder_instance.occluder, &"take_over_path", path) + undo.add_do_method(ResourceSaver, &"save", occluder) + undo.add_undo_method(ResourceSaver, &"save", occluder_instance.occluder) + + undo.commit_action() + + +func find_nav_region_terrains(p_nav_region: NavigationRegion3D) -> Array[Terrain3D]: + var result: Array[Terrain3D] = [] + if not p_nav_region.navigation_mesh: + return result + + var source_mode: NavigationMesh.SourceGeometryMode + source_mode = p_nav_region.navigation_mesh.geometry_source_geometry_mode + if source_mode == NavigationMesh.SOURCE_GEOMETRY_ROOT_NODE_CHILDREN: + result.append_array(p_nav_region.find_children("", "Terrain3D", true, true)) + return result + + var group_nodes: Array = p_nav_region.get_tree().get_nodes_in_group(p_nav_region.navigation_mesh.geometry_source_group_name) + for node in group_nodes: + if node is Terrain3D: + result.push_back(node) + if source_mode == NavigationMesh.SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN: + result.append_array(node.find_children("", "Terrain3D", true, true)) + + return result + + +func find_terrain_nav_regions(p_terrain: Terrain3D) -> Array[NavigationRegion3D]: + var result: Array[NavigationRegion3D] = [] + var root: Node = plugin.get_editor_interface().get_edited_scene_root() + if not root: + return result + for nav_region in root.find_children("", "NavigationRegion3D", true, true): + if find_nav_region_terrains(nav_region).has(p_terrain): + result.push_back(nav_region) + return result + + +func bake_nav_mesh() -> void: + if plugin.nav_region: + # A NavigationRegion3D is selected. We only need to bake that one navmesh. + _bake_nav_region_nav_mesh(plugin.nav_region) + print("Terrain3DNavigation: Finished baking 1 NavigationMesh.") + + elif plugin.terrain: + # A Terrain3D is selected. There are potentially multiple navmeshes to bake and we need to + # find them all. (The multiple navmesh use-case is likely on very large scenes with lots of + # geometry. Each navmesh in this case would define its own, non-overlapping, baking AABB, to + # cut down on the amount of geometry to bake. In a large open-world RPG, for instance, there + # could be a navmesh for each town.) + var nav_regions: Array[NavigationRegion3D] = find_terrain_nav_regions(plugin.terrain) + for nav_region in nav_regions: + _bake_nav_region_nav_mesh(nav_region) + print("Terrain3DNavigation: Finished baking %d NavigationMesh(es)." % nav_regions.size()) + + +func _bake_nav_region_nav_mesh(p_nav_region: NavigationRegion3D) -> void: + var nav_mesh: NavigationMesh = p_nav_region.navigation_mesh + assert(nav_mesh != null) + + var source_geometry_data := NavigationMeshSourceGeometryData3D.new() + NavigationMeshGenerator.parse_source_geometry_data(nav_mesh, source_geometry_data, p_nav_region) + + for terrain in find_nav_region_terrains(p_nav_region): + var aabb: AABB = nav_mesh.filter_baking_aabb + aabb.position += nav_mesh.filter_baking_aabb_offset + aabb = p_nav_region.global_transform * aabb + var faces: PackedVector3Array = terrain.generate_nav_mesh_source_geometry(aabb) + if not faces.is_empty(): + source_geometry_data.add_faces(faces, Transform3D.IDENTITY) + + NavigationMeshGenerator.bake_from_source_geometry_data(nav_mesh, source_geometry_data) + + _postprocess_nav_mesh(nav_mesh) + + # Assign null first to force the debug display to actually update: + p_nav_region.set_navigation_mesh(null) + p_nav_region.set_navigation_mesh(nav_mesh) + + # Trigger save to disk if it is saved as an external file + if not nav_mesh.get_path().is_empty(): + ResourceSaver.save(nav_mesh, nav_mesh.get_path(), ResourceSaver.FLAG_COMPRESS) + + # Let other editor plugins and tool scripts know the nav mesh was just baked: + p_nav_region.bake_finished.emit() + + +func _postprocess_nav_mesh(p_nav_mesh: NavigationMesh) -> void: + # Post-process the nav mesh to work around Godot issue #85548 + + # Round all the vertices in the nav_mesh to the nearest cell_size/cell_height so that it doesn't + # contain any edges shorter than cell_size/cell_height (one cause of #85548). + var vertices: PackedVector3Array = _postprocess_nav_mesh_round_vertices(p_nav_mesh) + + # Rounding vertices can collapse some edges to 0 length. We remove these edges, and any polygons + # that have been reduced to 0 area. + var polygons: Array[PackedInt32Array] = _postprocess_nav_mesh_remove_empty_polygons(p_nav_mesh, vertices) + + # Another cause of #85548 is baking producing overlapping polygons. We remove these. + _postprocess_nav_mesh_remove_overlapping_polygons(p_nav_mesh, vertices, polygons) + + p_nav_mesh.clear_polygons() + p_nav_mesh.set_vertices(vertices) + for polygon in polygons: + p_nav_mesh.add_polygon(polygon) + + +func _postprocess_nav_mesh_round_vertices(p_nav_mesh: NavigationMesh) -> PackedVector3Array: + assert(p_nav_mesh != null) + assert(p_nav_mesh.cell_size > 0.0) + assert(p_nav_mesh.cell_height > 0.0) + + var cell_size: Vector3 = Vector3(p_nav_mesh.cell_size, p_nav_mesh.cell_height, p_nav_mesh.cell_size) + + # Round a little harder to avoid rounding errors with non-power-of-two cell_size/cell_height + # causing the navigation map to put two non-matching edges in the same cell: + var round_factor := cell_size * 1.001 + + var vertices: PackedVector3Array = p_nav_mesh.get_vertices() + for i in range(vertices.size()): + vertices[i] = (vertices[i] / round_factor).floor() * round_factor + return vertices + + +func _postprocess_nav_mesh_remove_empty_polygons(p_nav_mesh: NavigationMesh, p_vertices: PackedVector3Array) -> Array[PackedInt32Array]: + var polygons: Array[PackedInt32Array] = [] + + for i in range(p_nav_mesh.get_polygon_count()): + var old_polygon: PackedInt32Array = p_nav_mesh.get_polygon(i) + var new_polygon: PackedInt32Array = [] + + # Remove duplicate vertices (introduced by rounding) from the polygon: + var polygon_vertices: PackedVector3Array = [] + for index in old_polygon: + var vertex: Vector3 = p_vertices[index] + if polygon_vertices.has(vertex): + continue + polygon_vertices.push_back(vertex) + new_polygon.push_back(index) + + # If we removed some vertices, we might be able to remove the polygon too: + if new_polygon.size() <= 2: + continue + polygons.push_back(new_polygon) + + return polygons + + +func _postprocess_nav_mesh_remove_overlapping_polygons(p_nav_mesh: NavigationMesh, p_vertices: PackedVector3Array, p_polygons: Array[PackedInt32Array]) -> void: + # Occasionally, a baked nav mesh comes out with overlapping polygons: + # https://github.com/godotengine/godot/issues/85548#issuecomment-1839341071 + # Until the bug is fixed in the engine, this function attempts to detect and remove overlapping + # polygons. + + # This function has to make a choice of which polygon to remove when an overlap is detected, + # because in this case the nav mesh is ambiguous. To do this it uses a heuristic: + # (1) an 'overlap' is defined as an edge that is shared by 3 or more polygons. + # (2) a 'bad polygon' is defined as a polygon that contains 2 or more 'overlaps'. + # The function removes the 'bad polygons', which in practice seems to be enough to remove all + # overlaps without creating holes in the nav mesh. + + var cell_size: Vector3 = Vector3(p_nav_mesh.cell_size, p_nav_mesh.cell_height, p_nav_mesh.cell_size) + + # `edges` is going to map edges (vertex pairs) to arrays of polygons that contain that edge. + var edges: Dictionary = {} + + for polygon_index in range(p_polygons.size()): + var polygon: PackedInt32Array = p_polygons[polygon_index] + for j in range(polygon.size()): + var vertex: Vector3 = p_vertices[polygon[j]] + var next_vertex: Vector3 = p_vertices[polygon[(j + 1) % polygon.size()]] + + # edge_key is a key we can use in the edges dictionary that uniquely identifies the + # edge. We use cell coordinates here (Vector3i) because with a non-power-of-two + # cell_size, rounding errors can cause Vector3 vertices to not be equal. + # Array.sort IS defined for vector types - see the Godot docs. It's necessary here + # because polygons that share an edge can have their vertices in a different order. + var edge_key: Array = [Vector3i(vertex / cell_size), Vector3i(next_vertex / cell_size)] + edge_key.sort() + + if !edges.has(edge_key): + edges[edge_key] = [] + edges[edge_key].push_back(polygon_index) + + var overlap_count: Dictionary = {} + for connections in edges.values(): + if connections.size() <= 2: + continue + for polygon_index in connections: + overlap_count[polygon_index] = overlap_count.get(polygon_index, 0) + 1 + + var bad_polygons: Array = [] + for polygon_index in overlap_count.keys(): + if overlap_count[polygon_index] >= 2: + bad_polygons.push_back(polygon_index) + + bad_polygons.sort() + for i in range(bad_polygons.size() - 1, -1, -1): + p_polygons.remove_at(bad_polygons[i]) + + +func set_up_navigation_popup() -> void: + if plugin.terrain: + bake_method = _set_up_navigation + confirm_dialog.dialog_text = SET_UP_NAVIGATION_DESCRIPTION + plugin.get_editor_interface().popup_dialog_centered(confirm_dialog) + + +func _set_up_navigation() -> void: + assert(plugin.terrain) + var terrain: Terrain3D = plugin.terrain + + var nav_region := NavigationRegion3D.new() + nav_region.name = &"NavigationRegion3D" + nav_region.navigation_mesh = NavigationMesh.new() + + var undo_redo: EditorUndoRedoManager = plugin.get_undo_redo() + + undo_redo.create_action("Terrain3D Set up Navigation") + undo_redo.add_do_method(self, &"_do_set_up_navigation", nav_region, terrain) + undo_redo.add_undo_method(self, &"_undo_set_up_navigation", nav_region, terrain) + undo_redo.add_do_reference(nav_region) + undo_redo.commit_action() + + plugin.get_editor_interface().inspect_object(nav_region) + assert(plugin.nav_region == nav_region) + + bake_nav_mesh() + + +func _do_set_up_navigation(p_nav_region: NavigationRegion3D, p_terrain: Terrain3D) -> void: + var parent: Node = p_terrain.get_parent() + var index: int = p_terrain.get_index() + var t_owner: Node = p_terrain.owner + + parent.remove_child(p_terrain) + p_nav_region.add_child(p_terrain) + + parent.add_child(p_nav_region, true) + parent.move_child(p_nav_region, index) + + p_nav_region.owner = t_owner + p_terrain.owner = t_owner + + +func _undo_set_up_navigation(p_nav_region: NavigationRegion3D, p_terrain: Terrain3D) -> void: + assert(p_terrain.get_parent() == p_nav_region) + + var parent: Node = p_nav_region.get_parent() + var index: int = p_nav_region.get_index() + var t_owner: Node = p_nav_region.get_owner() + + parent.remove_child(p_nav_region) + p_nav_region.remove_child(p_terrain) + + parent.add_child(p_terrain, true) + parent.move_child(p_terrain, index) + + p_terrain.owner = t_owner diff --git a/addons/terrain_3d/src/channel_packer.gd b/addons/terrain_3d/src/channel_packer.gd new file mode 100644 index 0000000..47c814d --- /dev/null +++ b/addons/terrain_3d/src/channel_packer.gd @@ -0,0 +1,212 @@ +extends Object + +const WINDOW_SCENE: String = "res://addons/terrain_3d/src/channel_packer.tscn" +const TEMPLATE_PATH: String = "res://addons/terrain_3d/src/channel_packer_import_template.txt" + +enum { + IMAGE_ALBEDO, + IMAGE_HEIGHT, + IMAGE_NORMAL, + IMAGE_ROUGHNESS, +} + +var plugin: EditorPlugin +var editor_interface: EditorInterface +var dialog: AcceptDialog +var save_file_dialog: FileDialog +var open_file_dialog: FileDialog +var invert_green_checkbox: CheckBox +var last_opened_directory: String +var last_saved_directory: String +var packing_albedo: bool = false +var queue_pack_normal_roughness: bool = false +var images: Array[Image] = [null, null, null, null] +var status_label: Label +var no_op: Callable = func(): pass +var last_file_selected_fn: Callable = no_op + + +func pack_textures_popup() -> void: + if dialog != null: + print("Terrain3DChannelPacker: Cannot open pack tool, dialog already open.") + return + + dialog = (load(WINDOW_SCENE) as PackedScene).instantiate() + dialog.confirmed.connect(_on_close_requested) + dialog.canceled.connect(_on_close_requested) + status_label = dialog.find_child("StatusLabel") + invert_green_checkbox = dialog.find_child("InvertGreenChannelCheckBox") + + editor_interface = plugin.get_editor_interface() + _init_file_dialogs() + editor_interface.popup_dialog_centered(dialog) + + _init_texture_picker(dialog.find_child("AlbedoVBox"), IMAGE_ALBEDO) + _init_texture_picker(dialog.find_child("HeightVBox"), IMAGE_HEIGHT) + _init_texture_picker(dialog.find_child("NormalVBox"), IMAGE_NORMAL) + _init_texture_picker(dialog.find_child("RoughnessVBox"), IMAGE_ROUGHNESS) + var pack_button_path: String = "Panel/MarginContainer/VBoxContainer/PackButton" + (dialog.get_node(pack_button_path) as Button).pressed.connect(_on_pack_button_pressed) + + +func _on_close_requested() -> void: + last_file_selected_fn = no_op + images = [null, null, null, null] + dialog.queue_free() + dialog = null + + +func _init_file_dialogs() -> void: + save_file_dialog = FileDialog.new() + save_file_dialog.set_filters(PackedStringArray(["*.png"])) + save_file_dialog.set_file_mode(FileDialog.FILE_MODE_SAVE_FILE) + save_file_dialog.access = FileDialog.ACCESS_FILESYSTEM + save_file_dialog.file_selected.connect(_on_save_file_selected) + + open_file_dialog = FileDialog.new() + open_file_dialog.set_filters(PackedStringArray(["*.png", "*.bmp", "*.exr", "*.hdr", "*.jpg", "*.jpeg", "*.tga", "*.svg", "*.webp", ".ktx"])) + open_file_dialog.set_file_mode(FileDialog.FILE_MODE_OPEN_FILE) + open_file_dialog.access = FileDialog.ACCESS_FILESYSTEM + + dialog.add_child(save_file_dialog) + dialog.add_child(open_file_dialog) + + +func _init_texture_picker(p_parent: Node, p_image_index: int) -> void: + var line_edit: LineEdit = p_parent.find_child("LineEdit") + var file_pick_button: Button = p_parent.find_child("PickButton") + var clear_button: Button = p_parent.find_child("ClearButton") + var texture_rect: TextureRect = p_parent.find_child("TextureRect") + var texture_button: Button = p_parent.find_child("TextureButton") + + var open_fn: Callable = func() -> void: + open_file_dialog.current_path = last_opened_directory + if last_file_selected_fn != no_op: + open_file_dialog.file_selected.disconnect(last_file_selected_fn) + last_file_selected_fn = func(path: String) -> void: + line_edit.text = path + line_edit.caret_column = path.length() + last_opened_directory = path.get_base_dir() + "/" + var image: Image = Image.new() + var code: int = image.load(path) + if code != OK: + _show_error("Failed to load texture '" + path + "'") + texture_rect.texture = null + images[p_image_index] = null + else: + _show_success("Loaded texture '" + path + "'") + texture_rect.texture = ImageTexture.create_from_image(image) + images[p_image_index] = image + open_file_dialog.file_selected.connect(last_file_selected_fn) + open_file_dialog.popup_centered_ratio() + + var clear_fn: Callable = func() -> void: + line_edit.text = "" + texture_rect.texture = null + images[p_image_index] = null + + # allow user to edit textbox and press enter because Godot's file picker doesn't work 100% of the time + var line_edit_submit_fn: Callable = func(path: String) -> void: + var image: Image = Image.new() + var code: int = image.load(path) + if code != OK: + _show_error("Failed to load texture '" + path + "'") + texture_rect.texture = null + images[p_image_index] = null + else: + texture_rect.texture = ImageTexture.create_from_image(image) + images[p_image_index] = image + + line_edit.text_submitted.connect(line_edit_submit_fn) + file_pick_button.pressed.connect(open_fn) + texture_button.pressed.connect(open_fn) + clear_button.pressed.connect(clear_fn) + _set_button_icon(file_pick_button, "Folder") + _set_button_icon(clear_button, "Remove") + + +func _set_button_icon(p_button: Button, p_icon_name: String) -> void: + var editor_base: Control = editor_interface.get_base_control() + var icon: Texture2D = editor_base.get_theme_icon(p_icon_name, "EditorIcons") + p_button.icon = icon + + +func _show_error(p_text: String) -> void: + push_error("Terrain3DChannelPacker: " + p_text) + status_label.text = p_text + status_label.add_theme_color_override("font_color", Color(0.9, 0, 0)) + + +func _show_success(p_text: String) -> void: + print("Terrain3DChannelPacker: " + p_text) + status_label.text = p_text + status_label.add_theme_color_override("font_color", Color(0, 0.82, 0.14)) + + +func _create_import_file(png_path: String) -> void: + var dst_import_path: String = png_path + ".import" + + var file: FileAccess = FileAccess.open(TEMPLATE_PATH, FileAccess.READ) + var template_content: String = file.get_as_text() + file.close() + + var import_content: String = template_content.replace("$SOURCE_FILE", png_path) + file = FileAccess.open(dst_import_path, FileAccess.WRITE) + file.store_string(import_content) + file.close() + + +func _on_pack_button_pressed() -> void: + packing_albedo = images[IMAGE_ALBEDO] != null and images[IMAGE_HEIGHT] != null + var packing_normal_roughness: bool = images[IMAGE_NORMAL] != null and images[IMAGE_ROUGHNESS] != null + + if not packing_albedo and not packing_normal_roughness: + _show_error("Please select an albedo and height texture or a normal and roughness texture.") + return + + if packing_albedo: + save_file_dialog.current_path = last_saved_directory + "packed_albedo_height" + save_file_dialog.title = "Save Packed Albedo/Height Texture" + save_file_dialog.popup_centered_ratio() + if packing_normal_roughness: + queue_pack_normal_roughness = true + return + if packing_normal_roughness: + save_file_dialog.current_path = last_saved_directory + "packed_normal_roughness" + save_file_dialog.title = "Save Packed Normal/Roughness Texture" + save_file_dialog.popup_centered_ratio() + + +func _on_save_file_selected(p_dst_path) -> void: + last_saved_directory = p_dst_path.get_base_dir() + "/" + if packing_albedo: + _pack_textures(images[IMAGE_ALBEDO], images[IMAGE_HEIGHT], p_dst_path, false) + else: + _pack_textures(images[IMAGE_NORMAL], images[IMAGE_ROUGHNESS], p_dst_path, invert_green_checkbox.button_pressed) + + if queue_pack_normal_roughness: + queue_pack_normal_roughness = false + packing_albedo = false + save_file_dialog.current_path = last_saved_directory + "packed_normal_roughness" + save_file_dialog.title = "Save Packed Normal/Roughness Texture" + save_file_dialog.call_deferred("popup_centered_ratio") + + +func _pack_textures(p_rgb_image: Image, p_a_image: Image, p_dst_path: String, p_invert_green: bool) -> void: + if p_rgb_image and p_a_image: + if p_rgb_image.get_size() != p_a_image.get_size(): + _show_error("Textures must be the same size.") + return + + var output_image: Image = Terrain3DUtil.pack_image(p_rgb_image, p_a_image, p_invert_green) + + if not output_image: + _show_error("Failed to pack textures.") + return + + output_image.save_png(p_dst_path) + editor_interface.get_resource_filesystem().scan_sources() + _create_import_file(p_dst_path) + _show_success("Packed to " + p_dst_path + ".") + else: + _show_error("Failed to load one or more textures.") diff --git a/addons/terrain_3d/src/channel_packer.tscn b/addons/terrain_3d/src/channel_packer.tscn new file mode 100644 index 0000000..ebd2f0c --- /dev/null +++ b/addons/terrain_3d/src/channel_packer.tscn @@ -0,0 +1,359 @@ +[gd_scene load_steps=5 format=3 uid="uid://nud6dwjcnj5v"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ysabf"] +bg_color = Color(0.211765, 0.239216, 0.290196, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lcvna"] +bg_color = Color(0.168627, 0.211765, 0.266667, 1) +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(0.270588, 0.435294, 0.580392, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_cb0xf"] +bg_color = Color(0.137255, 0.137255, 0.137255, 1) +draw_center = false +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(0.784314, 0.784314, 0.784314, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_7qdas"] + +[node name="AcceptDialog" type="AcceptDialog"] +title = "Terrain3D Channel Packer" +initial_position = 1 +size = Vector2i(660, 900) +visible = true +ok_button_text = "Close" + +[node name="Panel" type="Panel" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -49.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_ysabf") + +[node name="MarginContainer" type="MarginContainer" parent="Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = -1.0 +offset_bottom = -53.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 5 +theme_override_constants/margin_top = 5 +theme_override_constants/margin_right = 5 +theme_override_constants/margin_bottom = 5 + +[node name="VBoxContainer" type="VBoxContainer" parent="Panel/MarginContainer"] +layout_mode = 2 +size_flags_vertical = 0 +theme_override_constants/separation = 10 + +[node name="AlbedoHeightPanel" type="Panel" parent="Panel/MarginContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 250) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_lcvna") + +[node name="MarginContainer" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="HBoxContainer" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer"] +layout_mode = 2 + +[node name="AlbedoVBox" type="VBoxContainer" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="AlbedoLabel" type="Label" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox"] +layout_mode = 2 +text = "Albedo texture" + +[node name="AlbedoHBox" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox"] +layout_mode = 2 + +[node name="LineEdit" type="LineEdit" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/AlbedoHBox"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="PickButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/AlbedoHBox"] +layout_mode = 2 + +[node name="ClearButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/AlbedoHBox"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox"] +layout_mode = 2 +size_flags_vertical = 4 +theme_override_constants/margin_top = 10 + +[node name="Panel" type="Panel" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/MarginContainer"] +custom_minimum_size = Vector2(110, 110) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_cb0xf") + +[node name="TextureRect" type="TextureRect" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/MarginContainer/Panel"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -50.0 +offset_top = -50.0 +offset_right = 50.0 +offset_bottom = 50.0 +grow_horizontal = 2 +grow_vertical = 2 +expand_mode = 1 + +[node name="TextureButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/MarginContainer/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/normal = SubResource("StyleBoxEmpty_7qdas") + +[node name="HeightVBox" type="VBoxContainer" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HeightLabel" type="Label" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox"] +layout_mode = 2 +text = "Height texture" + +[node name="HeightHBox" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox"] +layout_mode = 2 + +[node name="LineEdit" type="LineEdit" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HeightHBox"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="PickButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HeightHBox"] +layout_mode = 2 + +[node name="ClearButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HeightHBox"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox"] +layout_mode = 2 +size_flags_vertical = 4 +theme_override_constants/margin_top = 10 + +[node name="Panel" type="Panel" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/MarginContainer"] +custom_minimum_size = Vector2(110, 110) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_cb0xf") + +[node name="TextureRect" type="TextureRect" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/MarginContainer/Panel"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -50.0 +offset_top = -50.0 +offset_right = 50.0 +offset_bottom = 50.0 +grow_horizontal = 2 +grow_vertical = 2 +expand_mode = 1 + +[node name="TextureButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/MarginContainer/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/normal = SubResource("StyleBoxEmpty_7qdas") + +[node name="NormalRoughnessPanel" type="Panel" parent="Panel/MarginContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 280) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_lcvna") + +[node name="MarginContainer" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="HBoxContainer" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer"] +layout_mode = 2 + +[node name="NormalVBox" type="VBoxContainer" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="NormalLabel" type="Label" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox"] +layout_mode = 2 +text = "Normal texture" + +[node name="NormalHBox" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox"] +layout_mode = 2 + +[node name="LineEdit" type="LineEdit" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/NormalHBox"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="PickButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/NormalHBox"] +layout_mode = 2 + +[node name="ClearButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/NormalHBox"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox"] +layout_mode = 2 +size_flags_vertical = 4 +theme_override_constants/margin_top = 10 + +[node name="Panel" type="Panel" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/MarginContainer"] +custom_minimum_size = Vector2(110, 110) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_cb0xf") + +[node name="TextureRect" type="TextureRect" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/MarginContainer/Panel"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -50.0 +offset_top = -50.0 +offset_right = 50.0 +offset_bottom = 50.0 +grow_horizontal = 2 +grow_vertical = 2 +expand_mode = 1 + +[node name="TextureButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/MarginContainer/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/normal = SubResource("StyleBoxEmpty_7qdas") + +[node name="InvertGreenChannelCheckBox" type="CheckBox" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox"] +layout_mode = 2 +text = "Convert DirectX to OpenGL" + +[node name="RoughnessVBox" type="VBoxContainer" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RoughnessLabel" type="Label" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox"] +layout_mode = 2 +text = "Roughness texture" + +[node name="RoughnessHBox" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox"] +layout_mode = 2 + +[node name="LineEdit" type="LineEdit" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/RoughnessHBox"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="PickButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/RoughnessHBox"] +layout_mode = 2 + +[node name="ClearButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/RoughnessHBox"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox"] +layout_mode = 2 +size_flags_vertical = 4 +theme_override_constants/margin_top = 10 + +[node name="Panel" type="Panel" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/MarginContainer"] +custom_minimum_size = Vector2(110, 110) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_cb0xf") + +[node name="TextureRect" type="TextureRect" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/MarginContainer/Panel"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -50.0 +offset_top = -50.0 +offset_right = 50.0 +offset_bottom = 50.0 +grow_horizontal = 2 +grow_vertical = 2 +expand_mode = 1 + +[node name="TextureButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/MarginContainer/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/normal = SubResource("StyleBoxEmpty_7qdas") + +[node name="NormalRoughnessHBox" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="PackButton" type="Button" parent="Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Pack textures as..." + +[node name="StatusLabel" type="Label" parent="Panel/MarginContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 10) +layout_mode = 2 +theme_override_colors/font_color = Color(1, 1, 1, 1) +text = "Use this to create a packed Albedo + Height texture and/or a packed Normal + Roughness texture. + +You can then use these textures with Terrain3D." +autowrap_mode = 2 diff --git a/addons/terrain_3d/src/channel_packer_import_template.txt b/addons/terrain_3d/src/channel_packer_import_template.txt new file mode 100644 index 0000000..e5da5eb --- /dev/null +++ b/addons/terrain_3d/src/channel_packer_import_template.txt @@ -0,0 +1,32 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="$SOURCE_FILE" + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=2 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 \ No newline at end of file diff --git a/addons/terrain_3d/src/gradient_operation_builder.gd b/addons/terrain_3d/src/gradient_operation_builder.gd new file mode 100644 index 0000000..f08a734 --- /dev/null +++ b/addons/terrain_3d/src/gradient_operation_builder.gd @@ -0,0 +1,55 @@ +extends "res://addons/terrain_3d/src/operation_builder.gd" + + +const MultiPicker: Script = preload("res://addons/terrain_3d/src/multi_picker.gd") + + +func _get_point_picker() -> MultiPicker: + return tool_settings.settings["gradient_points"] + + +func _get_brush_size() -> float: + return tool_settings.get_setting("size") + + +func _is_drawable() -> bool: + return tool_settings.get_setting("drawable") + + +func is_picking() -> bool: + return not _get_point_picker().all_points_selected() + + +func pick(p_global_position: Vector3, p_terrain: Terrain3D) -> void: + if not _get_point_picker().all_points_selected(): + _get_point_picker().add_point(p_global_position) + + +func is_ready() -> bool: + return _get_point_picker().all_points_selected() and not _is_drawable() + + +func apply_operation(p_editor: Terrain3DEditor, p_global_position: Vector3, p_camera_direction: float) -> void: + var points: PackedVector3Array = _get_point_picker().get_points() + assert(points.size() == 2) + assert(not _is_drawable()) + + var brush_size: float = _get_brush_size() + assert(brush_size > 0.0) + + var start: Vector3 = points[0] + var end: Vector3 = points[1] + + p_editor.start_operation(start) + + var dir: Vector3 = (end - start).normalized() + + var pos: Vector3 = start + while dir.dot(end - pos) > 0.0: + p_editor.operate(pos, p_camera_direction) + pos += dir * brush_size * 0.2 + + p_editor.stop_operation() + + _get_point_picker().clear() + diff --git a/addons/terrain_3d/src/multi_picker.gd b/addons/terrain_3d/src/multi_picker.gd new file mode 100644 index 0000000..aa228bd --- /dev/null +++ b/addons/terrain_3d/src/multi_picker.gd @@ -0,0 +1,87 @@ +extends HBoxContainer + + +signal pressed +signal value_changed + + +const ICON_PICKER: String = "res://addons/terrain_3d/icons/picker.svg" +const ICON_PICKER_CHECKED: String = "res://addons/terrain_3d/icons/picker_checked.svg" +const MAX_POINTS: int = 2 + + +var icon_picker: Texture2D +var icon_picker_checked: Texture2D +var points: PackedVector3Array +var picking_index: int = -1 + + +func _init() -> void: + icon_picker = load(ICON_PICKER) + icon_picker_checked = load(ICON_PICKER_CHECKED) + + points.resize(MAX_POINTS) + + for i in range(MAX_POINTS): + var button := Button.new() + button.icon = icon_picker + button.tooltip_text = "Pick point on the Terrain" + button.set_meta(&"point_index", i) + button.pressed.connect(_on_button_pressed.bind(i)) + add_child(button) + + _update_buttons() + + +func _on_button_pressed(button_index: int) -> void: + points[button_index] = Vector3.ZERO + picking_index = button_index + _update_buttons() + pressed.emit() + + +func _update_buttons() -> void: + for child in get_children(): + if child is Button: + _update_button(child) + + +func _update_button(button: Button) -> void: + var index: int = button.get_meta(&"point_index") + + if points[index] != Vector3.ZERO: + button.icon = icon_picker_checked + else: + button.icon = icon_picker + + +func clear() -> void: + points.fill(Vector3.ZERO) + _update_buttons() + value_changed.emit() + + +func all_points_selected() -> bool: + return points.count(Vector3.ZERO) == 0 + + +func add_point(p_value: Vector3) -> void: + if points.has(p_value): + return + + # If manually selecting a point individually + if picking_index != -1: + points[picking_index] = p_value + picking_index = -1 + else: + # Else picking a sequence of points (non-drawable) + for i in range(MAX_POINTS): + if points[i] == Vector3.ZERO: + points[i] = p_value + break + _update_buttons() + value_changed.emit() + + +func get_points() -> PackedVector3Array: + return points diff --git a/addons/terrain_3d/src/operation_builder.gd b/addons/terrain_3d/src/operation_builder.gd new file mode 100644 index 0000000..507856d --- /dev/null +++ b/addons/terrain_3d/src/operation_builder.gd @@ -0,0 +1,23 @@ +extends RefCounted + + +const ToolSettings: Script = preload("res://addons/terrain_3d/src/tool_settings.gd") + + +var tool_settings: ToolSettings + + +func is_picking() -> bool: + return false + + +func pick(p_global_position: Vector3, p_terrain: Terrain3D) -> void: + pass + + +func is_ready() -> bool: + return false + + +func apply_operation(editor: Terrain3DEditor, p_global_position: Vector3, p_camera_direction: float) -> void: + pass diff --git a/addons/terrain_3d/src/region_gizmo.gd b/addons/terrain_3d/src/region_gizmo.gd new file mode 100644 index 0000000..af2a6cd --- /dev/null +++ b/addons/terrain_3d/src/region_gizmo.gd @@ -0,0 +1,66 @@ +extends EditorNode3DGizmo + +var material: StandardMaterial3D +var selection_material: StandardMaterial3D +var region_position: Vector2 +var region_size: float +var grid: Array[Vector2i] +var use_secondary_color: bool = false +var show_rect: bool = true + +var main_color: Color = Color.GREEN_YELLOW +var secondary_color: Color = Color.RED +var grid_color: Color = Color.WHITE +var border_color: Color = Color.BLUE + + +func _init() -> void: + material = StandardMaterial3D.new() + material.set_flag(BaseMaterial3D.FLAG_DISABLE_DEPTH_TEST, true) + material.set_flag(BaseMaterial3D.FLAG_ALBEDO_FROM_VERTEX_COLOR, true) + material.set_shading_mode(BaseMaterial3D.SHADING_MODE_UNSHADED) + material.set_albedo(Color.WHITE) + + selection_material = material.duplicate() + selection_material.set_render_priority(0) + + +func _redraw() -> void: + clear() + + var rect_position = region_position * region_size + + if show_rect: + var modulate: Color = main_color if !use_secondary_color else secondary_color + if abs(region_position.x) > 8 or abs(region_position.y) > 8: + modulate = Color.GRAY + draw_rect(Vector2(region_size,region_size)*.5 + rect_position, region_size, selection_material, modulate) + + for pos in grid: + var grid_tile_position = Vector2(pos) * region_size + if show_rect and grid_tile_position == rect_position: + # Skip this one, otherwise focused region borders are not always visible due to draw order + continue + + draw_rect(Vector2(region_size,region_size)*.5 + grid_tile_position, region_size, material, grid_color) + + draw_rect(Vector2.ZERO, region_size * 16.0, material, border_color) + + +func draw_rect(p_pos: Vector2, p_size: float, p_material: StandardMaterial3D, p_modulate: Color) -> void: + var lines: PackedVector3Array = [ + Vector3(-1, 0, -1), + Vector3(-1, 0, 1), + Vector3(1, 0, 1), + Vector3(1, 0, -1), + Vector3(-1, 0, 1), + Vector3(1, 0, 1), + Vector3(1, 0, -1), + Vector3(-1, 0, -1), + ] + + for i in lines.size(): + lines[i] = ((lines[i] / 2.0) * p_size) + Vector3(p_pos.x, 0, p_pos.y) + + add_lines(lines, p_material, false, p_modulate) + diff --git a/addons/terrain_3d/src/terrain_tools.gd b/addons/terrain_3d/src/terrain_tools.gd new file mode 100644 index 0000000..91efc3c --- /dev/null +++ b/addons/terrain_3d/src/terrain_tools.gd @@ -0,0 +1,77 @@ +extends HBoxContainer + + +const Baker: Script = preload("res://addons/terrain_3d/src/baker.gd") +const Packer: Script = preload("res://addons/terrain_3d/src/channel_packer.gd") + +var plugin: EditorPlugin +var menu_button: MenuButton = MenuButton.new() +var baker: Baker = Baker.new() +var packer: Packer = Packer.new() + +enum { + MENU_BAKE_ARRAY_MESH, + MENU_BAKE_OCCLUDER, + MENU_BAKE_NAV_MESH, + MENU_SEPARATOR, + MENU_SET_UP_NAVIGATION, + MENU_PACK_TEXTURES, +} + + +func _enter_tree() -> void: + baker.plugin = plugin + packer.plugin = plugin + + add_child(baker) + + menu_button.text = "Terrain3D Tools" + menu_button.get_popup().add_item("Bake ArrayMesh", MENU_BAKE_ARRAY_MESH) + menu_button.get_popup().add_item("Bake Occluder3D", MENU_BAKE_OCCLUDER) + menu_button.get_popup().add_item("Bake NavMesh", MENU_BAKE_NAV_MESH) + menu_button.get_popup().add_separator("", MENU_SEPARATOR) + menu_button.get_popup().add_item("Set up Navigation", MENU_SET_UP_NAVIGATION) + menu_button.get_popup().add_separator("", MENU_SEPARATOR) + menu_button.get_popup().add_item("Pack Textures", MENU_PACK_TEXTURES) + + menu_button.get_popup().id_pressed.connect(_on_menu_pressed) + menu_button.about_to_popup.connect(_on_menu_about_to_popup) + add_child(menu_button) + + +func _exit_tree() -> void: + # TODO: If packer isn't freed, Godot complains about ObjectDB instances leaked and + # resources still in use at exit. Figure out why. + packer.free() + + +func _on_menu_pressed(p_id: int) -> void: + match p_id: + MENU_BAKE_ARRAY_MESH: + baker.bake_mesh_popup() + MENU_BAKE_OCCLUDER: + baker.bake_occluder_popup() + MENU_BAKE_NAV_MESH: + baker.bake_nav_mesh() + MENU_SET_UP_NAVIGATION: + baker.set_up_navigation_popup() + MENU_PACK_TEXTURES: + packer.pack_textures_popup() + + +func _on_menu_about_to_popup() -> void: + menu_button.get_popup().set_item_disabled(MENU_BAKE_ARRAY_MESH, not plugin.terrain) + menu_button.get_popup().set_item_disabled(MENU_BAKE_OCCLUDER, not plugin.terrain) + menu_button.get_popup().set_item_disabled(MENU_PACK_TEXTURES, not plugin.terrain) + + if plugin.terrain: + var nav_regions: Array[NavigationRegion3D] = baker.find_terrain_nav_regions(plugin.terrain) + menu_button.get_popup().set_item_disabled(MENU_BAKE_NAV_MESH, nav_regions.size() == 0) + menu_button.get_popup().set_item_disabled(MENU_SET_UP_NAVIGATION, nav_regions.size() != 0) + elif plugin.nav_region: + var terrains: Array[Terrain3D] = baker.find_nav_region_terrains(plugin.nav_region) + menu_button.get_popup().set_item_disabled(MENU_BAKE_NAV_MESH, terrains.size() == 0) + menu_button.get_popup().set_item_disabled(MENU_SET_UP_NAVIGATION, true) + else: + menu_button.get_popup().set_item_disabled(MENU_BAKE_NAV_MESH, true) + menu_button.get_popup().set_item_disabled(MENU_SET_UP_NAVIGATION, true) diff --git a/addons/terrain_3d/src/tool_settings.gd b/addons/terrain_3d/src/tool_settings.gd new file mode 100644 index 0000000..ad9a195 --- /dev/null +++ b/addons/terrain_3d/src/tool_settings.gd @@ -0,0 +1,679 @@ +extends PanelContainer + +signal picking(type, callback) +signal setting_changed + +enum Layout { + HORIZONTAL, + VERTICAL, + GRID, +} + +enum SettingType { + CHECKBOX, + COLOR_SELECT, + DOUBLE_SLIDER, + OPTION, + PICKER, + MULTI_PICKER, + SLIDER, + TYPE_MAX, +} + +const MultiPicker: Script = preload("res://addons/terrain_3d/src/multi_picker.gd") +const DEFAULT_BRUSH: String = "circle0.exr" +const BRUSH_PATH: String = "res://addons/terrain_3d/brushes" +const PICKER_ICON: String = "res://addons/terrain_3d/icons/picker.svg" + +# Add settings flags +const NONE: int = 0x0 +const ALLOW_LARGER: int = 0x1 +const ALLOW_SMALLER: int = 0x2 +const ALLOW_OUT_OF_BOUNDS: int = 0x3 # LARGER|SMALLER +const NO_LABEL: int = 0x4 +const ADD_SEPARATOR: int = 0x8 +const ADD_SPACER: int = 0x10 + +var brush_preview_material: ShaderMaterial +var select_brush_button: Button + +var main_list: HBoxContainer +var advanced_list: VBoxContainer +var height_list: VBoxContainer +var scale_list: VBoxContainer +var rotation_list: VBoxContainer +var color_list: VBoxContainer +var settings: Dictionary = {} + + +func _ready() -> void: + main_list = HBoxContainer.new() + add_child(main_list, true) + + ## Common Settings + add_brushes(main_list) + + add_setting({ "name":"size", "type":SettingType.SLIDER, "list":main_list, "default":50, "unit":"m", + "range":Vector3(2, 200, 1), "flags":ALLOW_LARGER|ADD_SPACER }) + + add_setting({ "name":"strength", "type":SettingType.SLIDER, "list":main_list, "default":10, + "unit":"%", "range":Vector3(1, 100, 1), "flags":ALLOW_LARGER }) + + add_setting({ "name":"enable", "type":SettingType.CHECKBOX, "list":main_list, "default":true }) + + add_setting({ "name":"height", "type":SettingType.SLIDER, "list":main_list, "default":50, + "unit":"m", "range":Vector3(-500, 500, 0.1), "flags":ALLOW_OUT_OF_BOUNDS }) + add_setting({ "name":"height_picker", "type":SettingType.PICKER, "list":main_list, + "default":Terrain3DEditor.HEIGHT, "flags":NO_LABEL }) + + add_setting({ "name":"color", "type":SettingType.COLOR_SELECT, "list":main_list, + "default":Color.WHITE, "flags":ADD_SEPARATOR }) + add_setting({ "name":"color_picker", "type":SettingType.PICKER, "list":main_list, + "default":Terrain3DEditor.COLOR, "flags":NO_LABEL }) + + add_setting({ "name":"roughness", "type":SettingType.SLIDER, "list":main_list, "default":0, + "unit":"%", "range":Vector3(-100, 100, 1), "flags":ADD_SEPARATOR }) + add_setting({ "name":"roughness_picker", "type":SettingType.PICKER, "list":main_list, + "default":Terrain3DEditor.ROUGHNESS, "flags":NO_LABEL }) + + add_setting({ "name":"enable_texture", "label":"Texture", "type":SettingType.CHECKBOX, + "list":main_list, "default":true }) + + add_setting({ "name":"enable_angle", "label":"Angle", "type":SettingType.CHECKBOX, + "list":main_list, "default":true, "flags":ADD_SEPARATOR }) + add_setting({ "name":"angle", "type":SettingType.SLIDER, "list":main_list, "default":0, + "unit":"%", "range":Vector3(0, 337.5, 22.5), "flags":NO_LABEL }) + add_setting({ "name":"angle_picker", "type":SettingType.PICKER, "list":main_list, + "default":Terrain3DEditor.ANGLE, "flags":NO_LABEL }) + add_setting({ "name":"dynamic_angle", "label":"Dynamic", "type":SettingType.CHECKBOX, + "list":main_list, "default":false, "flags":ADD_SPACER }) + + add_setting({ "name":"enable_scale", "label":"Scale ±", "type":SettingType.CHECKBOX, + "list":main_list, "default":true, "flags":ADD_SEPARATOR }) + add_setting({ "name":"scale", "label":"±", "type":SettingType.SLIDER, "list":main_list, "default":0, + "unit":"%", "range":Vector3(-60, 80, 20), "flags":NO_LABEL }) + add_setting({ "name":"scale_picker", "type":SettingType.PICKER, "list":main_list, + "default":Terrain3DEditor.SCALE, "flags":NO_LABEL }) + + ## Slope + add_setting({ "name":"slope", "type":SettingType.DOUBLE_SLIDER, "list":main_list, + "default":0, "unit":"°", "range":Vector3(0, 180, 1) }) + add_setting({ "name":"gradient_points", "type":SettingType.MULTI_PICKER, "label":"Points", + "list":main_list, "default":Terrain3DEditor.HEIGHT, "flags":ADD_SEPARATOR }) + add_setting({ "name":"drawable", "type":SettingType.CHECKBOX, "list":main_list, "default":false, + "flags":ADD_SEPARATOR }) + settings["drawable"].toggled.connect(_on_drawable_toggled) + + ## Instancer + height_list = create_submenu(main_list, "Height", Layout.VERTICAL) + add_setting({ "name":"height_offset", "type":SettingType.SLIDER, "list":height_list, "default":0, + "unit":"m", "range":Vector3(-10, 10, 0.05), "flags":ALLOW_OUT_OF_BOUNDS }) + add_setting({ "name":"random_height", "label":"Random Height ±", "type":SettingType.SLIDER, + "list":height_list, "default":0, "unit":"m", "range":Vector3(0, 10, 0.05), + "flags":ALLOW_OUT_OF_BOUNDS }) + + scale_list = create_submenu(main_list, "Scale", Layout.VERTICAL) + add_setting({ "name":"fixed_scale", "type":SettingType.SLIDER, "list":scale_list, "default":100, + "unit":"%", "range":Vector3(1, 1000, 1), "flags":ALLOW_OUT_OF_BOUNDS }) + add_setting({ "name":"random_scale", "label":"Random Scale ±", "type":SettingType.SLIDER, "list":scale_list, + "default":20, "unit":"%", "range":Vector3(0, 99, 1), "flags":ALLOW_OUT_OF_BOUNDS }) + + rotation_list = create_submenu(main_list, "Rotation", Layout.VERTICAL) + add_setting({ "name":"fixed_spin", "label":"Fixed Spin (Around Y)", "type":SettingType.SLIDER, "list":rotation_list, + "default":0, "unit":"°", "range":Vector3(0, 360, 1) }) + add_setting({ "name":"random_spin", "type":SettingType.SLIDER, "list":rotation_list, "default":360, + "unit":"°", "range":Vector3(0, 360, 1) }) + add_setting({ "name":"fixed_angle", "label":"Fixed Angle (From Y)", "type":SettingType.SLIDER, "list":rotation_list, + "default":0, "unit":"°", "range":Vector3(-85, 85, 1), "flags":ALLOW_OUT_OF_BOUNDS }) + add_setting({ "name":"random_angle", "label":"Random Angle ±", "type":SettingType.SLIDER, "list":rotation_list, + "default":10, "unit":"°", "range":Vector3(0, 85, 1), "flags":ALLOW_OUT_OF_BOUNDS }) + add_setting({ "name":"align_to_normal", "type":SettingType.CHECKBOX, "list":rotation_list, "default":false }) + + color_list = create_submenu(main_list, "Color", Layout.VERTICAL) + add_setting({ "name":"vertex_color", "type":SettingType.COLOR_SELECT, "list":color_list, + "default":Color.WHITE }) + add_setting({ "name":"random_hue", "label":"Random Hue Shift ±", "type":SettingType.SLIDER, + "list":color_list, "default":0, "unit":"°", "range":Vector3(0, 360, 1) }) + add_setting({ "name":"random_darken", "type":SettingType.SLIDER, "list":color_list, "default":50, + "unit":"%", "range":Vector3(0, 100, 1) }) + #add_setting({ "name":"blend_mode", "type":SettingType.OPTION, "list":color_list, "default":0, + #"range":Vector3(0, 3, 1) }) + + var spacer: Control = Control.new() + spacer.size_flags_horizontal = Control.SIZE_EXPAND_FILL + main_list.add_child(spacer, true) + + ## Advanced Settings Menu + advanced_list = create_submenu(main_list, "Advanced", Layout.VERTICAL) + add_setting({ "name":"automatic_regions", "type":SettingType.CHECKBOX, "list":advanced_list, + "default":true }) + add_setting({ "name":"align_to_view", "type":SettingType.CHECKBOX, "list":advanced_list, + "default":true }) + add_setting({ "name":"show_cursor_while_painting", "type":SettingType.CHECKBOX, "list":advanced_list, + "default":true }) + advanced_list.add_child(HSeparator.new(), true) + add_setting({ "name":"gamma", "type":SettingType.SLIDER, "list":advanced_list, "default":1.0, + "unit":"γ", "range":Vector3(0.1, 2.0, 0.01) }) + add_setting({ "name":"jitter", "type":SettingType.SLIDER, "list":advanced_list, "default":50, + "unit":"%", "range":Vector3(0, 100, 1) }) + + +func create_submenu(p_parent: Control, p_button_name: String, p_layout: Layout) -> Container: + var menu_button: Button = Button.new() + menu_button.set_text(p_button_name) + menu_button.set_toggle_mode(true) + menu_button.set_v_size_flags(SIZE_SHRINK_CENTER) + menu_button.toggled.connect(_on_show_submenu.bind(menu_button)) + + var submenu: PopupPanel = PopupPanel.new() + submenu.popup_hide.connect(menu_button.set_pressed_no_signal.bind(false)) + var panel_style: StyleBox = get_theme_stylebox("panel", "PopupMenu").duplicate() + panel_style.set_content_margin_all(10) + submenu.set("theme_override_styles/panel", panel_style) + submenu.add_to_group("terrain3d_submenus") + + # Pop up menu on hover, hide on exit + menu_button.mouse_entered.connect(_on_show_submenu.bind(true, menu_button)) + submenu.mouse_exited.connect(_on_show_submenu.bind(false, menu_button)) + + var sublist: Container + match(p_layout): + Layout.GRID: + sublist = GridContainer.new() + Layout.VERTICAL: + sublist = VBoxContainer.new() + Layout.HORIZONTAL, _: + sublist = HBoxContainer.new() + + p_parent.add_child(menu_button, true) + menu_button.add_child(submenu, true) + submenu.add_child(sublist, true) + + return sublist + + +func _on_show_submenu(p_toggled: bool, p_button: Button) -> void: + # Don't show if mouse already down (from painting) + if p_toggled and Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT): + return + + # Hide menu if mouse is not in button or panel + var button_rect: Rect2 = Rect2(p_button.get_screen_transform().origin, p_button.get_global_rect().size) + var in_button: bool = button_rect.has_point(DisplayServer.mouse_get_position()) + var panel: PopupPanel = p_button.get_child(0) + var panel_rect: Rect2 = Rect2(panel.position, panel.size) + var in_panel: bool = panel_rect.has_point(DisplayServer.mouse_get_position()) + if not p_toggled and ( in_button or in_panel ): + return + + # Hide all submenus before possibly enabling the current one + get_tree().call_group("terrain3d_submenus", "set_visible", false) + var popup: PopupPanel = p_button.get_child(0) + var popup_pos: Vector2 = p_button.get_screen_transform().origin + popup.set_visible(p_toggled) + popup_pos.y -= popup.get_size().y + popup.set_position(popup_pos) + + +func add_brushes(p_parent: Control) -> void: + var brush_list: GridContainer = create_submenu(p_parent, "Brush", Layout.GRID) + brush_list.name = "BrushList" + + var brush_button_group: ButtonGroup = ButtonGroup.new() + brush_button_group.pressed.connect(_on_setting_changed) + var default_brush_btn: Button + + var dir: DirAccess = DirAccess.open(BRUSH_PATH) + if dir: + dir.list_dir_begin() + var file_name = dir.get_next() + while file_name != "": + if !dir.current_is_dir() and file_name.ends_with(".exr"): + var img: Image = Image.load_from_file(BRUSH_PATH + "/" + file_name) + img = Terrain3DUtil.black_to_alpha(img) + var tex: ImageTexture = ImageTexture.create_from_image(img) + + var btn: Button = Button.new() + btn.set_custom_minimum_size(Vector2.ONE * 100) + btn.set_button_icon(tex) + btn.set_meta("image", img) + btn.set_expand_icon(true) + btn.set_material(_get_brush_preview_material()) + btn.set_toggle_mode(true) + btn.set_button_group(brush_button_group) + btn.mouse_entered.connect(_on_brush_hover.bind(true, btn)) + btn.mouse_exited.connect(_on_brush_hover.bind(false, btn)) + brush_list.add_child(btn, true) + if file_name == DEFAULT_BRUSH: + default_brush_btn = btn + + var lbl: Label = Label.new() + btn.name = file_name.get_basename().to_pascal_case() + btn.add_child(lbl, true) + lbl.text = btn.name + lbl.visible = false + lbl.position.y = 70 + lbl.add_theme_color_override("font_shadow_color", Color.BLACK) + lbl.add_theme_constant_override("shadow_offset_x", 1) + lbl.add_theme_constant_override("shadow_offset_y", 1) + lbl.add_theme_font_size_override("font_size", 16) + + file_name = dir.get_next() + + brush_list.columns = sqrt(brush_list.get_child_count()) + 2 + + if not default_brush_btn: + default_brush_btn = brush_button_group.get_buttons()[0] + default_brush_btn.set_pressed(true) + + settings["brush"] = brush_button_group + + select_brush_button = brush_list.get_parent().get_parent() + # Optionally erase the main brush button text and replace it with the texture +# select_brush_button.set_button_icon(default_brush_btn.get_button_icon()) +# select_brush_button.set_custom_minimum_size(Vector2.ONE * 36) +# select_brush_button.set_icon_alignment(HORIZONTAL_ALIGNMENT_CENTER) +# select_brush_button.set_expand_icon(true) + + +func _on_brush_hover(p_hovering: bool, p_button: Button) -> void: + if p_button.get_child_count() > 0: + var child = p_button.get_child(0) + if child is Label: + if p_hovering: + child.visible = true + else: + child.visible = false + + +func _on_pick(p_type: Terrain3DEditor.Tool) -> void: + emit_signal("picking", p_type, _on_picked) + + +func _on_picked(p_type: Terrain3DEditor.Tool, p_color: Color, p_global_position: Vector3) -> void: + match p_type: + Terrain3DEditor.HEIGHT: + settings["height"].value = p_color.r if not is_nan(p_color.r) else 0 + Terrain3DEditor.COLOR: + settings["color"].color = p_color if not is_nan(p_color.r) else Color.WHITE + Terrain3DEditor.ROUGHNESS: + # 200... -.5 converts 0,1 to -100,100 + settings["roughness"].value = round(200 * (p_color.a - 0.5)) if not is_nan(p_color.r) else 0.499 + Terrain3DEditor.ANGLE: + settings["angle"].value = p_color.r + Terrain3DEditor.SCALE: + settings["scale"].value = p_color.r + _on_setting_changed() + + +func _on_point_pick(p_type: Terrain3DEditor.Tool, p_name: String) -> void: + assert(p_type == Terrain3DEditor.HEIGHT) + emit_signal("picking", p_type, _on_point_picked.bind(p_name)) + + +func _on_point_picked(p_type: Terrain3DEditor.Tool, p_color: Color, p_global_position: Vector3, p_name: String) -> void: + assert(p_type == Terrain3DEditor.HEIGHT) + + var point: Vector3 = p_global_position + point.y = p_color.r + settings[p_name].add_point(point) + _on_setting_changed() + + +func add_setting(p_args: Dictionary) -> void: + var p_name: StringName = p_args.get("name", "") + var p_label: String = p_args.get("label", "") # Optional replacement for name + var p_type: SettingType = p_args.get("type", SettingType.TYPE_MAX) + var p_list: Control = p_args.get("list") + var p_default: Variant = p_args.get("default") + var p_suffix: String = p_args.get("unit", "") + var p_range: Vector3 = p_args.get("range", Vector3(0, 0, 1)) + var p_minimum: float = p_range.x + var p_maximum: float = p_range.y + var p_step: float = p_range.z + var p_flags: int = p_args.get("flags", NONE) + + if p_name.is_empty() or p_type == SettingType.TYPE_MAX: + return + + var container: HBoxContainer = HBoxContainer.new() + container.set_v_size_flags(SIZE_EXPAND_FILL) + var control: Control # Houses the setting to be saved + var pending_children: Array[Control] + + match p_type: + SettingType.CHECKBOX: + var checkbox := CheckBox.new() + checkbox.set_pressed_no_signal(p_default) + checkbox.pressed.connect(_on_setting_changed) + pending_children.push_back(checkbox) + control = checkbox + + SettingType.COLOR_SELECT: + var picker := ColorPickerButton.new() + picker.set_custom_minimum_size(Vector2(100, 25)) + picker.color = Color.WHITE + picker.edit_alpha = false + picker.get_picker().set_color_mode(ColorPicker.MODE_HSV) + picker.color_changed.connect(_on_setting_changed) + var popup: PopupPanel = picker.get_popup() + popup.mouse_exited.connect(Callable(func(p): p.hide()).bind(popup)) + pending_children.push_back(picker) + control = picker + + SettingType.PICKER: + var button := Button.new() + button.set_v_size_flags(SIZE_SHRINK_CENTER) + button.icon = load(PICKER_ICON) + button.tooltip_text = "Pick value from the Terrain" + button.pressed.connect(_on_pick.bind(p_default)) + pending_children.push_back(button) + control = button + + SettingType.MULTI_PICKER: + var multi_picker: HBoxContainer = MultiPicker.new() + multi_picker.pressed.connect(_on_point_pick.bind(p_default, p_name)) + multi_picker.value_changed.connect(_on_setting_changed) + pending_children.push_back(multi_picker) + control = multi_picker + + SettingType.OPTION: + var option := OptionButton.new() + for i in int(p_maximum): + option.add_item("a", i) + option.selected = p_minimum + option.item_selected.connect(_on_setting_changed) + pending_children.push_back(option) + control = option + + SettingType.SLIDER, SettingType.DOUBLE_SLIDER: + var slider: Control + if p_type == SettingType.SLIDER: + # Create an editable value box + var spin_slider := EditorSpinSlider.new() + spin_slider.set_flat(false) + spin_slider.set_hide_slider(true) + spin_slider.value_changed.connect(_on_setting_changed) + spin_slider.set_max(p_maximum) + spin_slider.set_min(p_minimum) + spin_slider.set_step(p_step) + spin_slider.set_value(p_default) + spin_slider.set_suffix(p_suffix) + spin_slider.set_v_size_flags(SIZE_SHRINK_CENTER) + spin_slider.set_custom_minimum_size(Vector2(75, 0)) + + # Create horizontal slider linked to the above box + slider = HSlider.new() + slider.share(spin_slider) + if p_flags & ALLOW_LARGER: + slider.set_allow_greater(true) + if p_flags & ALLOW_SMALLER: + slider.set_allow_lesser(true) + pending_children.push_back(slider) + pending_children.push_back(spin_slider) + control = spin_slider + + else: # DOUBLE_SLIDER + var label := Label.new() + label.set_custom_minimum_size(Vector2(75, 0)) + slider = DoubleSlider.new() + slider.label = label + slider.suffix = p_suffix + slider.setting_changed.connect(_on_setting_changed) + pending_children.push_back(slider) + pending_children.push_back(label) + control = slider + + slider.set_max(p_maximum) + slider.set_min(p_minimum) + slider.set_step(p_step) + slider.set_value(p_default) + slider.set_v_size_flags(SIZE_SHRINK_CENTER) + slider.set_custom_minimum_size(Vector2(60, 10)) + + control.name = p_name.to_pascal_case() + settings[p_name] = control + + # Setup button labels + if not (p_flags & NO_LABEL): + # Labels are actually buttons styled to look like labels + var label := Button.new() + label.set("theme_override_styles/normal", get_theme_stylebox("normal", "Label")) + label.set("theme_override_styles/hover", get_theme_stylebox("normal", "Label")) + label.set("theme_override_styles/pressed", get_theme_stylebox("normal", "Label")) + label.set("theme_override_styles/focus", get_theme_stylebox("normal", "Label")) + label.pressed.connect(_on_label_pressed.bind(p_name, p_default)) + if p_label.is_empty(): + label.set_text(p_name.capitalize() + ": ") + else: + label.set_text(p_label.capitalize() + ": ") + pending_children.push_front(label) + + # Add separators to front + if p_flags & ADD_SEPARATOR: + pending_children.push_front(VSeparator.new()) + if p_flags & ADD_SPACER: + var spacer := Control.new() + spacer.set_custom_minimum_size(Vector2(5, 0)) + pending_children.push_front(spacer) + + # Add all children to container and list + for child in pending_children: + container.add_child(child, true) + p_list.add_child(container, true) + + +# If label button is pressed, reset value to default or toggle checkbox +func _on_label_pressed(p_name: String, p_default: Variant) -> void: + var control: Control = settings.get(p_name) + if not control: + return + if control is CheckBox: + set_setting(p_name, !control.button_pressed) + elif p_default != null: + set_setting(p_name, p_default) + + +func get_settings() -> Dictionary: + var dict: Dictionary + for key in settings.keys(): + dict[key] = get_setting(key) + return dict + + +func get_setting(p_setting: String) -> Variant: + var object: Object = settings.get(p_setting) + var value: Variant + if object is Range: + value = object.get_value() + # Adjust widths of all sliders on update of values + var digits: float = count_digits(value) + var width: float = clamp( (1 + count_digits(value)) * 19., 50, 80) * clamp(EditorInterface.get_editor_scale(), .9, 2) + object.set_custom_minimum_size(Vector2(width, 0)) + elif object is DoubleSlider: + value = Vector2(object.get_min_value(), object.get_max_value()) + elif object is ButtonGroup: + var img: Image = object.get_pressed_button().get_meta("image") + var tex: Texture2D = object.get_pressed_button().get_button_icon() + value = [ img, tex ] + elif object is CheckBox: + value = object.is_pressed() + elif object is ColorPickerButton: + value = object.color + elif object is MultiPicker: + value = object.get_points() + if value == null: + value = 0 + return value + + +func set_setting(p_setting: String, p_value: Variant) -> void: + var object: Object = settings.get(p_setting) + if object is Range: + object.set_value(p_value) + elif object is DoubleSlider: # Expects p_value is Vector2 + object.set_min_value(p_value.x) + object.set_max_value(p_value.y) + elif object is ButtonGroup: # Expects p_value is Array [ "button name", boolean ] + if p_value is Array and p_value.size() == 2: + for button in object.get_buttons(): + if button.name == p_value[0]: + button.button_pressed = p_value[1] + elif object is CheckBox: + object.button_pressed = p_value + elif object is ColorPickerButton: + object.color = p_value + elif object is MultiPicker: # Expects p_value is PackedVector3Array + object.points = p_value + _on_setting_changed(object) + + +func show_settings(p_settings: PackedStringArray) -> void: + for setting in settings.keys(): + var object: Object = settings[setting] + if object is Control: + if setting in p_settings: + object.get_parent().show() + else: + object.get_parent().hide() + if select_brush_button: + if not "brush" in p_settings: + select_brush_button.hide() + else: + select_brush_button.show() + + +func _on_setting_changed(p_data: Variant = null) -> void: + # If a button was clicked on a submenu + if p_data is Button and p_data.get_parent().get_parent() is PopupPanel: + if p_data.get_parent().name == "BrushList": + # Optionally Set selected brush texture in main brush button +# p_data.get_parent().get_parent().get_parent().set_button_icon(p_data.get_button_icon()) + # Hide popup + p_data.get_parent().get_parent().set_visible(false) + # Hide label + if p_data.get_child_count() > 0: + p_data.get_child(0).visible = false + + emit_signal("setting_changed") + + +func _on_drawable_toggled(p_button_pressed: bool) -> void: + if not p_button_pressed: + settings["gradient_points"].clear() + + +func _get_brush_preview_material() -> ShaderMaterial: + if !brush_preview_material: + brush_preview_material = ShaderMaterial.new() + var shader: Shader = Shader.new() + + var code: String = "shader_type canvas_item;\n" + code += "varying vec4 v_vertex_color;\n" + code += "void vertex() {\n" + code += " v_vertex_color = COLOR;\n" + code += "}\n" + code += "void fragment(){\n" + code += " vec4 tex = texture(TEXTURE, UV);\n" + code += " COLOR.a *= pow(tex.r, 0.666);\n" + code += " COLOR.rgb = v_vertex_color.rgb;\n" + code += "}\n" + + shader.set_code(code) + brush_preview_material.set_shader(shader) + return brush_preview_material + + + +# Counts digits of a number including negative sign, decimal points, and up to 3 decimals +func count_digits(p_value: float) -> int: + var count: int = 1 + for i in range(5, 0, -1): + if abs(p_value) >= pow(10, i): + count = i+1 + break + if p_value - floor(p_value) >= .1: + count += 1 # For the decimal + if p_value*10 - floor(p_value*10.) >= .1: + count += 1 + if p_value*100 - floor(p_value*100.) >= .1: + count += 1 + if p_value*1000 - floor(p_value*1000.) >= .1: + count += 1 + # Negative sign + if p_value < 0: + count += 1 + return count + + +#### Sub Class DoubleSlider + +class DoubleSlider extends Range: + signal setting_changed(Vector2) + var label: Label + var suffix: String + var grabbed: bool = false + var _max_value: float + # TODO Needs to clamp min and max values. Currently allows max slider to go negative. + + func _gui_input(p_event: InputEvent) -> void: + if p_event is InputEventMouseButton: + if p_event.get_button_index() == MOUSE_BUTTON_LEFT: + grabbed = p_event.is_pressed() + set_min_max(p_event.get_position().x) + + if p_event is InputEventMouseMotion: + if grabbed: + set_min_max(p_event.get_position().x) + + + func _notification(p_what: int) -> void: + if p_what == NOTIFICATION_RESIZED: + pass + if p_what == NOTIFICATION_DRAW: + var bg: StyleBox = get_theme_stylebox("slider", "HSlider") + var bg_height: float = bg.get_minimum_size().y + draw_style_box(bg, Rect2(Vector2(0, (size.y - bg_height) / 2), Vector2(size.x, bg_height))) + + var grabber: Texture2D = get_theme_icon("grabber", "HSlider") + var area: StyleBox = get_theme_stylebox("grabber_area", "HSlider") + var h: float = size.y / 2 - grabber.get_size().y / 2 + + var minpos: Vector2 = Vector2((min_value / _max_value) * size.x - grabber.get_size().x / 2, h) + var maxpos: Vector2 = Vector2((max_value / _max_value) * size.x - grabber.get_size().x / 2, h) + + draw_style_box(area, Rect2(Vector2(minpos.x + grabber.get_size().x / 2, (size.y - bg_height) / 2), Vector2(maxpos.x - minpos.x, bg_height))) + + draw_texture(grabber, minpos) + draw_texture(grabber, maxpos) + + + func set_max(p_value: float) -> void: + max_value = p_value + if _max_value == 0: + _max_value = max_value + update_label() + + + func set_min_max(p_xpos: float) -> void: + var mid_value_normalized: float = ((max_value + min_value) / 2.0) / _max_value + var mid_value: float = size.x * mid_value_normalized + var min_active: bool = p_xpos < mid_value + var xpos_ranged: float = snappedf((p_xpos / size.x) * _max_value, step) + + if min_active: + min_value = xpos_ranged + else: + max_value = xpos_ranged + + min_value = clamp(min_value, 0, max_value - 10) + max_value = clamp(max_value, min_value + 10, _max_value) + + update_label() + emit_signal("setting_changed", Vector2(min_value, max_value)) + queue_redraw() + + + func update_label() -> void: + if label: + label.set_text(str(min_value) + suffix + "/" + str(max_value) + suffix) diff --git a/addons/terrain_3d/src/toolbar.gd b/addons/terrain_3d/src/toolbar.gd new file mode 100644 index 0000000..4128400 --- /dev/null +++ b/addons/terrain_3d/src/toolbar.gd @@ -0,0 +1,77 @@ +extends VBoxContainer + + +signal tool_changed(p_tool: Terrain3DEditor.Tool, p_operation: Terrain3DEditor.Operation) + +const ICON_REGION_ADD: String = "res://addons/terrain_3d/icons/region_add.svg" +const ICON_REGION_REMOVE: String = "res://addons/terrain_3d/icons/region_remove.svg" +const ICON_HEIGHT_ADD: String = "res://addons/terrain_3d/icons/height_add.svg" +const ICON_HEIGHT_SUB: String = "res://addons/terrain_3d/icons/height_sub.svg" +const ICON_HEIGHT_MUL: String = "res://addons/terrain_3d/icons/height_mul.svg" +const ICON_HEIGHT_DIV: String = "res://addons/terrain_3d/icons/height_div.svg" +const ICON_HEIGHT_FLAT: String = "res://addons/terrain_3d/icons/height_flat.svg" +const ICON_HEIGHT_SLOPE: String = "res://addons/terrain_3d/icons/height_slope.svg" +const ICON_HEIGHT_SMOOTH: String = "res://addons/terrain_3d/icons/height_smooth.svg" +const ICON_PAINT_TEXTURE: String = "res://addons/terrain_3d/icons/texture_paint.svg" +const ICON_SPRAY_TEXTURE: String = "res://addons/terrain_3d/icons/texture_spray.svg" +const ICON_COLOR: String = "res://addons/terrain_3d/icons/color_paint.svg" +const ICON_WETNESS: String = "res://addons/terrain_3d/icons/wetness.svg" +const ICON_AUTOSHADER: String = "res://addons/terrain_3d/icons/autoshader.svg" +const ICON_HOLES: String = "res://addons/terrain_3d/icons/holes.svg" +const ICON_NAVIGATION: String = "res://addons/terrain_3d/icons/navigation.svg" +const ICON_INSTANCER: String = "res://addons/terrain_3d/icons/multimesh.svg" + +var tool_group: ButtonGroup = ButtonGroup.new() + + +func _init() -> void: + set_custom_minimum_size(Vector2(20, 0)) + + +func _ready() -> void: + tool_group.connect("pressed", _on_tool_selected) + + add_tool_button(Terrain3DEditor.REGION, Terrain3DEditor.ADD, "Add Region", load(ICON_REGION_ADD), tool_group) + add_tool_button(Terrain3DEditor.REGION, Terrain3DEditor.SUBTRACT, "Remove Region", load(ICON_REGION_REMOVE), tool_group) + add_child(HSeparator.new()) + add_tool_button(Terrain3DEditor.HEIGHT, Terrain3DEditor.ADD, "Raise", load(ICON_HEIGHT_ADD), tool_group) + add_tool_button(Terrain3DEditor.HEIGHT, Terrain3DEditor.SUBTRACT, "Lower", load(ICON_HEIGHT_SUB), tool_group) + add_tool_button(Terrain3DEditor.HEIGHT, Terrain3DEditor.MULTIPLY, "Expand (Away from 0)", load(ICON_HEIGHT_MUL), tool_group) + add_tool_button(Terrain3DEditor.HEIGHT, Terrain3DEditor.DIVIDE, "Reduce (Towards 0)", load(ICON_HEIGHT_DIV), tool_group) + add_tool_button(Terrain3DEditor.HEIGHT, Terrain3DEditor.REPLACE, "Flatten", load(ICON_HEIGHT_FLAT), tool_group) + add_tool_button(Terrain3DEditor.HEIGHT, Terrain3DEditor.GRADIENT, "Slope", load(ICON_HEIGHT_SLOPE), tool_group) + add_tool_button(Terrain3DEditor.HEIGHT, Terrain3DEditor.AVERAGE, "Smooth", load(ICON_HEIGHT_SMOOTH), tool_group) + add_child(HSeparator.new()) + add_tool_button(Terrain3DEditor.TEXTURE, Terrain3DEditor.REPLACE, "Paint Base Texture", load(ICON_PAINT_TEXTURE), tool_group) + add_tool_button(Terrain3DEditor.TEXTURE, Terrain3DEditor.ADD, "Spray Overlay Texture", load(ICON_SPRAY_TEXTURE), tool_group) + add_tool_button(Terrain3DEditor.AUTOSHADER, Terrain3DEditor.REPLACE, "Autoshader", load(ICON_AUTOSHADER), tool_group) + add_child(HSeparator.new()) + add_tool_button(Terrain3DEditor.COLOR, Terrain3DEditor.REPLACE, "Paint Color", load(ICON_COLOR), tool_group) + add_tool_button(Terrain3DEditor.ROUGHNESS, Terrain3DEditor.REPLACE, "Paint Wetness", load(ICON_WETNESS), tool_group) + add_child(HSeparator.new()) + add_tool_button(Terrain3DEditor.HOLES, Terrain3DEditor.REPLACE, "Create Holes", load(ICON_HOLES), tool_group) + add_tool_button(Terrain3DEditor.NAVIGATION, Terrain3DEditor.REPLACE, "Paint Navigable Area", load(ICON_NAVIGATION), tool_group) + add_tool_button(Terrain3DEditor.INSTANCER, Terrain3DEditor.ADD, "Instance Meshes", load(ICON_INSTANCER), tool_group) + + var buttons: Array[BaseButton] = tool_group.get_buttons() + buttons[0].set_pressed(true) + + +func add_tool_button(p_tool: Terrain3DEditor.Tool, p_operation: Terrain3DEditor.Operation, + p_tip: String, p_icon: Texture2D, p_group: ButtonGroup) -> void: + + var button: Button = Button.new() + button.set_name(p_tip.to_pascal_case()) + button.set_meta("Tool", p_tool) + button.set_meta("Operation", p_operation) + button.set_tooltip_text(p_tip) + button.set_button_icon(p_icon) + button.set_button_group(p_group) + button.set_flat(true) + button.set_toggle_mode(true) + button.set_h_size_flags(SIZE_SHRINK_END) + add_child(button) + + +func _on_tool_selected(p_button: BaseButton) -> void: + emit_signal("tool_changed", p_button.get_meta("Tool", -1), p_button.get_meta("Operation", -1)) diff --git a/addons/terrain_3d/src/ui.gd b/addons/terrain_3d/src/ui.gd new file mode 100644 index 0000000..bc6df8a --- /dev/null +++ b/addons/terrain_3d/src/ui.gd @@ -0,0 +1,387 @@ +extends Node +#class_name Terrain3DUI Cannot be named until Godot #75388 + + +# Includes +const Toolbar: Script = preload("res://addons/terrain_3d/src/toolbar.gd") +const ToolSettings: Script = preload("res://addons/terrain_3d/src/tool_settings.gd") +const TerrainTools: Script = preload("res://addons/terrain_3d/src/terrain_tools.gd") +const OperationBuilder: Script = preload("res://addons/terrain_3d/src/operation_builder.gd") +const GradientOperationBuilder: Script = preload("res://addons/terrain_3d/src/gradient_operation_builder.gd") +const COLOR_RAISE := Color.WHITE +const COLOR_LOWER := Color.BLACK +const COLOR_SMOOTH := Color(0.5, 0, .1) +const COLOR_EXPAND := Color.ORANGE +const COLOR_REDUCE := Color.BLUE_VIOLET +const COLOR_FLATTEN := Color(0., 0.32, .4) +const COLOR_SLOPE := Color.YELLOW +const COLOR_PAINT := Color.FOREST_GREEN +const COLOR_SPRAY := Color.SEA_GREEN +const COLOR_ROUGHNESS := Color.ROYAL_BLUE +const COLOR_AUTOSHADER := Color.DODGER_BLUE +const COLOR_HOLES := Color.BLACK +const COLOR_NAVIGATION := Color.REBECCA_PURPLE +const COLOR_INSTANCER := Color.CRIMSON +const COLOR_PICK_COLOR := Color.WHITE +const COLOR_PICK_HEIGHT := Color.DARK_RED +const COLOR_PICK_ROUGH := Color.ROYAL_BLUE + +const RING1: String = "res://addons/terrain_3d/brushes/ring1.exr" +@onready var ring_texture := ImageTexture.create_from_image(Terrain3DUtil.black_to_alpha(Image.load_from_file(RING1))) + +var plugin: EditorPlugin # Actually Terrain3DEditorPlugin, but Godot still has CRC errors +var toolbar: Toolbar +var toolbar_settings: ToolSettings +var terrain_tools: TerrainTools +var setting_has_changed: bool = false +var visible: bool = false +var picking: int = Terrain3DEditor.TOOL_MAX +var picking_callback: Callable +var decal: Decal +var decal_timer: Timer +var gradient_decals: Array[Decal] +var brush_data: Dictionary +var operation_builder: OperationBuilder + + +func _enter_tree() -> void: + toolbar = Toolbar.new() + toolbar.hide() + toolbar.connect("tool_changed", _on_tool_changed) + + toolbar_settings = ToolSettings.new() + toolbar_settings.connect("setting_changed", _on_setting_changed) + toolbar_settings.connect("picking", _on_picking) + toolbar_settings.hide() + + terrain_tools = TerrainTools.new() + terrain_tools.plugin = plugin + terrain_tools.hide() + + plugin.add_control_to_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_SIDE_LEFT, toolbar) + plugin.add_control_to_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_BOTTOM, toolbar_settings) + plugin.add_control_to_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_MENU, terrain_tools) + + _on_tool_changed(Terrain3DEditor.REGION, Terrain3DEditor.ADD) + + decal = Decal.new() + add_child(decal) + decal_timer = Timer.new() + decal_timer.wait_time = .5 + decal_timer.one_shot = true + decal_timer.timeout.connect(Callable(func(node): + if node: + get_tree().create_tween().tween_property(node, "albedo_mix", 0.0, 0.15)).bind(decal)) + add_child(decal_timer) + + +func _exit_tree() -> void: + plugin.remove_control_from_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_SIDE_LEFT, toolbar) + plugin.remove_control_from_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_BOTTOM, toolbar_settings) + toolbar.queue_free() + toolbar_settings.queue_free() + terrain_tools.queue_free() + decal.queue_free() + decal_timer.queue_free() + for gradient_decal in gradient_decals: + gradient_decal.queue_free() + gradient_decals.clear() + + +func set_visible(p_visible: bool) -> void: + visible = p_visible + terrain_tools.set_visible(p_visible) + toolbar.set_visible(p_visible) + toolbar_settings.set_visible(p_visible) + update_decal() + + +func set_menu_visibility(p_list: Control, p_visible: bool) -> void: + if p_list: + p_list.get_parent().get_parent().visible = p_visible + + +func _on_tool_changed(p_tool: Terrain3DEditor.Tool, p_operation: Terrain3DEditor.Operation) -> void: + clear_picking() + set_menu_visibility(toolbar_settings.advanced_list, true) + set_menu_visibility(toolbar_settings.scale_list, false) + set_menu_visibility(toolbar_settings.rotation_list, false) + set_menu_visibility(toolbar_settings.height_list, false) + set_menu_visibility(toolbar_settings.color_list, false) + + # Select which settings to show. Options in tool_settings.gd:_ready + var to_show: PackedStringArray = [] + + match p_tool: + Terrain3DEditor.HEIGHT: + to_show.push_back("brush") + to_show.push_back("size") + to_show.push_back("strength") + if p_operation == Terrain3DEditor.REPLACE: + to_show.push_back("height") + to_show.push_back("height_picker") + if p_operation == Terrain3DEditor.GRADIENT: + to_show.push_back("gradient_points") + to_show.push_back("drawable") + + Terrain3DEditor.TEXTURE: + to_show.push_back("brush") + to_show.push_back("size") + to_show.push_back("enable_texture") + if p_operation == Terrain3DEditor.ADD: + to_show.push_back("strength") + to_show.push_back("enable_angle") + to_show.push_back("angle") + to_show.push_back("angle_picker") + to_show.push_back("dynamic_angle") + to_show.push_back("enable_scale") + to_show.push_back("scale") + to_show.push_back("scale_picker") + + Terrain3DEditor.COLOR: + to_show.push_back("brush") + to_show.push_back("size") + to_show.push_back("strength") + to_show.push_back("color") + to_show.push_back("color_picker") + + Terrain3DEditor.ROUGHNESS: + to_show.push_back("brush") + to_show.push_back("size") + to_show.push_back("strength") + to_show.push_back("roughness") + to_show.push_back("roughness_picker") + + Terrain3DEditor.AUTOSHADER, Terrain3DEditor.HOLES, Terrain3DEditor.NAVIGATION: + to_show.push_back("brush") + to_show.push_back("size") + to_show.push_back("enable") + + Terrain3DEditor.INSTANCER: + to_show.push_back("size") + to_show.push_back("strength") + to_show.push_back("enable") + set_menu_visibility(toolbar_settings.height_list, true) + to_show.push_back("height_offset") + to_show.push_back("random_height") + set_menu_visibility(toolbar_settings.scale_list, true) + to_show.push_back("fixed_scale") + to_show.push_back("random_scale") + set_menu_visibility(toolbar_settings.rotation_list, true) + to_show.push_back("fixed_spin") + to_show.push_back("random_spin") + to_show.push_back("fixed_angle") + to_show.push_back("random_angle") + to_show.push_back("align_to_normal") + set_menu_visibility(toolbar_settings.color_list, true) + to_show.push_back("vertex_color") + to_show.push_back("random_darken") + to_show.push_back("random_hue") + + _: + pass + + # Advanced menu settings + to_show.push_back("automatic_regions") + to_show.push_back("align_to_view") + to_show.push_back("show_cursor_while_painting") + to_show.push_back("gamma") + to_show.push_back("jitter") + toolbar_settings.show_settings(to_show) + + operation_builder = null + if p_operation == Terrain3DEditor.GRADIENT: + operation_builder = GradientOperationBuilder.new() + operation_builder.tool_settings = toolbar_settings + + if plugin.editor: + plugin.editor.set_tool(p_tool) + plugin.editor.set_operation(p_operation) + + _on_setting_changed() + plugin.update_region_grid() + + +func _on_setting_changed() -> void: + if not plugin.asset_dock: + return + brush_data = toolbar_settings.get_settings() + brush_data["asset_id"] = plugin.asset_dock.get_current_list().get_selected_id() + update_decal() + plugin.editor.set_brush_data(brush_data) + + +func update_decal() -> void: + var mouse_buttons: int = Input.get_mouse_button_mask() + if not visible or \ + not plugin.terrain or \ + brush_data.is_empty() or \ + mouse_buttons & MOUSE_BUTTON_RIGHT or \ + (mouse_buttons & MOUSE_BUTTON_LEFT and not brush_data["show_cursor_while_painting"]) or \ + plugin.editor.get_tool() == Terrain3DEditor.REGION: + decal.visible = false + for gradient_decal in gradient_decals: + gradient_decal.visible = false + return + else: + # Wait for cursor to recenter after right-click before revealing + # See https://github.com/godotengine/godot/issues/70098 + await get_tree().create_timer(.05).timeout + decal.visible = true + + decal.size = Vector3.ONE * brush_data["size"] + if brush_data["align_to_view"]: + var cam: Camera3D = plugin.terrain.get_camera(); + if (cam): + decal.rotation.y = cam.rotation.y + else: + decal.rotation.y = 0 + + # Set texture and color + if picking != Terrain3DEditor.TOOL_MAX: + decal.texture_albedo = ring_texture + decal.size = Vector3.ONE * 10. * plugin.terrain.get_mesh_vertex_spacing() + match picking: + Terrain3DEditor.HEIGHT: + decal.modulate = COLOR_PICK_HEIGHT + Terrain3DEditor.COLOR: + decal.modulate = COLOR_PICK_COLOR + Terrain3DEditor.ROUGHNESS: + decal.modulate = COLOR_PICK_ROUGH + decal.modulate.a = 1.0 + else: + decal.texture_albedo = brush_data["brush"][1] + match plugin.editor.get_tool(): + Terrain3DEditor.HEIGHT: + match plugin.editor.get_operation(): + Terrain3DEditor.ADD: + decal.modulate = COLOR_RAISE + Terrain3DEditor.SUBTRACT: + decal.modulate = COLOR_LOWER + Terrain3DEditor.MULTIPLY: + decal.modulate = COLOR_EXPAND + Terrain3DEditor.DIVIDE: + decal.modulate = COLOR_REDUCE + Terrain3DEditor.REPLACE: + decal.modulate = COLOR_FLATTEN + Terrain3DEditor.AVERAGE: + decal.modulate = COLOR_SMOOTH + Terrain3DEditor.GRADIENT: + decal.modulate = COLOR_SLOPE + _: + decal.modulate = Color.WHITE + decal.modulate.a = max(.3, brush_data["strength"] * .01) + Terrain3DEditor.TEXTURE: + match plugin.editor.get_operation(): + Terrain3DEditor.REPLACE: + decal.modulate = COLOR_PAINT + decal.modulate.a = 1.0 + Terrain3DEditor.ADD: + decal.modulate = COLOR_SPRAY + decal.modulate.a = max(.3, brush_data["strength"] * .01) + _: + decal.modulate = Color.WHITE + Terrain3DEditor.COLOR: + decal.modulate = brush_data["color"].srgb_to_linear()*.5 + decal.modulate.a = max(.3, brush_data["strength"] * .01) + Terrain3DEditor.ROUGHNESS: + decal.modulate = COLOR_ROUGHNESS + decal.modulate.a = max(.3, brush_data["strength"] * .01) + Terrain3DEditor.AUTOSHADER: + decal.modulate = COLOR_AUTOSHADER + decal.modulate.a = 1.0 + Terrain3DEditor.HOLES: + decal.modulate = COLOR_HOLES + decal.modulate.a = 1.0 + Terrain3DEditor.NAVIGATION: + decal.modulate = COLOR_NAVIGATION + decal.modulate.a = 1.0 + Terrain3DEditor.INSTANCER: + decal.texture_albedo = ring_texture + decal.modulate = COLOR_INSTANCER + decal.modulate.a = 1.0 + _: + decal.modulate = Color.WHITE + decal.modulate.a = max(.3, brush_data["strength"] * .01) + decal.size.y = max(1000, decal.size.y) + decal.albedo_mix = 1.0 + decal.cull_mask = 1 << ( plugin.terrain.get_mouse_layer() - 1 ) + decal_timer.start() + + for gradient_decal in gradient_decals: + gradient_decal.visible = false + + if plugin.editor.get_operation() == Terrain3DEditor.GRADIENT: + var index := 0 + for point in brush_data["gradient_points"]: + if point != Vector3.ZERO: + var point_decal: Decal = _get_gradient_decal(index) + point_decal.visible = true + point_decal.position = point + index += 1 + + +func _get_gradient_decal(index: int) -> Decal: + if gradient_decals.size() > index: + return gradient_decals[index] + + var gradient_decal := Decal.new() + gradient_decal = Decal.new() + gradient_decal.texture_albedo = ring_texture + gradient_decal.modulate = COLOR_SLOPE + gradient_decal.size = Vector3.ONE * 10. * plugin.terrain.get_mesh_vertex_spacing() + gradient_decal.size.y = 1000. + gradient_decal.cull_mask = decal.cull_mask + add_child(gradient_decal) + + gradient_decals.push_back(gradient_decal) + return gradient_decal + + +func set_decal_rotation(p_rot: float) -> void: + decal.rotation.y = p_rot + + +func _on_picking(p_type: int, p_callback: Callable) -> void: + picking = p_type + picking_callback = p_callback + update_decal() + + +func clear_picking() -> void: + picking = Terrain3DEditor.TOOL_MAX + + +func is_picking() -> bool: + if picking != Terrain3DEditor.TOOL_MAX: + return true + + if operation_builder and operation_builder.is_picking(): + return true + + return false + + +func pick(p_global_position: Vector3) -> void: + if picking != Terrain3DEditor.TOOL_MAX: + var color: Color + match picking: + Terrain3DEditor.HEIGHT: + color = plugin.terrain.get_storage().get_pixel(Terrain3DStorage.TYPE_HEIGHT, p_global_position) + Terrain3DEditor.ROUGHNESS: + color = plugin.terrain.get_storage().get_pixel(Terrain3DStorage.TYPE_COLOR, p_global_position) + Terrain3DEditor.COLOR: + color = plugin.terrain.get_storage().get_color(p_global_position) + Terrain3DEditor.ANGLE: + color = Color(plugin.terrain.get_storage().get_angle(p_global_position), 0., 0., 1.) + Terrain3DEditor.SCALE: + color = Color(plugin.terrain.get_storage().get_scale(p_global_position), 0., 0., 1.) + _: + push_error("Unsupported picking type: ", picking) + return + picking_callback.call(picking, color, p_global_position) + picking = Terrain3DEditor.TOOL_MAX + + elif operation_builder and operation_builder.is_picking(): + operation_builder.pick(p_global_position, plugin.terrain) + diff --git a/addons/terrain_3d/terrain.gdextension b/addons/terrain_3d/terrain.gdextension new file mode 100644 index 0000000..d24ffba --- /dev/null +++ b/addons/terrain_3d/terrain.gdextension @@ -0,0 +1,29 @@ +[configuration] + +entry_symbol = "terrain_3d_init" +compatibility_minimum = 4.2 + +[icons] + +Terrain3D = "res://addons/terrain_3d/icons/terrain3d.svg" + +[libraries] + +windows.debug.x86_64 = "res://addons/terrain_3d/bin/libterrain.windows.debug.x86_64.dll" +windows.release.x86_64 = "res://addons/terrain_3d/bin/libterrain.windows.release.x86_64.dll" + +linux.debug.x86_64 = "res://addons/terrain_3d/bin/libterrain.linux.debug.x86_64.so" +linux.release.x86_64 = "res://addons/terrain_3d/bin/libterrain.linux.release.x86_64.so" +linux.debug.arm64 = "res://addons/terrain_3d/bin/libterrain.linux.debug.arm64.so" +linux.release.arm64 = "res://addons/terrain_3d/bin/libterrain.linux.release.arm64.so" +linux.debug.rv64 = "res://addons/terrain_3d/bin/libterrain.linux.debug.rv64.so" +linux.release.rv64 = "res://addons/terrain_3d/bin/libterrain.linux.release.rv64.so" + +macos.debug = "res://addons/terrain_3d/bin/libterrain.macos.debug.framework" +macos.release = "res://addons/terrain_3d/bin/libterrain.macos.release.framework" + +android.debug.arm64 = "res://addons/terrain_3d/bin/libterrain.android.debug.arm64.so" +android.release.arm64 = "res://addons/terrain_3d/bin/libterrain.android.release.arm64.so" + +ios.debug = "res://addons/terrain_3d/bin/libterrain.ios.debug.universal.dylib" +ios.release = "res://addons/terrain_3d/bin/libterrain.ios.release.universal.dylib" \ No newline at end of file diff --git a/addons/terrain_3d/tools/importer.gd b/addons/terrain_3d/tools/importer.gd new file mode 100644 index 0000000..b563844 --- /dev/null +++ b/addons/terrain_3d/tools/importer.gd @@ -0,0 +1,82 @@ +@tool +extends Terrain3D + + +@export var clear_all: bool = false : set = reset_settings +@export var clear_terrain: bool = false : set = reset_terrain +@export var update_height_range: bool = false : set = update_heights + + +func reset_settings(p_value) -> void: + if p_value: + height_file_name = "" + control_file_name = "" + color_file_name = "" + import_position = Vector3.ZERO + import_offset = 0.0 + import_scale = 1.0 + r16_range = Vector2(0, 1) + r16_size = Vector2i(1024, 1024) + storage = null + material = null + assets = null + + +func reset_terrain(p_value) -> void: + if p_value: + storage = null + + +func update_heights(p_value) -> void: + if p_value and storage: + storage.update_height_range() + + +@export_group("Import File") +@export_global_file var height_file_name: String = "" +@export_global_file var control_file_name: String = "" +@export_global_file var color_file_name: String = "" +@export var import_position: Vector3 = Vector3.ZERO +@export var import_scale: float = 1.0 +@export var import_offset: float = 0.0 +@export var r16_range: Vector2 = Vector2(0, 1) +@export var r16_size: Vector2i = Vector2i(1024, 1024) +@export var run_import: bool = false : set = start_import + +func start_import(p_value: bool) -> void: + if p_value: + print("Terrain3DImporter: Importing files:\n\t%s\n\t%s\n\t%s" % [ height_file_name, control_file_name, color_file_name]) + if not storage: + storage = Terrain3DStorage.new() + + var imported_images: Array[Image] + imported_images.resize(Terrain3DStorage.TYPE_MAX) + var min_max := Vector2(0, 1) + var img: Image + if height_file_name: + img = Terrain3DUtil.load_image(height_file_name, ResourceLoader.CACHE_MODE_IGNORE, r16_range, r16_size) + min_max = Terrain3DUtil.get_min_max(img) + imported_images[Terrain3DStorage.TYPE_HEIGHT] = img + if control_file_name: + img = Terrain3DUtil.load_image(control_file_name, ResourceLoader.CACHE_MODE_IGNORE) + imported_images[Terrain3DStorage.TYPE_CONTROL] = img + if color_file_name: + img = Terrain3DUtil.load_image(color_file_name, ResourceLoader.CACHE_MODE_IGNORE) + imported_images[Terrain3DStorage.TYPE_COLOR] = img + if assets.get_texture_count() == 0: + material.show_checkered = false + material.show_colormap = true + storage.import_images(imported_images, import_position, import_offset, import_scale) + print("Terrain3DImporter: Import finished") + + +@export_group("Export File") +enum { TYPE_HEIGHT, TYPE_CONTROL, TYPE_COLOR } +@export_enum("Height:0", "Control:1", "Color:2") var map_type: int = TYPE_HEIGHT +@export var file_name_out: String = "" +@export var run_export: bool = false : set = start_export + +func start_export(p_value: bool) -> void: + var err: int = storage.export_image(file_name_out, map_type) + print("Terrain3DImporter: Export error status: ", err, " ", error_string(err)) + diff --git a/addons/terrain_3d/tools/importer.tscn b/addons/terrain_3d/tools/importer.tscn new file mode 100644 index 0000000..cfa152c --- /dev/null +++ b/addons/terrain_3d/tools/importer.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=5 format=3 uid="uid://blaieaqp413k7"] + +[ext_resource type="Script" path="res://addons/terrain_3d/tools/importer.gd" id="1_60b8f"] + +[sub_resource type="Terrain3DStorage" id="Terrain3DStorage_rmuvl"] + +[sub_resource type="Terrain3DMaterial" id="Terrain3DMaterial_cjpaa"] +show_checkered = true + +[sub_resource type="Terrain3DAssets" id="Terrain3DAssets_gbxcd"] + +[node name="Importer" type="Terrain3D"] +storage = SubResource("Terrain3DStorage_rmuvl") +material = SubResource("Terrain3DMaterial_cjpaa") +assets = SubResource("Terrain3DAssets_gbxcd") +script = ExtResource("1_60b8f") diff --git a/addons/terrain_3d/utils/terrain_3d_objects.gd b/addons/terrain_3d/utils/terrain_3d_objects.gd new file mode 100644 index 0000000..55d338b --- /dev/null +++ b/addons/terrain_3d/utils/terrain_3d_objects.gd @@ -0,0 +1,187 @@ +@tool +extends Node3D +class_name Terrain3DObjects + +const TransformChangedNotifier: Script = preload("res://addons/terrain_3d/utils/transform_changed_notifier.gd") + +const CHILD_HELPER_NAME: StringName = &"TransformChangedSignaller" +const CHILD_HELPER_PATH: NodePath = ^"TransformChangedSignaller" + +var _undo_redo = null +var _terrain_id: int +var _offsets: Dictionary # Object ID -> Vector3(X, Y offset relative to terrain height, Z) +var _ignore_transform_change: bool = false + + +func _enter_tree() -> void: + if not Engine.is_editor_hint(): + return + + for child in get_children(): + _on_child_entered_tree(child) + + child_entered_tree.connect(_on_child_entered_tree) + child_exiting_tree.connect(_on_child_exiting_tree) + + +func _exit_tree() -> void: + if not Engine.is_editor_hint(): + return + + child_entered_tree.disconnect(_on_child_entered_tree) + child_exiting_tree.disconnect(_on_child_exiting_tree) + + for child in get_children(): + _on_child_exiting_tree(child) + + +func editor_setup(p_plugin) -> void: + _undo_redo = p_plugin.get_undo_redo() + + +func get_terrain() -> Terrain3D: + var terrain := instance_from_id(_terrain_id) as Terrain3D + if not terrain or terrain.is_queued_for_deletion() or not terrain.is_inside_tree(): + var terrains: Array[Node] = EditorInterface.get_edited_scene_root().find_children("", "Terrain3D") + if terrains.size() > 0: + terrain = terrains[0] + _terrain_id = terrain.get_instance_id() if terrain else 0 + + if terrain and terrain.storage and not terrain.storage.maps_edited.is_connected(_on_maps_edited): + terrain.storage.maps_edited.connect(_on_maps_edited) + + return terrain + + +func _get_terrain_height(p_global_position: Vector3) -> float: + var terrain: Terrain3D = get_terrain() + if not terrain or not terrain.storage: + return 0.0 + var height: float = terrain.storage.get_height(p_global_position) + if is_nan(height): + return 0.0 + return height + + +func _on_child_entered_tree(p_node: Node) -> void: + if not (p_node is Node3D): + return + + assert(p_node.get_parent() == self) + + var helper: TransformChangedNotifier = p_node.get_node_or_null(CHILD_HELPER_PATH) + if not helper: + helper = TransformChangedNotifier.new() + helper.name = CHILD_HELPER_NAME + p_node.add_child(helper, true, INTERNAL_MODE_BACK) + assert(p_node.has_node(CHILD_HELPER_PATH)) + + # When reparenting a Node3D, Godot changes its transform _after_ reparenting it. So here, + # we must use call_deferred, to avoid receiving transform_changed as a result of reparenting. + _setup_child_signal.call_deferred(p_node, helper) + + +func _setup_child_signal(p_node: Node, helper: TransformChangedNotifier) -> void: + if not p_node.is_inside_tree(): + return + if helper.transform_changed.is_connected(_on_child_transform_changed): + return + + helper.transform_changed.connect(_on_child_transform_changed.bind(p_node)) + _update_child_offset(p_node) + + +func _on_child_exiting_tree(p_node: Node) -> void: + if not (p_node is Node3D) or not p_node.has_node(CHILD_HELPER_PATH): + return + + var helper: TransformChangedNotifier = p_node.get_node_or_null(CHILD_HELPER_PATH) + if helper: + helper.transform_changed.disconnect(_on_child_transform_changed) + p_node.remove_child(helper) + helper.queue_free() + + _offsets.erase(p_node.get_instance_id()) + + +func _is_node_selected(p_node: Node) -> bool: + var editor_sel = EditorInterface.get_selection() + return editor_sel.get_transformable_selected_nodes().has(p_node) + + +func _on_child_transform_changed(p_node: Node3D) -> void: + if _ignore_transform_change: + return + + var lmb_down := Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) + if lmb_down and (_is_node_selected(p_node) or _is_node_selected(self)): + # The user may be moving the node using gizmos. + # We should wait until they're done before updating otherwise gizmos + this node conflict. + return + + if not _offsets.has(p_node.get_instance_id()): + return + + var old_offset: Vector3 = _offsets[p_node.get_instance_id()] + var old_h: float = _get_terrain_height(old_offset) + var old_position: Vector3 = old_offset + Vector3(0, old_h, 0) + var new_position: Vector3 = p_node.global_position + if old_position.is_equal_approx(new_position): + return + var new_h: float = _get_terrain_height(new_position) + var new_offset: Vector3 = new_position - Vector3(0, new_h, 0) + + var translate_without_reposition: bool = Input.is_key_pressed(KEY_SHIFT) + var y_changed: bool = not is_equal_approx(old_position.y, p_node.global_position.y) + if not y_changed and not translate_without_reposition: + new_offset.y = old_offset.y + new_position = new_offset + Vector3(0, new_h, 0) + + # Make sure that when the user undo's the translation, the offset change gets undone too! + _undo_redo.create_action("Translate", UndoRedo.MERGE_ALL) + _undo_redo.add_do_method(self, &"_set_offset_and_position", p_node.get_instance_id(), new_offset, new_position) + _undo_redo.add_undo_method(self, &"_set_offset_and_position", p_node.get_instance_id(), old_offset, old_position) + _undo_redo.commit_action() + + +func _set_offset_and_position(p_id: int, p_offset: Vector3, p_position: Vector3) -> void: + var node := instance_from_id(p_id) as Node + if not is_instance_valid(node): + return + + _ignore_transform_change = true + node.global_position = p_position + _offsets[p_id] = p_offset + _ignore_transform_change = false + + +# Overwrite current offset stored for node with its current Y position relative to the terrain +func _update_child_offset(p_node: Node3D) -> void: + var position: Vector3 = global_transform * p_node.position + var h: float = _get_terrain_height(position) + var offset: Vector3 = position - Vector3(0, h, 0) + _offsets[p_node.get_instance_id()] = offset + + +# Overwrite node's current position with terrain height + stored offset for this node +func _update_child_position(p_node: Node3D) -> void: + if not _offsets.has(p_node.get_instance_id()): + return + + var position: Vector3 = global_transform * p_node.position + var h: float = _get_terrain_height(position) + var offset: Vector3 = _offsets[p_node.get_instance_id()] + var new_position: Vector3 = global_transform.inverse() * (offset + Vector3(0, h, 0)) + if not p_node.position.is_equal_approx(new_position): + p_node.position = new_position + + +func _on_maps_edited(p_edited_aabb: AABB) -> void: + var edited_area: AABB = p_edited_aabb.grow(1) + edited_area.position.y = -INF + edited_area.end.y = INF + + for child in get_children(): + var node := child as Node3D + if node && edited_area.has_point(node.global_position): + _update_child_position(node) diff --git a/addons/terrain_3d/utils/transform_changed_notifier.gd b/addons/terrain_3d/utils/transform_changed_notifier.gd new file mode 100644 index 0000000..4b8c586 --- /dev/null +++ b/addons/terrain_3d/utils/transform_changed_notifier.gd @@ -0,0 +1,14 @@ +@tool +extends Node3D + +signal transform_changed + + +func _ready() -> void: + assert(Engine.is_editor_hint()) + set_notify_transform(true) + + +func _notification(what: int) -> void: + if what == NOTIFICATION_TRANSFORM_CHANGED: + transform_changed.emit() diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree.png new file mode 100644 index 0000000..dde202f Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree.png.import new file mode 100644 index 0000000..f72ff1d --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bp465hkr1uaa2" +path.s3tc="res://.godot/imported/Bark_DeadTree.png-0cf8e3f4c77dd7f8735846ee0421e267.s3tc.ctex" +path.etc2="res://.godot/imported/Bark_DeadTree.png-0cf8e3f4c77dd7f8735846ee0421e267.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree.png" +dest_files=["res://.godot/imported/Bark_DeadTree.png-0cf8e3f4c77dd7f8735846ee0421e267.s3tc.ctex", "res://.godot/imported/Bark_DeadTree.png-0cf8e3f4c77dd7f8735846ee0421e267.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree_Normal.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree_Normal.png new file mode 100644 index 0000000..7c2fc35 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree_Normal.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree_Normal.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree_Normal.png.import new file mode 100644 index 0000000..ec17b44 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree_Normal.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bnowyasko8vkg" +path.s3tc="res://.godot/imported/Bark_DeadTree_Normal.png-b65a7acae4f57e011de1a6c0e116d0cb.s3tc.ctex" +path.etc2="res://.godot/imported/Bark_DeadTree_Normal.png-b65a7acae4f57e011de1a6c0e116d0cb.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree_Normal.png" +dest_files=["res://.godot/imported/Bark_DeadTree_Normal.png-b65a7acae4f57e011de1a6c0e116d0cb.s3tc.ctex", "res://.godot/imported/Bark_DeadTree_Normal.png-b65a7acae4f57e011de1a6c0e116d0cb.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=1 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=1 +roughness/src_normal="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_DeadTree_Normal.png" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree.png new file mode 100644 index 0000000..5f4779b Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree.png.import new file mode 100644 index 0000000..9f18bfb --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://yu4eln8uttce" +path.s3tc="res://.godot/imported/Bark_NormalTree.png-338050c0f3e4ee8205e775c035040238.s3tc.ctex" +path.etc2="res://.godot/imported/Bark_NormalTree.png-338050c0f3e4ee8205e775c035040238.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree.png" +dest_files=["res://.godot/imported/Bark_NormalTree.png-338050c0f3e4ee8205e775c035040238.s3tc.ctex", "res://.godot/imported/Bark_NormalTree.png-338050c0f3e4ee8205e775c035040238.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree_Normal.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree_Normal.png new file mode 100644 index 0000000..4340b4c Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree_Normal.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree_Normal.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree_Normal.png.import new file mode 100644 index 0000000..52c950c --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree_Normal.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bjteoitf8npnl" +path.s3tc="res://.godot/imported/Bark_NormalTree_Normal.png-5907a7a7592236b9a919151b77d1d511.s3tc.ctex" +path.etc2="res://.godot/imported/Bark_NormalTree_Normal.png-5907a7a7592236b9a919151b77d1d511.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree_Normal.png" +dest_files=["res://.godot/imported/Bark_NormalTree_Normal.png-5907a7a7592236b9a919151b77d1d511.s3tc.ctex", "res://.godot/imported/Bark_NormalTree_Normal.png-5907a7a7592236b9a919151b77d1d511.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=1 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=1 +roughness/src_normal="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_NormalTree_Normal.png" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree.png new file mode 100644 index 0000000..71fe231 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree.png.import new file mode 100644 index 0000000..5125ffc --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://xrket42lt8j4" +path.s3tc="res://.godot/imported/Bark_TwistedTree.png-761f6ca1754e0f8160df01da45bdffc4.s3tc.ctex" +path.etc2="res://.godot/imported/Bark_TwistedTree.png-761f6ca1754e0f8160df01da45bdffc4.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree.png" +dest_files=["res://.godot/imported/Bark_TwistedTree.png-761f6ca1754e0f8160df01da45bdffc4.s3tc.ctex", "res://.godot/imported/Bark_TwistedTree.png-761f6ca1754e0f8160df01da45bdffc4.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree_Normal.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree_Normal.png new file mode 100644 index 0000000..7c2fc35 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree_Normal.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree_Normal.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree_Normal.png.import new file mode 100644 index 0000000..1fa51b8 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree_Normal.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dv8rw44uj3oam" +path.s3tc="res://.godot/imported/Bark_TwistedTree_Normal.png-e09e7b7ab47fa6fac4e2b25a335a371a.s3tc.ctex" +path.etc2="res://.godot/imported/Bark_TwistedTree_Normal.png-e09e7b7ab47fa6fac4e2b25a335a371a.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree_Normal.png" +dest_files=["res://.godot/imported/Bark_TwistedTree_Normal.png-e09e7b7ab47fa6fac4e2b25a335a371a.s3tc.ctex", "res://.godot/imported/Bark_TwistedTree_Normal.png-e09e7b7ab47fa6fac4e2b25a335a371a.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=1 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=1 +roughness/src_normal="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bark_TwistedTree_Normal.png" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common.bin new file mode 100644 index 0000000..c594b00 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common.gltf new file mode 100644 index 0000000..4602312 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common.gltf @@ -0,0 +1,151 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Bush_Common" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_TwistedTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.008", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves_TwistedTree_C", + "uri":"Leaves_TwistedTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":1800, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":1800, + "max":[ + 0.9913685917854309, + 1.3470909595489502, + 0.9907516837120056 + ], + "min":[ + -0.9234761595726013, + -0.234694704413414, + -0.9743891954421997 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":1800, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":1800, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":2700, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":28800, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":21600, + "byteOffset":28800, + "target":34962 + }, + { + "buffer":0, + "byteLength":21600, + "byteOffset":50400, + "target":34962 + }, + { + "buffer":0, + "byteLength":14400, + "byteOffset":72000, + "target":34962 + }, + { + "buffer":0, + "byteLength":5400, + "byteOffset":86400, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":91800, + "uri":"Bush_Common.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common.gltf.import new file mode 100644 index 0000000..6de8963 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cyf8k01s212tf" +path="res://.godot/imported/Bush_Common.gltf-d6fe266ab4390b3825d283506e44076b.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common.gltf" +dest_files=["res://.godot/imported/Bush_Common.gltf-d6fe266ab4390b3825d283506e44076b.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common_Flowers.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common_Flowers.bin new file mode 100644 index 0000000..9b3949d Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common_Flowers.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common_Flowers.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common_Flowers.gltf new file mode 100644 index 0000000..da4f574 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common_Flowers.gltf @@ -0,0 +1,252 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Bush_Common_Flowers" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_NormalTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Flowers", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.009", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves_NormalTree_C", + "uri":"Leaves_NormalTree_C.png" + }, + { + "mimeType":"image/png", + "name":"Flowers", + "uri":"Flowers.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":1800, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":1800, + "max":[ + 0.9913685917854309, + 1.3470909595489502, + 0.9907516837120056 + ], + "min":[ + -0.9234761595726013, + -0.234694704413414, + -0.9743891954421997 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":1800, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":1800, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":2700, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":715, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":715, + "max":[ + 0.9718135595321655, + 1.328537940979004, + 0.98771071434021 + ], + "min":[ + -0.7453983426094055, + 0.2586841881275177, + -0.9251851439476013 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":715, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":715, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":1404, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":28800, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":21600, + "byteOffset":28800, + "target":34962 + }, + { + "buffer":0, + "byteLength":21600, + "byteOffset":50400, + "target":34962 + }, + { + "buffer":0, + "byteLength":14400, + "byteOffset":72000, + "target":34962 + }, + { + "buffer":0, + "byteLength":5400, + "byteOffset":86400, + "target":34963 + }, + { + "buffer":0, + "byteLength":11440, + "byteOffset":91800, + "target":34962 + }, + { + "buffer":0, + "byteLength":8580, + "byteOffset":103240, + "target":34962 + }, + { + "buffer":0, + "byteLength":8580, + "byteOffset":111820, + "target":34962 + }, + { + "buffer":0, + "byteLength":5720, + "byteOffset":120400, + "target":34962 + }, + { + "buffer":0, + "byteLength":2808, + "byteOffset":126120, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":128928, + "uri":"Bush_Common_Flowers.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common_Flowers.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common_Flowers.gltf.import new file mode 100644 index 0000000..9b6ae2b --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common_Flowers.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dqnwywimfo2d3" +path="res://.godot/imported/Bush_Common_Flowers.gltf-c57ed6ec66b4fe2d040e737bf1d92bf3.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Bush_Common_Flowers.gltf" +dest_files=["res://.godot/imported/Bush_Common_Flowers.gltf-c57ed6ec66b4fe2d040e737bf1d92bf3.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_1.bin new file mode 100644 index 0000000..612a429 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_1.gltf new file mode 100644 index 0000000..562cad4 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_1.gltf @@ -0,0 +1,152 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Clover_1" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cylinder.018", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":267, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":267, + "max":[ + 0.2939910888671875, + 1.131940245628357, + 0.36432379484176636 + ], + "min":[ + -0.5022982358932495, + -0.012792191468179226, + -0.39956197142601013 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":267, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":267, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":1137, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":2136, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":3204, + "byteOffset":2136, + "target":34962 + }, + { + "buffer":0, + "byteLength":3204, + "byteOffset":5340, + "target":34962 + }, + { + "buffer":0, + "byteLength":2136, + "byteOffset":8544, + "target":34962 + }, + { + "buffer":0, + "byteLength":2274, + "byteOffset":10680, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":12956, + "uri":"Clover_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_1.gltf.import new file mode 100644 index 0000000..b946b1a --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b4rtlg1as0jff" +path="res://.godot/imported/Clover_1.gltf-4f9f7d69d0518168d12b0afb1bfa6ffc.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_1.gltf" +dest_files=["res://.godot/imported/Clover_1.gltf-4f9f7d69d0518168d12b0afb1bfa6ffc.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_2.bin new file mode 100644 index 0000000..4a8343e Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_2.gltf new file mode 100644 index 0000000..78c0e60 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_2.gltf @@ -0,0 +1,152 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Clover_2" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cylinder.002", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":433, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":433, + "max":[ + 0.34883004426956177, + 1.261434555053711, + 0.36432382464408875 + ], + "min":[ + -0.5022982358932495, + -0.0023507503792643547, + -0.47231054306030273 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":433, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":433, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":1845, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":3464, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":5196, + "byteOffset":3464, + "target":34962 + }, + { + "buffer":0, + "byteLength":5196, + "byteOffset":8660, + "target":34962 + }, + { + "buffer":0, + "byteLength":3464, + "byteOffset":13856, + "target":34962 + }, + { + "buffer":0, + "byteLength":3690, + "byteOffset":17320, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":21012, + "uri":"Clover_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_2.gltf.import new file mode 100644 index 0000000..0053b9a --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://0iiyo63ptuvv" +path="res://.godot/imported/Clover_2.gltf-1ec912cf28f7a6f1410eb44a03d0778f.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Clover_2.gltf" +dest_files=["res://.godot/imported/Clover_2.gltf-1ec912cf28f7a6f1410eb44a03d0778f.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_1.bin new file mode 100644 index 0000000..75aa955 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_1.gltf new file mode 100644 index 0000000..29d47d2 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_1.gltf @@ -0,0 +1,264 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"CommonTree_1" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Bark_NormalTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_NormalTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.023", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_NormalTree_Normal", + "uri":"Bark_NormalTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_NormalTree", + "uri":"Bark_NormalTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaves_NormalTree_C", + "uri":"Leaves_NormalTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":5618, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":5618, + "max":[ + 1.2684564590454102, + 6.483748912811279, + 1.3548027276992798 + ], + "min":[ + -1.3591265678405762, + -0.24277201294898987, + -1.126320481300354 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":5618, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":5618, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":13035, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":3840, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":3840, + "max":[ + 2.116964101791382, + 7.022013187408447, + 2.3531949520111084 + ], + "min":[ + -2.1944587230682373, + 2.3466193675994873, + -2.2245190143585205 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":3840, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":3840, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":5760, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":89888, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":67416, + "byteOffset":89888, + "target":34962 + }, + { + "buffer":0, + "byteLength":67416, + "byteOffset":157304, + "target":34962 + }, + { + "buffer":0, + "byteLength":44944, + "byteOffset":224720, + "target":34962 + }, + { + "buffer":0, + "byteLength":26070, + "byteOffset":269664, + "target":34963 + }, + { + "buffer":0, + "byteLength":61440, + "byteOffset":295736, + "target":34962 + }, + { + "buffer":0, + "byteLength":46080, + "byteOffset":357176, + "target":34962 + }, + { + "buffer":0, + "byteLength":46080, + "byteOffset":403256, + "target":34962 + }, + { + "buffer":0, + "byteLength":30720, + "byteOffset":449336, + "target":34962 + }, + { + "buffer":0, + "byteLength":11520, + "byteOffset":480056, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":491576, + "uri":"CommonTree_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_1.gltf.import new file mode 100644 index 0000000..54d0103 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cagupjr4dpp0r" +path="res://.godot/imported/CommonTree_1.gltf-c1f8514e9f152be42d34199b93f62263.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_1.gltf" +dest_files=["res://.godot/imported/CommonTree_1.gltf-c1f8514e9f152be42d34199b93f62263.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_2.bin new file mode 100644 index 0000000..d403b09 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_2.gltf new file mode 100644 index 0000000..f6124ff --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_2.gltf @@ -0,0 +1,264 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"CommonTree_2" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Bark_NormalTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_NormalTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.024", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_NormalTree_Normal", + "uri":"Bark_NormalTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_NormalTree", + "uri":"Bark_NormalTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaves_NormalTree_C", + "uri":"Leaves_NormalTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":5431, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":5431, + "max":[ + 1.3451228141784668, + 6.727368354797363, + 1.5685818195343018 + ], + "min":[ + -1.431023359298706, + -0.24277201294898987, + -0.9472540616989136 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":5431, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":5431, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":12930, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":2676, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":2676, + "max":[ + 2.24128794670105, + 7.400223731994629, + 2.4243826866149902 + ], + "min":[ + -2.2230136394500732, + 2.886406183242798, + -1.8514697551727295 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":2676, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":2676, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":4014, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":86896, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":65172, + "byteOffset":86896, + "target":34962 + }, + { + "buffer":0, + "byteLength":65172, + "byteOffset":152068, + "target":34962 + }, + { + "buffer":0, + "byteLength":43448, + "byteOffset":217240, + "target":34962 + }, + { + "buffer":0, + "byteLength":25860, + "byteOffset":260688, + "target":34963 + }, + { + "buffer":0, + "byteLength":42816, + "byteOffset":286548, + "target":34962 + }, + { + "buffer":0, + "byteLength":32112, + "byteOffset":329364, + "target":34962 + }, + { + "buffer":0, + "byteLength":32112, + "byteOffset":361476, + "target":34962 + }, + { + "buffer":0, + "byteLength":21408, + "byteOffset":393588, + "target":34962 + }, + { + "buffer":0, + "byteLength":8028, + "byteOffset":414996, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":423024, + "uri":"CommonTree_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_2.gltf.import new file mode 100644 index 0000000..1c9fa1b --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cifpq1hlx6cwu" +path="res://.godot/imported/CommonTree_2.gltf-b70782b627c12b9c6d80ec5fe5deb33a.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_2.gltf" +dest_files=["res://.godot/imported/CommonTree_2.gltf-b70782b627c12b9c6d80ec5fe5deb33a.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_3.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_3.bin new file mode 100644 index 0000000..3af9057 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_3.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_3.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_3.gltf new file mode 100644 index 0000000..9e75eb2 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_3.gltf @@ -0,0 +1,264 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"CommonTree_3" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Bark_NormalTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_NormalTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.025", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_NormalTree_Normal", + "uri":"Bark_NormalTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_NormalTree", + "uri":"Bark_NormalTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaves_NormalTree_C", + "uri":"Leaves_NormalTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":2149, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":2149, + "max":[ + 1.0429332256317139, + 7.97797966003418, + 1.102728247642517 + ], + "min":[ + -0.848488450050354, + -0.24277201294898987, + -0.8173294067382812 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":2149, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":2149, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":5115, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":3600, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":3600, + "max":[ + 2.076380968093872, + 9.182417869567871, + 2.1801114082336426 + ], + "min":[ + -1.9864652156829834, + 2.5763165950775146, + -2.0609655380249023 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":3600, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":3600, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":5400, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":34384, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":25788, + "byteOffset":34384, + "target":34962 + }, + { + "buffer":0, + "byteLength":25788, + "byteOffset":60172, + "target":34962 + }, + { + "buffer":0, + "byteLength":17192, + "byteOffset":85960, + "target":34962 + }, + { + "buffer":0, + "byteLength":10230, + "byteOffset":103152, + "target":34963 + }, + { + "buffer":0, + "byteLength":57600, + "byteOffset":113384, + "target":34962 + }, + { + "buffer":0, + "byteLength":43200, + "byteOffset":170984, + "target":34962 + }, + { + "buffer":0, + "byteLength":43200, + "byteOffset":214184, + "target":34962 + }, + { + "buffer":0, + "byteLength":28800, + "byteOffset":257384, + "target":34962 + }, + { + "buffer":0, + "byteLength":10800, + "byteOffset":286184, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":296984, + "uri":"CommonTree_3.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_3.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_3.gltf.import new file mode 100644 index 0000000..65d3a1e --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_3.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://2uujdwdr5ch3" +path="res://.godot/imported/CommonTree_3.gltf-d6fb59459e96851668c8147414afacc1.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_3.gltf" +dest_files=["res://.godot/imported/CommonTree_3.gltf-d6fb59459e96851668c8147414afacc1.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_4.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_4.bin new file mode 100644 index 0000000..14c2760 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_4.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_4.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_4.gltf new file mode 100644 index 0000000..5e8037d --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_4.gltf @@ -0,0 +1,264 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"CommonTree_4" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Bark_NormalTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_NormalTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.026", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_NormalTree_Normal", + "uri":"Bark_NormalTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_NormalTree", + "uri":"Bark_NormalTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaves_NormalTree_C", + "uri":"Leaves_NormalTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":4328, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":4328, + "max":[ + 1.236419439315796, + 7.957448959350586, + 1.0542998313903809 + ], + "min":[ + -1.167366862297058, + -0.24277201294898987, + -1.212726354598999 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":4328, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":4328, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":9840, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":1572, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":1572, + "max":[ + 2.028430461883545, + 9.195609092712402, + 1.6757631301879883 + ], + "min":[ + -1.7970952987670898, + 5.8085174560546875, + -2.0796103477478027 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":1572, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":1572, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":2358, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":69248, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":51936, + "byteOffset":69248, + "target":34962 + }, + { + "buffer":0, + "byteLength":51936, + "byteOffset":121184, + "target":34962 + }, + { + "buffer":0, + "byteLength":34624, + "byteOffset":173120, + "target":34962 + }, + { + "buffer":0, + "byteLength":19680, + "byteOffset":207744, + "target":34963 + }, + { + "buffer":0, + "byteLength":25152, + "byteOffset":227424, + "target":34962 + }, + { + "buffer":0, + "byteLength":18864, + "byteOffset":252576, + "target":34962 + }, + { + "buffer":0, + "byteLength":18864, + "byteOffset":271440, + "target":34962 + }, + { + "buffer":0, + "byteLength":12576, + "byteOffset":290304, + "target":34962 + }, + { + "buffer":0, + "byteLength":4716, + "byteOffset":302880, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":307596, + "uri":"CommonTree_4.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_4.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_4.gltf.import new file mode 100644 index 0000000..72e6595 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_4.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://vqmg1haj578u" +path="res://.godot/imported/CommonTree_4.gltf-491a9746f1d2172b4db75f2d59759e3a.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_4.gltf" +dest_files=["res://.godot/imported/CommonTree_4.gltf-491a9746f1d2172b4db75f2d59759e3a.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_5.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_5.bin new file mode 100644 index 0000000..6341419 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_5.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_5.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_5.gltf new file mode 100644 index 0000000..6a45ffc --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_5.gltf @@ -0,0 +1,264 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"CommonTree_5" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Bark_NormalTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_NormalTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.027", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_NormalTree_Normal", + "uri":"Bark_NormalTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_NormalTree", + "uri":"Bark_NormalTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaves_NormalTree_C", + "uri":"Leaves_NormalTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":2273, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":2273, + "max":[ + 0.9063012599945068, + 5.4537034034729, + 0.8049076795578003 + ], + "min":[ + -0.8957228064537048, + -0.24277201294898987, + -0.920511782169342 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":2273, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":2273, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":5646, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":2600, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":2600, + "max":[ + 1.7588107585906982, + 6.763467788696289, + 2.057202100753784 + ], + "min":[ + -1.912354588508606, + 2.356473684310913, + -2.162447929382324 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":2600, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":2600, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":3900, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":36368, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":27276, + "byteOffset":36368, + "target":34962 + }, + { + "buffer":0, + "byteLength":27276, + "byteOffset":63644, + "target":34962 + }, + { + "buffer":0, + "byteLength":18184, + "byteOffset":90920, + "target":34962 + }, + { + "buffer":0, + "byteLength":11292, + "byteOffset":109104, + "target":34963 + }, + { + "buffer":0, + "byteLength":41600, + "byteOffset":120396, + "target":34962 + }, + { + "buffer":0, + "byteLength":31200, + "byteOffset":161996, + "target":34962 + }, + { + "buffer":0, + "byteLength":31200, + "byteOffset":193196, + "target":34962 + }, + { + "buffer":0, + "byteLength":20800, + "byteOffset":224396, + "target":34962 + }, + { + "buffer":0, + "byteLength":7800, + "byteOffset":245196, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":252996, + "uri":"CommonTree_5.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_5.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_5.gltf.import new file mode 100644 index 0000000..53ca95d --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_5.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dtacpnynicit6" +path="res://.godot/imported/CommonTree_5.gltf-d035d38b92b3d638758d7afb1cb79838.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/CommonTree_5.gltf" +dest_files=["res://.godot/imported/CommonTree_5.gltf-d035d38b92b3d638758d7afb1cb79838.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_1.bin new file mode 100644 index 0000000..fedbfce Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_1.gltf new file mode 100644 index 0000000..cd7f2b7 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_1.gltf @@ -0,0 +1,161 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"DeadTree_1" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Bark_DeadTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_DeadTree_Normal", + "uri":"Bark_DeadTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_DeadTree", + "uri":"Bark_DeadTree.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":8036, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":8036, + "max":[ + 3.556612253189087, + 9.15992259979248, + 2.845168113708496 + ], + "min":[ + -2.5923237800598145, + -0.3355545997619629, + -2.9034998416900635 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":8036, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":8036, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":18507, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":128576, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":96432, + "byteOffset":128576, + "target":34962 + }, + { + "buffer":0, + "byteLength":96432, + "byteOffset":225008, + "target":34962 + }, + { + "buffer":0, + "byteLength":64288, + "byteOffset":321440, + "target":34962 + }, + { + "buffer":0, + "byteLength":37014, + "byteOffset":385728, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":422744, + "uri":"DeadTree_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_1.gltf.import new file mode 100644 index 0000000..7d1e7e5 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://casjbf0b3hqjf" +path="res://.godot/imported/DeadTree_1.gltf-6ebdd15f20e5b71c58a365dc0227937d.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_1.gltf" +dest_files=["res://.godot/imported/DeadTree_1.gltf-6ebdd15f20e5b71c58a365dc0227937d.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_2.bin new file mode 100644 index 0000000..4cbfa5b Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_2.gltf new file mode 100644 index 0000000..84376ce --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_2.gltf @@ -0,0 +1,161 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"DeadTree_2" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Bark_DeadTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.043", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_DeadTree_Normal", + "uri":"Bark_DeadTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_DeadTree", + "uri":"Bark_DeadTree.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":8635, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":8635, + "max":[ + 4.397274017333984, + 11.152676582336426, + 3.8556599617004395 + ], + "min":[ + -2.332343816757202, + -0.3355545997619629, + -2.522876024246216 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":8635, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":8635, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":19671, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":138160, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":103620, + "byteOffset":138160, + "target":34962 + }, + { + "buffer":0, + "byteLength":103620, + "byteOffset":241780, + "target":34962 + }, + { + "buffer":0, + "byteLength":69080, + "byteOffset":345400, + "target":34962 + }, + { + "buffer":0, + "byteLength":39342, + "byteOffset":414480, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":453824, + "uri":"DeadTree_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_2.gltf.import new file mode 100644 index 0000000..dcfc4b4 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dvcxjgvb7ejoa" +path="res://.godot/imported/DeadTree_2.gltf-4ac243d335bae4f4d4a00e598b57f08d.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_2.gltf" +dest_files=["res://.godot/imported/DeadTree_2.gltf-4ac243d335bae4f4d4a00e598b57f08d.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_3.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_3.bin new file mode 100644 index 0000000..885b526 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_3.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_3.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_3.gltf new file mode 100644 index 0000000..54ff58d --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_3.gltf @@ -0,0 +1,161 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"DeadTree_3" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Bark_DeadTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.019", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_DeadTree_Normal", + "uri":"Bark_DeadTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_DeadTree", + "uri":"Bark_DeadTree.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":7936, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":7936, + "max":[ + 2.540004014968872, + 12.944830894470215, + 3.043358564376831 + ], + "min":[ + -3.847569704055786, + -0.3355545997619629, + -3.3867006301879883 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":7936, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":7936, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":17406, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":126976, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":95232, + "byteOffset":126976, + "target":34962 + }, + { + "buffer":0, + "byteLength":95232, + "byteOffset":222208, + "target":34962 + }, + { + "buffer":0, + "byteLength":63488, + "byteOffset":317440, + "target":34962 + }, + { + "buffer":0, + "byteLength":34812, + "byteOffset":380928, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":415740, + "uri":"DeadTree_3.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_3.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_3.gltf.import new file mode 100644 index 0000000..33637ae --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_3.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bw8bauco8g58c" +path="res://.godot/imported/DeadTree_3.gltf-054ed568026c5d9787c96319245e1168.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_3.gltf" +dest_files=["res://.godot/imported/DeadTree_3.gltf-054ed568026c5d9787c96319245e1168.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_4.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_4.bin new file mode 100644 index 0000000..a8ab297 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_4.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_4.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_4.gltf new file mode 100644 index 0000000..8f787ec --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_4.gltf @@ -0,0 +1,161 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"DeadTree_4" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Bark_DeadTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.018", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_DeadTree_Normal", + "uri":"Bark_DeadTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_DeadTree", + "uri":"Bark_DeadTree.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":7653, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":7653, + "max":[ + 4.59817361831665, + 12.435422897338867, + 4.133494853973389 + ], + "min":[ + -3.3627684116363525, + -0.3355545997619629, + -3.5989503860473633 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":7653, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":7653, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":17106, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":122448, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":91836, + "byteOffset":122448, + "target":34962 + }, + { + "buffer":0, + "byteLength":91836, + "byteOffset":214284, + "target":34962 + }, + { + "buffer":0, + "byteLength":61224, + "byteOffset":306120, + "target":34962 + }, + { + "buffer":0, + "byteLength":34212, + "byteOffset":367344, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":401556, + "uri":"DeadTree_4.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_4.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_4.gltf.import new file mode 100644 index 0000000..8b5f932 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_4.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://w70pjhduw3mu" +path="res://.godot/imported/DeadTree_4.gltf-f1c072b1498028a37d478e3c1dd774c6.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_4.gltf" +dest_files=["res://.godot/imported/DeadTree_4.gltf-f1c072b1498028a37d478e3c1dd774c6.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_5.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_5.bin new file mode 100644 index 0000000..e027070 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_5.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_5.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_5.gltf new file mode 100644 index 0000000..8c4cb9a --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_5.gltf @@ -0,0 +1,161 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"DeadTree_5" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Bark_DeadTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.021", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_DeadTree_Normal", + "uri":"Bark_DeadTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_DeadTree", + "uri":"Bark_DeadTree.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":7499, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":7499, + "max":[ + 4.385861396789551, + 16.10182762145996, + 3.616036891937256 + ], + "min":[ + -3.9705328941345215, + -0.3355545997619629, + -4.7972307205200195 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":7499, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":7499, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":16944, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":119984, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":89988, + "byteOffset":119984, + "target":34962 + }, + { + "buffer":0, + "byteLength":89988, + "byteOffset":209972, + "target":34962 + }, + { + "buffer":0, + "byteLength":59992, + "byteOffset":299960, + "target":34962 + }, + { + "buffer":0, + "byteLength":33888, + "byteOffset":359952, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":393840, + "uri":"DeadTree_5.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_5.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_5.gltf.import new file mode 100644 index 0000000..51eb82e --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_5.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c6efibn4o0dxp" +path="res://.godot/imported/DeadTree_5.gltf-067c4d02a3b45a9eaa20b9a3ea06bfc7.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/DeadTree_5.gltf" +dest_files=["res://.godot/imported/DeadTree_5.gltf-067c4d02a3b45a9eaa20b9a3ea06bfc7.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Fern_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Fern_1.bin new file mode 100644 index 0000000..8712382 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Fern_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Fern_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Fern_1.gltf new file mode 100644 index 0000000..2be91c7 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Fern_1.gltf @@ -0,0 +1,152 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Fern_1" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.023", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":243, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":243, + "max":[ + 4.626213073730469, + 2.4413082599639893, + 4.396108150482178 + ], + "min":[ + -4.419975280761719, + -0.2474701851606369, + -4.091315746307373 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":243, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":243, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":864, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":1944, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":2916, + "byteOffset":1944, + "target":34962 + }, + { + "buffer":0, + "byteLength":2916, + "byteOffset":4860, + "target":34962 + }, + { + "buffer":0, + "byteLength":1944, + "byteOffset":7776, + "target":34962 + }, + { + "buffer":0, + "byteLength":1728, + "byteOffset":9720, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":11448, + "uri":"Fern_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Fern_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Fern_1.gltf.import new file mode 100644 index 0000000..c8a2d33 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Fern_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bfp7grhaneysx" +path="res://.godot/imported/Fern_1.gltf-0a32a0ce69c64a9bcfc3b382924efd55.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Fern_1.gltf" +dest_files=["res://.godot/imported/Fern_1.gltf-0a32a0ce69c64a9bcfc3b382924efd55.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Group.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Group.bin new file mode 100644 index 0000000..faa36e3 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Group.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Group.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Group.gltf new file mode 100644 index 0000000..e1e0839 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Group.gltf @@ -0,0 +1,254 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Flower_3_Group" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Flowers", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.021", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + }, + { + "mimeType":"image/png", + "name":"Flowers", + "uri":"Flowers.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":533, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":533, + "max":[ + 0.7883017063140869, + 1.7742599248886108, + 0.7045559287071228 + ], + "min":[ + -0.568230926990509, + -0.03458359092473984, + -0.5427353382110596 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":533, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":533, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":2130, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5123, + "count":48, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":48, + "max":[ + 0.8748752474784851, + 2.020251512527466, + 0.789365291595459 + ], + "min":[ + -0.6136013269424438, + 1.4516462087631226, + -0.8017617464065552 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":48, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":48, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":135, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":4264, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":6396, + "byteOffset":4264, + "target":34962 + }, + { + "buffer":0, + "byteLength":6396, + "byteOffset":10660, + "target":34962 + }, + { + "buffer":0, + "byteLength":4264, + "byteOffset":17056, + "target":34962 + }, + { + "buffer":0, + "byteLength":4260, + "byteOffset":21320, + "target":34963 + }, + { + "buffer":0, + "byteLength":384, + "byteOffset":25580, + "target":34962 + }, + { + "buffer":0, + "byteLength":576, + "byteOffset":25964, + "target":34962 + }, + { + "buffer":0, + "byteLength":576, + "byteOffset":26540, + "target":34962 + }, + { + "buffer":0, + "byteLength":384, + "byteOffset":27116, + "target":34962 + }, + { + "buffer":0, + "byteLength":270, + "byteOffset":27500, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":27772, + "uri":"Flower_3_Group.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Group.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Group.gltf.import new file mode 100644 index 0000000..1e7f9ab --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Group.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://tr3sfgg1nmhw" +path="res://.godot/imported/Flower_3_Group.gltf-ac323c192c57e13129a9b103b979bffe.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Group.gltf" +dest_files=["res://.godot/imported/Flower_3_Group.gltf-ac323c192c57e13129a9b103b979bffe.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Single.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Single.bin new file mode 100644 index 0000000..f129c6c Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Single.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Single.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Single.gltf new file mode 100644 index 0000000..748168a --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Single.gltf @@ -0,0 +1,254 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Flower_3_Single" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Flowers", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.020", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + }, + { + "mimeType":"image/png", + "name":"Flowers", + "uri":"Flowers.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":211, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":211, + "max":[ + 0.42587125301361084, + 1.7716585397720337, + 0.35561174154281616 + ], + "min":[ + -0.48073863983154297, + -0.018326954916119576, + -0.520720362663269 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":211, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":211, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":810, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5123, + "count":16, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":16, + "max":[ + 0.42078328132629395, + 2.0498666763305664, + 0.3568156957626343 + ], + "min":[ + -0.27247604727745056, + 1.755362868309021, + -0.3710358142852783 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":16, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":16, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":45, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":1688, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":2532, + "byteOffset":1688, + "target":34962 + }, + { + "buffer":0, + "byteLength":2532, + "byteOffset":4220, + "target":34962 + }, + { + "buffer":0, + "byteLength":1688, + "byteOffset":6752, + "target":34962 + }, + { + "buffer":0, + "byteLength":1620, + "byteOffset":8440, + "target":34963 + }, + { + "buffer":0, + "byteLength":128, + "byteOffset":10060, + "target":34962 + }, + { + "buffer":0, + "byteLength":192, + "byteOffset":10188, + "target":34962 + }, + { + "buffer":0, + "byteLength":192, + "byteOffset":10380, + "target":34962 + }, + { + "buffer":0, + "byteLength":128, + "byteOffset":10572, + "target":34962 + }, + { + "buffer":0, + "byteLength":90, + "byteOffset":10700, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":10792, + "uri":"Flower_3_Single.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Single.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Single.gltf.import new file mode 100644 index 0000000..0be9061 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Single.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://0e1vjsxt4627" +path="res://.godot/imported/Flower_3_Single.gltf-5c25dedbf5a86583d0db49befb6d9b22.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_3_Single.gltf" +dest_files=["res://.godot/imported/Flower_3_Single.gltf-5c25dedbf5a86583d0db49befb6d9b22.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Group.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Group.bin new file mode 100644 index 0000000..f0b3ca4 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Group.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Group.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Group.gltf new file mode 100644 index 0000000..e879edf --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Group.gltf @@ -0,0 +1,254 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Flower_4_Group" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Flowers", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.003", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + }, + { + "mimeType":"image/png", + "name":"Flowers", + "uri":"Flowers.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":302, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":302, + "max":[ + 0.6255365610122681, + 2.2943496704101562, + 0.5279141068458557 + ], + "min":[ + -0.7901612520217896, + -0.05699761211872101, + -0.6181322932243347 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":302, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":302, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":1470, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5123, + "count":1000, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":1000, + "max":[ + 0.8491399884223938, + 2.4297707080841064, + 0.7313783168792725 + ], + "min":[ + -0.9313857555389404, + 1.122023582458496, + -0.6361504197120667 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":1000, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":1000, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":3600, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":2416, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":3624, + "byteOffset":2416, + "target":34962 + }, + { + "buffer":0, + "byteLength":3624, + "byteOffset":6040, + "target":34962 + }, + { + "buffer":0, + "byteLength":2416, + "byteOffset":9664, + "target":34962 + }, + { + "buffer":0, + "byteLength":2940, + "byteOffset":12080, + "target":34963 + }, + { + "buffer":0, + "byteLength":8000, + "byteOffset":15020, + "target":34962 + }, + { + "buffer":0, + "byteLength":12000, + "byteOffset":23020, + "target":34962 + }, + { + "buffer":0, + "byteLength":12000, + "byteOffset":35020, + "target":34962 + }, + { + "buffer":0, + "byteLength":8000, + "byteOffset":47020, + "target":34962 + }, + { + "buffer":0, + "byteLength":7200, + "byteOffset":55020, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":62220, + "uri":"Flower_4_Group.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Group.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Group.gltf.import new file mode 100644 index 0000000..a18fbe9 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Group.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://s2aqb5e6bhi2" +path="res://.godot/imported/Flower_4_Group.gltf-4f8fa9031c096d3d9c2a81f80f7e8a6d.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Group.gltf" +dest_files=["res://.godot/imported/Flower_4_Group.gltf-4f8fa9031c096d3d9c2a81f80f7e8a6d.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Single.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Single.bin new file mode 100644 index 0000000..8d615e4 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Single.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Single.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Single.gltf new file mode 100644 index 0000000..9392686 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Single.gltf @@ -0,0 +1,254 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Flower_4_Single" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Flowers", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.001", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + }, + { + "mimeType":"image/png", + "name":"Flowers", + "uri":"Flowers.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":99, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":99, + "max":[ + 0.56728196144104, + 2.2943310737609863, + 0.21159152686595917 + ], + "min":[ + -0.5050064325332642, + -0.03043048270046711, + -0.3631875216960907 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":99, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":99, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":486, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5123, + "count":400, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":400, + "max":[ + 0.3805691599845886, + 2.388728618621826, + 0.37106218934059143 + ], + "min":[ + -0.39627349376678467, + 1.1264549493789673, + -0.40180256962776184 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":400, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":400, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":1440, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":792, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":1188, + "byteOffset":792, + "target":34962 + }, + { + "buffer":0, + "byteLength":1188, + "byteOffset":1980, + "target":34962 + }, + { + "buffer":0, + "byteLength":792, + "byteOffset":3168, + "target":34962 + }, + { + "buffer":0, + "byteLength":972, + "byteOffset":3960, + "target":34963 + }, + { + "buffer":0, + "byteLength":3200, + "byteOffset":4932, + "target":34962 + }, + { + "buffer":0, + "byteLength":4800, + "byteOffset":8132, + "target":34962 + }, + { + "buffer":0, + "byteLength":4800, + "byteOffset":12932, + "target":34962 + }, + { + "buffer":0, + "byteLength":3200, + "byteOffset":17732, + "target":34962 + }, + { + "buffer":0, + "byteLength":2880, + "byteOffset":20932, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":23812, + "uri":"Flower_4_Single.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Single.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Single.gltf.import new file mode 100644 index 0000000..d5feea3 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Single.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cltn7hsac6w12" +path="res://.godot/imported/Flower_4_Single.gltf-b7c6538343eba528dad7f738fef7c1e6.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Flower_4_Single.gltf" +dest_files=["res://.godot/imported/Flower_4_Single.gltf-b7c6538343eba528dad7f738fef7c1e6.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flowers.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flowers.png new file mode 100644 index 0000000..8220419 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flowers.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flowers.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flowers.png.import new file mode 100644 index 0000000..de12adb --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Flowers.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b01x4gufwp3gr" +path.s3tc="res://.godot/imported/Flowers.png-ed5665a6a5771f8b0daa5dd0ee47749b.s3tc.ctex" +path.etc2="res://.godot/imported/Flowers.png-ed5665a6a5771f8b0daa5dd0ee47749b.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Flowers.png" +dest_files=["res://.godot/imported/Flowers.png-ed5665a6a5771f8b0daa5dd0ee47749b.s3tc.ctex", "res://.godot/imported/Flowers.png-ed5665a6a5771f8b0daa5dd0ee47749b.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass.png new file mode 100644 index 0000000..b401c27 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass.png.import new file mode 100644 index 0000000..2688a0e --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1qg1n8vkc76x" +path.s3tc="res://.godot/imported/Grass.png-d984b81e9f5a1c6cbc37962c386c02a1.s3tc.ctex" +path.etc2="res://.godot/imported/Grass.png-d984b81e9f5a1c6cbc37962c386c02a1.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass.png" +dest_files=["res://.godot/imported/Grass.png-d984b81e9f5a1c6cbc37962c386c02a1.s3tc.ctex", "res://.godot/imported/Grass.png-d984b81e9f5a1c6cbc37962c386c02a1.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Short.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Short.bin new file mode 100644 index 0000000..82f7730 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Short.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Short.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Short.gltf new file mode 100644 index 0000000..ae46364 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Short.gltf @@ -0,0 +1,150 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Grass_Common_Short" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Grass", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.014", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Grass", + "uri":"Grass.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":153, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":153, + "max":[ + 0.2832280695438385, + 1.311718225479126, + 0.25788721442222595 + ], + "min":[ + -0.3556424081325531, + -0.022385215386748314, + -0.47937828302383423 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":153, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":153, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":465, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":1224, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":1836, + "byteOffset":1224, + "target":34962 + }, + { + "buffer":0, + "byteLength":1836, + "byteOffset":3060, + "target":34962 + }, + { + "buffer":0, + "byteLength":1224, + "byteOffset":4896, + "target":34962 + }, + { + "buffer":0, + "byteLength":930, + "byteOffset":6120, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":7052, + "uri":"Grass_Common_Short.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Short.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Short.gltf.import new file mode 100644 index 0000000..70dd2de --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Short.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b7kqcww3lkm48" +path="res://.godot/imported/Grass_Common_Short.gltf-86b75dfc8a924d8bdb2bbffc4e7bf212.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Short.gltf" +dest_files=["res://.godot/imported/Grass_Common_Short.gltf-86b75dfc8a924d8bdb2bbffc4e7bf212.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Tall.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Tall.bin new file mode 100644 index 0000000..69b3c7f Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Tall.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Tall.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Tall.gltf new file mode 100644 index 0000000..b131470 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Tall.gltf @@ -0,0 +1,150 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Grass_Common_Tall" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Grass", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.013", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Grass", + "uri":"Grass.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":303, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":303, + "max":[ + 0.49152159690856934, + 1.841333031654358, + 0.5140784978866577 + ], + "min":[ + -0.40356767177581787, + -0.031362250447273254, + -0.47903335094451904 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":303, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":303, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":978, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":2424, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":3636, + "byteOffset":2424, + "target":34962 + }, + { + "buffer":0, + "byteLength":3636, + "byteOffset":6060, + "target":34962 + }, + { + "buffer":0, + "byteLength":2424, + "byteOffset":9696, + "target":34962 + }, + { + "buffer":0, + "byteLength":1956, + "byteOffset":12120, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":14076, + "uri":"Grass_Common_Tall.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Tall.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Tall.gltf.import new file mode 100644 index 0000000..0cb65ec --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Tall.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dcwi5cmusqadc" +path="res://.godot/imported/Grass_Common_Tall.gltf-0b3e3157fd6ed23b9f82403c9b2d35b3.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Common_Tall.gltf" +dest_files=["res://.godot/imported/Grass_Common_Tall.gltf-0b3e3157fd6ed23b9f82403c9b2d35b3.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Short.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Short.bin new file mode 100644 index 0000000..bb62b37 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Short.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Short.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Short.gltf new file mode 100644 index 0000000..9e73049 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Short.gltf @@ -0,0 +1,150 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Grass_Wispy_Short" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Grass", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.033", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Grass", + "uri":"Grass.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":559, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":559, + "max":[ + 0.5941424369812012, + 0.9860967993736267, + 0.6269333362579346 + ], + "min":[ + -0.7280435562133789, + -0.08575008809566498, + -0.5828109979629517 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":559, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":559, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":1482, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":4472, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":6708, + "byteOffset":4472, + "target":34962 + }, + { + "buffer":0, + "byteLength":6708, + "byteOffset":11180, + "target":34962 + }, + { + "buffer":0, + "byteLength":4472, + "byteOffset":17888, + "target":34962 + }, + { + "buffer":0, + "byteLength":2964, + "byteOffset":22360, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":25324, + "uri":"Grass_Wispy_Short.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Short.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Short.gltf.import new file mode 100644 index 0000000..f8ffdfa --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Short.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dd4xa20jgag5p" +path="res://.godot/imported/Grass_Wispy_Short.gltf-7f2766df36ff44f050e9f8aeb5443aad.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Short.gltf" +dest_files=["res://.godot/imported/Grass_Wispy_Short.gltf-7f2766df36ff44f050e9f8aeb5443aad.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Tall.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Tall.bin new file mode 100644 index 0000000..b747e42 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Tall.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Tall.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Tall.gltf new file mode 100644 index 0000000..2821e49 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Tall.gltf @@ -0,0 +1,150 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Grass_Wispy_Tall" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Grass", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.017", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Grass", + "uri":"Grass.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":644, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":644, + "max":[ + 0.8008279800415039, + 1.6357505321502686, + 0.7751253247261047 + ], + "min":[ + -0.7392446994781494, + -0.03605181723833084, + -0.8185906410217285 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":644, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":644, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":1866, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":5152, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":7728, + "byteOffset":5152, + "target":34962 + }, + { + "buffer":0, + "byteLength":7728, + "byteOffset":12880, + "target":34962 + }, + { + "buffer":0, + "byteLength":5152, + "byteOffset":20608, + "target":34962 + }, + { + "buffer":0, + "byteLength":3732, + "byteOffset":25760, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":29492, + "uri":"Grass_Wispy_Tall.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Tall.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Tall.gltf.import new file mode 100644 index 0000000..a7ab646 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Tall.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://83rdw2mqt4qn" +path="res://.godot/imported/Grass_Wispy_Tall.gltf-b0246b337ed2ffc752745ab7c33efb1e.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Grass_Wispy_Tall.gltf" +dest_files=["res://.godot/imported/Grass_Wispy_Tall.gltf-b0246b337ed2ffc752745ab7c33efb1e.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine.png new file mode 100644 index 0000000..109ac05 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine.png.import new file mode 100644 index 0000000..e417e56 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjqumxduhqspr" +path="res://.godot/imported/Leaf_Pine.png-c83034aa1ac19bfdf760d778dc776bc4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine.png" +dest_files=["res://.godot/imported/Leaf_Pine.png-c83034aa1ac19bfdf760d778dc776bc4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine_C.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine_C.png new file mode 100644 index 0000000..9d1e0ac Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine_C.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine_C.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine_C.png.import new file mode 100644 index 0000000..fef4333 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine_C.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dql0ux6c2dded" +path.s3tc="res://.godot/imported/Leaf_Pine_C.png-73d4bd3555e352cacb0a23bfc8d9ddff.s3tc.ctex" +path.etc2="res://.godot/imported/Leaf_Pine_C.png-73d4bd3555e352cacb0a23bfc8d9ddff.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaf_Pine_C.png" +dest_files=["res://.godot/imported/Leaf_Pine_C.png-73d4bd3555e352cacb0a23bfc8d9ddff.s3tc.ctex", "res://.godot/imported/Leaf_Pine_C.png-73d4bd3555e352cacb0a23bfc8d9ddff.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves.png new file mode 100644 index 0000000..e2bd85a Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves.png.import new file mode 100644 index 0000000..e9a39d3 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://wep3lfvqm5ra" +path.s3tc="res://.godot/imported/Leaves.png-157ebe064dc0151d778728b50311f466.s3tc.ctex" +path.etc2="res://.godot/imported/Leaves.png-157ebe064dc0151d778728b50311f466.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves.png" +dest_files=["res://.godot/imported/Leaves.png-157ebe064dc0151d778728b50311f466.s3tc.ctex", "res://.godot/imported/Leaves.png-157ebe064dc0151d778728b50311f466.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_GiantPine_C.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_GiantPine_C.png new file mode 100644 index 0000000..1e757b1 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_GiantPine_C.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_GiantPine_C.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_GiantPine_C.png.import new file mode 100644 index 0000000..dbeac71 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_GiantPine_C.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bkkjdnmopuwbe" +path="res://.godot/imported/Leaves_GiantPine_C.png-b5e780ce1e6d00b26ead9cc1bd54dcad.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_GiantPine_C.png" +dest_files=["res://.godot/imported/Leaves_GiantPine_C.png-b5e780ce1e6d00b26ead9cc1bd54dcad.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree.png new file mode 100644 index 0000000..ea1735e Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree.png.import new file mode 100644 index 0000000..bef58fd --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://buxjxj67t8lcu" +path="res://.godot/imported/Leaves_NormalTree.png-17052fdb429b464648f9fe7f4db2e9d1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree.png" +dest_files=["res://.godot/imported/Leaves_NormalTree.png-17052fdb429b464648f9fe7f4db2e9d1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree_C.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree_C.png new file mode 100644 index 0000000..2be63af Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree_C.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree_C.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree_C.png.import new file mode 100644 index 0000000..0c5fa20 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree_C.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcw52u5fvml8k" +path.s3tc="res://.godot/imported/Leaves_NormalTree_C.png-041fe050661f1fbd8ab1290835742f1f.s3tc.ctex" +path.etc2="res://.godot/imported/Leaves_NormalTree_C.png-041fe050661f1fbd8ab1290835742f1f.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_NormalTree_C.png" +dest_files=["res://.godot/imported/Leaves_NormalTree_C.png-041fe050661f1fbd8ab1290835742f1f.s3tc.ctex", "res://.godot/imported/Leaves_NormalTree_C.png-041fe050661f1fbd8ab1290835742f1f.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree.png new file mode 100644 index 0000000..2d3caa9 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree.png.import new file mode 100644 index 0000000..b27e10d --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d16fb6ogoptl0" +path="res://.godot/imported/Leaves_TwistedTree.png-6a6eb8ef03adda98c54f63d587239b7e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree.png" +dest_files=["res://.godot/imported/Leaves_TwistedTree.png-6a6eb8ef03adda98c54f63d587239b7e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree_C.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree_C.png new file mode 100644 index 0000000..3897e2f Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree_C.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree_C.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree_C.png.import new file mode 100644 index 0000000..16828f9 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree_C.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bevandxthicb3" +path.s3tc="res://.godot/imported/Leaves_TwistedTree_C.png-9ec2587df996c332877ffa8d9d061272.s3tc.ctex" +path.etc2="res://.godot/imported/Leaves_TwistedTree_C.png-9ec2587df996c332877ffa8d9d061272.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Leaves_TwistedTree_C.png" +dest_files=["res://.godot/imported/Leaves_TwistedTree_C.png-9ec2587df996c332877ffa8d9d061272.s3tc.ctex", "res://.godot/imported/Leaves_TwistedTree_C.png-9ec2587df996c332877ffa8d9d061272.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Common.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Common.bin new file mode 100644 index 0000000..b99724f Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Common.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Common.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Common.gltf new file mode 100644 index 0000000..3d660b2 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Common.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Mushroom_Common" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Mushrooms", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.032", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Mushrooms", + "uri":"Mushrooms.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":555, + "max":[ + 0.23032501339912415, + 0.4460097551345825, + 0.3339020013809204 + ], + "min":[ + -0.33337587118148804, + -0.017470968887209892, + -0.44521069526672363 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":555, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":555, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":2640, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":6660, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":6660, + "byteOffset":6660, + "target":34962 + }, + { + "buffer":0, + "byteLength":4440, + "byteOffset":13320, + "target":34962 + }, + { + "buffer":0, + "byteLength":5280, + "byteOffset":17760, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":23040, + "uri":"Mushroom_Common.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Common.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Common.gltf.import new file mode 100644 index 0000000..5d5af72 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Common.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bro7mix4pom88" +path="res://.godot/imported/Mushroom_Common.gltf-ab9124e3dae03c458125914fa735eea0.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Common.gltf" +dest_files=["res://.godot/imported/Mushroom_Common.gltf-ab9124e3dae03c458125914fa735eea0.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Laetiporus.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Laetiporus.bin new file mode 100644 index 0000000..24435e1 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Laetiporus.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Laetiporus.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Laetiporus.gltf new file mode 100644 index 0000000..a453b52 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Laetiporus.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Mushroom_Laetiporus" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Mushrooms", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.020", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Mushrooms", + "uri":"Mushrooms.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":1806, + "max":[ + 0.716213583946228, + 0.606732964515686, + 0.7748813629150391 + ], + "min":[ + -0.6498190760612488, + -0.16022536158561707, + -0.32830116152763367 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":1806, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":1806, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":9648, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":21672, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":21672, + "byteOffset":21672, + "target":34962 + }, + { + "buffer":0, + "byteLength":14448, + "byteOffset":43344, + "target":34962 + }, + { + "buffer":0, + "byteLength":19296, + "byteOffset":57792, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":77088, + "uri":"Mushroom_Laetiporus.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Laetiporus.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Laetiporus.gltf.import new file mode 100644 index 0000000..849a114 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Laetiporus.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c3g4srf555dmi" +path="res://.godot/imported/Mushroom_Laetiporus.gltf-ac077b6f4acb74984477377101e1a440.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushroom_Laetiporus.gltf" +dest_files=["res://.godot/imported/Mushroom_Laetiporus.gltf-ac077b6f4acb74984477377101e1a440.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushrooms.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushrooms.png new file mode 100644 index 0000000..c5d11a3 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushrooms.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushrooms.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushrooms.png.import new file mode 100644 index 0000000..0a61a4d --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushrooms.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://y6iwboc18njp" +path.s3tc="res://.godot/imported/Mushrooms.png-7ea86b8755d2d0d49ad08698e127ce25.s3tc.ctex" +path.etc2="res://.godot/imported/Mushrooms.png-7ea86b8755d2d0d49ad08698e127ce25.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Mushrooms.png" +dest_files=["res://.godot/imported/Mushrooms.png-7ea86b8755d2d0d49ad08698e127ce25.s3tc.ctex", "res://.godot/imported/Mushrooms.png-7ea86b8755d2d0d49ad08698e127ce25.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/PathRocks_Diffuse.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/PathRocks_Diffuse.png new file mode 100644 index 0000000..02bf5f5 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/PathRocks_Diffuse.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/PathRocks_Diffuse.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/PathRocks_Diffuse.png.import new file mode 100644 index 0000000..3b939b4 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/PathRocks_Diffuse.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dxccllbs47a4a" +path.s3tc="res://.godot/imported/PathRocks_Diffuse.png-dabdbf85c89e8104ee3b3f70ed1bffbd.s3tc.ctex" +path.etc2="res://.godot/imported/PathRocks_Diffuse.png-dabdbf85c89e8104ee3b3f70ed1bffbd.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/PathRocks_Diffuse.png" +dest_files=["res://.godot/imported/PathRocks_Diffuse.png-dabdbf85c89e8104ee3b3f70ed1bffbd.s3tc.ctex", "res://.godot/imported/PathRocks_Diffuse.png-dabdbf85c89e8104ee3b3f70ed1bffbd.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_1.bin new file mode 100644 index 0000000..b2f6135 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_1.gltf new file mode 100644 index 0000000..d8790e6 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_1.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Round_1" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.008", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":292, + "max":[ + 0.28022968769073486, + 0.08767858147621155, + 0.20741015672683716 + ], + "min":[ + -0.21980905532836914, + -0.0077979713678359985, + -0.15961268544197083 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":292, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":292, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":408, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":3504, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":3504, + "byteOffset":3504, + "target":34962 + }, + { + "buffer":0, + "byteLength":2336, + "byteOffset":7008, + "target":34962 + }, + { + "buffer":0, + "byteLength":816, + "byteOffset":9344, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":10160, + "uri":"Pebble_Round_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_1.gltf.import new file mode 100644 index 0000000..79a2bb2 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://d246ykfafkuv5" +path="res://.godot/imported/Pebble_Round_1.gltf-e94658bfa001aab821642be3ace4a330.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_1.gltf" +dest_files=["res://.godot/imported/Pebble_Round_1.gltf-e94658bfa001aab821642be3ace4a330.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_2.bin new file mode 100644 index 0000000..482195e Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_2.gltf new file mode 100644 index 0000000..93c4c69 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_2.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Round_2" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.010", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":212, + "max":[ + 0.23427341878414154, + 0.09124953299760818, + 0.1887856125831604 + ], + "min":[ + -0.21520347893238068, + -0.0029801998753100634, + -0.22227312624454498 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":212, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":212, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":342, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":2544, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":2544, + "byteOffset":2544, + "target":34962 + }, + { + "buffer":0, + "byteLength":1696, + "byteOffset":5088, + "target":34962 + }, + { + "buffer":0, + "byteLength":684, + "byteOffset":6784, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":7468, + "uri":"Pebble_Round_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_2.gltf.import new file mode 100644 index 0000000..577a2d9 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://do0xrk34tbaff" +path="res://.godot/imported/Pebble_Round_2.gltf-e6d2aa5e9daa138ed6d54c9d817e4fbb.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_2.gltf" +dest_files=["res://.godot/imported/Pebble_Round_2.gltf-e6d2aa5e9daa138ed6d54c9d817e4fbb.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_3.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_3.bin new file mode 100644 index 0000000..32501e8 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_3.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_3.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_3.gltf new file mode 100644 index 0000000..80837b0 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_3.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Round_3" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.009", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":244, + "max":[ + 0.22259299457073212, + 0.09686936438083649, + 0.2633242607116699 + ], + "min":[ + -0.22709830105304718, + -0.0017530163750052452, + -0.22148603200912476 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":244, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":244, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":384, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":2928, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":2928, + "byteOffset":2928, + "target":34962 + }, + { + "buffer":0, + "byteLength":1952, + "byteOffset":5856, + "target":34962 + }, + { + "buffer":0, + "byteLength":768, + "byteOffset":7808, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":8576, + "uri":"Pebble_Round_3.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_3.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_3.gltf.import new file mode 100644 index 0000000..6e3765d --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_3.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bar5tanb4xvae" +path="res://.godot/imported/Pebble_Round_3.gltf-4039d6126d12edf0f810f4f5558aed87.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_3.gltf" +dest_files=["res://.godot/imported/Pebble_Round_3.gltf-4039d6126d12edf0f810f4f5558aed87.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_4.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_4.bin new file mode 100644 index 0000000..38b42c0 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_4.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_4.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_4.gltf new file mode 100644 index 0000000..dae858d --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_4.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Round_4" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":266, + "max":[ + 0.19573403894901276, + 0.0937667116522789, + 0.22166091203689575 + ], + "min":[ + -0.2105470895767212, + -0.00563192879781127, + -0.23073677718639374 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":266, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":266, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":378, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":3192, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":3192, + "byteOffset":3192, + "target":34962 + }, + { + "buffer":0, + "byteLength":2128, + "byteOffset":6384, + "target":34962 + }, + { + "buffer":0, + "byteLength":756, + "byteOffset":8512, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":9268, + "uri":"Pebble_Round_4.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_4.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_4.gltf.import new file mode 100644 index 0000000..a0fc3be --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_4.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://tibr266agofx" +path="res://.godot/imported/Pebble_Round_4.gltf-b6ff8573289e43d9077bd29147fe1e13.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_4.gltf" +dest_files=["res://.godot/imported/Pebble_Round_4.gltf-b6ff8573289e43d9077bd29147fe1e13.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_5.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_5.bin new file mode 100644 index 0000000..8a14554 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_5.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_5.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_5.gltf new file mode 100644 index 0000000..b3878df --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_5.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Round_5" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.007", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":254, + "max":[ + 0.20201954245567322, + 0.09668100625276566, + 0.1452593356370926 + ], + "min":[ + -0.21657367050647736, + -0.00414585554972291, + -0.20099897682666779 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":254, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":254, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":372, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":3048, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":3048, + "byteOffset":3048, + "target":34962 + }, + { + "buffer":0, + "byteLength":2032, + "byteOffset":6096, + "target":34962 + }, + { + "buffer":0, + "byteLength":744, + "byteOffset":8128, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":8872, + "uri":"Pebble_Round_5.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_5.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_5.gltf.import new file mode 100644 index 0000000..a5bc20a --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_5.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://i8ofkuxtkx5i" +path="res://.godot/imported/Pebble_Round_5.gltf-8df4299380ad32f4b3bc60006d635690.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Round_5.gltf" +dest_files=["res://.godot/imported/Pebble_Round_5.gltf-8df4299380ad32f4b3bc60006d635690.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_1.bin new file mode 100644 index 0000000..2afe492 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_1.gltf new file mode 100644 index 0000000..cbfd916 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_1.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Square_1" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.006", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":216, + "max":[ + 0.20128773152828217, + 0.1277286410331726, + 0.23776745796203613 + ], + "min":[ + -0.23334957659244537, + -0.0022022530902177095, + -0.20187555253505707 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":216, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":216, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":312, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":2592, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":2592, + "byteOffset":2592, + "target":34962 + }, + { + "buffer":0, + "byteLength":1728, + "byteOffset":5184, + "target":34962 + }, + { + "buffer":0, + "byteLength":624, + "byteOffset":6912, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":7536, + "uri":"Pebble_Square_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_1.gltf.import new file mode 100644 index 0000000..d764141 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://210sm8g2r1bl" +path="res://.godot/imported/Pebble_Square_1.gltf-efcce217cc5d8547b10d97bef59ab195.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_1.gltf" +dest_files=["res://.godot/imported/Pebble_Square_1.gltf-efcce217cc5d8547b10d97bef59ab195.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_2.bin new file mode 100644 index 0000000..f61bbf7 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_2.gltf new file mode 100644 index 0000000..6f9a00c --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_2.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Square_2" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.004", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":162, + "max":[ + 0.19046445190906525, + 0.13527964055538177, + 0.160864919424057 + ], + "min":[ + -0.2006315439939499, + -0.005164282396435738, + -0.11938932538032532 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":162, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":162, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":234, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":1944, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":1944, + "byteOffset":1944, + "target":34962 + }, + { + "buffer":0, + "byteLength":1296, + "byteOffset":3888, + "target":34962 + }, + { + "buffer":0, + "byteLength":468, + "byteOffset":5184, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":5652, + "uri":"Pebble_Square_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_2.gltf.import new file mode 100644 index 0000000..630ea46 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dj03rv1axh61m" +path="res://.godot/imported/Pebble_Square_2.gltf-c10327ab6f4c605e3fc89d442d43744f.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_2.gltf" +dest_files=["res://.godot/imported/Pebble_Square_2.gltf-c10327ab6f4c605e3fc89d442d43744f.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_3.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_3.bin new file mode 100644 index 0000000..71816d1 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_3.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_3.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_3.gltf new file mode 100644 index 0000000..73453b1 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_3.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Square_3" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.003", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":108, + "max":[ + 0.18668454885482788, + 0.1508151739835739, + 0.15225757658481598 + ], + "min":[ + -0.18665164709091187, + -0.00811817031353712, + -0.16649161279201508 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":108, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":108, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":156, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":1296, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":1296, + "byteOffset":1296, + "target":34962 + }, + { + "buffer":0, + "byteLength":864, + "byteOffset":2592, + "target":34962 + }, + { + "buffer":0, + "byteLength":312, + "byteOffset":3456, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":3768, + "uri":"Pebble_Square_3.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_3.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_3.gltf.import new file mode 100644 index 0000000..a4bb53e --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_3.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://w65j2i36yd0y" +path="res://.godot/imported/Pebble_Square_3.gltf-19474e661c4f38cb2c2021ec58bd2cff.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_3.gltf" +dest_files=["res://.godot/imported/Pebble_Square_3.gltf-19474e661c4f38cb2c2021ec58bd2cff.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_4.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_4.bin new file mode 100644 index 0000000..f198c9b Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_4.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_4.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_4.gltf new file mode 100644 index 0000000..02b8883 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_4.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Square_4" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.001", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":96, + "max":[ + 0.16872341930866241, + 0.16551485657691956, + 0.1331545114517212 + ], + "min":[ + -0.17121998965740204, + -0.0027762739919126034, + -0.15767109394073486 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":96, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":96, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":144, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":1152, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":1152, + "byteOffset":1152, + "target":34962 + }, + { + "buffer":0, + "byteLength":768, + "byteOffset":2304, + "target":34962 + }, + { + "buffer":0, + "byteLength":288, + "byteOffset":3072, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":3360, + "uri":"Pebble_Square_4.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_4.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_4.gltf.import new file mode 100644 index 0000000..72dbbec --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_4.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://hxmxho8lmarg" +path="res://.godot/imported/Pebble_Square_4.gltf-f7962dcd599ee3e6eb8a0f3b0ebf5e96.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_4.gltf" +dest_files=["res://.godot/imported/Pebble_Square_4.gltf-f7962dcd599ee3e6eb8a0f3b0ebf5e96.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_5.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_5.bin new file mode 100644 index 0000000..a3b06c8 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_5.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_5.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_5.gltf new file mode 100644 index 0000000..5c8e9a8 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_5.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Square_5" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.002", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":156, + "max":[ + 0.18346840143203735, + 0.14420261979103088, + 0.22290711104869843 + ], + "min":[ + -0.16856330633163452, + -0.00795699656009674, + -0.22753244638442993 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":156, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":156, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":216, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":1872, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":1872, + "byteOffset":1872, + "target":34962 + }, + { + "buffer":0, + "byteLength":1248, + "byteOffset":3744, + "target":34962 + }, + { + "buffer":0, + "byteLength":432, + "byteOffset":4992, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":5424, + "uri":"Pebble_Square_5.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_5.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_5.gltf.import new file mode 100644 index 0000000..ebcf67c --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_5.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dynwub7nlhko4" +path="res://.godot/imported/Pebble_Square_5.gltf-a00e6dafdace9f4cf76c4341900dbfc8.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_5.gltf" +dest_files=["res://.godot/imported/Pebble_Square_5.gltf-a00e6dafdace9f4cf76c4341900dbfc8.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_6.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_6.bin new file mode 100644 index 0000000..2a6a36b Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_6.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_6.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_6.gltf new file mode 100644 index 0000000..d8db232 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_6.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pebble_Square_6" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.005", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":139, + "max":[ + 0.24700631201267242, + 0.12762853503227234, + 0.14230100810527802 + ], + "min":[ + -0.21502231061458588, + -0.010146240703761578, + -0.12062107771635056 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":139, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":139, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":195, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":1668, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":1668, + "byteOffset":1668, + "target":34962 + }, + { + "buffer":0, + "byteLength":1112, + "byteOffset":3336, + "target":34962 + }, + { + "buffer":0, + "byteLength":390, + "byteOffset":4448, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":4840, + "uri":"Pebble_Square_6.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_6.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_6.gltf.import new file mode 100644 index 0000000..95aa28e --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_6.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://s1uwt3ctgxam" +path="res://.godot/imported/Pebble_Square_6.gltf-93df3dd296401a4bff2f5420f65d39d3.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pebble_Square_6.gltf" +dest_files=["res://.godot/imported/Pebble_Square_6.gltf-93df3dd296401a4bff2f5420f65d39d3.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_1.bin new file mode 100644 index 0000000..a6a2c2d Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_1.gltf new file mode 100644 index 0000000..438d848 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_1.gltf @@ -0,0 +1,138 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Petal_1" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Flowers", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.028", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Flowers", + "uri":"Flowers.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":14, + "max":[ + 0.20332272350788116, + 0.24367444217205048, + 0.22596585750579834 + ], + "min":[ + -0.256916344165802, + 1.184918232866039e-06, + -0.22899580001831055 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":14, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":14, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":39, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":168, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":168, + "byteOffset":168, + "target":34962 + }, + { + "buffer":0, + "byteLength":112, + "byteOffset":336, + "target":34962 + }, + { + "buffer":0, + "byteLength":78, + "byteOffset":448, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":528, + "uri":"Petal_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_1.gltf.import new file mode 100644 index 0000000..0651de2 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://0sppcd6f1bgp" +path="res://.godot/imported/Petal_1.gltf-e51eddf04ff2121d6d4266f0b6d45cf0.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_1.gltf" +dest_files=["res://.godot/imported/Petal_1.gltf-e51eddf04ff2121d6d4266f0b6d45cf0.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_2.bin new file mode 100644 index 0000000..8814902 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_2.gltf new file mode 100644 index 0000000..2c0040f --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_2.gltf @@ -0,0 +1,138 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Petal_2" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Flowers", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.024", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Flowers", + "uri":"Flowers.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":16, + "max":[ + 0.3525437116622925, + 0.23606069386005402, + 0.30195337533950806 + ], + "min":[ + -0.32067161798477173, + 0, + -0.3291413486003876 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":16, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":16, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":45, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":192, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":192, + "byteOffset":192, + "target":34962 + }, + { + "buffer":0, + "byteLength":128, + "byteOffset":384, + "target":34962 + }, + { + "buffer":0, + "byteLength":90, + "byteOffset":512, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":604, + "uri":"Petal_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_2.gltf.import new file mode 100644 index 0000000..b6ca77f --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cpbpdccnkw0we" +path="res://.godot/imported/Petal_2.gltf-947636f03cc7b95544ef3e730c17802d.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_2.gltf" +dest_files=["res://.godot/imported/Petal_2.gltf-947636f03cc7b95544ef3e730c17802d.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_3.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_3.bin new file mode 100644 index 0000000..631d508 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_3.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_3.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_3.gltf new file mode 100644 index 0000000..891d063 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_3.gltf @@ -0,0 +1,138 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Petal_3" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Flowers", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cylinder.011", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Flowers", + "uri":"Flowers.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":16, + "max":[ + 0.3044891953468323, + 0.18948519229888916, + 0.3329152464866638 + ], + "min":[ + -0.31499457359313965, + 2.0768348463207076e-07, + -0.27345067262649536 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":16, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":16, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":45, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":192, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":192, + "byteOffset":192, + "target":34962 + }, + { + "buffer":0, + "byteLength":128, + "byteOffset":384, + "target":34962 + }, + { + "buffer":0, + "byteLength":90, + "byteOffset":512, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":604, + "uri":"Petal_3.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_3.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_3.gltf.import new file mode 100644 index 0000000..68e9f4a --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_3.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dupsl4x0g074w" +path="res://.godot/imported/Petal_3.gltf-a8c2540c0e07965ab5c963a3761fc54a.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_3.gltf" +dest_files=["res://.godot/imported/Petal_3.gltf-a8c2540c0e07965ab5c963a3761fc54a.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_4.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_4.bin new file mode 100644 index 0000000..013362f Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_4.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_4.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_4.gltf new file mode 100644 index 0000000..ddfced8 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_4.gltf @@ -0,0 +1,138 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Petal_4" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Flowers", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.027", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Flowers", + "uri":"Flowers.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":25, + "max":[ + 0.1856984794139862, + 0.25205618143081665, + 0.12215583026409149 + ], + "min":[ + -0.1433948129415512, + -1.3743051852088684e-07, + -0.12229615449905396 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":25, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":25, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":90, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":300, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":300, + "byteOffset":300, + "target":34962 + }, + { + "buffer":0, + "byteLength":200, + "byteOffset":600, + "target":34962 + }, + { + "buffer":0, + "byteLength":180, + "byteOffset":800, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":980, + "uri":"Petal_4.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_4.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_4.gltf.import new file mode 100644 index 0000000..753cd02 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_4.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dsik7c8fypya" +path="res://.godot/imported/Petal_4.gltf-07fc4dd966767e0ed08f1e9e83df7719.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_4.gltf" +dest_files=["res://.godot/imported/Petal_4.gltf-07fc4dd966767e0ed08f1e9e83df7719.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_5.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_5.bin new file mode 100644 index 0000000..099c272 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_5.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_5.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_5.gltf new file mode 100644 index 0000000..68b0ca6 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_5.gltf @@ -0,0 +1,138 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Petal_5" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Flowers", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.029", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Flowers", + "uri":"Flowers.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":16, + "max":[ + 0.43301600217819214, + 0.2898155748844147, + 0.3756616413593292 + ], + "min":[ + -0.40094661712646484, + 0.0010437477612867951, + -0.4195518493652344 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":16, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":16, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":45, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":192, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":192, + "byteOffset":192, + "target":34962 + }, + { + "buffer":0, + "byteLength":128, + "byteOffset":384, + "target":34962 + }, + { + "buffer":0, + "byteLength":90, + "byteOffset":512, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":604, + "uri":"Petal_5.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_5.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_5.gltf.import new file mode 100644 index 0000000..001786d --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_5.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bwanejg30lgat" +path="res://.godot/imported/Petal_5.gltf-c1ffcb0d3054049f5c0cb01a52b3678a.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Petal_5.gltf" +dest_files=["res://.godot/imported/Petal_5.gltf-c1ffcb0d3054049f5c0cb01a52b3678a.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_1.bin new file mode 100644 index 0000000..3a4fda5 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_1.gltf new file mode 100644 index 0000000..28011ce --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_1.gltf @@ -0,0 +1,264 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pine_1" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Bark_NormalTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_Pine", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.028", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_NormalTree_Normal", + "uri":"Bark_NormalTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_NormalTree", + "uri":"Bark_NormalTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaf_Pine_C", + "uri":"Leaf_Pine_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":4076, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":4076, + "max":[ + 1.3389160633087158, + 6.822727203369141, + 1.3303884267807007 + ], + "min":[ + -1.0975136756896973, + -0.23508860170841217, + -1.8778250217437744 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":4076, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":4076, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":9531, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":1170, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":1170, + "max":[ + 2.4958789348602295, + 7.081829071044922, + 2.0614705085754395 + ], + "min":[ + -2.448819160461426, + 2.158754587173462, + -2.4769327640533447 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":1170, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":1170, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":2310, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":65216, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":48912, + "byteOffset":65216, + "target":34962 + }, + { + "buffer":0, + "byteLength":48912, + "byteOffset":114128, + "target":34962 + }, + { + "buffer":0, + "byteLength":32608, + "byteOffset":163040, + "target":34962 + }, + { + "buffer":0, + "byteLength":19062, + "byteOffset":195648, + "target":34963 + }, + { + "buffer":0, + "byteLength":18720, + "byteOffset":214712, + "target":34962 + }, + { + "buffer":0, + "byteLength":14040, + "byteOffset":233432, + "target":34962 + }, + { + "buffer":0, + "byteLength":14040, + "byteOffset":247472, + "target":34962 + }, + { + "buffer":0, + "byteLength":9360, + "byteOffset":261512, + "target":34962 + }, + { + "buffer":0, + "byteLength":4620, + "byteOffset":270872, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":275492, + "uri":"Pine_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_1.gltf.import new file mode 100644 index 0000000..11711c9 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dufujtjltaaxs" +path="res://.godot/imported/Pine_1.gltf-81646bde88f2e77ae08ae46958a6b031.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_1.gltf" +dest_files=["res://.godot/imported/Pine_1.gltf-81646bde88f2e77ae08ae46958a6b031.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_2.bin new file mode 100644 index 0000000..d7008b5 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_2.gltf new file mode 100644 index 0000000..74bd68b --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_2.gltf @@ -0,0 +1,264 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pine_2" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Bark_NormalTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_Pine", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.029", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_NormalTree_Normal", + "uri":"Bark_NormalTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_NormalTree", + "uri":"Bark_NormalTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaf_Pine_C", + "uri":"Leaf_Pine_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":3616, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":3616, + "max":[ + 1.3288283348083496, + 6.861804008483887, + 1.4154813289642334 + ], + "min":[ + -0.8798791170120239, + -0.23508860170841217, + -1.9060800075531006 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":3616, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":3616, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":8634, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":1310, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":1310, + "max":[ + 2.8361265659332275, + 7.141149520874023, + 2.527508020401001 + ], + "min":[ + -2.891958236694336, + 1.1175905466079712, + -2.6936988830566406 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":1310, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":1310, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":2310, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":57856, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":43392, + "byteOffset":57856, + "target":34962 + }, + { + "buffer":0, + "byteLength":43392, + "byteOffset":101248, + "target":34962 + }, + { + "buffer":0, + "byteLength":28928, + "byteOffset":144640, + "target":34962 + }, + { + "buffer":0, + "byteLength":17268, + "byteOffset":173568, + "target":34963 + }, + { + "buffer":0, + "byteLength":20960, + "byteOffset":190836, + "target":34962 + }, + { + "buffer":0, + "byteLength":15720, + "byteOffset":211796, + "target":34962 + }, + { + "buffer":0, + "byteLength":15720, + "byteOffset":227516, + "target":34962 + }, + { + "buffer":0, + "byteLength":10480, + "byteOffset":243236, + "target":34962 + }, + { + "buffer":0, + "byteLength":4620, + "byteOffset":253716, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":258336, + "uri":"Pine_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_2.gltf.import new file mode 100644 index 0000000..d7e40e0 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://ccgnpu0xnng5a" +path="res://.godot/imported/Pine_2.gltf-fa08fe15af098d36635d2dc5e253d60d.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_2.gltf" +dest_files=["res://.godot/imported/Pine_2.gltf-fa08fe15af098d36635d2dc5e253d60d.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_3.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_3.bin new file mode 100644 index 0000000..700f525 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_3.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_3.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_3.gltf new file mode 100644 index 0000000..a6fbe7a --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_3.gltf @@ -0,0 +1,264 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pine_3" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Bark_NormalTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_Pine", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.030", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_NormalTree_Normal", + "uri":"Bark_NormalTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_NormalTree", + "uri":"Bark_NormalTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaf_Pine_C", + "uri":"Leaf_Pine_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":5772, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":5772, + "max":[ + 1.0800867080688477, + 6.998227119445801, + 1.1170551776885986 + ], + "min":[ + -0.9482465982437134, + -0.23508860170841217, + -1.2420871257781982 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":5772, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":5772, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":13506, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":801, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":801, + "max":[ + 1.4976577758789062, + 7.157110214233398, + 1.7034649848937988 + ], + "min":[ + -2.113736867904663, + 3.187588691711426, + -2.2923386096954346 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":801, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":801, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":1386, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":92352, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":69264, + "byteOffset":92352, + "target":34962 + }, + { + "buffer":0, + "byteLength":69264, + "byteOffset":161616, + "target":34962 + }, + { + "buffer":0, + "byteLength":46176, + "byteOffset":230880, + "target":34962 + }, + { + "buffer":0, + "byteLength":27012, + "byteOffset":277056, + "target":34963 + }, + { + "buffer":0, + "byteLength":12816, + "byteOffset":304068, + "target":34962 + }, + { + "buffer":0, + "byteLength":9612, + "byteOffset":316884, + "target":34962 + }, + { + "buffer":0, + "byteLength":9612, + "byteOffset":326496, + "target":34962 + }, + { + "buffer":0, + "byteLength":6408, + "byteOffset":336108, + "target":34962 + }, + { + "buffer":0, + "byteLength":2772, + "byteOffset":342516, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":345288, + "uri":"Pine_3.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_3.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_3.gltf.import new file mode 100644 index 0000000..ad59215 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_3.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bxbdepyikafo7" +path="res://.godot/imported/Pine_3.gltf-2ca4c2a2627f8aef91def453ea6b0a8b.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_3.gltf" +dest_files=["res://.godot/imported/Pine_3.gltf-2ca4c2a2627f8aef91def453ea6b0a8b.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_4.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_4.bin new file mode 100644 index 0000000..1539cc3 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_4.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_4.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_4.gltf new file mode 100644 index 0000000..5b13853 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_4.gltf @@ -0,0 +1,264 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pine_4" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Bark_NormalTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_Pine", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.031", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_NormalTree_Normal", + "uri":"Bark_NormalTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_NormalTree", + "uri":"Bark_NormalTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaf_Pine_C", + "uri":"Leaf_Pine_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":2978, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":2978, + "max":[ + 1.9782183170318604, + 9.700387001037598, + 0.8374438285827637 + ], + "min":[ + -1.9725096225738525, + -0.23508861660957336, + -1.9964979887008667 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":2978, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":2978, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":6480, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":1910, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":1910, + "max":[ + 2.930187225341797, + 10.0013427734375, + 2.424938201904297 + ], + "min":[ + -2.8718371391296387, + 2.4392924308776855, + -2.9459073543548584 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":1910, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":1910, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":3630, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":47648, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":35736, + "byteOffset":47648, + "target":34962 + }, + { + "buffer":0, + "byteLength":35736, + "byteOffset":83384, + "target":34962 + }, + { + "buffer":0, + "byteLength":23824, + "byteOffset":119120, + "target":34962 + }, + { + "buffer":0, + "byteLength":12960, + "byteOffset":142944, + "target":34963 + }, + { + "buffer":0, + "byteLength":30560, + "byteOffset":155904, + "target":34962 + }, + { + "buffer":0, + "byteLength":22920, + "byteOffset":186464, + "target":34962 + }, + { + "buffer":0, + "byteLength":22920, + "byteOffset":209384, + "target":34962 + }, + { + "buffer":0, + "byteLength":15280, + "byteOffset":232304, + "target":34962 + }, + { + "buffer":0, + "byteLength":7260, + "byteOffset":247584, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":254844, + "uri":"Pine_4.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_4.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_4.gltf.import new file mode 100644 index 0000000..0f3fa84 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_4.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://n0gjppt4p4e6" +path="res://.godot/imported/Pine_4.gltf-4d5528f91afe6c123fd160ac0cf77f94.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_4.gltf" +dest_files=["res://.godot/imported/Pine_4.gltf-4d5528f91afe6c123fd160ac0cf77f94.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_5.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_5.bin new file mode 100644 index 0000000..4e92f32 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_5.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_5.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_5.gltf new file mode 100644 index 0000000..17af6cb --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_5.gltf @@ -0,0 +1,264 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Pine_5" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Bark_NormalTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_Pine", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.032", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_NormalTree_Normal", + "uri":"Bark_NormalTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_NormalTree", + "uri":"Bark_NormalTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaf_Pine_C", + "uri":"Leaf_Pine_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":542, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":542, + "max":[ + 0.6472557783126831, + 8.332257270812988, + 0.4739142060279846 + ], + "min":[ + -0.47391438484191895, + -0.23508861660957336, + -1.5000479221343994 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":542, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":542, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":1464, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":1773, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":1773, + "max":[ + 3.432434320449829, + 8.48871898651123, + 2.4435970783233643 + ], + "min":[ + -2.987706422805786, + 1.453586220741272, + -3.7784042358398438 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":1773, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":1773, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":3474, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":8672, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":6504, + "byteOffset":8672, + "target":34962 + }, + { + "buffer":0, + "byteLength":6504, + "byteOffset":15176, + "target":34962 + }, + { + "buffer":0, + "byteLength":4336, + "byteOffset":21680, + "target":34962 + }, + { + "buffer":0, + "byteLength":2928, + "byteOffset":26016, + "target":34963 + }, + { + "buffer":0, + "byteLength":28368, + "byteOffset":28944, + "target":34962 + }, + { + "buffer":0, + "byteLength":21276, + "byteOffset":57312, + "target":34962 + }, + { + "buffer":0, + "byteLength":21276, + "byteOffset":78588, + "target":34962 + }, + { + "buffer":0, + "byteLength":14184, + "byteOffset":99864, + "target":34962 + }, + { + "buffer":0, + "byteLength":6948, + "byteOffset":114048, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":120996, + "uri":"Pine_5.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_5.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_5.gltf.import new file mode 100644 index 0000000..4595719 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_5.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://d1mo4t8r61ws8" +path="res://.godot/imported/Pine_5.gltf-056ab9b14c325d58ede8e33813077092.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Pine_5.gltf" +dest_files=["res://.godot/imported/Pine_5.gltf-056ab9b14c325d58ede8e33813077092.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1.bin new file mode 100644 index 0000000..86913fe Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1.gltf new file mode 100644 index 0000000..93995b7 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1.gltf @@ -0,0 +1,152 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Plant_1" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.036", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":120, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":120, + "max":[ + 0.562667191028595, + 0.978546142578125, + 0.6224353909492493 + ], + "min":[ + -0.7107237577438354, + -0.0350240021944046, + -0.7635920643806458 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":120, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":120, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":360, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":960, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":1440, + "byteOffset":960, + "target":34962 + }, + { + "buffer":0, + "byteLength":1440, + "byteOffset":2400, + "target":34962 + }, + { + "buffer":0, + "byteLength":960, + "byteOffset":3840, + "target":34962 + }, + { + "buffer":0, + "byteLength":720, + "byteOffset":4800, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":5520, + "uri":"Plant_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1.gltf.import new file mode 100644 index 0000000..242d409 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://csr35xospt8sd" +path="res://.godot/imported/Plant_1.gltf-741bf2a8087ea904a5345ed659dc9c86.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1.gltf" +dest_files=["res://.godot/imported/Plant_1.gltf-741bf2a8087ea904a5345ed659dc9c86.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1_Big.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1_Big.bin new file mode 100644 index 0000000..cf8ddd3 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1_Big.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1_Big.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1_Big.gltf new file mode 100644 index 0000000..ce9aef6 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1_Big.gltf @@ -0,0 +1,152 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Plant_1_Big" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.035", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5123, + "count":360, + "normalized":true, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":360, + "max":[ + 1.4963372945785522, + 3.7003872394561768, + 1.4680646657943726 + ], + "min":[ + -1.394121527671814, + -0.05603840574622154, + -1.6583820581436157 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":360, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":360, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":1080, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":2880, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":4320, + "byteOffset":2880, + "target":34962 + }, + { + "buffer":0, + "byteLength":4320, + "byteOffset":7200, + "target":34962 + }, + { + "buffer":0, + "byteLength":2880, + "byteOffset":11520, + "target":34962 + }, + { + "buffer":0, + "byteLength":2160, + "byteOffset":14400, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":16560, + "uri":"Plant_1_Big.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1_Big.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1_Big.gltf.import new file mode 100644 index 0000000..060dc44 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1_Big.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://8pd0jcr2tuvb" +path="res://.godot/imported/Plant_1_Big.gltf-f55e6ceb9ee19adb95280518dc9cdad1.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_1_Big.gltf" +dest_files=["res://.godot/imported/Plant_1_Big.gltf-f55e6ceb9ee19adb95280518dc9cdad1.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7.bin new file mode 100644 index 0000000..dc4853a Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7.gltf new file mode 100644 index 0000000..5ea3c20 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7.gltf @@ -0,0 +1,138 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Plant_7" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.011", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":54, + "max":[ + 0.5996842384338379, + 0.3286193609237671, + 0.4982551336288452 + ], + "min":[ + -0.44815123081207275, + 0.07910457253456116, + -0.46386587619781494 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":54, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":54, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":144, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":648, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":648, + "byteOffset":648, + "target":34962 + }, + { + "buffer":0, + "byteLength":432, + "byteOffset":1296, + "target":34962 + }, + { + "buffer":0, + "byteLength":288, + "byteOffset":1728, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":2016, + "uri":"Plant_7.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7.gltf.import new file mode 100644 index 0000000..39dd10f --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dvo8c5jq6gv07" +path="res://.godot/imported/Plant_7.gltf-a6a3576e6ba4b46bdbcbec756ffc1333.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7.gltf" +dest_files=["res://.godot/imported/Plant_7.gltf-a6a3576e6ba4b46bdbcbec756ffc1333.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7_Big.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7_Big.bin new file mode 100644 index 0000000..c5b4222 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7_Big.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7_Big.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7_Big.gltf new file mode 100644 index 0000000..f8309ea --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7_Big.gltf @@ -0,0 +1,138 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Plant_7_Big" + } + ], + "materials":[ + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Plane.079", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Leaves", + "uri":"Leaves.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":126, + "max":[ + 0.6097632646560669, + 0.3037440776824951, + 0.5116460919380188 + ], + "min":[ + -0.7010567784309387, + 0.05031152814626694, + -0.8505279421806335 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":126, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":126, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":336, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":1512, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":1512, + "byteOffset":1512, + "target":34962 + }, + { + "buffer":0, + "byteLength":1008, + "byteOffset":3024, + "target":34962 + }, + { + "buffer":0, + "byteLength":672, + "byteOffset":4032, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":4704, + "uri":"Plant_7_Big.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7_Big.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7_Big.gltf.import new file mode 100644 index 0000000..61eab6a --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7_Big.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dg03q1ovobajw" +path="res://.godot/imported/Plant_7_Big.gltf-d354a1d4b83a586038e5f94b5df0e092.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Plant_7_Big.gltf" +dest_files=["res://.godot/imported/Plant_7_Big.gltf-d354a1d4b83a586038e5f94b5df0e092.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_1.bin new file mode 100644 index 0000000..672cd2b Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_1.gltf new file mode 100644 index 0000000..b28029f --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_1.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"RockPath_Round_Small_1" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.012", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":2036, + "max":[ + 0.5184587240219116, + 0.10394920408725739, + 0.7730143070220947 + ], + "min":[ + -0.5380551815032959, + -0.008882608264684677, + -0.703344464302063 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":2036, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":2036, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":2994, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":24432, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":24432, + "byteOffset":24432, + "target":34962 + }, + { + "buffer":0, + "byteLength":16288, + "byteOffset":48864, + "target":34962 + }, + { + "buffer":0, + "byteLength":5988, + "byteOffset":65152, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":71140, + "uri":"RockPath_Round_Small_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_1.gltf.import new file mode 100644 index 0000000..67061de --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dl0vstcowusi5" +path="res://.godot/imported/RockPath_Round_Small_1.gltf-6b376bd0cb66a4e170af562f94b86f40.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_1.gltf" +dest_files=["res://.godot/imported/RockPath_Round_Small_1.gltf-6b376bd0cb66a4e170af562f94b86f40.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_2.bin new file mode 100644 index 0000000..85f0b92 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_2.gltf new file mode 100644 index 0000000..87e0bd8 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_2.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"RockPath_Round_Small_2" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.013", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":2264, + "max":[ + 0.5792431235313416, + 0.09686935693025589, + 0.5954861640930176 + ], + "min":[ + -0.5602763891220093, + -0.0077979713678359985, + -0.7587976455688477 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":2264, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":2264, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":3378, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":27168, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":27168, + "byteOffset":27168, + "target":34962 + }, + { + "buffer":0, + "byteLength":18112, + "byteOffset":54336, + "target":34962 + }, + { + "buffer":0, + "byteLength":6756, + "byteOffset":72448, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":79204, + "uri":"RockPath_Round_Small_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_2.gltf.import new file mode 100644 index 0000000..781d904 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bbyiskyh6v8hn" +path="res://.godot/imported/RockPath_Round_Small_2.gltf-fc81c913e334f79652de7cdc32491eea.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_2.gltf" +dest_files=["res://.godot/imported/RockPath_Round_Small_2.gltf-fc81c913e334f79652de7cdc32491eea.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_3.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_3.bin new file mode 100644 index 0000000..e63ed19 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_3.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_3.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_3.gltf new file mode 100644 index 0000000..4ac11cf --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_3.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"RockPath_Round_Small_3" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.014", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":2026, + "max":[ + 0.5917490720748901, + 0.10147523880004883, + 0.5997233390808105 + ], + "min":[ + -0.5872809290885925, + -0.007797975093126297, + -0.6902713775634766 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":2026, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":2026, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":3006, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":24312, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":24312, + "byteOffset":24312, + "target":34962 + }, + { + "buffer":0, + "byteLength":16208, + "byteOffset":48624, + "target":34962 + }, + { + "buffer":0, + "byteLength":6012, + "byteOffset":64832, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":70844, + "uri":"RockPath_Round_Small_3.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_3.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_3.gltf.import new file mode 100644 index 0000000..9badecb --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_3.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c0ems57d554jo" +path="res://.godot/imported/RockPath_Round_Small_3.gltf-a563bc5563247def52c61c21986d07ad.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Small_3.gltf" +dest_files=["res://.godot/imported/RockPath_Round_Small_3.gltf-a563bc5563247def52c61c21986d07ad.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Thin.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Thin.bin new file mode 100644 index 0000000..4327453 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Thin.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Thin.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Thin.gltf new file mode 100644 index 0000000..20d1013 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Thin.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"RockPath_Round_Thin" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.074", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":4556, + "max":[ + 0.7602781653404236, + 0.10147523880004883, + 1.00310480594635 + ], + "min":[ + -0.6970729231834412, + -0.008862055838108063, + -1.0861014127731323 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":4556, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":4556, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":6762, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":54672, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":54672, + "byteOffset":54672, + "target":34962 + }, + { + "buffer":0, + "byteLength":36448, + "byteOffset":109344, + "target":34962 + }, + { + "buffer":0, + "byteLength":13524, + "byteOffset":145792, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":159316, + "uri":"RockPath_Round_Thin.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Thin.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Thin.gltf.import new file mode 100644 index 0000000..9544277 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Thin.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bl8h22krdco86" +path="res://.godot/imported/RockPath_Round_Thin.gltf-d13d534e9ffe00ee60bf335a33ff726a.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Thin.gltf" +dest_files=["res://.godot/imported/RockPath_Round_Thin.gltf-d13d534e9ffe00ee60bf335a33ff726a.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Wide.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Wide.bin new file mode 100644 index 0000000..02e524e Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Wide.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Wide.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Wide.gltf new file mode 100644 index 0000000..4d6e6bd --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Wide.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"RockPath_Round_Wide" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.028", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":7084, + "max":[ + 1.0626386404037476, + 0.10394921153783798, + 1.00310480594635 + ], + "min":[ + -1.0479755401611328, + -0.008882611989974976, + -1.125931739807129 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":7084, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":7084, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":10500, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":85008, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":85008, + "byteOffset":85008, + "target":34962 + }, + { + "buffer":0, + "byteLength":56672, + "byteOffset":170016, + "target":34962 + }, + { + "buffer":0, + "byteLength":21000, + "byteOffset":226688, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":247688, + "uri":"RockPath_Round_Wide.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Wide.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Wide.gltf.import new file mode 100644 index 0000000..6ad8c7f --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Wide.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cey6kq1q5w225" +path="res://.godot/imported/RockPath_Round_Wide.gltf-b98419cb74cf375f73d2758f174a0ba3.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Round_Wide.gltf" +dest_files=["res://.godot/imported/RockPath_Round_Wide.gltf-b98419cb74cf375f73d2758f174a0ba3.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_1.bin new file mode 100644 index 0000000..e95e213 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_1.gltf new file mode 100644 index 0000000..13903b9 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_1.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"RockPath_Square_Small_1" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.016", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":1633, + "max":[ + 0.49995994567871094, + 0.14124737679958344, + 0.4995327293872833 + ], + "min":[ + -0.518924355506897, + -0.008622835390269756, + -0.4743192493915558 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":1633, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":1633, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":2349, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":19596, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":19596, + "byteOffset":19596, + "target":34962 + }, + { + "buffer":0, + "byteLength":13064, + "byteOffset":39192, + "target":34962 + }, + { + "buffer":0, + "byteLength":4698, + "byteOffset":52256, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":56956, + "uri":"RockPath_Square_Small_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_1.gltf.import new file mode 100644 index 0000000..5f4c19f --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b3y41idstc7xn" +path="res://.godot/imported/RockPath_Square_Small_1.gltf-fdf473b355cc48023635237225229cef.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_1.gltf" +dest_files=["res://.godot/imported/RockPath_Square_Small_1.gltf-fdf473b355cc48023635237225229cef.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_2.bin new file mode 100644 index 0000000..83864d1 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_2.gltf new file mode 100644 index 0000000..4bfb9f1 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_2.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"RockPath_Square_Small_2" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.011", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":1165, + "max":[ + 0.4951825737953186, + 0.13612976670265198, + 0.4721206724643707 + ], + "min":[ + -0.4975392818450928, + -0.013205458410084248, + -0.4939475357532501 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":1165, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":1165, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":1677, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":13980, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":13980, + "byteOffset":13980, + "target":34962 + }, + { + "buffer":0, + "byteLength":9320, + "byteOffset":27960, + "target":34962 + }, + { + "buffer":0, + "byteLength":3354, + "byteOffset":37280, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":40636, + "uri":"RockPath_Square_Small_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_2.gltf.import new file mode 100644 index 0000000..63dbefa --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bpitq4ka6fwqh" +path="res://.godot/imported/RockPath_Square_Small_2.gltf-270c0b1b3550cdb9555733dd1a9c0cc2.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_2.gltf" +dest_files=["res://.godot/imported/RockPath_Square_Small_2.gltf-270c0b1b3550cdb9555733dd1a9c0cc2.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_3.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_3.bin new file mode 100644 index 0000000..c511fd3 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_3.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_3.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_3.gltf new file mode 100644 index 0000000..4ca3955 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_3.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"RockPath_Square_Small_3" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.015", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":1176, + "max":[ + 0.43974483013153076, + 0.16551485657691956, + 0.5275344848632812 + ], + "min":[ + -0.3961157500743866, + -0.00811817031353712, + -0.5487543344497681 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":1176, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":1176, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":1704, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":14112, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":14112, + "byteOffset":14112, + "target":34962 + }, + { + "buffer":0, + "byteLength":9408, + "byteOffset":28224, + "target":34962 + }, + { + "buffer":0, + "byteLength":3408, + "byteOffset":37632, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":41040, + "uri":"RockPath_Square_Small_3.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_3.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_3.gltf.import new file mode 100644 index 0000000..ce69496 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_3.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bph0xt1mwjf66" +path="res://.godot/imported/RockPath_Square_Small_3.gltf-3d68aac119ee65990a74db2f4282d40b.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Small_3.gltf" +dest_files=["res://.godot/imported/RockPath_Square_Small_3.gltf-3d68aac119ee65990a74db2f4282d40b.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Thin.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Thin.bin new file mode 100644 index 0000000..972d8ed Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Thin.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Thin.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Thin.gltf new file mode 100644 index 0000000..7baf548 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Thin.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"RockPath_Square_Thin" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.073", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":3727, + "max":[ + 0.7916909456253052, + 0.16620168089866638, + 0.9846768975257874 + ], + "min":[ + -0.7681896090507507, + -0.010146241635084152, + -1.0022598505020142 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":3727, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":3727, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":5379, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":44724, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":44724, + "byteOffset":44724, + "target":34962 + }, + { + "buffer":0, + "byteLength":29816, + "byteOffset":89448, + "target":34962 + }, + { + "buffer":0, + "byteLength":10758, + "byteOffset":119264, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":130024, + "uri":"RockPath_Square_Thin.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Thin.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Thin.gltf.import new file mode 100644 index 0000000..506e0c3 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Thin.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://x7yp2e10kjxr" +path="res://.godot/imported/RockPath_Square_Thin.gltf-b0b29782162c3f3fc82a4db3ee31c575.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Thin.gltf" +dest_files=["res://.godot/imported/RockPath_Square_Thin.gltf-b0b29782162c3f3fc82a4db3ee31c575.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Wide.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Wide.bin new file mode 100644 index 0000000..5efedd5 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Wide.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Wide.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Wide.gltf new file mode 100644 index 0000000..0ec8479 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Wide.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"RockPath_Square_Wide" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"PathRocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.017_Retopology.038", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"PathRocks_Diffuse", + "uri":"PathRocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":4712, + "max":[ + 1.0278809070587158, + 0.16620168089866638, + 0.9870055913925171 + ], + "min":[ + -1.0236998796463013, + -0.010146240703761578, + -0.9999311566352844 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":4712, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":4712, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":6768, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":56544, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":56544, + "byteOffset":56544, + "target":34962 + }, + { + "buffer":0, + "byteLength":37696, + "byteOffset":113088, + "target":34962 + }, + { + "buffer":0, + "byteLength":13536, + "byteOffset":150784, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":164320, + "uri":"RockPath_Square_Wide.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Wide.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Wide.gltf.import new file mode 100644 index 0000000..38ab35d --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Wide.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bkolsuftd1x6v" +path="res://.godot/imported/RockPath_Square_Wide.gltf-6dbcef4908a741b7c77c3eb07356bd0d.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/RockPath_Square_Wide.gltf" +dest_files=["res://.godot/imported/RockPath_Square_Wide.gltf-6dbcef4908a741b7c77c3eb07356bd0d.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_1.bin new file mode 100644 index 0000000..3b8d132 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_1.gltf new file mode 100644 index 0000000..9771563 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_1.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Rock_Medium_1" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Rocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.005_Retopology.001", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Rocks_Diffuse", + "uri":"Rocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":351, + "max":[ + 1.4978611469268799, + 1.988665223121643, + 1.8392531871795654 + ], + "min":[ + -1.7272872924804688, + -0.27113133668899536, + -1.1498832702636719 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":351, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":351, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":1026, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":4212, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":4212, + "byteOffset":4212, + "target":34962 + }, + { + "buffer":0, + "byteLength":2808, + "byteOffset":8424, + "target":34962 + }, + { + "buffer":0, + "byteLength":2052, + "byteOffset":11232, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":13284, + "uri":"Rock_Medium_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_1.gltf.import new file mode 100644 index 0000000..31b3000 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cuv15vdpp026r" +path="res://.godot/imported/Rock_Medium_1.gltf-db387a770fafb5908f8d560b3e036236.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_1.gltf" +dest_files=["res://.godot/imported/Rock_Medium_1.gltf-db387a770fafb5908f8d560b3e036236.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_2.bin new file mode 100644 index 0000000..064074d Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_2.gltf new file mode 100644 index 0000000..233555e --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_2.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Rock_Medium_2" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Rocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.004_Retopology.001", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Rocks_Diffuse", + "uri":"Rocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":249, + "max":[ + 1.3351185321807861, + 1.8481333255767822, + 1.3199462890625 + ], + "min":[ + -1.713641881942749, + -0.05084158852696419, + -1.1591253280639648 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":249, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":249, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":732, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":2988, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":2988, + "byteOffset":2988, + "target":34962 + }, + { + "buffer":0, + "byteLength":1992, + "byteOffset":5976, + "target":34962 + }, + { + "buffer":0, + "byteLength":1464, + "byteOffset":7968, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":9432, + "uri":"Rock_Medium_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_2.gltf.import new file mode 100644 index 0000000..5997813 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bkm021qxw51w8" +path="res://.godot/imported/Rock_Medium_2.gltf-fb8db707ee14946dd1ce9e321d5fb69e.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_2.gltf" +dest_files=["res://.godot/imported/Rock_Medium_2.gltf-fb8db707ee14946dd1ce9e321d5fb69e.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_3.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_3.bin new file mode 100644 index 0000000..9eb3d53 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_3.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_3.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_3.gltf new file mode 100644 index 0000000..252e5cf --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_3.gltf @@ -0,0 +1,136 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"Rock_Medium_3" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Rocks", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"Cube.002_Retopology.001", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Rocks_Diffuse", + "uri":"Rocks_Diffuse.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":531, + "max":[ + 1.5958054065704346, + 2.000638246536255, + 2.5856480598449707 + ], + "min":[ + -1.8242793083190918, + -0.31564441323280334, + -0.8904620409011841 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":531, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":531, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":1566, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":6372, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":6372, + "byteOffset":6372, + "target":34962 + }, + { + "buffer":0, + "byteLength":4248, + "byteOffset":12744, + "target":34962 + }, + { + "buffer":0, + "byteLength":3132, + "byteOffset":16992, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":20124, + "uri":"Rock_Medium_3.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_3.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_3.gltf.import new file mode 100644 index 0000000..3fe2d51 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_3.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cua03lyxt3pvj" +path="res://.godot/imported/Rock_Medium_3.gltf-26d6b6b1a281bd4d62947e4b5cb7e3aa.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Rock_Medium_3.gltf" +dest_files=["res://.godot/imported/Rock_Medium_3.gltf-26d6b6b1a281bd4d62947e4b5cb7e3aa.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Desert_Diffuse.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Desert_Diffuse.png new file mode 100644 index 0000000..42f6c3b Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Desert_Diffuse.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Desert_Diffuse.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Desert_Diffuse.png.import new file mode 100644 index 0000000..02b882f --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Desert_Diffuse.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mmcsh8ex5q42" +path="res://.godot/imported/Rocks_Desert_Diffuse.png-2d328d9fcfadbefe555cc357de4d8449.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Desert_Diffuse.png" +dest_files=["res://.godot/imported/Rocks_Desert_Diffuse.png-2d328d9fcfadbefe555cc357de4d8449.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Diffuse.png b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Diffuse.png new file mode 100644 index 0000000..fff5ca5 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Diffuse.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Diffuse.png.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Diffuse.png.import new file mode 100644 index 0000000..11dcef6 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Diffuse.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8ww6sv4tkqxp" +path.s3tc="res://.godot/imported/Rocks_Diffuse.png-55b71b83462aa4648b885b38dfa3e7c9.s3tc.ctex" +path.etc2="res://.godot/imported/Rocks_Diffuse.png-55b71b83462aa4648b885b38dfa3e7c9.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/Rocks_Diffuse.png" +dest_files=["res://.godot/imported/Rocks_Diffuse.png-55b71b83462aa4648b885b38dfa3e7c9.s3tc.ctex", "res://.godot/imported/Rocks_Diffuse.png-55b71b83462aa4648b885b38dfa3e7c9.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_1.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_1.bin new file mode 100644 index 0000000..4362f44 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_1.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_1.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_1.gltf new file mode 100644 index 0000000..77ee3ea --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_1.gltf @@ -0,0 +1,262 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"TwistedTree_1" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Bark_TwistedTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_TwistedTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.038", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_TwistedTree_Normal", + "uri":"Bark_TwistedTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_TwistedTree", + "uri":"Bark_TwistedTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaves_TwistedTree_C", + "uri":"Leaves_TwistedTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":9360, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":9360, + "max":[ + 9.911966323852539, + 15.281858444213867, + 3.4427638053894043 + ], + "min":[ + -1.498000979423523, + -0.20147469639778137, + -5.117466926574707 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":9360, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":9360, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":21636, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":4704, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":4704, + "max":[ + 11.341513633728027, + 16.52402114868164, + 4.822585105895996 + ], + "min":[ + -2.174241065979004, + 2.4449024200439453, + -6.726779460906982 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":4704, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":4704, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":7056, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":149760, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":112320, + "byteOffset":149760, + "target":34962 + }, + { + "buffer":0, + "byteLength":112320, + "byteOffset":262080, + "target":34962 + }, + { + "buffer":0, + "byteLength":74880, + "byteOffset":374400, + "target":34962 + }, + { + "buffer":0, + "byteLength":43272, + "byteOffset":449280, + "target":34963 + }, + { + "buffer":0, + "byteLength":75264, + "byteOffset":492552, + "target":34962 + }, + { + "buffer":0, + "byteLength":56448, + "byteOffset":567816, + "target":34962 + }, + { + "buffer":0, + "byteLength":56448, + "byteOffset":624264, + "target":34962 + }, + { + "buffer":0, + "byteLength":37632, + "byteOffset":680712, + "target":34962 + }, + { + "buffer":0, + "byteLength":14112, + "byteOffset":718344, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":732456, + "uri":"TwistedTree_1.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_1.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_1.gltf.import new file mode 100644 index 0000000..cccb809 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_1.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dunwgbf2ggnv2" +path="res://.godot/imported/TwistedTree_1.gltf-417473bc1664be897cf7eba658f822f7.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_1.gltf" +dest_files=["res://.godot/imported/TwistedTree_1.gltf-417473bc1664be897cf7eba658f822f7.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_2.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_2.bin new file mode 100644 index 0000000..520f5ad Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_2.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_2.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_2.gltf new file mode 100644 index 0000000..97db482 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_2.gltf @@ -0,0 +1,262 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"TwistedTree_2" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Bark_TwistedTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_TwistedTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.039", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_TwistedTree_Normal", + "uri":"Bark_TwistedTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_TwistedTree", + "uri":"Bark_TwistedTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaves_TwistedTree_C", + "uri":"Leaves_TwistedTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":8719, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":8719, + "max":[ + 3.0595297813415527, + 17.562589645385742, + 2.152212142944336 + ], + "min":[ + -5.446475505828857, + -0.20147468149662018, + -4.334892272949219 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":8719, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":8719, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":20370, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":4688, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":4688, + "max":[ + 3.942902088165283, + 18.74772834777832, + 3.661869764328003 + ], + "min":[ + -6.619970321655273, + 4.4927978515625, + -5.540718078613281 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":4688, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":4688, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":7032, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":139504, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":104628, + "byteOffset":139504, + "target":34962 + }, + { + "buffer":0, + "byteLength":104628, + "byteOffset":244132, + "target":34962 + }, + { + "buffer":0, + "byteLength":69752, + "byteOffset":348760, + "target":34962 + }, + { + "buffer":0, + "byteLength":40740, + "byteOffset":418512, + "target":34963 + }, + { + "buffer":0, + "byteLength":75008, + "byteOffset":459252, + "target":34962 + }, + { + "buffer":0, + "byteLength":56256, + "byteOffset":534260, + "target":34962 + }, + { + "buffer":0, + "byteLength":56256, + "byteOffset":590516, + "target":34962 + }, + { + "buffer":0, + "byteLength":37504, + "byteOffset":646772, + "target":34962 + }, + { + "buffer":0, + "byteLength":14064, + "byteOffset":684276, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":698340, + "uri":"TwistedTree_2.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_2.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_2.gltf.import new file mode 100644 index 0000000..552e2f6 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_2.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bn7u20xn16nef" +path="res://.godot/imported/TwistedTree_2.gltf-371f66c884f2375c9ad65ba7d3292d98.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_2.gltf" +dest_files=["res://.godot/imported/TwistedTree_2.gltf-371f66c884f2375c9ad65ba7d3292d98.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_3.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_3.bin new file mode 100644 index 0000000..0e57535 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_3.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_3.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_3.gltf new file mode 100644 index 0000000..d7c5cf1 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_3.gltf @@ -0,0 +1,262 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"TwistedTree_3" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Bark_TwistedTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_TwistedTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.040", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_TwistedTree_Normal", + "uri":"Bark_TwistedTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_TwistedTree", + "uri":"Bark_TwistedTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaves_TwistedTree_C", + "uri":"Leaves_TwistedTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":9405, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":9405, + "max":[ + 5.440822124481201, + 14.757431983947754, + 3.588460922241211 + ], + "min":[ + -3.039580821990967, + -0.20147468149662018, + -5.2718305587768555 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":9405, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":9405, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":22167, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":5400, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":5400, + "max":[ + 6.867476463317871, + 15.871066093444824, + 4.985528945922852 + ], + "min":[ + -4.49001932144165, + 1.901405930519104, + -6.520090103149414 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":5400, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":5400, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":8100, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":150480, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":112860, + "byteOffset":150480, + "target":34962 + }, + { + "buffer":0, + "byteLength":112860, + "byteOffset":263340, + "target":34962 + }, + { + "buffer":0, + "byteLength":75240, + "byteOffset":376200, + "target":34962 + }, + { + "buffer":0, + "byteLength":44334, + "byteOffset":451440, + "target":34963 + }, + { + "buffer":0, + "byteLength":86400, + "byteOffset":495776, + "target":34962 + }, + { + "buffer":0, + "byteLength":64800, + "byteOffset":582176, + "target":34962 + }, + { + "buffer":0, + "byteLength":64800, + "byteOffset":646976, + "target":34962 + }, + { + "buffer":0, + "byteLength":43200, + "byteOffset":711776, + "target":34962 + }, + { + "buffer":0, + "byteLength":16200, + "byteOffset":754976, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":771176, + "uri":"TwistedTree_3.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_3.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_3.gltf.import new file mode 100644 index 0000000..42aecbe --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_3.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://db3nscmckshfu" +path="res://.godot/imported/TwistedTree_3.gltf-8552d0060173886622daf45a1f1f2819.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_3.gltf" +dest_files=["res://.godot/imported/TwistedTree_3.gltf-8552d0060173886622daf45a1f1f2819.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_4.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_4.bin new file mode 100644 index 0000000..19aad18 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_4.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_4.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_4.gltf new file mode 100644 index 0000000..e172aa4 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_4.gltf @@ -0,0 +1,262 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"TwistedTree_4" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Bark_TwistedTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_TwistedTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.041", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_TwistedTree_Normal", + "uri":"Bark_TwistedTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_TwistedTree", + "uri":"Bark_TwistedTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaves_TwistedTree_C", + "uri":"Leaves_TwistedTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":9176, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":9176, + "max":[ + 4.80446195602417, + 17.352516174316406, + 2.777181386947632 + ], + "min":[ + -2.732177972793579, + -0.20147468149662018, + -6.009294033050537 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":9176, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":9176, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":20700, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":5400, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":5400, + "max":[ + 6.053491592407227, + 18.536760330200195, + 4.150291442871094 + ], + "min":[ + -4.327320098876953, + 2.1321682929992676, + -7.142794609069824 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":5400, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":5400, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":8100, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":146816, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":110112, + "byteOffset":146816, + "target":34962 + }, + { + "buffer":0, + "byteLength":110112, + "byteOffset":256928, + "target":34962 + }, + { + "buffer":0, + "byteLength":73408, + "byteOffset":367040, + "target":34962 + }, + { + "buffer":0, + "byteLength":41400, + "byteOffset":440448, + "target":34963 + }, + { + "buffer":0, + "byteLength":86400, + "byteOffset":481848, + "target":34962 + }, + { + "buffer":0, + "byteLength":64800, + "byteOffset":568248, + "target":34962 + }, + { + "buffer":0, + "byteLength":64800, + "byteOffset":633048, + "target":34962 + }, + { + "buffer":0, + "byteLength":43200, + "byteOffset":697848, + "target":34962 + }, + { + "buffer":0, + "byteLength":16200, + "byteOffset":741048, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":757248, + "uri":"TwistedTree_4.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_4.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_4.gltf.import new file mode 100644 index 0000000..9e2a1b0 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_4.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c1comp68ne14r" +path="res://.godot/imported/TwistedTree_4.gltf-291a4b606aa4295378f9d5c248ead142.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_4.gltf" +dest_files=["res://.godot/imported/TwistedTree_4.gltf-291a4b606aa4295378f9d5c248ead142.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_5.bin b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_5.bin new file mode 100644 index 0000000..572eb27 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_5.bin differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_5.gltf b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_5.gltf new file mode 100644 index 0000000..312d3c1 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_5.gltf @@ -0,0 +1,262 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.0.44", + "version":"2.0" + }, + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"TwistedTree_5" + } + ], + "materials":[ + { + "doubleSided":true, + "name":"Bark_TwistedTree", + "normalTexture":{ + "index":0 + }, + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":1 + }, + "metallicFactor":0 + } + }, + { + "alphaCutoff":0.20000000298023224, + "alphaMode":"MASK", + "doubleSided":true, + "name":"Leaves_TwistedTree", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":2 + }, + "metallicFactor":0 + } + } + ], + "meshes":[ + { + "name":"tree.042", + "primitives":[ + { + "attributes":{ + "COLOR_0":0, + "POSITION":1, + "NORMAL":2, + "TEXCOORD_0":3 + }, + "indices":4, + "material":0 + }, + { + "attributes":{ + "COLOR_0":5, + "POSITION":6, + "NORMAL":7, + "TEXCOORD_0":8 + }, + "indices":9, + "material":1 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + }, + { + "sampler":0, + "source":1 + }, + { + "sampler":0, + "source":2 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"Bark_TwistedTree_Normal", + "uri":"Bark_TwistedTree_Normal.png" + }, + { + "mimeType":"image/png", + "name":"Bark_TwistedTree", + "uri":"Bark_TwistedTree.png" + }, + { + "mimeType":"image/png", + "name":"Leaves_TwistedTree_C", + "uri":"Leaves_TwistedTree_C.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":9603, + "type":"VEC4" + }, + { + "bufferView":1, + "componentType":5126, + "count":9603, + "max":[ + 4.437458515167236, + 14.353582382202148, + 1.6412839889526367 + ], + "min":[ + -2.2728946208953857, + -0.20147468149662018, + -5.161355018615723 + ], + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":9603, + "type":"VEC3" + }, + { + "bufferView":3, + "componentType":5126, + "count":9603, + "type":"VEC2" + }, + { + "bufferView":4, + "componentType":5123, + "count":21246, + "type":"SCALAR" + }, + { + "bufferView":5, + "componentType":5126, + "count":6044, + "type":"VEC4" + }, + { + "bufferView":6, + "componentType":5126, + "count":6044, + "max":[ + 5.748274803161621, + 15.460700988769531, + 3.0480315685272217 + ], + "min":[ + -3.7464373111724854, + 5.0873823165893555, + -6.338996887207031 + ], + "type":"VEC3" + }, + { + "bufferView":7, + "componentType":5126, + "count":6044, + "type":"VEC3" + }, + { + "bufferView":8, + "componentType":5126, + "count":6044, + "type":"VEC2" + }, + { + "bufferView":9, + "componentType":5123, + "count":9066, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":153648, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":115236, + "byteOffset":153648, + "target":34962 + }, + { + "buffer":0, + "byteLength":115236, + "byteOffset":268884, + "target":34962 + }, + { + "buffer":0, + "byteLength":76824, + "byteOffset":384120, + "target":34962 + }, + { + "buffer":0, + "byteLength":42492, + "byteOffset":460944, + "target":34963 + }, + { + "buffer":0, + "byteLength":96704, + "byteOffset":503436, + "target":34962 + }, + { + "buffer":0, + "byteLength":72528, + "byteOffset":600140, + "target":34962 + }, + { + "buffer":0, + "byteLength":72528, + "byteOffset":672668, + "target":34962 + }, + { + "buffer":0, + "byteLength":48352, + "byteOffset":745196, + "target":34962 + }, + { + "buffer":0, + "byteLength":18132, + "byteOffset":793548, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":811680, + "uri":"TwistedTree_5.bin" + } + ] +} diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_5.gltf.import b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_5.gltf.import new file mode 100644 index 0000000..dfb521f --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_5.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://drb6kc4lqiopt" +path="res://.godot/imported/TwistedTree_5.gltf-d6d161f545eca96ec7b6d8fb20c041b0.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/glTF/TwistedTree_5.gltf" +dest_files=["res://.godot/imported/TwistedTree_5.gltf-d6d161f545eca96ec7b6d8fb20c041b0.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/glTF/desktop.ini b/assets/models/environment/stylized_nature_kit_quaternius/glTF/desktop.ini new file mode 100644 index 0000000..b9e2e68 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/glTF/desktop.ini @@ -0,0 +1,116 @@ +[LocalizedFileNames] +Plant_2_Big.gltf=@Plant_2_Big,0 +Plant_1_Big.gltf=@Plant_1_Big,0 +Plant_2.gltf=@Plant_2,0 +Plant_1.gltf=@Plant_1,0 +Clover_1.gltf=@Clover_1,0 +Clover_2.gltf=@Clover_2,0 +Plant_7_Big.gltf=@Plant_7_Big,0 +Plant_7.gltf=@Plant_7,0 +Plant_6.gltf=@Plant_6,0 +Plant_4.gltf=@Plant_4,0 +Plant_3.gltf=@Plant_3,0 +Fern_1.gltf=@Fern_1,0 +Fern_2.gltf=@Fern_2,0 +Plant_5.gltf=@Plant_5,0 +Flower_7_Group.gltf=@Flower_7_Group,0 +Flower_7_Single.gltf=@Flower_7_Single,0 +Flower_3_Group.gltf=@Flower_3_Group,0 +Flower_6_2.gltf=@Flower_6_2,0 +Flower_6.gltf=@Flower_6,0 +Flower_2_Group.gltf=@Flower_2_Group,0 +Flower_2_Single.gltf=@Flower_2_Single,0 +Flower_3_Single.gltf=@Flower_3_Single,0 +Flower_4_Group.gltf=@Flower_4_Group,0 +Flower_4_Single.gltf=@Flower_4_Single,0 +Flower_1_Group.gltf=@Flower_1_Group,0 +Flower_1_Single.gltf=@Flower_1_Single,0 +Petal_6.gltf=@Petal_6,0 +Petal_5.gltf=@Petal_5,0 +Petal_4.gltf=@Petal_4,0 +Petal_3.gltf=@Petal_3,0 +Petal_2.gltf=@Petal_2,0 +Petal_1.gltf=@Petal_1,0 +Mushroom_RedCap.gltf=@Mushroom_RedCap,0 +Mushroom_Common.gltf=@Mushroom_Common,0 +Mushroom_Oyster.gltf=@Mushroom_Oyster,0 +Mushroom_Laetiporus.gltf=@Mushroom_Laetiporus,0 +Grass_Wispy_Tall.gltf=@Grass_Wispy_Tall,0 +Grass_Wide_Tall.gltf=@Grass_Wide_Tall,0 +Grass_Common_Tall.gltf=@Grass_Common_Tall,0 +Grass_Common_Short.gltf=@Grass_Common_Short,0 +Grass_Wide_Short.gltf=@Grass_Wide_Short,0 +Grass_Wheat.gltf=@Grass_Wheat,0 +Grass_Wispy_Short.gltf=@Grass_Wispy_Short,0 +Bush_Large_Flowers.gltf=@Bush_Large_Flowers,0 +Bush_Common_Flowers.gltf=@Bush_Common_Flowers,0 +Bush_Common.gltf=@Bush_Common,0 +Bush_Long_1.gltf=@Bush_Long_1,0 +Bush_Long_2.gltf=@Bush_Long_2,0 +RockPath_Round_Small_3.gltf=@RockPath_Round_Small_3,0 +RockPath_Round_Small_2.gltf=@RockPath_Round_Small_2,0 +RockPath_Round_Small_1.gltf=@RockPath_Round_Small_1,0 +RockPath_Square_Small_3.gltf=@RockPath_Square_Small_3,0 +RockPath_Square_Small_2.gltf=@RockPath_Square_Small_2,0 +RockPath_Square_Small_1.gltf=@RockPath_Square_Small_1,0 +RockPath_Round_Wide.gltf=@RockPath_Round_Wide,0 +RockPath_Round_Thin.gltf=@RockPath_Round_Thin,0 +RockPath_Square_Wide.gltf=@RockPath_Square_Wide,0 +RockPath_Square_Thin.gltf=@RockPath_Square_Thin,0 +Pebble_Square_6.gltf=@Pebble_Square_6,0 +Pebble_Square_5.gltf=@Pebble_Square_5,0 +Pebble_Square_4.gltf=@Pebble_Square_4,0 +Pebble_Square_3.gltf=@Pebble_Square_3,0 +Pebble_Square_2.gltf=@Pebble_Square_2,0 +Pebble_Square_1.gltf=@Pebble_Square_1,0 +Pebble_Round_5.gltf=@Pebble_Round_5,0 +Pebble_Round_4.gltf=@Pebble_Round_4,0 +Pebble_Round_3.gltf=@Pebble_Round_3,0 +Pebble_Round_2.gltf=@Pebble_Round_2,0 +Pebble_Round_1.gltf=@Pebble_Round_1,0 +Rock_Medium_1.gltf=@Rock_Medium_1,0 +Rock_Medium_2.gltf=@Rock_Medium_2,0 +Rock_Medium_3.gltf=@Rock_Medium_3,0 +Rock_Medium_4.gltf=@Rock_Medium_4,0 +Rock_Big_1.gltf=@Rock_Big_1,0 +Rock_Big_2.gltf=@Rock_Big_2,0 +DeadTree_2.gltf=@DeadTree_2,0 +DeadTree_3.gltf=@DeadTree_3,0 +DeadTree_4.gltf=@DeadTree_4,0 +DeadTree_5.gltf=@DeadTree_5,0 +DeadTree_1.gltf=@DeadTree_1,0 +CommonTree_1.gltf=@CommonTree_1,0 +CommonTree_2.gltf=@CommonTree_2,0 +CommonTree_3.gltf=@CommonTree_3,0 +CommonTree_4.gltf=@CommonTree_4,0 +CommonTree_5.gltf=@CommonTree_5,0 +GiantPine_3.gltf=@GiantPine_3,0 +GiantPine_4.gltf=@GiantPine_4,0 +GiantPine_1.gltf=@GiantPine_1,0 +GiantPine_2.gltf=@GiantPine_2,0 +GiantPine_5.gltf=@GiantPine_5,0 +TallThick_2.gltf=@TallThick_2,0 +TallThick_4.gltf=@TallThick_4,0 +TallThick_3.gltf=@TallThick_3,0 +TallThick_5.gltf=@TallThick_5,0 +TallThick_1.gltf=@TallThick_1,0 +Birch_5.gltf=@Birch_5,0 +Birch_3.gltf=@Birch_3,0 +Birch_2.gltf=@Birch_2,0 +Birch_1.gltf=@Birch_1,0 +Birch_4.gltf=@Birch_4,0 +TwistedTree_1.gltf=@TwistedTree_1,0 +TwistedTree_3.gltf=@TwistedTree_3,0 +TwistedTree_2.gltf=@TwistedTree_2,0 +TwistedTree_4.gltf=@TwistedTree_4,0 +TwistedTree_5.gltf=@TwistedTree_5,0 +Pine_1.gltf=@Pine_1,0 +Pine_2.gltf=@Pine_2,0 +Pine_4.gltf=@Pine_4,0 +Pine_5.gltf=@Pine_5,0 +Pine_3.gltf=@Pine_3,0 +CherryBlossom_2.gltf=@CherryBlossom_2,0 +CherryBlossom_1.gltf=@CherryBlossom_1,0 +CherryBlossom_5.gltf=@CherryBlossom_5,0 +CherryBlossom_3.gltf=@CherryBlossom_3,0 +CherryBlossom_4.gltf=@CherryBlossom_4,0 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh.glb b/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh.glb new file mode 100644 index 0000000..3929425 Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh.glb differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh.glb.import b/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh.glb.import new file mode 100644 index 0000000..7e0d955 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh.glb.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bi7vo3i6wsl2y" +path="res://.godot/imported/plant7diedummekuh.glb-a51b74f7f415252a3386acbe91eb9883.scn" + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh.glb" +dest_files=["res://.godot/imported/plant7diedummekuh.glb-a51b74f7f415252a3386acbe91eb9883.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh_Leaves.png b/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh_Leaves.png new file mode 100644 index 0000000..e2bd85a Binary files /dev/null and b/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh_Leaves.png differ diff --git a/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh_Leaves.png.import b/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh_Leaves.png.import new file mode 100644 index 0000000..fc9eb88 --- /dev/null +++ b/assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh_Leaves.png.import @@ -0,0 +1,39 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://vcxc6y1g5opj" +path.s3tc="res://.godot/imported/plant7diedummekuh_Leaves.png-ceec7bde397c1222849591068408ddfc.s3tc.ctex" +path.etc2="res://.godot/imported/plant7diedummekuh_Leaves.png-ceec7bde397c1222849591068408ddfc.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "3e67813a2e50d3252828ea3f11bcbb1e" +} + +[deps] + +source_file="res://assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh_Leaves.png" +dest_files=["res://.godot/imported/plant7diedummekuh_Leaves.png-ceec7bde397c1222849591068408ddfc.s3tc.ctex", "res://.godot/imported/plant7diedummekuh_Leaves.png-ceec7bde397c1222849591068408ddfc.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/game.tscn b/game.tscn index 034df1e..039f4be 100644 --- a/game.tscn +++ b/game.tscn @@ -1,13 +1,13 @@ [gd_scene load_steps=4 format=3 uid="uid://cswuap81n7t3f"] [ext_resource type="Script" path="res://game.gd" id="1_mfbtr"] -[ext_resource type="PackedScene" uid="uid://bhhqaysqjw2d" path="res://worlds/world1/world1.tscn" id="2_knpqt"] +[ext_resource type="PackedScene" uid="uid://cavbs8gurvpfh" path="res://worlds/terrain1/terrain1.tscn" id="2_luexm"] [ext_resource type="Script" path="res://globals/colors.gd" id="3_0x6i2"] [node name="Game" type="Node3D"] script = ExtResource("1_mfbtr") skip_menu = false -starting_world = ExtResource("2_knpqt") +starting_world = ExtResource("2_luexm") [node name="CurrentScene" type="Node3D" parent="."] diff --git a/project.godot b/project.godot index d746693..d874c74 100644 --- a/project.godot +++ b/project.godot @@ -38,6 +38,10 @@ window/stretch/mode="canvas_items" window/stretch/aspect="expand" window/handheld/orientation=1 +[editor_plugins] + +enabled=PackedStringArray("res://addons/terrain_3d/plugin.cfg") + [file_customization] folder_colors={ diff --git a/resources/asset_info/DaysOne.tres b/resources/asset_info/days_one.tres similarity index 100% rename from resources/asset_info/DaysOne.tres rename to resources/asset_info/days_one.tres diff --git a/ui/main_menu/main_menu.gd b/ui/main_menu/main_menu.gd index c916683..5251757 100644 --- a/ui/main_menu/main_menu.gd +++ b/ui/main_menu/main_menu.gd @@ -52,9 +52,15 @@ func list_licenses() -> void: add_license(file) func add_license(license_path: String) -> void: - var asset_info: AssetInfo = load(LICENSE_FOLDER + license_path) + + if license_path.ends_with(".remap"): + license_path = license_path.replace(".remap", "") + + print(LICENSE_FOLDER + license_path) + var asset_info: AssetInfo = ResourceLoader.load(LICENSE_FOLDER + license_path) var new_license_entry: Node = license_entry.instantiate() license_container.add_child(new_license_entry) + print(asset_info) new_license_entry.populate(asset_info) diff --git a/ui/main_menu/main_menu.tscn b/ui/main_menu/main_menu.tscn index 3b89384..c86dcad 100644 --- a/ui/main_menu/main_menu.tscn +++ b/ui/main_menu/main_menu.tscn @@ -107,6 +107,7 @@ text = "Exit" [node name="LicensesScreen" type="PanelContainer" parent="."] unique_name_in_owner = true +visible = false layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 diff --git a/worlds/terrain1/terrain1.tscn b/worlds/terrain1/terrain1.tscn new file mode 100644 index 0000000..63b0d3f --- /dev/null +++ b/worlds/terrain1/terrain1.tscn @@ -0,0 +1,63 @@ +[gd_scene load_steps=12 format=3 uid="uid://cavbs8gurvpfh"] + +[ext_resource type="Terrain3DStorage" uid="uid://c4h6ufb0esmas" path="res://worlds/terrain1/terrain1_storage.res" id="1_k1mvv"] +[ext_resource type="Terrain3DMaterial" uid="uid://c6ppgrnektc8g" path="res://worlds/terrain1/terrain1_material.tres" id="2_2cdhe"] +[ext_resource type="Terrain3DAssets" uid="uid://bh60t03kfpvux" path="res://worlds/terrain1/terrain1_assets.tres" id="3_5hdjg"] +[ext_resource type="PackedScene" uid="uid://dawpmu4vvv3rs" path="res://entities/monster_spawnpoint/monster_spawnpoint.tscn" id="4_l81pf"] +[ext_resource type="Script" path="res://entities/monster_spawnpoint/monster_spawnpoint_probability.gd" id="5_6bskj"] +[ext_resource type="Resource" uid="uid://0xqaef8uftnv" path="res://resources/monsters/debuggy.tres" id="6_of6wf"] +[ext_resource type="PackedScene" uid="uid://bi7vo3i6wsl2y" path="res://assets/models/environment/stylized_nature_kit_quaternius/plant7diedummekuh.glb" id="7_a22cv"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_4a17c"] +sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) +ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) + +[sub_resource type="Sky" id="Sky_mvddp"] +sky_material = SubResource("ProceduralSkyMaterial_4a17c") + +[sub_resource type="Environment" id="Environment_tunrb"] +background_mode = 2 +sky = SubResource("Sky_mvddp") +tonemap_mode = 2 +glow_enabled = true + +[sub_resource type="Resource" id="Resource_rgf8x"] +script = ExtResource("5_6bskj") +monster_data = ExtResource("6_of6wf") +chance = 100.0 + +[node name="Terrain1" type="Node3D"] + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0) +shadow_enabled = true + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_tunrb") + +[node name="Terrain3D" type="Terrain3D" parent="."] +storage = ExtResource("1_k1mvv") +material = ExtResource("2_2cdhe") +assets = ExtResource("3_5hdjg") +render_cast_shadows = 0 +collision_layer = 2 +collision_mask = 9 + +[node name="MonsterSpawnpoint" parent="." instance=ExtResource("4_l81pf")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.3621, 0, -15.1762) +spawnable_monsters = Array[ExtResource("5_6bskj")]([SubResource("Resource_rgf8x")]) + +[node name="MonsterSpawnpoint2" parent="." instance=ExtResource("4_l81pf")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.129, 0, -9.60006) +spawnable_monsters = Array[ExtResource("5_6bskj")]([SubResource("Resource_rgf8x")]) + +[node name="MonsterSpawnpoint3" parent="." instance=ExtResource("4_l81pf")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 37.0513, 4.65929, 13.587) +spawnable_monsters = Array[ExtResource("5_6bskj")]([SubResource("Resource_rgf8x")]) + +[node name="MonsterSpawnpoint4" parent="." instance=ExtResource("4_l81pf")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.8614, 1.04235, 27.0149) +spawnable_monsters = Array[ExtResource("5_6bskj")]([SubResource("Resource_rgf8x")]) + +[node name="plant7diedummekuh" parent="." instance=ExtResource("7_a22cv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.02146, 0, 1.29385) diff --git a/worlds/terrain1/terrain1_assets.tres b/worlds/terrain1/terrain1_assets.tres new file mode 100644 index 0000000..2cd9d75 --- /dev/null +++ b/worlds/terrain1/terrain1_assets.tres @@ -0,0 +1,33 @@ +[gd_resource type="Terrain3DAssets" load_steps=9 format=3 uid="uid://bh60t03kfpvux"] + +[ext_resource type="Texture2D" uid="uid://sofgexkx8m2k" path="res://worlds/terrain1/textures/rock_030/rock030_packed_albedo_height.png" id="1_i4gqd"] +[ext_resource type="Texture2D" uid="uid://ckr6jrefpdhmb" path="res://worlds/terrain1/textures/rock_030/rock30_packed_normal_roughness.png" id="2_et80k"] +[ext_resource type="Texture2D" uid="uid://wsd38lb6nwke" path="res://worlds/terrain1/textures/grass_001/grass_001_packed_albedo_height.png" id="3_s3c4a"] +[ext_resource type="Texture2D" uid="uid://dwwq48fl57us3" path="res://worlds/terrain1/textures/grass_001/grass_001_packed_normal_roughness.png" id="4_itqpy"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k58i2"] +cull_mode = 2 +vertex_color_use_as_albedo = true +backlight_enabled = true +backlight = Color(0.5, 0.5, 0.5, 1) + +[sub_resource type="Terrain3DMeshAsset" id="Terrain3DMeshAsset_jsol1"] +height_offset = 0.5 +density = 10.0 +material_override = SubResource("StandardMaterial3D_k58i2") +generated_type = 1 + +[sub_resource type="Terrain3DTextureAsset" id="Terrain3DTextureAsset_xsor5"] +name = "grass_001_packed_albedo_height" +albedo_texture = ExtResource("3_s3c4a") +normal_texture = ExtResource("4_itqpy") + +[sub_resource type="Terrain3DTextureAsset" id="Terrain3DTextureAsset_blj65"] +name = "rock030_packed_albedo_height" +id = 1 +albedo_texture = ExtResource("1_i4gqd") +normal_texture = ExtResource("2_et80k") + +[resource] +mesh_list = Array[Terrain3DMeshAsset]([SubResource("Terrain3DMeshAsset_jsol1")]) +texture_list = Array[Terrain3DTextureAsset]([SubResource("Terrain3DTextureAsset_xsor5"), SubResource("Terrain3DTextureAsset_blj65")]) diff --git a/worlds/terrain1/terrain1_material.tres b/worlds/terrain1/terrain1_material.tres new file mode 100644 index 0000000..a0c685a --- /dev/null +++ b/worlds/terrain1/terrain1_material.tres @@ -0,0 +1,38 @@ +[gd_resource type="Terrain3DMaterial" load_steps=4 format=3 uid="uid://c6ppgrnektc8g"] + +[sub_resource type="Gradient" id="Gradient_73pyr"] +offsets = PackedFloat32Array(0.2, 1) +colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1) + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_7a7wb"] +noise_type = 2 +frequency = 0.03 +cellular_jitter = 3.0 +cellular_return_type = 0 +domain_warp_enabled = true +domain_warp_type = 1 +domain_warp_amplitude = 50.0 +domain_warp_fractal_type = 2 +domain_warp_fractal_lacunarity = 1.5 +domain_warp_fractal_gain = 1.0 + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_i4bum"] +seamless = true +color_ramp = SubResource("Gradient_73pyr") +noise = SubResource("FastNoiseLite_7a7wb") + +[resource] +_shader_parameters = { +"blend_sharpness": 0.87, +"height_blending": true, +"macro_variation1": Color(1, 1, 1, 1), +"macro_variation2": Color(1, 1, 1, 1), +"noise1_angle": 0.0, +"noise1_offset": Vector2(0.5, 0.5), +"noise1_scale": 0.04, +"noise2_scale": 0.076, +"noise3_scale": 0.225, +"noise_texture": SubResource("NoiseTexture2D_i4bum"), +"vertex_normals_distance": 128.0 +} +world_background = 0 diff --git a/worlds/terrain1/terrain1_storage.res b/worlds/terrain1/terrain1_storage.res new file mode 100644 index 0000000..bddc3ce Binary files /dev/null and b/worlds/terrain1/terrain1_storage.res differ diff --git a/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Color.png b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Color.png new file mode 100644 index 0000000..fa0c3e5 Binary files /dev/null and b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Color.png differ diff --git a/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Color.png.import b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Color.png.import new file mode 100644 index 0000000..4bbf69e --- /dev/null +++ b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Color.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c2wjfbl54qy7h" +path="res://.godot/imported/Grass001_1K-PNG_Color.png-ca0a445c095de6febf0b868c703a4793.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Color.png" +dest_files=["res://.godot/imported/Grass001_1K-PNG_Color.png-ca0a445c095de6febf0b868c703a4793.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Displacement.png b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Displacement.png new file mode 100644 index 0000000..98cbdb9 Binary files /dev/null and b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Displacement.png differ diff --git a/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Displacement.png.import b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Displacement.png.import new file mode 100644 index 0000000..bac3931 --- /dev/null +++ b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Displacement.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://by4p3rt2vpphc" +path="res://.godot/imported/Grass001_1K-PNG_Displacement.png-a8af31a9251708ac194fadcd8b7b9de2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Displacement.png" +dest_files=["res://.godot/imported/Grass001_1K-PNG_Displacement.png-a8af31a9251708ac194fadcd8b7b9de2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_NormalGL.png b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_NormalGL.png new file mode 100644 index 0000000..c652f51 Binary files /dev/null and b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_NormalGL.png differ diff --git a/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_NormalGL.png.import b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_NormalGL.png.import new file mode 100644 index 0000000..3726f27 --- /dev/null +++ b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_NormalGL.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d28w3g8iexdl7" +path="res://.godot/imported/Grass001_1K-PNG_NormalGL.png-284e79525319cf8b9f1a23fd8e29a5f7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://worlds/terrain1/textures/grass_001/Grass001_1K-PNG_NormalGL.png" +dest_files=["res://.godot/imported/Grass001_1K-PNG_NormalGL.png-284e79525319cf8b9f1a23fd8e29a5f7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Roughness.png b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Roughness.png new file mode 100644 index 0000000..36f5597 Binary files /dev/null and b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Roughness.png differ diff --git a/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Roughness.png.import b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Roughness.png.import new file mode 100644 index 0000000..c7df9db --- /dev/null +++ b/worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Roughness.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://y2xk5h7oyogt" +path="res://.godot/imported/Grass001_1K-PNG_Roughness.png-85c6c5d4c4956f613d0910a635d5a792.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://worlds/terrain1/textures/grass_001/Grass001_1K-PNG_Roughness.png" +dest_files=["res://.godot/imported/Grass001_1K-PNG_Roughness.png-85c6c5d4c4956f613d0910a635d5a792.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/grass_001/grass_001_packed_albedo_height.png b/worlds/terrain1/textures/grass_001/grass_001_packed_albedo_height.png new file mode 100644 index 0000000..6d5c93f Binary files /dev/null and b/worlds/terrain1/textures/grass_001/grass_001_packed_albedo_height.png differ diff --git a/worlds/terrain1/textures/grass_001/grass_001_packed_albedo_height.png.import b/worlds/terrain1/textures/grass_001/grass_001_packed_albedo_height.png.import new file mode 100644 index 0000000..7009bce --- /dev/null +++ b/worlds/terrain1/textures/grass_001/grass_001_packed_albedo_height.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://wsd38lb6nwke" +path.s3tc="res://.godot/imported/grass_001_packed_albedo_height.png-c7db96c429baa5ae06a183fc4c52cb17.s3tc.ctex" +path.etc2="res://.godot/imported/grass_001_packed_albedo_height.png-c7db96c429baa5ae06a183fc4c52cb17.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://worlds/terrain1/textures/grass_001/grass_001_packed_albedo_height.png" +dest_files=["res://.godot/imported/grass_001_packed_albedo_height.png-c7db96c429baa5ae06a183fc4c52cb17.s3tc.ctex", "res://.godot/imported/grass_001_packed_albedo_height.png-c7db96c429baa5ae06a183fc4c52cb17.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=2 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/grass_001/grass_001_packed_normal_roughness.png b/worlds/terrain1/textures/grass_001/grass_001_packed_normal_roughness.png new file mode 100644 index 0000000..36b3060 Binary files /dev/null and b/worlds/terrain1/textures/grass_001/grass_001_packed_normal_roughness.png differ diff --git a/worlds/terrain1/textures/grass_001/grass_001_packed_normal_roughness.png.import b/worlds/terrain1/textures/grass_001/grass_001_packed_normal_roughness.png.import new file mode 100644 index 0000000..3090569 --- /dev/null +++ b/worlds/terrain1/textures/grass_001/grass_001_packed_normal_roughness.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dwwq48fl57us3" +path.s3tc="res://.godot/imported/grass_001_packed_normal_roughness.png-6a0368d7f5ad5c8592aae981ff9760f4.s3tc.ctex" +path.etc2="res://.godot/imported/grass_001_packed_normal_roughness.png-6a0368d7f5ad5c8592aae981ff9760f4.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://worlds/terrain1/textures/grass_001/grass_001_packed_normal_roughness.png" +dest_files=["res://.godot/imported/grass_001_packed_normal_roughness.png-6a0368d7f5ad5c8592aae981ff9760f4.s3tc.ctex", "res://.godot/imported/grass_001_packed_normal_roughness.png-6a0368d7f5ad5c8592aae981ff9760f4.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=2 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Color.png b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Color.png new file mode 100644 index 0000000..8c14e19 Binary files /dev/null and b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Color.png differ diff --git a/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Color.png.import b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Color.png.import new file mode 100644 index 0000000..a6d8ef6 --- /dev/null +++ b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Color.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://crku1nxbu2hmx" +path="res://.godot/imported/Rock030_1K-PNG_Color.png-42ae620489daa5d2a41c2d27a634d175.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Color.png" +dest_files=["res://.godot/imported/Rock030_1K-PNG_Color.png-42ae620489daa5d2a41c2d27a634d175.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Displacement.png b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Displacement.png new file mode 100644 index 0000000..ef5b8c2 Binary files /dev/null and b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Displacement.png differ diff --git a/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Displacement.png.import b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Displacement.png.import new file mode 100644 index 0000000..3b968cb --- /dev/null +++ b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Displacement.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://csx4na7h667u2" +path="res://.godot/imported/Rock030_1K-PNG_Displacement.png-06118eb447dc3cb3533fe5d4b016df02.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Displacement.png" +dest_files=["res://.godot/imported/Rock030_1K-PNG_Displacement.png-06118eb447dc3cb3533fe5d4b016df02.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_NormalGL.png b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_NormalGL.png new file mode 100644 index 0000000..38fb92c Binary files /dev/null and b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_NormalGL.png differ diff --git a/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_NormalGL.png.import b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_NormalGL.png.import new file mode 100644 index 0000000..1329529 --- /dev/null +++ b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_NormalGL.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhhq8dhhoow6y" +path="res://.godot/imported/Rock030_1K-PNG_NormalGL.png-77a1409b9b4a554282e591f68b96e74e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://worlds/terrain1/textures/rock_030/Rock030_1K-PNG_NormalGL.png" +dest_files=["res://.godot/imported/Rock030_1K-PNG_NormalGL.png-77a1409b9b4a554282e591f68b96e74e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Roughness.png b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Roughness.png new file mode 100644 index 0000000..4990c35 Binary files /dev/null and b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Roughness.png differ diff --git a/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Roughness.png.import b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Roughness.png.import new file mode 100644 index 0000000..399a0af --- /dev/null +++ b/worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Roughness.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://yyswf1lc60w8" +path="res://.godot/imported/Rock030_1K-PNG_Roughness.png-39ba57eee3bbcfda16d05a2f09d4efde.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://worlds/terrain1/textures/rock_030/Rock030_1K-PNG_Roughness.png" +dest_files=["res://.godot/imported/Rock030_1K-PNG_Roughness.png-39ba57eee3bbcfda16d05a2f09d4efde.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/rock_030/rock030_packed_albedo_height.png b/worlds/terrain1/textures/rock_030/rock030_packed_albedo_height.png new file mode 100644 index 0000000..69b0469 Binary files /dev/null and b/worlds/terrain1/textures/rock_030/rock030_packed_albedo_height.png differ diff --git a/worlds/terrain1/textures/rock_030/rock030_packed_albedo_height.png.import b/worlds/terrain1/textures/rock_030/rock030_packed_albedo_height.png.import new file mode 100644 index 0000000..56caa59 --- /dev/null +++ b/worlds/terrain1/textures/rock_030/rock030_packed_albedo_height.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://sofgexkx8m2k" +path.s3tc="res://.godot/imported/rock030_packed_albedo_height.png-f4329fcc6ef1d6ac019f92104550396d.s3tc.ctex" +path.etc2="res://.godot/imported/rock030_packed_albedo_height.png-f4329fcc6ef1d6ac019f92104550396d.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://worlds/terrain1/textures/rock_030/rock030_packed_albedo_height.png" +dest_files=["res://.godot/imported/rock030_packed_albedo_height.png-f4329fcc6ef1d6ac019f92104550396d.s3tc.ctex", "res://.godot/imported/rock030_packed_albedo_height.png-f4329fcc6ef1d6ac019f92104550396d.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=2 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/worlds/terrain1/textures/rock_030/rock30_packed_normal_roughness.png b/worlds/terrain1/textures/rock_030/rock30_packed_normal_roughness.png new file mode 100644 index 0000000..3fee7a8 Binary files /dev/null and b/worlds/terrain1/textures/rock_030/rock30_packed_normal_roughness.png differ diff --git a/worlds/terrain1/textures/rock_030/rock30_packed_normal_roughness.png.import b/worlds/terrain1/textures/rock_030/rock30_packed_normal_roughness.png.import new file mode 100644 index 0000000..bd20075 --- /dev/null +++ b/worlds/terrain1/textures/rock_030/rock30_packed_normal_roughness.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ckr6jrefpdhmb" +path.s3tc="res://.godot/imported/rock30_packed_normal_roughness.png-9fc952dff901752b9f72b77b6c93ac14.s3tc.ctex" +path.etc2="res://.godot/imported/rock30_packed_normal_roughness.png-9fc952dff901752b9f72b77b6c93ac14.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://worlds/terrain1/textures/rock_030/rock30_packed_normal_roughness.png" +dest_files=["res://.godot/imported/rock30_packed_normal_roughness.png-9fc952dff901752b9f72b77b6c93ac14.s3tc.ctex", "res://.godot/imported/rock30_packed_normal_roughness.png-9fc952dff901752b9f72b77b6c93ac14.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=2 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1