Browse Source

Update and improve Material Testers for Godot 4.0 (#823)

Co-authored-by: Bastiaan Olij <[email protected]>
Hugo Locurcio 2 years ago
parent
commit
6bdf4cd06e
75 changed files with 632 additions and 378 deletions
  1. 2 4
      3d/material_testers/README.md
  2. 8 9
      3d/material_testers/backgrounds/experiment.hdr.import
  3. 8 9
      3d/material_testers/backgrounds/lobby.hdr.import
  4. 8 9
      3d/material_testers/backgrounds/night.hdr.import
  5. 8 9
      3d/material_testers/backgrounds/park.hdr.import
  6. 6 7
      3d/material_testers/backgrounds/schelde.hdr.import
  7. 13 11
      3d/material_testers/default_env.tres
  8. BIN
      3d/material_testers/icon.png
  9. 1 1
      3d/material_testers/icon.png.import
  10. 156 245
      3d/material_testers/material_tester.tscn
  11. BIN
      3d/material_testers/models/godot_ball.glb
  12. 43 0
      3d/material_testers/models/godot_ball.glb.import
  13. BIN
      3d/material_testers/models/godot_ball.glb.unwrap_cache
  14. BIN
      3d/material_testers/models/godot_ball.mesh
  15. BIN
      3d/material_testers/models/godot_ball.res
  16. 6 3
      3d/material_testers/models/test_bed/large_material.tres
  17. 5 2
      3d/material_testers/models/test_bed/small_material.tres
  18. 3 1
      3d/material_testers/models/test_bed/test_bed.glb.import
  19. 12 11
      3d/material_testers/models/test_bed/test_bed.tscn
  20. 9 0
      3d/material_testers/project.godot
  21. BIN
      3d/material_testers/screenshots/material_testers.webp
  22. BIN
      3d/material_testers/screenshots/mirror.png
  23. BIN
      3d/material_testers/screenshots/stones.png
  24. 15 0
      3d/material_testers/test_materials/aluminium.tres
  25. 1 1
      3d/material_testers/test_materials/aluminium_albedo.png.import
  26. 1 1
      3d/material_testers/test_materials/aluminium_flow.png.import
  27. 1 1
      3d/material_testers/test_materials/aluminium_normal.png.import
  28. 6 0
      3d/material_testers/test_materials/blue.tres
  29. 26 0
      3d/material_testers/test_materials/brick.tres
  30. 24 0
      3d/material_testers/test_materials/cheese.tres
  31. 10 0
      3d/material_testers/test_materials/dark_wood.tres
  32. 6 0
      3d/material_testers/test_materials/gray.tres
  33. 18 0
      3d/material_testers/test_materials/ice.tres
  34. 14 0
      3d/material_testers/test_materials/marble.tres
  35. 1 1
      3d/material_testers/test_materials/marble_albedo.png.import
  36. 5 0
      3d/material_testers/test_materials/mirror.tres
  37. 16 0
      3d/material_testers/test_materials/rock.tres
  38. 1 1
      3d/material_testers/test_materials/rock_albedo.jpg.import
  39. 1 1
      3d/material_testers/test_materials/rock_ao.jpg.import
  40. 1 1
      3d/material_testers/test_materials/rock_depth.jpg.import
  41. 1 1
      3d/material_testers/test_materials/rock_metal.jpg.import
  42. 1 1
      3d/material_testers/test_materials/rock_rough.jpg.import
  43. 1 1
      3d/material_testers/test_materials/sand_albedo.jpg.import
  44. 1 1
      3d/material_testers/test_materials/sand_metal.jpg.import
  45. 1 1
      3d/material_testers/test_materials/sand_normal.jpg.import
  46. 1 1
      3d/material_testers/test_materials/sand_rough.jpg.import
  47. 1 1
      3d/material_testers/test_materials/sand_shine.jpg.import
  48. 26 0
      3d/material_testers/test_materials/stones.tres
  49. 1 1
      3d/material_testers/test_materials/texture_bricks.jpg.import
  50. BIN
      3d/material_testers/test_materials/texture_bricks_ao.jpg
  51. 36 0
      3d/material_testers/test_materials/texture_bricks_ao.jpg.import
  52. BIN
      3d/material_testers/test_materials/texture_bricks_depth.jpg
  53. 1 1
      3d/material_testers/test_materials/texture_bricks_depth.jpg.import
  54. 1 1
      3d/material_testers/test_materials/texture_bricks_metal.jpg.import
  55. 1 1
      3d/material_testers/test_materials/texture_bricks_normal.jpg.import
  56. 1 1
      3d/material_testers/test_materials/texture_cheese_albedo.png.import
  57. 1 1
      3d/material_testers/test_materials/texture_cheese_ao.png.import
  58. 1 1
      3d/material_testers/test_materials/texture_cheese_depth.png.import
  59. 1 1
      3d/material_testers/test_materials/texture_cheese_normal.png.import
  60. 1 1
      3d/material_testers/test_materials/texture_rock_albedo.png.import
  61. 1 1
      3d/material_testers/test_materials/texture_rock_ao.png.import
  62. 1 1
      3d/material_testers/test_materials/texture_rock_depth.png.import
  63. 1 1
      3d/material_testers/test_materials/texture_rock_metal.png.import
  64. 1 1
      3d/material_testers/test_materials/texture_rock_normal.png.import
  65. 1 1
      3d/material_testers/test_materials/texture_wood.png.import
  66. 15 0
      3d/material_testers/test_materials/toon.tres
  67. 16 0
      3d/material_testers/test_materials/wet_sand.tres
  68. 6 0
      3d/material_testers/test_materials/white.tres
  69. 5 0
      3d/material_testers/test_materials/white_plastic.tres
  70. 21 0
      3d/material_testers/test_materials/wool.tres
  71. 1 1
      3d/material_testers/test_materials/wool_albedo.png.import
  72. BIN
      3d/material_testers/test_materials/wool_depth.png
  73. 1 1
      3d/material_testers/test_materials/wool_depth.png.import
  74. 1 1
      3d/material_testers/test_materials/wool_normal.png.import
  75. 48 26
      3d/material_testers/tester.gd

+ 2 - 4
3d/material_testers/README.md

@@ -8,12 +8,10 @@ This demo was featured at the beginning of the
 
 Language: GDScript
 
-Renderer: GLES 3
+Renderer: Forward Plus
 
 Check out this demo on the asset library: https://godotengine.org/asset-library/asset/123
 
 ## Screenshots
 
-![Screenshot](screenshots/stones.png)
-
-![Screenshot](screenshots/mirror.png)
+![Screenshot](screenshots/material_testers.webp)

+ 8 - 9
3d/material_testers/backgrounds/experiment.hdr.import

@@ -2,28 +2,26 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://5vtwlgoj3j4v"
-path.s3tc="res://.godot/imported/experiment.hdr-6856dc9c7216ce389b450cda78cd0dd4.s3tc.ctex"
-path.etc2="res://.godot/imported/experiment.hdr-6856dc9c7216ce389b450cda78cd0dd4.etc2.ctex"
+uid="uid://bc5g4j4hpwts4"
+path="res://.godot/imported/experiment.hdr-6856dc9c7216ce389b450cda78cd0dd4.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
-"vram_texture": true
+"vram_texture": false
 }
 
 [deps]
 
 source_file="res://backgrounds/experiment.hdr"
-dest_files=["res://.godot/imported/experiment.hdr-6856dc9c7216ce389b450cda78cd0dd4.s3tc.ctex", "res://.godot/imported/experiment.hdr-6856dc9c7216ce389b450cda78cd0dd4.etc2.ctex"]
+dest_files=["res://.godot/imported/experiment.hdr-6856dc9c7216ce389b450cda78cd0dd4.ctex"]
 
 [params]
 
-compress/mode=2
+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=true
+mipmaps/generate=false
 mipmaps/limit=-1
 roughness/mode=0
 roughness/src_normal=""
@@ -31,5 +29,6 @@ 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
+detect_3d/compress_to=1

+ 8 - 9
3d/material_testers/backgrounds/lobby.hdr.import

@@ -2,28 +2,26 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://dp6fru2qyhpnv"
-path.s3tc="res://.godot/imported/lobby.hdr-4d3bebcac51f4f3bb35b80c08a53f6b5.s3tc.ctex"
-path.etc2="res://.godot/imported/lobby.hdr-4d3bebcac51f4f3bb35b80c08a53f6b5.etc2.ctex"
+uid="uid://b0ioercv62un7"
+path="res://.godot/imported/lobby.hdr-4d3bebcac51f4f3bb35b80c08a53f6b5.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
-"vram_texture": true
+"vram_texture": false
 }
 
 [deps]
 
 source_file="res://backgrounds/lobby.hdr"
-dest_files=["res://.godot/imported/lobby.hdr-4d3bebcac51f4f3bb35b80c08a53f6b5.s3tc.ctex", "res://.godot/imported/lobby.hdr-4d3bebcac51f4f3bb35b80c08a53f6b5.etc2.ctex"]
+dest_files=["res://.godot/imported/lobby.hdr-4d3bebcac51f4f3bb35b80c08a53f6b5.ctex"]
 
 [params]
 
-compress/mode=2
+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=true
+mipmaps/generate=false
 mipmaps/limit=-1
 roughness/mode=0
 roughness/src_normal=""
@@ -31,5 +29,6 @@ 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
+detect_3d/compress_to=1

+ 8 - 9
3d/material_testers/backgrounds/night.hdr.import

@@ -2,28 +2,26 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://j3nvneplcglg"
-path.s3tc="res://.godot/imported/night.hdr-da28dc6f2f43b1d95c11d8df7ccace96.s3tc.ctex"
-path.etc2="res://.godot/imported/night.hdr-da28dc6f2f43b1d95c11d8df7ccace96.etc2.ctex"
+uid="uid://b5i26muxfsyj"
+path="res://.godot/imported/night.hdr-da28dc6f2f43b1d95c11d8df7ccace96.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
-"vram_texture": true
+"vram_texture": false
 }
 
 [deps]
 
 source_file="res://backgrounds/night.hdr"
-dest_files=["res://.godot/imported/night.hdr-da28dc6f2f43b1d95c11d8df7ccace96.s3tc.ctex", "res://.godot/imported/night.hdr-da28dc6f2f43b1d95c11d8df7ccace96.etc2.ctex"]
+dest_files=["res://.godot/imported/night.hdr-da28dc6f2f43b1d95c11d8df7ccace96.ctex"]
 
 [params]
 
-compress/mode=2
+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=true
+mipmaps/generate=false
 mipmaps/limit=-1
 roughness/mode=0
 roughness/src_normal=""
@@ -31,5 +29,6 @@ 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
+detect_3d/compress_to=1

+ 8 - 9
3d/material_testers/backgrounds/park.hdr.import

@@ -2,28 +2,26 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://cddwkc5abl0ea"
-path.s3tc="res://.godot/imported/park.hdr-fcd9651d2de266bdfd1d7ec8a320f831.s3tc.ctex"
-path.etc2="res://.godot/imported/park.hdr-fcd9651d2de266bdfd1d7ec8a320f831.etc2.ctex"
+uid="uid://b1at3250k1fim"
+path="res://.godot/imported/park.hdr-fcd9651d2de266bdfd1d7ec8a320f831.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
-"vram_texture": true
+"vram_texture": false
 }
 
 [deps]
 
 source_file="res://backgrounds/park.hdr"
-dest_files=["res://.godot/imported/park.hdr-fcd9651d2de266bdfd1d7ec8a320f831.s3tc.ctex", "res://.godot/imported/park.hdr-fcd9651d2de266bdfd1d7ec8a320f831.etc2.ctex"]
+dest_files=["res://.godot/imported/park.hdr-fcd9651d2de266bdfd1d7ec8a320f831.ctex"]
 
 [params]
 
-compress/mode=2
+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=true
+mipmaps/generate=false
 mipmaps/limit=-1
 roughness/mode=0
 roughness/src_normal=""
@@ -31,5 +29,6 @@ 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
+detect_3d/compress_to=1

+ 6 - 7
3d/material_testers/backgrounds/schelde.hdr.import

@@ -2,22 +2,20 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://qxqvflsnn1ur"
-path.s3tc="res://.godot/imported/schelde.hdr-6a13661ddf6710bbc9fa448634fb1bdb.s3tc.ctex"
-path.etc2="res://.godot/imported/schelde.hdr-6a13661ddf6710bbc9fa448634fb1bdb.etc2.ctex"
+uid="uid://ddo4ecus0bal4"
+path="res://.godot/imported/schelde.hdr-6a13661ddf6710bbc9fa448634fb1bdb.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
-"vram_texture": true
+"vram_texture": false
 }
 
 [deps]
 
 source_file="res://backgrounds/schelde.hdr"
-dest_files=["res://.godot/imported/schelde.hdr-6a13661ddf6710bbc9fa448634fb1bdb.s3tc.ctex", "res://.godot/imported/schelde.hdr-6a13661ddf6710bbc9fa448634fb1bdb.etc2.ctex"]
+dest_files=["res://.godot/imported/schelde.hdr-6a13661ddf6710bbc9fa448634fb1bdb.ctex"]
 
 [params]
 
-compress/mode=2
+compress/mode=0
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/bptc_ldr=0
@@ -31,5 +29,6 @@ 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

+ 13 - 11
3d/material_testers/default_env.tres

@@ -1,17 +1,19 @@
-[gd_resource type="Environment" load_steps=3 format=2]
+[gd_resource type="Environment" load_steps=4 format=3 uid="uid://du5gp6ah0abgv"]
 
-[ext_resource path="res://backgrounds/schelde.hdr" type="Texture2D" id=1]
+[ext_resource type="Texture2D" uid="uid://ddo4ecus0bal4" path="res://backgrounds/schelde.hdr" id="1"]
 
-[sub_resource type="PanoramaSkyMaterial" id=1]
-panorama = ExtResource( 1 )
+[sub_resource type="PanoramaSkyMaterial" id="1"]
+panorama = ExtResource("1")
+
+[sub_resource type="Sky" id="2"]
+sky_material = SubResource("1")
+radiance_size = 4
 
 [resource]
 background_mode = 2
-background_sky = SubResource( 1 )
-tonemap_mode = 2
-tonemap_exposure = 1.2
+sky = SubResource("2")
+tonemap_mode = 3
 tonemap_white = 6.0
-ssao_enabled = true
-ssao_light_affect = 0.78
-ssao_quality = 2
-dof_blur_far_distance = 3.22
+fog_enabled = true
+fog_density = 0.002
+fog_sky_affect = 0.0

BIN
3d/material_testers/icon.png


+ 1 - 1
3d/material_testers/icon.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://doyw0t1ntc6ll"
+uid="uid://c4ofbmj3jtd8q"
 path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"
 metadata={
 "vram_texture": false

+ 156 - 245
3d/material_testers/material_tester.tscn

@@ -1,302 +1,175 @@
-[gd_scene load_steps=50 format=3 uid="uid://cr0xfyxw5byn"]
+[gd_scene load_steps=21 format=3 uid="uid://c57duuo5p7mc0"]
 
 [ext_resource type="Script" path="res://tester.gd" id="1"]
-[ext_resource type="Texture2D" uid="uid://qxqvflsnn1ur" path="res://backgrounds/schelde.hdr" id="2_hjmay"]
+[ext_resource type="Environment" uid="uid://du5gp6ah0abgv" path="res://default_env.tres" id="2"]
 [ext_resource type="PackedScene" uid="uid://cgqfdwd4g5e14" path="res://models/test_bed/test_bed.tscn" id="3"]
-[ext_resource type="ArrayMesh" uid="uid://dxsfckuirf72p" path="res://models/godot_ball.mesh" id="4"]
-[ext_resource type="Texture2D" uid="uid://b3efpr0uwln6w" path="res://test_materials/texture_wood.png" id="5"]
-[ext_resource type="Texture2D" uid="uid://xu18ocodkbx7" path="res://test_materials/texture_cheese_albedo.png" id="6"]
-[ext_resource type="Texture2D" uid="uid://65icecsss5vf" path="res://test_materials/texture_cheese_ao.png" id="7"]
-[ext_resource type="Texture2D" uid="uid://8o7dvpd64s0i" path="res://test_materials/texture_cheese_depth.png" id="8"]
-[ext_resource type="Texture2D" uid="uid://7dpm3ud1syn" path="res://test_materials/texture_cheese_normal.png" id="9"]
-[ext_resource type="Texture2D" uid="uid://dll713t0m0b6k" path="res://test_materials/texture_rock_albedo.png" id="10"]
-[ext_resource type="Texture2D" uid="uid://cg1wtsuae0lmc" path="res://test_materials/texture_rock_ao.png" id="11"]
-[ext_resource type="Texture2D" uid="uid://x5qdkxkf4tmq" path="res://test_materials/texture_rock_depth.png" id="12"]
-[ext_resource type="Texture2D" uid="uid://bte0rsu3bcmxa" path="res://test_materials/texture_rock_metal.png" id="13"]
-[ext_resource type="Texture2D" uid="uid://dqhvdd867nvjm" path="res://test_materials/texture_rock_normal.png" id="14"]
-[ext_resource type="Texture2D" uid="uid://w5wmopu8t6ya" path="res://test_materials/texture_bricks.jpg" id="15"]
-[ext_resource type="Texture2D" uid="uid://lbhnr6ww3frm" path="res://test_materials/texture_bricks_depth.jpg" id="16"]
-[ext_resource type="Texture2D" uid="uid://c2d4tyfl662ra" path="res://test_materials/texture_bricks_metal.jpg" id="17"]
-[ext_resource type="Texture2D" uid="uid://baces1lcbjoxv" path="res://test_materials/texture_bricks_normal.jpg" id="18"]
-[ext_resource type="Texture2D" uid="uid://do34kmmykk6gf" path="res://test_materials/wool_albedo.png" id="19"]
-[ext_resource type="Texture2D" uid="uid://b45auu1apiq0g" path="res://test_materials/wool_depth.png" id="20"]
-[ext_resource type="Texture2D" uid="uid://cc44l0alh6gr4" path="res://test_materials/wool_normal.png" id="21"]
-[ext_resource type="Texture2D" uid="uid://b8o8fe1yoym4t" path="res://test_materials/aluminium_albedo.png" id="22"]
-[ext_resource type="Texture2D" uid="uid://0546okw1k04b" path="res://test_materials/aluminium_normal.png" id="23"]
-[ext_resource type="Texture2D" uid="uid://c31bsq44dxyh1" path="res://test_materials/marble_albedo.png" id="24"]
-[ext_resource type="Texture2D" uid="uid://babs1mrgolbcj" path="res://test_materials/sand_albedo.jpg" id="25"]
-[ext_resource type="Texture2D" uid="uid://cisvmvcj8c525" path="res://test_materials/sand_metal.jpg" id="26"]
-[ext_resource type="Texture2D" uid="uid://xvn1ih5tbj6g" path="res://test_materials/sand_normal.jpg" id="27"]
-[ext_resource type="Texture2D" uid="uid://bld3mlnaxf768" path="res://test_materials/sand_rough.jpg" id="28"]
-[ext_resource type="Texture2D" uid="uid://7d4kolmsjw8b" path="res://test_materials/rock_albedo.jpg" id="29"]
-[ext_resource type="Texture2D" uid="uid://3m1hjc851lp4" path="res://test_materials/rock_ao.jpg" id="30"]
-[ext_resource type="Texture2D" uid="uid://h1biny5hb4xc" path="res://test_materials/rock_metal.jpg" id="31"]
-[ext_resource type="Texture2D" uid="uid://1vmbgyaaju3v" path="res://test_materials/rock_rough.jpg" id="32"]
-
-[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_7uer8"]
-panorama = ExtResource( "2_hjmay" )
-
-[sub_resource type="Sky" id="Sky_ruw1w"]
-sky_material = SubResource( "PanoramaSkyMaterial_7uer8" )
-
-[sub_resource type="Environment" id="Environment_q1py5"]
-background_mode = 2
-sky = SubResource( "Sky_ruw1w" )
-tonemap_mode = 2
-glow_enabled = true
-
-[sub_resource type="StandardMaterial3D" id="1"]
-metallic = 0.4
-roughness = 0.35
-
-[sub_resource type="StandardMaterial3D" id="5"]
-metallic = 1.0
-roughness = 0.02
-
-[sub_resource type="StandardMaterial3D" id="6"]
-albedo_color = Color(0.806275, 0.575882, 0.361255, 1)
-albedo_texture = ExtResource( "5" )
-metallic = 0.48
-roughness = 0.28
-
-[sub_resource type="StandardMaterial3D" id="7"]
-albedo_texture = ExtResource( "6" )
-roughness = 0.64
-normal_enabled = true
-normal_texture = ExtResource( "9" )
-ao_enabled = true
-ao_texture = ExtResource( "7" )
-heightmap_enabled = true
-heightmap_scale = 0.13
-heightmap_deep_parallax = true
-heightmap_min_layers = 8
-heightmap_max_layers = 32
-heightmap_texture = ExtResource( "8" )
-heightmap_flip_texture = true
-subsurf_scatter_enabled = true
-subsurf_scatter_strength = 0.37
-
-[sub_resource type="StandardMaterial3D" id="8"]
-albedo_texture = ExtResource( "10" )
-metallic = 0.86
-metallic_texture = ExtResource( "13" )
-roughness = 0.47
-normal_enabled = true
-normal_texture = ExtResource( "14" )
-ao_enabled = true
-ao_texture = ExtResource( "11" )
-heightmap_enabled = true
-heightmap_scale = 0.18
-heightmap_deep_parallax = true
-heightmap_min_layers = 8
-heightmap_max_layers = 32
-heightmap_texture = ExtResource( "12" )
-heightmap_flip_texture = true
-
-[sub_resource type="StandardMaterial3D" id="9"]
-albedo_texture = ExtResource( "15" )
-metallic = 1.0
-metallic_texture = ExtResource( "17" )
-roughness = 0.56
-normal_enabled = true
-normal_texture = ExtResource( "18" )
-heightmap_enabled = true
-heightmap_scale = 0.03
-heightmap_deep_parallax = true
-heightmap_min_layers = 8
-heightmap_max_layers = 32
-heightmap_texture = ExtResource( "16" )
-heightmap_flip_texture = true
-
-[sub_resource type="StandardMaterial3D" id="10"]
-albedo_texture = ExtResource( "19" )
-metallic = 0.1
-roughness = 0.77
-normal_enabled = true
-normal_scale = 0.3
-normal_texture = ExtResource( "21" )
-heightmap_enabled = true
-heightmap_scale = 0.01
-heightmap_deep_parallax = true
-heightmap_min_layers = 8
-heightmap_max_layers = 32
-heightmap_texture = ExtResource( "20" )
-heightmap_flip_texture = true
-
-[sub_resource type="StandardMaterial3D" id="11"]
-albedo_texture = ExtResource( "22" )
-metallic = 0.59
-roughness = 0.4
-normal_enabled = true
-normal_scale = 0.21
-normal_texture = ExtResource( "23" )
-anisotropy_enabled = true
-anisotropy = -0.99
-
-[sub_resource type="StandardMaterial3D" id="12"]
-diffuse_mode = 2
-albedo_texture = ExtResource( "24" )
-metallic = 0.1
-roughness = 0.1
-rim_enabled = true
-rim_tint = 1.0
-subsurf_scatter_enabled = true
-subsurf_scatter_strength = 0.1
-
-[sub_resource type="StandardMaterial3D" id="13"]
-albedo_texture = ExtResource( "25" )
-metallic = 1.0
-metallic_texture = ExtResource( "26" )
-roughness_texture = ExtResource( "28" )
-normal_enabled = true
-normal_scale = 0.43
-normal_texture = ExtResource( "27" )
-
-[sub_resource type="StandardMaterial3D" id="14"]
-albedo_texture = ExtResource( "29" )
-metallic = 0.12
-roughness_texture = ExtResource( "32" )
-normal_enabled = true
-normal_texture = ExtResource( "31" )
-ao_enabled = true
-ao_texture = ExtResource( "30" )
-
-[sub_resource type="StandardMaterial3D" id="15"]
-albedo_color = Color(1, 1, 1, 0)
-albedo_texture = ExtResource( "29" )
-metallic = 1.0
-roughness = 0.62
-normal_enabled = true
-normal_texture = ExtResource( "31" )
-ao_enabled = true
-ao_texture = ExtResource( "30" )
-refraction_enabled = true
-refraction_scale = 0.04
-
-[sub_resource type="StandardMaterial3D" id="16"]
-cull_mode = 1
-shading_mode = 0
-albedo_color = Color(0.0261569, 0, 0, 1)
-grow = true
-grow_amount = 0.03
-
-[sub_resource type="StandardMaterial3D" id="17"]
-next_pass = SubResource( "16" )
-diffuse_mode = 4
-specular_mode = 3
-albedo_color = Color(0.905765, 0.356039, 0.0994902, 1)
-roughness = 0.04
+[ext_resource type="ArrayMesh" uid="uid://btydvpp0agbfj" path="res://models/godot_ball.res" id="4_7al4s"]
+[ext_resource type="Material" uid="uid://bbfkhkmct7wu3" path="res://test_materials/blue.tres" id="5"]
+[ext_resource type="Material" uid="uid://b0qkg55h84i3f" path="res://test_materials/white.tres" id="6"]
+[ext_resource type="Material" uid="uid://d3u3snuqdn404" path="res://test_materials/gray.tres" id="7"]
+[ext_resource type="Material" path="res://test_materials/white_plastic.tres" id="8"]
+[ext_resource type="Material" uid="uid://qpdv7evfgbyw" path="res://test_materials/mirror.tres" id="9"]
+[ext_resource type="Material" uid="uid://djut62ilojfmq" path="res://test_materials/dark_wood.tres" id="10"]
+[ext_resource type="Material" uid="uid://ca5id5w12cprn" path="res://test_materials/stones.tres" id="11"]
+[ext_resource type="Material" uid="uid://dfsu6vtygh0tc" path="res://test_materials/brick.tres" id="12"]
+[ext_resource type="Material" uid="uid://dtui5o3potpen" path="res://test_materials/wool.tres" id="13"]
+[ext_resource type="Material" uid="uid://cg7l6w2h0aq22" path="res://test_materials/aluminium.tres" id="14"]
+[ext_resource type="Material" uid="uid://c5oxndmf0jbu3" path="res://test_materials/marble.tres" id="15"]
+[ext_resource type="Material" uid="uid://dv76cxap5uj7y" path="res://test_materials/cheese.tres" id="16"]
+[ext_resource type="Material" uid="uid://bx0jnmhhr8qwh" path="res://test_materials/wet_sand.tres" id="17"]
+[ext_resource type="Material" uid="uid://dct7oit1go38a" path="res://test_materials/rock.tres" id="18"]
+[ext_resource type="Material" uid="uid://bv6dr534vwcr1" path="res://test_materials/ice.tres" id="19"]
+[ext_resource type="Material" uid="uid://y4yhjq6ftc3l" path="res://test_materials/toon.tres" id="20"]
 
 [node name="MaterialTester" type="Node3D"]
-script = ExtResource( "1" )
+script = ExtResource("1")
 
 [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
-environment = SubResource( "Environment_q1py5" )
+environment = ExtResource("2")
 
 [node name="Testers" type="Node3D" parent="."]
 
-[node name="White Plastic" parent="Testers" instance=ExtResource( "3" )]
+[node name="White Plastic" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -36, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/White Plastic"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "1" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("8")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Mirror" parent="Testers" instance=ExtResource( "3" )]
+[node name="Mirror" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Mirror"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "5" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("9")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Dark Wood" parent="Testers" instance=ExtResource( "3" )]
+[node name="Dark Wood" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -24, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Dark Wood"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "6" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("10")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Cheese" parent="Testers" instance=ExtResource( "3" )]
+[node name="Cheese" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Cheese"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "7" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("16")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Stones" parent="Testers" instance=ExtResource( "3" )]
+[node name="Stones" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Stones"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "8" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("11")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Brick" parent="Testers" instance=ExtResource( "3" )]
+[node name="Brick" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Brick"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "9" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("12")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Wool" parent="Testers" instance=ExtResource( "3" )]
+[node name="Wool" parent="Testers" instance=ExtResource("3")]
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Wool"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "10" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("13")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Aluminium" parent="Testers" instance=ExtResource( "3" )]
+[node name="Aluminium" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Aluminium"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "11" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("14")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Marble" parent="Testers" instance=ExtResource( "3" )]
+[node name="Marble" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Marble"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "12" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("15")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Wet Sand" parent="Testers" instance=ExtResource( "3" )]
+[node name="Wet Sand" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Wet Sand"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "13" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("17")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Rock" parent="Testers" instance=ExtResource( "3" )]
+[node name="Rock" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 24, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Rock"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "14" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("18")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Ice" parent="Testers" instance=ExtResource( "3" )]
+[node name="Ice" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Ice"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "15" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("19")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
-[node name="Toon" parent="Testers" instance=ExtResource( "3" )]
+[node name="Toon" parent="Testers" instance=ExtResource("3")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 36, 0, 0)
 
 [node name="GodotBall" type="MeshInstance3D" parent="Testers/Toon"]
 transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0.5, -4)
-mesh = ExtResource( "4" )
-surface_material_override/0 = SubResource( "17" )
+mesh = ExtResource("4_7al4s")
+surface_material_override/0 = ExtResource("20")
+surface_material_override/1 = ExtResource("6")
+surface_material_override/2 = ExtResource("5")
+surface_material_override/3 = ExtResource("7")
 
 [node name="CameraHolder" type="Node3D" parent="."]
 transform = Transform3D(0.877582, 0, -0.479427, 0, 1, 0, 0.479427, 0, 0.877582, -36, 2.8, -4)
@@ -304,51 +177,89 @@ transform = Transform3D(0.877582, 0, -0.479427, 0, 1, 0, 0.479427, 0, 0.877582,
 [node name="RotationX" type="Node3D" parent="CameraHolder"]
 transform = Transform3D(1, 0, 0, 0, 0.877582, 0.479427, 0, -0.479427, 0.877582, 0, 0, 0)
 
-[node name="Camera3D" type="Camera3D" parent="CameraHolder/RotationX"]
+[node name="Camera" type="Camera3D" parent="CameraHolder/RotationX"]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
 fov = 65.0
 near = 0.1
 
 [node name="UI" type="Control" parent="."]
+layout_mode = 3
+anchors_preset = 15
 anchor_right = 1.0
 anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
 mouse_filter = 2
 
 [node name="Background" type="OptionButton" parent="UI"]
-offset_left = 15.0
-offset_top = 6.0
-offset_right = 109.0
-offset_bottom = 26.0
+layout_mode = 0
+offset_left = 16.0
+offset_top = 16.0
+offset_right = 30.0
+offset_bottom = 36.0
+focus_mode = 0
 
 [node name="Previous" type="Button" parent="UI"]
+layout_mode = 1
+anchors_preset = 2
 anchor_top = 1.0
 anchor_bottom = 1.0
-offset_left = 30.0
-offset_top = -50.0
-offset_right = 97.0
-offset_bottom = -30.0
-text = "Previous"
+offset_left = 16.0
+offset_top = -64.0
+offset_right = 152.0
+offset_bottom = -16.0
+grow_vertical = 0
+focus_mode = 0
+text = "«  Previous"
 
 [node name="Next" type="Button" parent="UI"]
+layout_mode = 1
+anchors_preset = 3
 anchor_left = 1.0
 anchor_top = 1.0
 anchor_right = 1.0
 anchor_bottom = 1.0
-offset_left = -72.0
-offset_top = -50.0
-offset_right = -30.0
-offset_bottom = -30.0
-text = "Next"
+offset_left = -98.0
+offset_top = -64.0
+offset_right = -16.0
+offset_bottom = -16.0
+grow_horizontal = 0
+grow_vertical = 0
+focus_mode = 0
+text = "Next  »"
 
 [node name="MaterialName" type="Label" parent="UI"]
+layout_mode = 1
+anchors_preset = 7
 anchor_left = 0.5
 anchor_top = 1.0
 anchor_right = 0.5
 anchor_bottom = 1.0
-offset_top = -44.0
-offset_bottom = -30.0
+offset_left = -0.5
+offset_top = -58.0
+offset_right = 0.5
+offset_bottom = -24.0
+grow_horizontal = 2
+grow_vertical = 0
 size_flags_vertical = 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
+
+[node name="Quit" type="Button" parent="UI"]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -89.0
+offset_top = 16.0
+offset_right = -16.0
+offset_bottom = 52.0
+grow_horizontal = 0
+focus_mode = 0
+text = "Quit"
 
 [connection signal="item_selected" from="UI/Background" to="." method="_on_bg_item_selected"]
-[connection signal="pressed" from="UI/Previous" to="." method="_on_Previous_pressed"]
-[connection signal="pressed" from="UI/Next" to="." method="_on_Next_pressed"]
+[connection signal="pressed" from="UI/Previous" to="." method="_on_previous_pressed"]
+[connection signal="pressed" from="UI/Next" to="." method="_on_next_pressed"]
+[connection signal="pressed" from="UI/Quit" to="." method="_on_quit_pressed"]

BIN
3d/material_testers/models/godot_ball.glb


+ 43 - 0
3d/material_testers/models/godot_ball.glb.import

@@ -0,0 +1,43 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://dukdgh1bpa6q5"
+path="res://.godot/imported/godot_ball.glb-1d29a1e2bd7edd355fb9eaf990a784af.scn"
+
+[deps]
+
+source_file="res://models/godot_ball.glb"
+dest_files=["res://.godot/imported/godot_ball.glb-1d29a1e2bd7edd355fb9eaf990a784af.scn"]
+
+[params]
+
+nodes/root_type="Node3D"
+nodes/root_name="Scene Root"
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+meshes/ensure_tangents=true
+meshes/generate_lods=false
+meshes/create_shadow_meshes=true
+meshes/light_baking=1
+meshes/lightmap_texel_size=0.1
+skins/use_named_skins=true
+animation/import=true
+animation/fps=15
+animation/trimming=false
+import_script/path=""
+_subresources={
+"meshes": {
+"godot_ball_MSH_GodotBall": {
+"generate/lightmap_uv": 0,
+"generate/lods": 0,
+"generate/shadow_meshes": 0,
+"lods/normal_merge_angle": 60.0,
+"lods/normal_split_angle": 25.0,
+"save_to_file/enabled": true,
+"save_to_file/make_streamable": "",
+"save_to_file/path": "res://models/godot_ball.res"
+}
+}
+}

BIN
3d/material_testers/models/godot_ball.glb.unwrap_cache


BIN
3d/material_testers/models/godot_ball.mesh


BIN
3d/material_testers/models/godot_ball.res


+ 6 - 3
3d/material_testers/models/test_bed/large_material.tres

@@ -1,7 +1,10 @@
-[gd_resource type="StandardMaterial3D" format=2]
+[gd_resource type="StandardMaterial3D" format=3 uid="uid://1wd862s1kfdy"]
 
 [resource]
-params_cull_mode = 1
-albedo_color = Color( 0.78327, 0.78327, 0.78327, 1 )
+cull_mode = 1
+albedo_color = Color(0.78327, 0.78327, 0.78327, 1)
 metallic = 0.1
 roughness = 0.6
+distance_fade_mode = 2
+distance_fade_min_distance = 2.0
+distance_fade_max_distance = 3.0

+ 5 - 2
3d/material_testers/models/test_bed/small_material.tres

@@ -1,5 +1,8 @@
-[gd_resource type="StandardMaterial3D" format=2]
+[gd_resource type="StandardMaterial3D" format=3 uid="uid://bh3dtgmpl7gv0"]
 
 [resource]
-albedo_color = Color( 0.054902, 0.329412, 0.329412, 1 )
+albedo_color = Color(0.054902, 0.329412, 0.329412, 1)
 metallic = 0.1
+distance_fade_mode = 2
+distance_fade_min_distance = 2.0
+distance_fade_max_distance = 3.0

+ 3 - 1
3d/material_testers/models/test_bed/test_bed.glb.import

@@ -3,7 +3,7 @@
 importer="scene"
 importer_version=1
 type="PackedScene"
-uid="uid://b60ph1cdl0xlp"
+uid="uid://c1qfemtam74fa"
 path="res://.godot/imported/test_bed.glb-1dd9b9600e1c429fe8be7609006ad0c1.scn"
 
 [deps]
@@ -15,6 +15,7 @@ dest_files=["res://.godot/imported/test_bed.glb-1dd9b9600e1c429fe8be7609006ad0c1
 
 nodes/root_type="Node3D"
 nodes/root_name="Scene Root"
+nodes/apply_root_scale=true
 nodes/root_scale=1.0
 meshes/ensure_tangents=true
 meshes/generate_lods=true
@@ -24,5 +25,6 @@ meshes/lightmap_texel_size=0.1
 skins/use_named_skins=true
 animation/import=true
 animation/fps=15
+animation/trimming=false
 import_script/path=""
 _subresources={}

+ 12 - 11
3d/material_testers/models/test_bed/test_bed.tscn

@@ -1,21 +1,22 @@
 [gd_scene load_steps=4 format=3 uid="uid://cgqfdwd4g5e14"]
 
-[ext_resource type="PackedScene" uid="uid://b60ph1cdl0xlp" path="res://models/test_bed/test_bed.glb" id="1"]
-[ext_resource type="Material" path="res://models/test_bed/small_material.tres" id="2"]
-[ext_resource type="Material" path="res://models/test_bed/large_material.tres" id="3"]
+[ext_resource type="PackedScene" uid="uid://c1qfemtam74fa" path="res://models/test_bed/test_bed.glb" id="1"]
+[ext_resource type="Material" uid="uid://bh3dtgmpl7gv0" path="res://models/test_bed/small_material.tres" id="2"]
+[ext_resource type="Material" uid="uid://1wd862s1kfdy" path="res://models/test_bed/large_material.tres" id="3"]
 
-[node name="TestBed" instance=ExtResource( "1" )]
+[node name="TestBed" instance=ExtResource("1")]
 
 [node name="SmallPart" parent="." index="0"]
-surface_material_override/0 = ExtResource( "2" )
+surface_material_override/0 = ExtResource("2")
 
 [node name="LargePart" parent="." index="1"]
-surface_material_override/0 = ExtResource( "3" )
+surface_material_override/0 = ExtResource("3")
 
-[node name="SpotLight3D" type="SpotLight3D" parent="." index="2"]
+[node name="SpotLight" type="SpotLight3D" parent="." index="2"]
 transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 5.5, 0)
+light_energy = 1.5
 shadow_enabled = true
-spot_range = 10.0
-spot_attenuation = 0.1
-spot_angle = 35.0
-spot_angle_attenuation = 2.0
+shadow_bias = 0.02
+shadow_blur = 2.0
+spot_range = 15.0
+spot_angle = 31.8299

+ 9 - 0
3d/material_testers/project.godot

@@ -24,6 +24,10 @@ config/icon="res://icon.png"
 window/stretch/mode="canvas_items"
 window/stretch/aspect="expand"
 
+[filesystem]
+
+import/blender/enabled=false
+
 [gdnative]
 
 singletons=[]
@@ -34,6 +38,11 @@ multithread/thread_rid_pool_prealloc=60
 
 [rendering]
 
+textures/default_filters/anisotropic_filtering_level=4
+anti_aliasing/quality/msaa_3d=2
+anti_aliasing/quality/use_debanding=true
+lights_and_shadows/positional_shadow/atlas_size=2048
+lights_and_shadows/positional_shadow/atlas_size.mobile=1024
 quality/driver/fallback_to_gles2=true
 quality/intended_usage/framebuffer_allocation=3
 vram_compression/import_etc=true

BIN
3d/material_testers/screenshots/material_testers.webp


BIN
3d/material_testers/screenshots/mirror.png


BIN
3d/material_testers/screenshots/stones.png


+ 15 - 0
3d/material_testers/test_materials/aluminium.tres

@@ -0,0 +1,15 @@
+[gd_resource type="StandardMaterial3D" load_steps=3 format=3 uid="uid://cg7l6w2h0aq22"]
+
+[ext_resource type="Texture2D" uid="uid://dsb01xyn6yui5" path="res://test_materials/aluminium_albedo.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://ds1h5kb3sbtqq" path="res://test_materials/aluminium_normal.png" id="2"]
+
+[resource]
+albedo_texture = ExtResource("1")
+metallic = 0.59
+roughness = 0.4
+normal_enabled = true
+normal_scale = 0.21
+normal_texture = ExtResource("2")
+anisotropy_enabled = true
+anisotropy = 0.95
+texture_filter = 5

+ 1 - 1
3d/material_testers/test_materials/aluminium_albedo.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://b8o8fe1yoym4t"
+uid="uid://dsb01xyn6yui5"
 path.s3tc="res://.godot/imported/aluminium_albedo.png-a68e22c8a951430ab431b2a7307e8bc7.s3tc.ctex"
 path.etc2="res://.godot/imported/aluminium_albedo.png-a68e22c8a951430ab431b2a7307e8bc7.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/aluminium_flow.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://bebdum2tiuopj"
+uid="uid://cqlianda7xhoy"
 path.s3tc="res://.godot/imported/aluminium_flow.png-93fdac7ed0fa884674e32e5ec0c6d690.s3tc.ctex"
 path.etc2="res://.godot/imported/aluminium_flow.png-93fdac7ed0fa884674e32e5ec0c6d690.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/aluminium_normal.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://0546okw1k04b"
+uid="uid://ds1h5kb3sbtqq"
 path.s3tc="res://.godot/imported/aluminium_normal.png-ff9bf84211f307b1d9e8bf86ebea04b1.s3tc.ctex"
 path.etc2="res://.godot/imported/aluminium_normal.png-ff9bf84211f307b1d9e8bf86ebea04b1.etc2.ctex"
 metadata={

+ 6 - 0
3d/material_testers/test_materials/blue.tres

@@ -0,0 +1,6 @@
+[gd_resource type="StandardMaterial3D" format=3 uid="uid://bbfkhkmct7wu3"]
+
+[resource]
+albedo_color = Color(0.551806, 0.709299, 0.980989, 1)
+metallic = 0.31
+roughness = 0.42

+ 26 - 0
3d/material_testers/test_materials/brick.tres

@@ -0,0 +1,26 @@
+[gd_resource type="StandardMaterial3D" load_steps=6 format=3 uid="uid://dfsu6vtygh0tc"]
+
+[ext_resource type="Texture2D" uid="uid://dyyjfu431yi7r" path="res://test_materials/texture_bricks_depth.jpg" id="1"]
+[ext_resource type="Texture2D" uid="uid://cn6yat4b4mngn" path="res://test_materials/texture_bricks_normal.jpg" id="2"]
+[ext_resource type="Texture2D" uid="uid://cmin1t2jofd3o" path="res://test_materials/texture_bricks_ao.jpg" id="2_geolo"]
+[ext_resource type="Texture2D" uid="uid://d4l8oj2cmq330" path="res://test_materials/texture_bricks.jpg" id="3"]
+[ext_resource type="Texture2D" uid="uid://4t1ufkncfbs3" path="res://test_materials/texture_bricks_metal.jpg" id="4"]
+
+[resource]
+albedo_texture = ExtResource("3")
+metallic = 1.0
+metallic_texture = ExtResource("4")
+roughness = 0.56
+normal_enabled = true
+normal_texture = ExtResource("2")
+ao_enabled = true
+ao_light_affect = 1.0
+ao_texture = ExtResource("2_geolo")
+heightmap_enabled = true
+heightmap_scale = 6.0
+heightmap_deep_parallax = true
+heightmap_min_layers = 4
+heightmap_max_layers = 16
+heightmap_texture = ExtResource("1")
+heightmap_flip_texture = true
+texture_filter = 5

+ 24 - 0
3d/material_testers/test_materials/cheese.tres

@@ -0,0 +1,24 @@
+[gd_resource type="StandardMaterial3D" load_steps=5 format=3 uid="uid://dv76cxap5uj7y"]
+
+[ext_resource type="Texture2D" uid="uid://bbei0af7fjhkn" path="res://test_materials/texture_cheese_albedo.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://ckyituyfs02mo" path="res://test_materials/texture_cheese_depth.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://cwpdpjj628we6" path="res://test_materials/texture_cheese_ao.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://drcrcryt6g6al" path="res://test_materials/texture_cheese_normal.png" id="4"]
+
+[resource]
+albedo_texture = ExtResource("1")
+roughness = 0.64
+normal_enabled = true
+normal_texture = ExtResource("4")
+ao_enabled = true
+ao_light_affect = 1.0
+ao_texture = ExtResource("3")
+heightmap_enabled = true
+heightmap_scale = 8.0
+heightmap_deep_parallax = true
+heightmap_min_layers = 4
+heightmap_max_layers = 16
+heightmap_texture = ExtResource("2")
+heightmap_flip_texture = true
+subsurf_scatter_enabled = true
+subsurf_scatter_strength = 0.37

+ 10 - 0
3d/material_testers/test_materials/dark_wood.tres

@@ -0,0 +1,10 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://djut62ilojfmq"]
+
+[ext_resource type="Texture2D" uid="uid://c8gaxgw81rn5m" path="res://test_materials/texture_wood.png" id="1"]
+
+[resource]
+albedo_color = Color(0.806275, 0.575882, 0.361255, 1)
+albedo_texture = ExtResource("1")
+metallic = 0.48
+roughness = 0.28
+texture_filter = 5

+ 6 - 0
3d/material_testers/test_materials/gray.tres

@@ -0,0 +1,6 @@
+[gd_resource type="StandardMaterial3D" format=3 uid="uid://d3u3snuqdn404"]
+
+[resource]
+albedo_color = Color(0.471216, 0.481647, 0.465961, 1)
+metallic = 0.1
+roughness = 0.0

+ 18 - 0
3d/material_testers/test_materials/ice.tres

@@ -0,0 +1,18 @@
+[gd_resource type="StandardMaterial3D" load_steps=4 format=3 uid="uid://bv6dr534vwcr1"]
+
+[ext_resource type="Texture2D" uid="uid://cjiwyepmfaa2d" path="res://test_materials/rock_ao.jpg" id="1"]
+[ext_resource type="Texture2D" uid="uid://hul3jcu52o8g" path="res://test_materials/rock_albedo.jpg" id="2"]
+[ext_resource type="Texture2D" uid="uid://cyvm2mj4ibl0" path="res://test_materials/rock_metal.jpg" id="3"]
+
+[resource]
+albedo_color = Color(1, 1, 1, 0)
+albedo_texture = ExtResource("2")
+metallic = 1.0
+roughness = 0.62
+normal_enabled = true
+normal_texture = ExtResource("3")
+ao_enabled = true
+ao_texture = ExtResource("1")
+refraction_enabled = true
+refraction_scale = 0.04
+texture_filter = 5

+ 14 - 0
3d/material_testers/test_materials/marble.tres

@@ -0,0 +1,14 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://c5oxndmf0jbu3"]
+
+[ext_resource type="Texture2D" uid="uid://d1lj5qylojp6o" path="res://test_materials/marble_albedo.png" id="1"]
+
+[resource]
+diffuse_mode = 2
+albedo_texture = ExtResource("1")
+metallic = 0.1
+roughness = 0.1
+rim_enabled = true
+rim_tint = 0.7
+subsurf_scatter_enabled = true
+subsurf_scatter_strength = 0.1
+texture_filter = 5

+ 1 - 1
3d/material_testers/test_materials/marble_albedo.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://c31bsq44dxyh1"
+uid="uid://d1lj5qylojp6o"
 path.s3tc="res://.godot/imported/marble_albedo.png-47e5ec5352a78eb204ccaf317de65697.s3tc.ctex"
 path.etc2="res://.godot/imported/marble_albedo.png-47e5ec5352a78eb204ccaf317de65697.etc2.ctex"
 metadata={

+ 5 - 0
3d/material_testers/test_materials/mirror.tres

@@ -0,0 +1,5 @@
+[gd_resource type="StandardMaterial3D" format=3 uid="uid://qpdv7evfgbyw"]
+
+[resource]
+metallic = 1.0
+roughness = 0.02

+ 16 - 0
3d/material_testers/test_materials/rock.tres

@@ -0,0 +1,16 @@
+[gd_resource type="StandardMaterial3D" load_steps=5 format=3 uid="uid://dct7oit1go38a"]
+
+[ext_resource type="Texture2D" uid="uid://cjiwyepmfaa2d" path="res://test_materials/rock_ao.jpg" id="1"]
+[ext_resource type="Texture2D" uid="uid://d28x4upsru550" path="res://test_materials/rock_rough.jpg" id="2"]
+[ext_resource type="Texture2D" uid="uid://hul3jcu52o8g" path="res://test_materials/rock_albedo.jpg" id="3"]
+[ext_resource type="Texture2D" uid="uid://cyvm2mj4ibl0" path="res://test_materials/rock_metal.jpg" id="4"]
+
+[resource]
+albedo_texture = ExtResource("3")
+metallic = 0.12
+roughness_texture = ExtResource("2")
+normal_enabled = true
+normal_texture = ExtResource("4")
+ao_enabled = true
+ao_texture = ExtResource("1")
+texture_filter = 5

+ 1 - 1
3d/material_testers/test_materials/rock_albedo.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://7d4kolmsjw8b"
+uid="uid://hul3jcu52o8g"
 path.s3tc="res://.godot/imported/rock_albedo.jpg-65fe78b8c7d44da07721bb783fdef67a.s3tc.ctex"
 path.etc2="res://.godot/imported/rock_albedo.jpg-65fe78b8c7d44da07721bb783fdef67a.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/rock_ao.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://3m1hjc851lp4"
+uid="uid://cjiwyepmfaa2d"
 path.s3tc="res://.godot/imported/rock_ao.jpg-7578b4ab1e595c076d796172ca68cfa6.s3tc.ctex"
 path.etc2="res://.godot/imported/rock_ao.jpg-7578b4ab1e595c076d796172ca68cfa6.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/rock_depth.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://c0dbkcj7pe743"
+uid="uid://bh3iv3ep28dsq"
 path.s3tc="res://.godot/imported/rock_depth.jpg-4080fbc6202f837d0b0deef2c981bad4.s3tc.ctex"
 path.etc2="res://.godot/imported/rock_depth.jpg-4080fbc6202f837d0b0deef2c981bad4.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/rock_metal.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://h1biny5hb4xc"
+uid="uid://cyvm2mj4ibl0"
 path.s3tc="res://.godot/imported/rock_metal.jpg-8defa2e9d8169c7a08962c4d1f3e6354.s3tc.ctex"
 path.etc2="res://.godot/imported/rock_metal.jpg-8defa2e9d8169c7a08962c4d1f3e6354.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/rock_rough.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://1vmbgyaaju3v"
+uid="uid://d28x4upsru550"
 path.s3tc="res://.godot/imported/rock_rough.jpg-a18116680c5cb62b9f0632460fe30f62.s3tc.ctex"
 path.etc2="res://.godot/imported/rock_rough.jpg-a18116680c5cb62b9f0632460fe30f62.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/sand_albedo.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://babs1mrgolbcj"
+uid="uid://8ccausxvepx"
 path.s3tc="res://.godot/imported/sand_albedo.jpg-c03140f13a9e6c9b1c6fe52f92bc0e1b.s3tc.ctex"
 path.etc2="res://.godot/imported/sand_albedo.jpg-c03140f13a9e6c9b1c6fe52f92bc0e1b.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/sand_metal.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://cisvmvcj8c525"
+uid="uid://d1cw5asi5uuhm"
 path.s3tc="res://.godot/imported/sand_metal.jpg-bc79f66c3e18060c7cbaa67c44681910.s3tc.ctex"
 path.etc2="res://.godot/imported/sand_metal.jpg-bc79f66c3e18060c7cbaa67c44681910.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/sand_normal.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://xvn1ih5tbj6g"
+uid="uid://cukid0fpw2pn0"
 path.s3tc="res://.godot/imported/sand_normal.jpg-7a18b411efc93de1cffd09e24f6336b4.s3tc.ctex"
 path.etc2="res://.godot/imported/sand_normal.jpg-7a18b411efc93de1cffd09e24f6336b4.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/sand_rough.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://bld3mlnaxf768"
+uid="uid://dn11j7g5oa50e"
 path.s3tc="res://.godot/imported/sand_rough.jpg-14616e257ba8a3726af90b2162c4ea2b.s3tc.ctex"
 path.etc2="res://.godot/imported/sand_rough.jpg-14616e257ba8a3726af90b2162c4ea2b.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/sand_shine.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://bk70hojw2e0np"
+uid="uid://2equgeouca2h"
 path="res://.godot/imported/sand_shine.jpg-616f02f6faeaa1d08b3581323d96b4d0.ctex"
 metadata={
 "vram_texture": false

+ 26 - 0
3d/material_testers/test_materials/stones.tres

@@ -0,0 +1,26 @@
+[gd_resource type="StandardMaterial3D" load_steps=6 format=3 uid="uid://ca5id5w12cprn"]
+
+[ext_resource type="Texture2D" uid="uid://vmfa0wdc1t8n" path="res://test_materials/texture_rock_normal.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://c3x34kbl5riq5" path="res://test_materials/texture_rock_depth.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://cyqj8mjgx816d" path="res://test_materials/texture_rock_ao.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://drf5vk54emlea" path="res://test_materials/texture_rock_metal.png" id="4"]
+[ext_resource type="Texture2D" uid="uid://chkhlqxtypsgd" path="res://test_materials/texture_rock_albedo.png" id="5"]
+
+[resource]
+albedo_texture = ExtResource("5")
+metallic = 0.86
+metallic_texture = ExtResource("4")
+roughness = 0.47
+normal_enabled = true
+normal_texture = ExtResource("1")
+ao_enabled = true
+ao_light_affect = 1.0
+ao_texture = ExtResource("3")
+heightmap_enabled = true
+heightmap_scale = 8.0
+heightmap_deep_parallax = true
+heightmap_min_layers = 4
+heightmap_max_layers = 16
+heightmap_texture = ExtResource("2")
+heightmap_flip_texture = true
+texture_filter = 5

+ 1 - 1
3d/material_testers/test_materials/texture_bricks.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://w5wmopu8t6ya"
+uid="uid://d4l8oj2cmq330"
 path.s3tc="res://.godot/imported/texture_bricks.jpg-c5a7a817bf05cfd9e63ae7aecdfad44c.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_bricks.jpg-c5a7a817bf05cfd9e63ae7aecdfad44c.etc2.ctex"
 metadata={

BIN
3d/material_testers/test_materials/texture_bricks_ao.jpg


+ 36 - 0
3d/material_testers/test_materials/texture_bricks_ao.jpg.import

@@ -0,0 +1,36 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cmin1t2jofd3o"
+path.s3tc="res://.godot/imported/texture_bricks_ao.jpg-b6772c3eac21780de75b61fb29d8df6b.s3tc.ctex"
+path.etc2="res://.godot/imported/texture_bricks_ao.jpg-b6772c3eac21780de75b61fb29d8df6b.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc", "etc2"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://test_materials/texture_bricks_ao.jpg"
+dest_files=["res://.godot/imported/texture_bricks_ao.jpg-b6772c3eac21780de75b61fb29d8df6b.s3tc.ctex", "res://.godot/imported/texture_bricks_ao.jpg-b6772c3eac21780de75b61fb29d8df6b.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

BIN
3d/material_testers/test_materials/texture_bricks_depth.jpg


+ 1 - 1
3d/material_testers/test_materials/texture_bricks_depth.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://lbhnr6ww3frm"
+uid="uid://dyyjfu431yi7r"
 path.s3tc="res://.godot/imported/texture_bricks_depth.jpg-fed037b05656973f46c8d8fc0dae33d5.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_bricks_depth.jpg-fed037b05656973f46c8d8fc0dae33d5.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_bricks_metal.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://c2d4tyfl662ra"
+uid="uid://4t1ufkncfbs3"
 path.s3tc="res://.godot/imported/texture_bricks_metal.jpg-0cfc783b7a5646c7f79c1bfc856a0169.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_bricks_metal.jpg-0cfc783b7a5646c7f79c1bfc856a0169.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_bricks_normal.jpg.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://baces1lcbjoxv"
+uid="uid://cn6yat4b4mngn"
 path.s3tc="res://.godot/imported/texture_bricks_normal.jpg-605ba8666210a56b09eb0b2392bd6355.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_bricks_normal.jpg-605ba8666210a56b09eb0b2392bd6355.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_cheese_albedo.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://xu18ocodkbx7"
+uid="uid://bbei0af7fjhkn"
 path.s3tc="res://.godot/imported/texture_cheese_albedo.png-47db78359d020535d042fccfe547c563.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_cheese_albedo.png-47db78359d020535d042fccfe547c563.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_cheese_ao.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://65icecsss5vf"
+uid="uid://cwpdpjj628we6"
 path.s3tc="res://.godot/imported/texture_cheese_ao.png-db37cd87a9560149bf42629f84a8517d.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_cheese_ao.png-db37cd87a9560149bf42629f84a8517d.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_cheese_depth.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://8o7dvpd64s0i"
+uid="uid://ckyituyfs02mo"
 path.s3tc="res://.godot/imported/texture_cheese_depth.png-71cbe5ab2c9f4e2343f1082a376b299f.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_cheese_depth.png-71cbe5ab2c9f4e2343f1082a376b299f.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_cheese_normal.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://7dpm3ud1syn"
+uid="uid://drcrcryt6g6al"
 path.s3tc="res://.godot/imported/texture_cheese_normal.png-cfbb1f914512de34b962a84fd60e3641.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_cheese_normal.png-cfbb1f914512de34b962a84fd60e3641.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_rock_albedo.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://dll713t0m0b6k"
+uid="uid://chkhlqxtypsgd"
 path.s3tc="res://.godot/imported/texture_rock_albedo.png-02df27b2a7e2344422e9ac7cdaec70ee.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_rock_albedo.png-02df27b2a7e2344422e9ac7cdaec70ee.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_rock_ao.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://cg1wtsuae0lmc"
+uid="uid://cyqj8mjgx816d"
 path.s3tc="res://.godot/imported/texture_rock_ao.png-b7008000c4f1458c49be4996848f1a6e.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_rock_ao.png-b7008000c4f1458c49be4996848f1a6e.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_rock_depth.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://x5qdkxkf4tmq"
+uid="uid://c3x34kbl5riq5"
 path.s3tc="res://.godot/imported/texture_rock_depth.png-e02f2dbd984045ed2373ac9f5ad46460.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_rock_depth.png-e02f2dbd984045ed2373ac9f5ad46460.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_rock_metal.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://bte0rsu3bcmxa"
+uid="uid://drf5vk54emlea"
 path.s3tc="res://.godot/imported/texture_rock_metal.png-53fdacd914e7bfa258d07a88f0644507.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_rock_metal.png-53fdacd914e7bfa258d07a88f0644507.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_rock_normal.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://dqhvdd867nvjm"
+uid="uid://vmfa0wdc1t8n"
 path.s3tc="res://.godot/imported/texture_rock_normal.png-c5ae054e70e4a6414518c2178ea9b0b7.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_rock_normal.png-c5ae054e70e4a6414518c2178ea9b0b7.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/texture_wood.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://b3efpr0uwln6w"
+uid="uid://c8gaxgw81rn5m"
 path.s3tc="res://.godot/imported/texture_wood.png-e3109b4e15fb09c6edce5029c4f30771.s3tc.ctex"
 path.etc2="res://.godot/imported/texture_wood.png-e3109b4e15fb09c6edce5029c4f30771.etc2.ctex"
 metadata={

+ 15 - 0
3d/material_testers/test_materials/toon.tres

@@ -0,0 +1,15 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://y4yhjq6ftc3l"]
+
+[sub_resource type="StandardMaterial3D" id="1"]
+cull_mode = 1
+shading_mode = 0
+albedo_color = Color(0.24, 0.076, 0, 1)
+grow = true
+grow_amount = 0.03
+
+[resource]
+next_pass = SubResource("1")
+specular_mode = 1
+albedo_color = Color(0.905882, 0.356863, 0.0980392, 1)
+metallic_specular = 0.0
+roughness = 0.04

+ 16 - 0
3d/material_testers/test_materials/wet_sand.tres

@@ -0,0 +1,16 @@
+[gd_resource type="StandardMaterial3D" load_steps=5 format=3 uid="uid://bx0jnmhhr8qwh"]
+
+[ext_resource type="Texture2D" uid="uid://8ccausxvepx" path="res://test_materials/sand_albedo.jpg" id="1"]
+[ext_resource type="Texture2D" uid="uid://d1cw5asi5uuhm" path="res://test_materials/sand_metal.jpg" id="2"]
+[ext_resource type="Texture2D" uid="uid://dn11j7g5oa50e" path="res://test_materials/sand_rough.jpg" id="3"]
+[ext_resource type="Texture2D" uid="uid://cukid0fpw2pn0" path="res://test_materials/sand_normal.jpg" id="4"]
+
+[resource]
+albedo_texture = ExtResource("1")
+metallic = 1.0
+metallic_texture = ExtResource("2")
+roughness_texture = ExtResource("3")
+normal_enabled = true
+normal_scale = 0.43
+normal_texture = ExtResource("4")
+texture_filter = 5

+ 6 - 0
3d/material_testers/test_materials/white.tres

@@ -0,0 +1,6 @@
+[gd_resource type="StandardMaterial3D" format=3 uid="uid://b0qkg55h84i3f"]
+
+[resource]
+albedo_color = Color(0.895294, 0.900549, 0.890078, 1)
+metallic = 0.1
+roughness = 0.52

+ 5 - 0
3d/material_testers/test_materials/white_plastic.tres

@@ -0,0 +1,5 @@
+[gd_resource type="SpatialMaterial" format=2]
+
+[resource]
+metallic = 0.4
+roughness = 0.35

+ 21 - 0
3d/material_testers/test_materials/wool.tres

@@ -0,0 +1,21 @@
+[gd_resource type="StandardMaterial3D" load_steps=4 format=3 uid="uid://dtui5o3potpen"]
+
+[ext_resource type="Texture2D" uid="uid://bayryamoxiov5" path="res://test_materials/wool_depth.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://b0t0oeh8bp1iv" path="res://test_materials/wool_normal.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://bmdw1rtlv8ij3" path="res://test_materials/wool_albedo.png" id="3"]
+
+[resource]
+albedo_texture = ExtResource("3")
+metallic = 0.1
+roughness = 0.77
+normal_enabled = true
+normal_scale = 0.3
+normal_texture = ExtResource("2")
+heightmap_enabled = true
+heightmap_scale = 6.0
+heightmap_deep_parallax = true
+heightmap_min_layers = 4
+heightmap_max_layers = 16
+heightmap_texture = ExtResource("1")
+heightmap_flip_texture = true
+texture_filter = 5

+ 1 - 1
3d/material_testers/test_materials/wool_albedo.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://do34kmmykk6gf"
+uid="uid://bmdw1rtlv8ij3"
 path.s3tc="res://.godot/imported/wool_albedo.png-a41e4f37762b4ccb66c8b36c42febef1.s3tc.ctex"
 path.etc2="res://.godot/imported/wool_albedo.png-a41e4f37762b4ccb66c8b36c42febef1.etc2.ctex"
 metadata={

BIN
3d/material_testers/test_materials/wool_depth.png


+ 1 - 1
3d/material_testers/test_materials/wool_depth.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://b45auu1apiq0g"
+uid="uid://bayryamoxiov5"
 path.s3tc="res://.godot/imported/wool_depth.png-47d3fa1d6b4aa0857f735cbad6b1556e.s3tc.ctex"
 path.etc2="res://.godot/imported/wool_depth.png-47d3fa1d6b4aa0857f735cbad6b1556e.etc2.ctex"
 metadata={

+ 1 - 1
3d/material_testers/test_materials/wool_normal.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://cc44l0alh6gr4"
+uid="uid://b0t0oeh8bp1iv"
 path.s3tc="res://.godot/imported/wool_normal.png-e7a5ef7bc0ad8d444a32a136bf5d4f12.s3tc.ctex"
 path.etc2="res://.godot/imported/wool_normal.png-e7a5ef7bc0ad8d444a32a136bf5d4f12.etc2.ctex"
 metadata={

+ 48 - 26
3d/material_testers/tester.gd

@@ -4,72 +4,94 @@ const INTERP_SPEED = 2
 const ROT_SPEED = 0.003
 const ZOOM_SPEED = 0.1
 const ZOOM_MAX = 2.5
-const MAIN_BUTTONS = MOUSE_BUTTON_MASK_LEFT | MOUSE_BUTTON_MASK_RIGHT | MOUSE_BUTTON_MASK_MIDDLE
+const MAIN_BUTTONS = MOUSE_BUTTON_MASK_LEFT | MOUSE_BUTTON_MASK_MIDDLE | MOUSE_BUTTON_MASK_RIGHT
 
 var tester_index = 0
-var rot_x = -0.5 # This must be kept in sync with RotationX.
-var rot_y = -0.5 # This must be kept in sync with CameraHolder.
+var rot_x = -0.5  # This must be kept in sync with RotationX.
+var rot_y = -0.5  # This must be kept in sync with CameraHolder.
 var zoom = 5
 var base_height = ProjectSettings.get_setting("display/window/size/viewport_height")
 
 var backgrounds = [
-	{ path = "res://backgrounds/schelde.hdr", name = "Riverside"},
-	{ path = "res://backgrounds/lobby.hdr", name = "Lobby"},
-	{ path = "res://backgrounds/park.hdr", name = "Park"},
-	{ path = "res://backgrounds/night.hdr", name = "Night"},
-	{ path = "res://backgrounds/experiment.hdr", name = "Experiment"},
+	{ path = "res://backgrounds/schelde.hdr", name = "Riverside" },
+	{ path = "res://backgrounds/lobby.hdr", name = "Lobby" },
+	{ path = "res://backgrounds/park.hdr", name = "Park" },
+	{ path = "res://backgrounds/night.hdr", name = "Night" },
+	{ path = "res://backgrounds/experiment.hdr", name = "Experiment" },
 ]
 
-@onready var testers = $Testers
-@onready var material_name = $UI/MaterialName
+@onready var testers: Node3D = $Testers
+@onready var material_name: Label = $UI/MaterialName
 
-@onready var camera_holder = $CameraHolder # Has a position and rotates on Y.
-@onready var rotation_x = $CameraHolder/RotationX
-@onready var camera = $CameraHolder/RotationX/Camera3D
+@onready var camera_holder: Node3D = $CameraHolder # Has a position and rotates on Y.
+@onready var rotation_x: Node3D = $CameraHolder/RotationX
+@onready var camera: Camera3D = $CameraHolder/RotationX/Camera
 
 func _ready():
 	for background in backgrounds:
 		get_node(^"UI/Background").add_item(background.name)
 
+	update_gui()
 
-func _unhandled_input(ev):
-	if ev is InputEventMouseButton:
-		if ev.button_index == MOUSE_BUTTON_WHEEL_UP:
+
+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 ev.button_index == MOUSE_BUTTON_WHEEL_DOWN:
+		if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
 			zoom += ZOOM_SPEED
 		zoom = clamp(zoom, 2, 8)
 		camera.position.z = zoom
 
-	if ev is InputEventMouseMotion and ev.button_mask & MAIN_BUTTONS:
+	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 = ev.relative * get_viewport().size.y / base_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_y = clamp(rot_y, -1.6, 1.6)
-		rot_x = clamp(rot_x, -1.4, 0.5)
+		rot_x = clamp(rot_x, -1.4, 0.45)
 		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)
-	material_name.text = String(current_tester.get_name())
 	# This code assumes CameraHolder's Y and Z coordinates are already correct.
 	var target_position = current_tester.transform.origin.x
 	var current_position = camera_holder.transform.origin.x
 	camera_holder.transform.origin.x = lerp(current_position, target_position, INTERP_SPEED * delta)
 
 
-func _on_Previous_pressed():
+func _on_previous_pressed():
 	if tester_index > 0:
 		tester_index -= 1
 
+	update_gui()
+
 
-func _on_Next_pressed():
-	if tester_index < testers.get_child_count() -1:
+func _on_next_pressed():
+	if tester_index < testers.get_child_count() - 1:
 		tester_index += 1
 
+	update_gui()
+
+
+func update_gui():
+	var current_tester = testers.get_child(tester_index)
+	material_name.text = current_tester.get_name()
+	$UI/Previous.disabled = tester_index == 0
+	$UI/Next.disabled = tester_index == testers.get_child_count() - 1
+
 
 func _on_bg_item_selected(index):
-	get_node(^"WorldEnvironment").environment.sky.sky_material.panorama = load(backgrounds[index].path)
+	var sky_material : PanoramaSkyMaterial = $WorldEnvironment.environment.sky.sky_material
+
+	sky_material.panorama = load(backgrounds[index].path)
+
+
+func _on_quit_pressed():
+	get_tree().quit()