diff --git a/3d/antialiasing/README.md b/3d/antialiasing/README.md new file mode 100644 index 00000000000..2f41ab5bc1d --- /dev/null +++ b/3d/antialiasing/README.md @@ -0,0 +1,41 @@ +# 3D Anti-Aliasing + +This project showcases the various 3D antialiasing techniques supported by Godot. + +- **Multisample antialiasing (MSAA):** High quality, high performance cost. + Does not blur the image. + - Does not affect shader-induced aliasing (such as specular aliasing) or alpha + scissor materials, so these will remain aliased. +- **Fast approximate antialiasing (FXAA):** Medium quality, low performance cost. + Slightly blurs the image. +- **Temporal antialiasing (TAA):** High-quality, low performance cost. Slightly + blurs the image (but less so than FXAA). + - Antialiasing quality is worse on fast-moving objects than other methods, + especially at lower framerates since the TAA won't have enough time to + converge on those objects. + - Can introduce ghosting artifacts on moving objects, especially if motion + vectors are not correctly generated from a given material shader. +- **Supersampling (SSAA):** The highest-quality technique, but also the most + expensive. Does not blur the image. + - 200% resolution scale is equivalent to 4× SSAA, as each dimension is + doubled. For example, if running in a 1920×1080 window at 200% render scale, + the 3D framebuffer will be 3840×2160. + - SSAA can be used together with FXAA or TAA to counter the blurring added by + those algorithms, while further improving antialiasing quality. + +Godot allows using multiple antialiasing techniques at the same time. This can +be useful to obtain the best possible quality, or to find a better performance +tradeoff. + +Language: GDScript + +Renderer: Vulkan Clustered + +## Screenshots + +![Screenshot](screenshots/3d_anti_aliasing.png) + +## Licenses + +Files in the `polyhaven/` folder are downloaded from +and are licensed under CC0 1.0 Universal. diff --git a/3d/antialiasing/checker.LICENSE.md b/3d/antialiasing/checker.LICENSE.md new file mode 100644 index 00000000000..a7a1e0beeaa --- /dev/null +++ b/3d/antialiasing/checker.LICENSE.md @@ -0,0 +1,7 @@ +# License for `checker.png` + +Copyright (c) 2020 Kenney + +Licensed under CC0 1.0 Universal. + +Downloaded from https://kenney.nl/assets/prototype-textures diff --git a/3d/antialiasing/checker.png b/3d/antialiasing/checker.png new file mode 100644 index 00000000000..374a5d0638d Binary files /dev/null and b/3d/antialiasing/checker.png differ diff --git a/3d/antialiasing/checker.png.import b/3d/antialiasing/checker.png.import new file mode 100644 index 00000000000..a5fa92248ca --- /dev/null +++ b/3d/antialiasing/checker.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://chjqieyps5n5r" +path.s3tc="res://.godot/imported/checker.png-6bb199bedbd039461e4248c1d0b9691d.s3tc.ctex" +path.etc2="res://.godot/imported/checker.png-6bb199bedbd039461e4248c1d0b9691d.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://checker.png" +dest_files=["res://.godot/imported/checker.png-6bb199bedbd039461e4248c1d0b9691d.s3tc.ctex", "res://.godot/imported/checker.png-6bb199bedbd039461e4248c1d0b9691d.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +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/size_limit=0 +detect_3d/compress_to=0 diff --git a/3d/antialiasing/default_env.tres b/3d/antialiasing/default_env.tres new file mode 100644 index 00000000000..ddf6bb74341 --- /dev/null +++ b/3d/antialiasing/default_env.tres @@ -0,0 +1,7 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="Sky" id=1] + +[resource] +background_mode = 2 +sky = SubResource( 1 ) diff --git a/3d/antialiasing/icon.png b/3d/antialiasing/icon.png new file mode 100644 index 00000000000..36b5c9cb392 Binary files /dev/null and b/3d/antialiasing/icon.png differ diff --git a/3d/antialiasing/icon.png.import b/3d/antialiasing/icon.png.import new file mode 100644 index 00000000000..732437deb3d --- /dev/null +++ b/3d/antialiasing/icon.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8c1xtc7yj6s5" +path.s3tc="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.s3tc.ctex" +path.etc2="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://icon.png" +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.s3tc.ctex", "res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +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/3d/antialiasing/paint.LICENSE.md b/3d/antialiasing/paint.LICENSE.md new file mode 100644 index 00000000000..9b10733b332 --- /dev/null +++ b/3d/antialiasing/paint.LICENSE.md @@ -0,0 +1,7 @@ +# License for `paint.png` and `paint_normal.png` + +Copyright (c) 2010 johndn + +Licensed under CC BY 3.0 Unported. + +Downloaded from https://opengameart.org/content/splatter-pack diff --git a/3d/antialiasing/paint.png b/3d/antialiasing/paint.png new file mode 100644 index 00000000000..6c2294f5f72 Binary files /dev/null and b/3d/antialiasing/paint.png differ diff --git a/3d/antialiasing/paint.png.import b/3d/antialiasing/paint.png.import new file mode 100644 index 00000000000..bbe90a32ae8 --- /dev/null +++ b/3d/antialiasing/paint.png.import @@ -0,0 +1,33 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ccgkupemr6e1q" +path="res://.godot/imported/paint.png-26dd29729d733230544ae1ff468a1f09.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://paint.png" +dest_files=["res://.godot/imported/paint.png-26dd29729d733230544ae1ff468a1f09.ctex"] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +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/size_limit=0 +detect_3d/compress_to=1 diff --git a/3d/antialiasing/paint_normal.png b/3d/antialiasing/paint_normal.png new file mode 100644 index 00000000000..7319660b730 Binary files /dev/null and b/3d/antialiasing/paint_normal.png differ diff --git a/3d/antialiasing/paint_normal.png.import b/3d/antialiasing/paint_normal.png.import new file mode 100644 index 00000000000..e47c5ef486d --- /dev/null +++ b/3d/antialiasing/paint_normal.png.import @@ -0,0 +1,33 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bm6eht0bqttpo" +path="res://.godot/imported/paint_normal.png-19220cbebecc985555347664ad1f1180.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://paint_normal.png" +dest_files=["res://.godot/imported/paint_normal.png-19220cbebecc985555347664ad1f1180.ctex"] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +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/size_limit=0 +detect_3d/compress_to=1 diff --git a/3d/antialiasing/polyhaven/dutch_ship_medium.bin b/3d/antialiasing/polyhaven/dutch_ship_medium.bin new file mode 100644 index 00000000000..2916c65cb6f Binary files /dev/null and b/3d/antialiasing/polyhaven/dutch_ship_medium.bin differ diff --git a/3d/antialiasing/polyhaven/dutch_ship_medium_1k.gltf b/3d/antialiasing/polyhaven/dutch_ship_medium_1k.gltf new file mode 100644 index 00000000000..178aaefe8c7 --- /dev/null +++ b/3d/antialiasing/polyhaven/dutch_ship_medium_1k.gltf @@ -0,0 +1,388 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v1.7.33", + "version": "2.0" + }, + "scene": 0, + "scenes": [ + { + "name": "dutch_ship_medium", + "nodes": [ + 0, + 1, + 2 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "dutch_ship_medium_rigging" + }, + { + "mesh": 1, + "name": "dutch_ship_medium_hull" + }, + { + "mesh": 2, + "name": "dutch_ship_medium_sails" + } + ], + "materials": [ + { + "doubleSided": true, + "name": "dutch_ship_medium_rigging", + "normalTexture": { + "index": 0 + }, + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 1 + }, + "metallicRoughnessTexture": { + "index": 2 + } + } + }, + { + "doubleSided": true, + "name": "dutch_ship_medium_hull", + "normalTexture": { + "index": 3 + }, + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 4 + }, + "metallicRoughnessTexture": { + "index": 5 + } + } + }, + { + "alphaCutoff": 0.5, + "alphaMode": "MASK", + "doubleSided": true, + "name": "dutch_ship_medium_sails", + "normalTexture": { + "index": 6 + }, + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 7 + }, + "metallicFactor": 0, + "metallicRoughnessTexture": { + "index": 8 + } + } + } + ], + "meshes": [ + { + "name": "x-Boats-Dutch-medium-rigging-joined", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "x-Boats-Dutch-medium-baseB-joined", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 1 + } + ] + }, + { + "name": "Plane.072", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 2 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + }, + { + "sampler": 0, + "source": 1 + }, + { + "sampler": 0, + "source": 2 + }, + { + "sampler": 0, + "source": 3 + }, + { + "sampler": 0, + "source": 4 + }, + { + "sampler": 0, + "source": 5 + }, + { + "sampler": 0, + "source": 6 + }, + { + "sampler": 0, + "source": 7 + }, + { + "sampler": 0, + "source": 8 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "dutch_ship_medium_rigging_nor_gl", + "uri": "textures/dutch_ship_medium_rigging_nor_gl_1k.jpg" + }, + { + "mimeType": "image/jpeg", + "name": "dutch_ship_medium_rigging_diff", + "uri": "textures/dutch_ship_medium_rigging_diff_1k.jpg" + }, + { + "mimeType": "image/jpeg", + "name": "dutch_ship_medium_rigging_metal-dutch_ship_medium_rigging_rough", + "uri": "textures/dutch_ship_medium_rigging_arm_1k.jpg" + }, + { + "mimeType": "image/jpeg", + "name": "dutch_ship_medium_hull_nor_gl", + "uri": "textures/dutch_ship_medium_hull_nor_gl_1k.jpg" + }, + { + "mimeType": "image/jpeg", + "name": "dutch_ship_medium_hull_diff", + "uri": "textures/dutch_ship_medium_hull_diff_1k.jpg" + }, + { + "mimeType": "image/jpeg", + "name": "dutch_ship_medium_hull_metal-dutch_ship_medium_hull_rough", + "uri": "textures/dutch_ship_medium_hull_arm_1k.jpg" + }, + { + "mimeType": "image/jpeg", + "name": "dutch_ship_medium_sails_nor_gl", + "uri": "textures/dutch_ship_medium_sails_nor_gl_1k.jpg" + }, + { + "mimeType": "image/jpeg", + "name": "dutch_ship_medium_sails_diff-dutch_ship_medium_sails_alpha", + "uri": "textures/dutch_ship_medium_sails_diff_1k.jpg" + }, + { + "mimeType": "image/jpeg", + "name": "dutch_ship_medium_sails_rough", + "uri": "textures/dutch_ship_medium_sails_arm_1k.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 35903, + "max": [ + 13.74468994140625, + 22.657127380371094, + 3.320786237716675 + ], + "min": [ + -9.983352661132812, + 1.1995306015014648, + -3.4880359172821045 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 35903, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 35903, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 101148, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 24621, + "max": [ + 11.63282585144043, + 5.971731662750244, + 2.599379539489746 + ], + "min": [ + -10.325664520263672, + -1.9999947547912598, + -2.602752923965454 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 24621, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 24621, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 83694, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 4020, + "max": [ + 8.375848770141602, + 16.878726959228516, + 2.797043800354004 + ], + "min": [ + -1.5351202487945557, + 4.7319488525390625, + -3.2490220069885254 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 4020, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 4020, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 22644, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 430836, + "byteOffset": 0 + }, + { + "buffer": 0, + "byteLength": 430836, + "byteOffset": 430836 + }, + { + "buffer": 0, + "byteLength": 287224, + "byteOffset": 861672 + }, + { + "buffer": 0, + "byteLength": 202296, + "byteOffset": 1148896 + }, + { + "buffer": 0, + "byteLength": 295452, + "byteOffset": 1351192 + }, + { + "buffer": 0, + "byteLength": 295452, + "byteOffset": 1646644 + }, + { + "buffer": 0, + "byteLength": 196968, + "byteOffset": 1942096 + }, + { + "buffer": 0, + "byteLength": 167388, + "byteOffset": 2139064 + }, + { + "buffer": 0, + "byteLength": 48240, + "byteOffset": 2306452 + }, + { + "buffer": 0, + "byteLength": 48240, + "byteOffset": 2354692 + }, + { + "buffer": 0, + "byteLength": 32160, + "byteOffset": 2402932 + }, + { + "buffer": 0, + "byteLength": 45288, + "byteOffset": 2435092 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 2480380, + "uri": "dutch_ship_medium.bin" + } + ] +} diff --git a/3d/antialiasing/polyhaven/dutch_ship_medium_1k.gltf.import b/3d/antialiasing/polyhaven/dutch_ship_medium_1k.gltf.import new file mode 100644 index 00000000000..d40193e6e81 --- /dev/null +++ b/3d/antialiasing/polyhaven/dutch_ship_medium_1k.gltf.import @@ -0,0 +1,28 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://sxx5ow26t0c3" +path="res://.godot/imported/dutch_ship_medium_1k.gltf-9a8c4d23ef33512c7c0e526560b6a545.scn" + +[deps] + +source_file="res://polyhaven/dutch_ship_medium_1k.gltf" +dest_files=["res://.godot/imported/dutch_ship_medium_1k.gltf-9a8c4d23ef33512c7c0e526560b6a545.scn"] + +[params] + +nodes/root_type="Node3D" +nodes/root_name="Scene Root" +nodes/root_scale=1.0 +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +skins/use_named_skins=true +animation/import=true +animation/fps=30 +import_script/path="" +_subresources={} diff --git a/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_arm_1k.jpg b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_arm_1k.jpg new file mode 100644 index 00000000000..2c769693426 Binary files /dev/null and b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_arm_1k.jpg differ diff --git a/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_arm_1k.jpg.import b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_arm_1k.jpg.import new file mode 100644 index 00000000000..89f86e08db5 --- /dev/null +++ b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_arm_1k.jpg.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhmrl40t2na37" +path.s3tc="res://.godot/imported/dutch_ship_medium_hull_arm_1k.jpg-1bcb2be1a58190217bafabbba5a96cb5.s3tc.ctex" +path.etc2="res://.godot/imported/dutch_ship_medium_hull_arm_1k.jpg-1bcb2be1a58190217bafabbba5a96cb5.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://polyhaven/textures/dutch_ship_medium_hull_arm_1k.jpg" +dest_files=["res://.godot/imported/dutch_ship_medium_hull_arm_1k.jpg-1bcb2be1a58190217bafabbba5a96cb5.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_hull_arm_1k.jpg-1bcb2be1a58190217bafabbba5a96cb5.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +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/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_diff_1k.jpg b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_diff_1k.jpg new file mode 100644 index 00000000000..a5ec99ccf0b Binary files /dev/null and b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_diff_1k.jpg differ diff --git a/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_diff_1k.jpg.import b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_diff_1k.jpg.import new file mode 100644 index 00000000000..7d0f42fb42f --- /dev/null +++ b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_diff_1k.jpg.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://88gdijjjr6p4" +path.s3tc="res://.godot/imported/dutch_ship_medium_hull_diff_1k.jpg-d22f57383d3437ac6151a5dc155d1b44.s3tc.ctex" +path.etc2="res://.godot/imported/dutch_ship_medium_hull_diff_1k.jpg-d22f57383d3437ac6151a5dc155d1b44.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://polyhaven/textures/dutch_ship_medium_hull_diff_1k.jpg" +dest_files=["res://.godot/imported/dutch_ship_medium_hull_diff_1k.jpg-d22f57383d3437ac6151a5dc155d1b44.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_hull_diff_1k.jpg-d22f57383d3437ac6151a5dc155d1b44.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +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/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_nor_gl_1k.jpg b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_nor_gl_1k.jpg new file mode 100644 index 00000000000..4e68712dda3 Binary files /dev/null and b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_nor_gl_1k.jpg differ diff --git a/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_nor_gl_1k.jpg.import b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_nor_gl_1k.jpg.import new file mode 100644 index 00000000000..e88be132973 --- /dev/null +++ b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_hull_nor_gl_1k.jpg.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c22y3qjf8th8a" +path.s3tc="res://.godot/imported/dutch_ship_medium_hull_nor_gl_1k.jpg-f0fc1f178ac5ff99bdf2aae06e0701f1.s3tc.ctex" +path.etc2="res://.godot/imported/dutch_ship_medium_hull_nor_gl_1k.jpg-f0fc1f178ac5ff99bdf2aae06e0701f1.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://polyhaven/textures/dutch_ship_medium_hull_nor_gl_1k.jpg" +dest_files=["res://.godot/imported/dutch_ship_medium_hull_nor_gl_1k.jpg-f0fc1f178ac5ff99bdf2aae06e0701f1.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_hull_nor_gl_1k.jpg-f0fc1f178ac5ff99bdf2aae06e0701f1.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +compress/normal_map=1 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=1 +roughness/src_normal="res://polyhaven/textures/dutch_ship_medium_hull_nor_gl_1k.jpg" +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/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_arm_1k.jpg b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_arm_1k.jpg new file mode 100644 index 00000000000..6705a6e8a80 Binary files /dev/null and b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_arm_1k.jpg differ diff --git a/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_arm_1k.jpg.import b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_arm_1k.jpg.import new file mode 100644 index 00000000000..bafa3cd160a --- /dev/null +++ b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_arm_1k.jpg.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://15se8alkcbla" +path.s3tc="res://.godot/imported/dutch_ship_medium_rigging_arm_1k.jpg-6de8e054b6e80b00009332eaf9eafbeb.s3tc.ctex" +path.etc2="res://.godot/imported/dutch_ship_medium_rigging_arm_1k.jpg-6de8e054b6e80b00009332eaf9eafbeb.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://polyhaven/textures/dutch_ship_medium_rigging_arm_1k.jpg" +dest_files=["res://.godot/imported/dutch_ship_medium_rigging_arm_1k.jpg-6de8e054b6e80b00009332eaf9eafbeb.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_rigging_arm_1k.jpg-6de8e054b6e80b00009332eaf9eafbeb.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +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/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_diff_1k.jpg b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_diff_1k.jpg new file mode 100644 index 00000000000..ee370f0449d Binary files /dev/null and b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_diff_1k.jpg differ diff --git a/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_diff_1k.jpg.import b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_diff_1k.jpg.import new file mode 100644 index 00000000000..867866570ca --- /dev/null +++ b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_diff_1k.jpg.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c0yhj4wwbvgvu" +path.s3tc="res://.godot/imported/dutch_ship_medium_rigging_diff_1k.jpg-b381c8dba5fcad22696086becdc354b0.s3tc.ctex" +path.etc2="res://.godot/imported/dutch_ship_medium_rigging_diff_1k.jpg-b381c8dba5fcad22696086becdc354b0.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://polyhaven/textures/dutch_ship_medium_rigging_diff_1k.jpg" +dest_files=["res://.godot/imported/dutch_ship_medium_rigging_diff_1k.jpg-b381c8dba5fcad22696086becdc354b0.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_rigging_diff_1k.jpg-b381c8dba5fcad22696086becdc354b0.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +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/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_nor_gl_1k.jpg b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_nor_gl_1k.jpg new file mode 100644 index 00000000000..d4be7518855 Binary files /dev/null and b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_nor_gl_1k.jpg differ diff --git a/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_nor_gl_1k.jpg.import b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_nor_gl_1k.jpg.import new file mode 100644 index 00000000000..80cccede4aa --- /dev/null +++ b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_rigging_nor_gl_1k.jpg.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://csbfe6x0jyswi" +path.s3tc="res://.godot/imported/dutch_ship_medium_rigging_nor_gl_1k.jpg-26a255f6574d49990ad4162b06c015da.s3tc.ctex" +path.etc2="res://.godot/imported/dutch_ship_medium_rigging_nor_gl_1k.jpg-26a255f6574d49990ad4162b06c015da.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://polyhaven/textures/dutch_ship_medium_rigging_nor_gl_1k.jpg" +dest_files=["res://.godot/imported/dutch_ship_medium_rigging_nor_gl_1k.jpg-26a255f6574d49990ad4162b06c015da.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_rigging_nor_gl_1k.jpg-26a255f6574d49990ad4162b06c015da.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +compress/normal_map=1 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=1 +roughness/src_normal="res://polyhaven/textures/dutch_ship_medium_rigging_nor_gl_1k.jpg" +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/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_arm_1k.jpg b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_arm_1k.jpg new file mode 100644 index 00000000000..230c734823b Binary files /dev/null and b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_arm_1k.jpg differ diff --git a/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_arm_1k.jpg.import b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_arm_1k.jpg.import new file mode 100644 index 00000000000..db7ec448aa3 --- /dev/null +++ b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_arm_1k.jpg.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://70shlrquand4" +path.s3tc="res://.godot/imported/dutch_ship_medium_sails_arm_1k.jpg-6cdf6ae207b4bb5365f0df8bebf34d57.s3tc.ctex" +path.etc2="res://.godot/imported/dutch_ship_medium_sails_arm_1k.jpg-6cdf6ae207b4bb5365f0df8bebf34d57.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://polyhaven/textures/dutch_ship_medium_sails_arm_1k.jpg" +dest_files=["res://.godot/imported/dutch_ship_medium_sails_arm_1k.jpg-6cdf6ae207b4bb5365f0df8bebf34d57.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_sails_arm_1k.jpg-6cdf6ae207b4bb5365f0df8bebf34d57.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +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/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_diff_1k.jpg b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_diff_1k.jpg new file mode 100644 index 00000000000..80ea8af962d Binary files /dev/null and b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_diff_1k.jpg differ diff --git a/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_diff_1k.jpg.import b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_diff_1k.jpg.import new file mode 100644 index 00000000000..085734b8b7d --- /dev/null +++ b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_diff_1k.jpg.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dde6ofm1jcwiv" +path.s3tc="res://.godot/imported/dutch_ship_medium_sails_diff_1k.jpg-501769b3e14d33a1ff05b4b14f45b65b.s3tc.ctex" +path.etc2="res://.godot/imported/dutch_ship_medium_sails_diff_1k.jpg-501769b3e14d33a1ff05b4b14f45b65b.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://polyhaven/textures/dutch_ship_medium_sails_diff_1k.jpg" +dest_files=["res://.godot/imported/dutch_ship_medium_sails_diff_1k.jpg-501769b3e14d33a1ff05b4b14f45b65b.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_sails_diff_1k.jpg-501769b3e14d33a1ff05b4b14f45b65b.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +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/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_nor_gl_1k.jpg b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_nor_gl_1k.jpg new file mode 100644 index 00000000000..2821d0513bf Binary files /dev/null and b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_nor_gl_1k.jpg differ diff --git a/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_nor_gl_1k.jpg.import b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_nor_gl_1k.jpg.import new file mode 100644 index 00000000000..fe0de064822 --- /dev/null +++ b/3d/antialiasing/polyhaven/textures/dutch_ship_medium_sails_nor_gl_1k.jpg.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://doc73t5xbl8to" +path.s3tc="res://.godot/imported/dutch_ship_medium_sails_nor_gl_1k.jpg-8bd26cb4511a8400046da66b710b48cf.s3tc.ctex" +path.etc2="res://.godot/imported/dutch_ship_medium_sails_nor_gl_1k.jpg-8bd26cb4511a8400046da66b710b48cf.etc2.ctex" +metadata={ +"imported_formats": ["s3tc", "etc2"], +"vram_texture": true +} + +[deps] + +source_file="res://polyhaven/textures/dutch_ship_medium_sails_nor_gl_1k.jpg" +dest_files=["res://.godot/imported/dutch_ship_medium_sails_nor_gl_1k.jpg-8bd26cb4511a8400046da66b710b48cf.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_sails_nor_gl_1k.jpg-8bd26cb4511a8400046da66b710b48cf.etc2.ctex"] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +compress/normal_map=1 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=1 +roughness/src_normal="res://polyhaven/textures/dutch_ship_medium_sails_nor_gl_1k.jpg" +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/3d/antialiasing/project.godot b/3d/antialiasing/project.godot new file mode 100644 index 00000000000..f6fb00ea33a --- /dev/null +++ b/3d/antialiasing/project.godot @@ -0,0 +1,32 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +_global_script_classes=[] +_global_script_class_icons={} + +[application] + +config/name="3D Anti-Aliasing" +config/description="This project showcases the various 3D antialiasing techniques supported by Godot." +run/main_scene="res://test.tscn" +config/features=PackedStringArray("4.0") +config/icon="res://icon.png" + +[display] + +window/stretch/mode="canvas_items" +window/stretch/aspect="expand" + +[rendering] + +textures/default_filters/anisotropic_filtering_level=4 +textures/decals/filter=4 +quality/screen_filters/msaa=3 +environment/default_environment="res://default_env.tres" diff --git a/3d/antialiasing/screenshots/.gdignore b/3d/antialiasing/screenshots/.gdignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/3d/antialiasing/screenshots/3d_anti_aliasing.png b/3d/antialiasing/screenshots/3d_anti_aliasing.png new file mode 100644 index 00000000000..225c56e75ac Binary files /dev/null and b/3d/antialiasing/screenshots/3d_anti_aliasing.png differ diff --git a/3d/antialiasing/test.tscn b/3d/antialiasing/test.tscn new file mode 100644 index 00000000000..7aedba8f40d --- /dev/null +++ b/3d/antialiasing/test.tscn @@ -0,0 +1,967 @@ +[gd_scene load_steps=48 format=3 uid="uid://bo5sv4e5gv8rc"] + +[ext_resource type="Texture2D" uid="uid://ccgkupemr6e1q" path="res://paint.png" id="3_2nulf"] +[ext_resource type="PackedScene" uid="uid://sxx5ow26t0c3" path="res://polyhaven/dutch_ship_medium_1k.gltf" id="3_fa2bl"] +[ext_resource type="Texture2D" uid="uid://bm6eht0bqttpo" path="res://paint_normal.png" id="4_fdfpv"] +[ext_resource type="Texture2D" uid="uid://chjqieyps5n5r" path="res://checker.png" id="14"] +[ext_resource type="Script" path="res://tester.gd" id="18"] + +[sub_resource type="ProceduralSkyMaterial" id="9"] + +[sub_resource type="Sky" id="10"] +sky_material = SubResource( "9" ) + +[sub_resource type="Environment" id="11"] +background_mode = 2 +sky = SubResource( "10" ) + +[sub_resource type="Animation" id="Animation_qdnt6"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Testers/MovingObject/MeshInstance3D:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0.5, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Testers/RotatingObject/MeshInstance3D:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Testers/ScalingObject/MeshInstance3D:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Testers/MovingCPUParticles/CPUParticles3D:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0.5, 0)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Testers/MovingDecal/Decal:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1, 1, 1)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Testers/MovingDecal/Decal:rotation") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0.18405, -2.33886, 0.187249)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Testers/ScrollingUVAnimation/MeshInstance3D:surface_material_override/0:uv1_offset") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Testers/MovingGPUParticles/GPUParticles3D:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 1.2, 0)] +} + +[sub_resource type="Animation" id="12"] +resource_name = "move" +length = 4.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Testers/MovingObject/MeshInstance3D:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(-2, -2), +"update": 0, +"values": [Vector3(0, 0.5, 0), Vector3(0, 2.5, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Testers/RotatingObject/MeshInstance3D:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 4), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(0, 18.8496, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Testers/ScalingObject/MeshInstance3D:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(1, 1, 3)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Testers/MovingCPUParticles/CPUParticles3D:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(-2, -2), +"update": 0, +"values": [Vector3(0, 0.2, 0), Vector3(0, 2.2, 0)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Testers/MovingDecal/Decal:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(-2, -2), +"update": 0, +"values": [Vector3(1, 1, 1), Vector3(-1, 1, -1)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Testers/MovingDecal/Decal:rotation") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(-2, -2), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(0.18405, -2.33886, 0.187249)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Testers/ScrollingUVAnimation/MeshInstance3D:surface_material_override/0:uv1_offset") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 4), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(3, 0, 0)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Testers/MovingGPUParticles/GPUParticles3D:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(-2, -2), +"update": 0, +"values": [Vector3(0, 1.2, 0), Vector3(0, 4.2, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_ecfcr"] +_data = { +"RESET": SubResource( "Animation_qdnt6" ), +"move": SubResource( "12" ) +} + +[sub_resource type="StandardMaterial3D" id="13"] +diffuse_mode = 1 +albedo_texture = ExtResource( "14" ) +uv1_scale = Vector3(32, 32, 1) +texture_filter = 5 + +[sub_resource type="PlaneMesh" id="14"] +material = SubResource( "13" ) +size = Vector2(128, 128) + +[sub_resource type="BoxMesh" id="BoxMesh_gwe28"] + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_fiqc5"] +fractal_octaves = 9 +fractal_gain = 1.0 + +[sub_resource type="NoiseTexture" id="NoiseTexture_bgiac"] +seamless = true +noise = SubResource( "FastNoiseLite_fiqc5" ) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_x42ya"] +albedo_color = Color(1.2, 1, 0.7, 1) +albedo_texture = SubResource( "NoiseTexture_bgiac" ) +uv1_scale = Vector3(3, 2, 1) +texture_filter = 5 + +[sub_resource type="NoiseTexture" id="NoiseTexture_7yxqs"] +width = 32 +height = 32 +seamless = true +noise = SubResource( "FastNoiseLite_fiqc5" ) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6yfdy"] +albedo_texture = SubResource( "NoiseTexture_7yxqs" ) +uv1_scale = Vector3(3, 2, 1) +texture_filter = 4 + +[sub_resource type="PrismMesh" id="PrismMesh_70tw2"] +size = Vector3(0.02, 1, 0.02) + +[sub_resource type="Gradient" id="Gradient_ekf3m"] +offsets = PackedFloat32Array(0, 0.298851, 0.609195, 0.781609, 0.873563, 1) +colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 0.133693, 0.238417, 0.655738, 1, 0.4, 0.47451, 0, 1, 0.364109, 0.476658, 1, 1, 1, 1, 0) + +[sub_resource type="NoiseTexture" id="NoiseTexture_uv2tn"] +seamless = true +color_ramp = SubResource( "Gradient_ekf3m" ) +noise = SubResource( "FastNoiseLite_fiqc5" ) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qcf1j"] +transparency = 1 +cull_mode = 2 +albedo_color = Color(1.2, 1, 0.7, 1) +albedo_texture = SubResource( "NoiseTexture_uv2tn" ) +uv1_scale = Vector3(3, 2, 1) +texture_filter = 5 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xbqpl"] +transparency = 2 +alpha_scissor_threshold = 0.72 +alpha_antialiasing_mode = 0 +cull_mode = 2 +albedo_color = Color(1.2, 1, 0.7, 1) +albedo_texture = SubResource( "NoiseTexture_uv2tn" ) +uv1_scale = Vector3(3, 2, 1) +texture_filter = 5 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mjkwh"] +transparency = 3 +alpha_hash_scale = 1.0 +alpha_antialiasing_mode = 0 +cull_mode = 2 +albedo_color = Color(1.2, 1, 0.7, 1) +albedo_texture = SubResource( "NoiseTexture_uv2tn" ) +uv1_scale = Vector3(3, 2, 1) +texture_filter = 5 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_f4l4p"] +transparency = 4 +cull_mode = 2 +albedo_color = Color(1.2, 1, 0.7, 1) +albedo_texture = SubResource( "NoiseTexture_uv2tn" ) +uv1_scale = Vector3(3, 2, 1) +texture_filter = 5 + +[sub_resource type="SphereMesh" id="SphereMesh_kfkna"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_rfedc"] +transparency = 2 +alpha_scissor_threshold = 0.05 +alpha_antialiasing_mode = 0 +use_point_size = true +point_size = 3.2 + +[sub_resource type="Gradient" id="Gradient_3dg7h"] +interpolation_mode = 2 +offsets = PackedFloat32Array(0, 0.94964) +colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_42opb"] +gradient = SubResource( "Gradient_3dg7h" ) +fill = 1 +fill_from = Vector2(0.5, 0.5) +fill_to = Vector2(0.49, 0) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_layy4"] +transparency = 1 +shading_mode = 0 +vertex_color_use_as_albedo = true +albedo_texture = SubResource( "GradientTexture2D_42opb" ) +billboard_mode = 3 +particles_anim_h_frames = 1 +particles_anim_v_frames = 1 +particles_anim_loop = false + +[sub_resource type="QuadMesh" id="QuadMesh_imrxg"] +material = SubResource( "StandardMaterial3D_layy4" ) + +[sub_resource type="Curve" id="Curve_v0n7y"] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="Gradient" id="Gradient_e7gyf"] +offsets = PackedFloat32Array(0, 0.0946746, 0.5, 0.804734) +colors = PackedColorArray(0, 0.14902, 1, 0, 0.0627836, 0.243372, 0.995875, 1, 0.568541, 1, 0.962647, 1, 1, 1, 1, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_r4xcu"] +albedo_color = Color(0.521569, 1, 0.776471, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_88317"] +material = SubResource( "StandardMaterial3D_r4xcu" ) +size = Vector3(0.1, 0.1, 0.1) + +[sub_resource type="Curve" id="Curve_sutnd"] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="ParticlesMaterial" id="ParticlesMaterial_ft0gs"] +emission_shape = 6 +emission_ring_axis = Vector3(0, 1, 0) +emission_ring_height = 0.0 +emission_ring_radius = 0.25 +emission_ring_inner_radius = 0.25 +radial_accel_min = 2.0 +radial_accel_max = 2.0 +collision_enabled = true +collision_friction = 0.1 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1dgwn"] +albedo_color = Color(0.545098, 0.545098, 0.545098, 1) + +[sub_resource type="SphereMesh" id="SphereMesh_v4x6x"] +material = SubResource( "StandardMaterial3D_1dgwn" ) +radius = 1.0 +height = 2.0 + +[sub_resource type="CylinderMesh" id="CylinderMesh_5qy8k"] +height = 1.0 +radial_segments = 6 +rings = 1 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_53dqy"] +albedo_color = Color(0.946182, 1.18208, 1.2, 1) +albedo_texture = SubResource( "NoiseTexture_bgiac" ) +uv1_scale = Vector3(2, 2, 1) +texture_filter = 5 + +[sub_resource type="Shader" id="Shader_rejcs"] +code = "// NOTE: Shader automatically converted from Godot Engine 4.0.alpha's StandardMaterial3D. + +shader_type spatial; +render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_burley,specular_schlick_ggx; +uniform vec4 albedo : source_color; +uniform sampler2D texture_albedo : source_color,filter_linear_mipmap_anisotropic,repeat_enable; +uniform float point_size : hint_range(0,128); +uniform float roughness : hint_range(0,1); +uniform sampler2D texture_metallic : hint_default_white,filter_linear_mipmap_anisotropic,repeat_enable; +uniform vec4 metallic_texture_channel; +uniform sampler2D texture_roughness : hint_roughness_r,filter_linear_mipmap_anisotropic,repeat_enable; +uniform float specular; +uniform float metallic; +uniform vec3 uv1_scale; +uniform vec3 uv1_offset; +uniform vec3 uv2_scale; +uniform vec3 uv2_offset; + +void vertex() { + // Scroll the texture over time. + UV = UV*uv1_scale.xy+uv1_offset.xy + vec2(mod(TIME, 1.0), 0.0); +} + +void fragment() { + vec2 base_uv = UV; + vec4 albedo_tex = texture(texture_albedo,base_uv); + ALBEDO = albedo.rgb * albedo_tex.rgb; + float metallic_tex = dot(texture(texture_metallic,base_uv),metallic_texture_channel); + METALLIC = metallic_tex * metallic; + vec4 roughness_texture_channel = vec4(1.0,0.0,0.0,0.0); + float roughness_tex = dot(texture(texture_roughness,base_uv),roughness_texture_channel); + ROUGHNESS = roughness_tex * roughness; + SPECULAR = specular; +} +" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ltvd2"] +render_priority = 0 +shader = SubResource( "Shader_rejcs" ) +shader_param/albedo = Color(1.2, 0.915333, 0.997134, 1) +shader_param/metallic = 0.0 +shader_param/metallic_texture_channel = Plane(1, 0, 0, 0) +shader_param/point_size = 1.0 +shader_param/roughness = 1.0 +shader_param/specular = 0.5 +shader_param/texture_albedo = SubResource( "NoiseTexture_bgiac" ) +shader_param/uv1_offset = Vector3(0, 0, 0) +shader_param/uv1_scale = Vector3(2, 2, 1) +shader_param/uv2_offset = Vector3(0, 0, 0) +shader_param/uv2_scale = Vector3(1, 1, 1) + +[sub_resource type="CylinderMesh" id="CylinderMesh_oopii"] +height = 1.0 +radial_segments = 18 +rings = 1 + +[sub_resource type="Shader" id="Shader_ovufm"] +code = "// NOTE: Shader automatically converted from Godot Engine 4.0.alpha's StandardMaterial3D. + +shader_type spatial; +render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_burley,specular_schlick_ggx; +uniform vec4 albedo : source_color; +uniform sampler2D texture_albedo : source_color,filter_linear_mipmap_anisotropic,repeat_enable; +uniform float point_size : hint_range(0,128); +uniform float roughness : hint_range(0,1); +uniform sampler2D texture_metallic : hint_default_white,filter_linear_mipmap_anisotropic,repeat_enable; +uniform vec4 metallic_texture_channel; +uniform sampler2D texture_roughness : hint_roughness_r,filter_linear_mipmap_anisotropic,repeat_enable; +uniform float specular; +uniform float metallic; +uniform vec3 uv1_scale; +uniform vec3 uv1_offset; +uniform vec3 uv2_scale; +uniform vec3 uv2_offset; + +float rand(vec2 co){ + return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); +} + +void vertex() { + // Move vertices randomly over time. + VERTEX.y += 0.25 + sin(TIME * 2.0) * rand(vec2(VERTEX.xz)) * 0.5; +} + +void fragment() { + vec2 base_uv = UV; + vec4 albedo_tex = texture(texture_albedo,base_uv); + ALBEDO = albedo.rgb * albedo_tex.rgb; + float metallic_tex = dot(texture(texture_metallic,base_uv),metallic_texture_channel); + METALLIC = metallic_tex * metallic; + vec4 roughness_texture_channel = vec4(1.0,0.0,0.0,0.0); + float roughness_tex = dot(texture(texture_roughness,base_uv),roughness_texture_channel); + ROUGHNESS = roughness_tex * roughness; + SPECULAR = specular; +} +" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_fbaw5"] +render_priority = 0 +shader = SubResource( "Shader_ovufm" ) +shader_param/albedo = Color(1.2, 1.16365, 0.85123, 1) +shader_param/metallic = 0.0 +shader_param/metallic_texture_channel = Plane(1, 0, 0, 0) +shader_param/point_size = 1.0 +shader_param/roughness = 1.0 +shader_param/specular = 0.5 +shader_param/texture_albedo = SubResource( "NoiseTexture_bgiac" ) +shader_param/uv1_offset = Vector3(0, 0, 0) +shader_param/uv1_scale = Vector3(2, 2, 1) +shader_param/uv2_offset = Vector3(0, 0, 0) +shader_param/uv2_scale = Vector3(1, 1, 1) + +[node name="WorldEnvironment" type="WorldEnvironment"] +environment = SubResource( "11" ) +script = ExtResource( "18" ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +autoplay = "move" +libraries = { +"": SubResource( "AnimationLibrary_ecfcr" ) +} + +[node name="Plane" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -34) +layers = 2 +mesh = SubResource( "14" ) + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(0.909487, -0.23874, 0.340349, 0, 0.818672, 0.574262, -0.415733, -0.522284, 0.744571, 3.9506, 3.39961, 3.54442) +shadow_enabled = true +shadow_normal_bias = 1.5 +shadow_blur = 1.5 +directional_shadow_mode = 0 +directional_shadow_fade_start = 1.0 +directional_shadow_max_distance = 25.0 + +[node name="CameraHolder" type="Node3D" parent="."] +transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0.125, 0) + +[node name="RotationX" type="Node3D" parent="CameraHolder"] + +[node name="Camera3D" type="Camera3D" parent="CameraHolder/RotationX"] +fov = 70.0 + +[node name="Testers" type="Node3D" parent="."] + +[node name="StaticObject" type="Node3D" parent="Testers"] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/StaticObject"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +mesh = SubResource( "BoxMesh_gwe28" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_x42ya" ) + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Testers/StaticObject"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0.5, 0) +mesh = SubResource( "BoxMesh_gwe28" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_6yfdy" ) + +[node name="ThinLines" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -4) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.5, 0.400002) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.5, 0.300003) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.5, 0.200005) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D4" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.5, 0.100006) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D5" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.5, 7.62939e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D6" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.5, -0.0999908) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D7" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.5, -0.199989) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D8" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.5, -0.299988) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D9" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.5, -0.399986) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D10" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -0.399994, 0.5, 7.62939e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D11" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -0.299995, 0.5, 7.62939e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D12" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -0.199997, 0.5, 7.62939e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D13" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -0.0999985, 0.5, 7.62939e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D14" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0, 0.5, 7.62939e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D15" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0.0999985, 0.5, 7.62939e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D16" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0.199997, 0.5, 7.62939e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D17" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0.299995, 0.5, 7.62939e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D18" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0.399994, 0.5, 7.62939e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D19" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, -8.74228e-08, -4.37114e-08, -1, 3.82137e-15, -1, 4.37114e-08, -0.399994, 0.500004, 3.8147e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D20" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, -8.74228e-08, -4.37114e-08, -1, 3.82137e-15, -1, 4.37114e-08, -0.299995, 0.500004, 3.8147e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D21" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, -8.74228e-08, -4.37114e-08, -1, 3.82137e-15, -1, 4.37114e-08, -0.199997, 0.500004, 3.8147e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D22" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, -8.74228e-08, -4.37114e-08, -1, 3.82137e-15, -1, 4.37114e-08, -0.0999985, 0.500004, 3.8147e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D23" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, -8.74228e-08, -4.37114e-08, -1, 3.82137e-15, -1, 4.37114e-08, 0, 0.500004, 3.8147e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D24" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, -8.74228e-08, -4.37114e-08, -1, 3.82137e-15, -1, 4.37114e-08, 0.0999985, 0.500004, 3.8147e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D25" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, -8.74228e-08, -4.37114e-08, -1, 3.82137e-15, -1, 4.37114e-08, 0.199997, 0.500004, 3.8147e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D26" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, -8.74228e-08, -4.37114e-08, -1, 3.82137e-15, -1, 4.37114e-08, 0.299995, 0.500004, 3.8147e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="MeshInstance3D27" type="MeshInstance3D" parent="Testers/ThinLines"] +transform = Transform3D(-1, 0, 8.74228e-08, -8.74228e-08, -4.37114e-08, -1, 3.82137e-15, -1, 4.37114e-08, 0.399994, 0.500004, 3.8147e-06) +mesh = SubResource( "PrismMesh_70tw2" ) + +[node name="TransparencyAlphaBlend" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -8) + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="Testers/TransparencyAlphaBlend"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.501, 0) +mesh = SubResource( "BoxMesh_gwe28" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_qcf1j" ) + +[node name="TransparencyAlphaScissor" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -12) + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="Testers/TransparencyAlphaScissor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.501, 0) +mesh = SubResource( "BoxMesh_gwe28" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_xbqpl" ) + +[node name="TransparencyAlphaHash" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -16) + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="Testers/TransparencyAlphaHash"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.501, 0) +mesh = SubResource( "BoxMesh_gwe28" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_mjkwh" ) + +[node name="TransparencyDepthPrepass" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -20) + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="Testers/TransparencyDepthPrepass"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.501, 0) +mesh = SubResource( "BoxMesh_gwe28" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_f4l4p" ) + +[node name="ComplexObject" parent="Testers" instance=ExtResource( "3_fa2bl" )] +transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 0.35, -24) + +[node name="PointRendering" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -28) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/PointRendering"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +mesh = SubResource( "SphereMesh_kfkna" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_rfedc" ) + +[node name="MovingObject" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -32) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/MovingObject"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +mesh = SubResource( "BoxMesh_gwe28" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_x42ya" ) + +[node name="RotatingObject" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -36) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/RotatingObject"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +mesh = SubResource( "BoxMesh_gwe28" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_x42ya" ) + +[node name="ScalingObject" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -40) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/ScalingObject"] +transform = Transform3D(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0) +mesh = SubResource( "BoxMesh_gwe28" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_x42ya" ) + +[node name="StaticCPUParticles" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -44) + +[node name="CPUParticles3D" type="CPUParticles3D" parent="Testers/StaticCPUParticles"] +amount = 100 +draw_order = 1 +mesh = SubResource( "QuadMesh_imrxg" ) +direction = Vector3(0, 1, 0) +spread = 10.0 +initial_velocity_min = 5.0 +initial_velocity_max = 5.0 +scale_amount_min = 0.25 +scale_amount_max = 0.25 +scale_amount_curve = SubResource( "Curve_v0n7y" ) +color_ramp = SubResource( "Gradient_e7gyf" ) + +[node name="CPUParticles3D2" type="CPUParticles3D" parent="Testers/StaticCPUParticles/CPUParticles3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0.2, 0) +amount = 20 +mesh = SubResource( "BoxMesh_88317" ) +spread = 180.0 +gravity = Vector3(0, 0, 0) +initial_velocity_min = 2.5 +initial_velocity_max = 2.5 +radial_accel_min = -5.0 +radial_accel_max = -5.0 +scale_amount_min = 0.25 +scale_amount_max = 2.5 +scale_amount_curve = SubResource( "Curve_sutnd" ) + +[node name="MovingCPUParticles" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -48) + +[node name="CPUParticles3D" type="CPUParticles3D" parent="Testers/MovingCPUParticles"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +amount = 100 +lifetime = 0.5 +local_coords = false +draw_order = 1 +mesh = SubResource( "QuadMesh_imrxg" ) +direction = Vector3(0, 1, 0) +spread = 10.0 +initial_velocity_min = 2.0 +initial_velocity_max = 2.0 +tangential_accel_min = 6.0 +tangential_accel_max = 40.0 +scale_amount_min = 0.25 +scale_amount_max = 0.25 +scale_amount_curve = SubResource( "Curve_v0n7y" ) +color = Color(6, 2, 6, 1) +color_ramp = SubResource( "Gradient_e7gyf" ) + +[node name="CPUParticles3D" type="CPUParticles3D" parent="Testers/MovingCPUParticles/CPUParticles3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, 0) +amount = 20 +local_coords = false +mesh = SubResource( "BoxMesh_88317" ) +spread = 180.0 +gravity = Vector3(0, 0, 0) +initial_velocity_min = 2.5 +initial_velocity_max = 2.5 +scale_amount_curve = SubResource( "Curve_sutnd" ) + +[node name="StaticGPUParticles" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -52) + +[node name="GPUParticles3D" type="GPUParticles3D" parent="Testers/StaticGPUParticles"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0) +amount = 50 +lifetime = 2.0 +fixed_fps = 0 +collision_base_size = 0.05 +visibility_aabb = AABB(-1.63511, -1.25001, -1.31512, 3.0892, 2.15487, 2.91765) +process_material = SubResource( "ParticlesMaterial_ft0gs" ) +draw_pass_1 = SubResource( "BoxMesh_88317" ) + +[node name="GPUParticlesCollisionBox3D" type="GPUParticlesCollisionBox3D" parent="Testers/StaticGPUParticles"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) +extents = Vector3(2, 1, 2) + +[node name="MovingGPUParticles" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -56) + +[node name="GPUParticles3D" type="GPUParticles3D" parent="Testers/MovingGPUParticles"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0) +extra_cull_margin = 3.0 +amount = 50 +lifetime = 2.0 +fixed_fps = 0 +collision_base_size = 0.05 +visibility_aabb = AABB(-1.50087, -1.25001, -1.4745, 3.19423, 2.13905, 3.02308) +local_coords = false +process_material = SubResource( "ParticlesMaterial_ft0gs" ) +draw_pass_1 = SubResource( "BoxMesh_88317" ) + +[node name="GPUParticlesCollisionBox3D2" type="GPUParticlesCollisionBox3D" parent="Testers/MovingGPUParticles"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) +extents = Vector3(2, 1, 2) + +[node name="MovingDecal" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -60) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/MovingDecal"] +mesh = SubResource( "SphereMesh_v4x6x" ) + +[node name="Decal" type="Decal" parent="Testers/MovingDecal"] +transform = Transform3D(-0.707104, -1.00583e-06, -0.707109, 0.183013, 0.965926, -0.183013, 0.683015, -0.258819, -0.68301, 1, 1, 1) +texture_albedo = ExtResource( "3_2nulf" ) +texture_normal = ExtResource( "4_fdfpv" ) + +[node name="ScrollingUVAnimation" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -64) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/ScrollingUVAnimation"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +mesh = SubResource( "CylinderMesh_5qy8k" ) +surface_material_override/0 = SubResource( "StandardMaterial3D_53dqy" ) + +[node name="ScrollingUVCustomShader" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -68) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/ScrollingUVCustomShader"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +mesh = SubResource( "CylinderMesh_5qy8k" ) +surface_material_override/0 = SubResource( "ShaderMaterial_ltvd2" ) + +[node name="CustomShaderVertexMovement" type="Node3D" parent="Testers"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -72) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/CustomShaderVertexMovement"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +mesh = SubResource( "CylinderMesh_oopii" ) +surface_material_override/0 = SubResource( "ShaderMaterial_fbaw5" ) + +[node name="TestName" type="Label" parent="."] +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -192.0 +offset_top = -58.0 +offset_right = 192.0 +offset_bottom = -24.0 +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_constants/outline_size = 5 +theme_override_font_sizes/font_size = 24 +horizontal_alignment = 1 + +[node name="Previous" type="Button" parent="."] +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_left = 24.0 +offset_top = -55.0 +offset_right = 135.0 +offset_bottom = -24.0 +text = "« Previous" + +[node name="Next" type="Button" parent="."] +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -107.0 +offset_top = -55.0 +offset_right = -24.0 +offset_bottom = -24.0 +text = "Next »" + +[node name="Antialiasing" type="VBoxContainer" parent="."] +offset_left = 24.0 +offset_top = 24.0 +offset_right = 210.0 +offset_bottom = 55.0 +theme_override_constants/separation = 10 + +[node name="Label" type="Label" parent="Antialiasing"] +offset_right = 265.0 +offset_bottom = 26.0 +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_constants/outline_size = 3 +text = "Antialiasing Options:" + +[node name="FXAA" type="CheckButton" parent="Antialiasing"] +offset_top = 36.0 +offset_right = 265.0 +offset_bottom = 67.0 +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_constants/outline_size = 3 +text = "FXAA (Fast)" + +[node name="TemporalAntialiasing" type="CheckButton" parent="Antialiasing"] +offset_top = 77.0 +offset_right = 265.0 +offset_bottom = 108.0 +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_constants/outline_size = 3 +text = "Temporal antialiasing (Fast)" + +[node name="MSAA" type="OptionButton" parent="Antialiasing"] +offset_top = 118.0 +offset_right = 265.0 +offset_bottom = 149.0 +item_count = 4 +selected = 0 +popup/item_0/text = "No MSAA (Fastest)" +popup/item_0/id = 0 +popup/item_1/text = "2× MSAA (Average)" +popup/item_1/id = 1 +popup/item_2/text = "4× MSAA (Slow)" +popup/item_2/id = 2 +popup/item_3/text = "8× MSAA (Slowest)" +popup/item_3/id = 3 + +[node name="RenderScale" type="OptionButton" parent="Antialiasing"] +offset_top = 159.0 +offset_right = 265.0 +offset_bottom = 190.0 +item_count = 7 +selected = 2 +popup/item_0/text = "50% Render Scale (Fastest)" +popup/item_0/id = 0 +popup/item_1/text = "75% Render Scale (Fast)" +popup/item_1/id = 1 +popup/item_2/text = "100% Render Scale (Average)" +popup/item_2/id = 2 +popup/item_3/text = "125% Render Scale (1.56× SSAA, Slow)" +popup/item_3/id = 3 +popup/item_4/text = "150% Render Scale (2.25× SSAA, Slower)" +popup/item_4/id = 4 +popup/item_5/text = "175% Render Scale (3.06× SSAA, Very Slow)" +popup/item_5/id = 5 +popup/item_6/text = "200% Render Scale (4× SSAA, Slowest)" +popup/item_6/id = 6 + +[connection signal="pressed" from="Previous" to="." method="_on_previous_pressed"] +[connection signal="pressed" from="Next" to="." method="_on_next_pressed"] +[connection signal="toggled" from="Antialiasing/FXAA" to="." method="_on_fxaa_toggled"] +[connection signal="toggled" from="Antialiasing/TemporalAntialiasing" to="." method="_on_temporal_antialiasing_toggled"] +[connection signal="item_selected" from="Antialiasing/MSAA" to="." method="_on_msaa_item_selected"] +[connection signal="item_selected" from="Antialiasing/RenderScale" to="." method="_on_render_scale_item_selected"] diff --git a/3d/antialiasing/tester.gd b/3d/antialiasing/tester.gd new file mode 100644 index 00000000000..d2665f4345c --- /dev/null +++ b/3d/antialiasing/tester.gd @@ -0,0 +1,100 @@ +extends WorldEnvironment + +const ROT_SPEED = 0.003 +const ZOOM_SPEED = 0.125 +const MAIN_BUTTONS = MOUSE_BUTTON_MASK_LEFT | MOUSE_BUTTON_MASK_RIGHT | MOUSE_BUTTON_MASK_MIDDLE + +var tester_index = 0 +var rot_x = deg2rad(-22.5) # This must be kept in sync with RotationX. +var rot_y = deg2rad(90) # This must be kept in sync with CameraHolder. +var zoom = 1.5 +var base_height = ProjectSettings.get_setting("display/window/size/viewport_height") + +@onready var testers = $Testers +@onready var camera_holder = $CameraHolder # Has a position and rotates on Y. +@onready var rotation_x = $CameraHolder/RotationX +@onready var camera = $CameraHolder/RotationX/Camera3D + + +func _ready(): + camera_holder.transform.basis = Basis.from_euler(Vector3(0, rot_y, 0)) + rotation_x.transform.basis = Basis.from_euler(Vector3(rot_x, 0, 0)) + update_gui() + + +func _unhandled_input(event): + if event.is_action_pressed("ui_left"): + _on_previous_pressed() + if event.is_action_pressed("ui_right"): + _on_next_pressed() + + if event is InputEventMouseButton: + if event.button_index == MOUSE_BUTTON_WHEEL_UP: + zoom -= ZOOM_SPEED + if event.button_index == MOUSE_BUTTON_WHEEL_DOWN: + zoom += ZOOM_SPEED + zoom = clamp(zoom, 1.5, 6) + + if event is InputEventMouseMotion and event.button_mask & MAIN_BUTTONS: + # Compensate motion speed to be resolution-independent (based on the window height). + var relative_motion = event.relative * DisplayServer.window_get_size().y / base_height + rot_y -= relative_motion.x * ROT_SPEED + rot_x -= relative_motion.y * ROT_SPEED + rot_x = clamp(rot_x, deg2rad(-90), 0) + camera_holder.transform.basis = Basis.from_euler(Vector3(0, rot_y, 0)) + rotation_x.transform.basis = Basis.from_euler(Vector3(rot_x, 0, 0)) + + +func _process(delta): + var current_tester = testers.get_child(tester_index) + # This code assumes CameraHolder's X and Y coordinates are already correct. + var current_position = camera_holder.global_transform.origin.z + var target_position = current_tester.global_transform.origin.z + camera_holder.global_transform.origin.z = lerp(current_position, target_position, 3 * delta) + camera.position.z = lerp(camera.position.z, zoom, 10 * delta) + + +func _on_previous_pressed(): + tester_index = max(0, tester_index - 1) + update_gui() + + +func _on_next_pressed(): + tester_index = min(tester_index + 1, testers.get_child_count() - 1) + update_gui() + + +func update_gui(): + $TestName.text = str(testers.get_child(tester_index).name).capitalize() + $Previous.disabled = tester_index == 0 + $Next.disabled = tester_index == testers.get_child_count() - 1 + + +func _on_fxaa_toggled(button_pressed): + get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_FXAA if button_pressed else Viewport.SCREEN_SPACE_AA_DISABLED + + +func _on_temporal_antialiasing_toggled(button_pressed): + get_viewport().use_taa = button_pressed + + +func _on_msaa_item_selected(index): + get_viewport().msaa = index + + +func _on_render_scale_item_selected(index): + match index: + 0: + get_viewport().scaling_3d_scale = 0.5 + 1: + get_viewport().scaling_3d_scale = 0.75 + 2: + get_viewport().scaling_3d_scale = 1.0 + 3: + get_viewport().scaling_3d_scale = 1.25 + 4: + get_viewport().scaling_3d_scale = 1.5 + 5: + get_viewport().scaling_3d_scale = 1.75 + 6: + get_viewport().scaling_3d_scale = 2.0