diff --git a/.gitattributes b/.gitattributes
index cc548e725d14974fb72b8fec0930ad5e93125afb..407f8b983be293b03ad06b7f10a4ac4a24c62aa3 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -43,3 +43,6 @@ task[[:space:]]complete.mp3 filter=lfs diff=lfs merge=lfs -text
team_cheer.ogg filter=lfs diff=lfs merge=lfs -text
universfield-game-bonus-144751.mp3 filter=lfs diff=lfs merge=lfs -text
walking[[:space:]]effect.mp3 filter=lfs diff=lfs merge=lfs -text
+*.glb filter=lfs diff=lfs merge=lfs -text
+*.png filter=lfs diff=lfs merge=lfs -text
+*.jpg filter=lfs diff=lfs merge=lfs -text
diff --git a/Models/GLB format/Textures/colormap.png b/Models/GLB format/Textures/colormap.png
new file mode 100644
index 0000000000000000000000000000000000000000..946340d5e925c25dbe1a342c7ab61516ce957bd8
--- /dev/null
+++ b/Models/GLB format/Textures/colormap.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:439dfcac935cfd75dc16f28333a4c8284fffcc4b24f857c61cfb4c8a964a15bd
+size 11140
diff --git a/Models/GLB format/barrel.glb b/Models/GLB format/barrel.glb
new file mode 100644
index 0000000000000000000000000000000000000000..c339dac1f38ce0af21a65bb0b978d775e4c9257f
--- /dev/null
+++ b/Models/GLB format/barrel.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a65835b830699e58810f4f9afdd54ddff9537fd6d23f6f2bd3af1a59bbdff149
+size 14092
diff --git a/Models/GLB format/character-oobi.glb b/Models/GLB format/character-oobi.glb
new file mode 100644
index 0000000000000000000000000000000000000000..9248a1a2f71b8f446c870bb1412fa16d43382190
--- /dev/null
+++ b/Models/GLB format/character-oobi.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42cb1889e1ef6404f3d6b5d5ac6b79c9d9a60bc54fd82df83c63c664705873e4
+size 236392
diff --git a/Models/GLB format/chest.glb b/Models/GLB format/chest.glb
new file mode 100644
index 0000000000000000000000000000000000000000..aacfae8ce5254ab30837b8d2fbd127bb44fed0cf
--- /dev/null
+++ b/Models/GLB format/chest.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba92d21be71649e608de4c76859f04e83308efc699508b2ddb1221678102e274
+size 28012
diff --git a/Models/GLB format/coin-gold.glb b/Models/GLB format/coin-gold.glb
new file mode 100644
index 0000000000000000000000000000000000000000..926785a74ad501f5eb750522664aa1db1ec61127
--- /dev/null
+++ b/Models/GLB format/coin-gold.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cf2179e57721b943d88283d38678c4b1b8422e9a4dd44f631acfb35007c223a8
+size 10608
diff --git a/Models/GLB format/coin-silver.glb b/Models/GLB format/coin-silver.glb
new file mode 100644
index 0000000000000000000000000000000000000000..142b53054fff3335623c1b32d0afb85059f1a2a5
--- /dev/null
+++ b/Models/GLB format/coin-silver.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:267012feb04e773cbb6c82a477f38743a69a34249b506a6eb551370392acc55c
+size 10580
diff --git a/Models/GLB format/crate.glb b/Models/GLB format/crate.glb
new file mode 100644
index 0000000000000000000000000000000000000000..3a8cd78bbee4aa8fb52d843cb7edcfe52c5e7497
--- /dev/null
+++ b/Models/GLB format/crate.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5eb6b633b71d7459c7ef9b0bf6e138a719175e107d4d52faca8fc7d0a059a45a
+size 14336
diff --git a/Models/GLB format/fence-straight.glb b/Models/GLB format/fence-straight.glb
new file mode 100644
index 0000000000000000000000000000000000000000..11e8b1ea922999aa0c3d9d69d073a6ba0a6765a6
--- /dev/null
+++ b/Models/GLB format/fence-straight.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:008d1895b4ac463bb7438d7ba4b34d66548cdb547130b228cc3526e575291f0a
+size 6468
diff --git a/Models/GLB format/flag.glb b/Models/GLB format/flag.glb
new file mode 100644
index 0000000000000000000000000000000000000000..e840517fec8c3dcb7541df8922a561887d8f8cec
--- /dev/null
+++ b/Models/GLB format/flag.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:41dc8355080ed9f73adeefa7befaec44b6956ba1353c23bc9ff73d97a53fc143
+size 11396
diff --git a/Models/GLB format/flowers-tall.glb b/Models/GLB format/flowers-tall.glb
new file mode 100644
index 0000000000000000000000000000000000000000..526aaffe1f1a17b036ed76677bd7e8f235e9699c
--- /dev/null
+++ b/Models/GLB format/flowers-tall.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5702718a07ec1cf44e390d166a60bed43226c95527aa74f13ebbc76893f0309e
+size 39256
diff --git a/Models/GLB format/flowers.glb b/Models/GLB format/flowers.glb
new file mode 100644
index 0000000000000000000000000000000000000000..c0deef0c8ab3361b07f180835e0274c2e3b690db
--- /dev/null
+++ b/Models/GLB format/flowers.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4d459bf014a534a79a6763e59d9c548902600fe0e0e025654bd58a979139be6
+size 25928
diff --git a/Models/GLB format/grass.glb b/Models/GLB format/grass.glb
new file mode 100644
index 0000000000000000000000000000000000000000..1e581d721904d00a8f118673c06f5b1940f79517
--- /dev/null
+++ b/Models/GLB format/grass.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:601ae2a507f4bccbe93c08433479c07ccaea0fcd8a3769264505a9cfeec4baa5
+size 8964
diff --git a/Models/GLB format/jewel.glb b/Models/GLB format/jewel.glb
new file mode 100644
index 0000000000000000000000000000000000000000..2f5c8f700550d545ef7563558f791965de193471
--- /dev/null
+++ b/Models/GLB format/jewel.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cec20d8ae2678c292b3885aaee468ba39d165a7e2043af5ba8102b6cd974c2c3
+size 3580
diff --git a/Models/GLB format/mushrooms.glb b/Models/GLB format/mushrooms.glb
new file mode 100644
index 0000000000000000000000000000000000000000..cefefac455bcb03c3652e2297c02caf8cd6184bf
--- /dev/null
+++ b/Models/GLB format/mushrooms.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:81971dad14f9947d70897f1f76d7b3e723b7ee3737a32274ed8cc0355ea55c66
+size 13728
diff --git a/Models/GLB format/plant.glb b/Models/GLB format/plant.glb
new file mode 100644
index 0000000000000000000000000000000000000000..547181bfd6798b49d1454ae1995c5c1583e6d9e9
--- /dev/null
+++ b/Models/GLB format/plant.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0881669528fcc01038a104a89c5290d1cbe0cb4aa90c4f78e78ebe1de2281d7a
+size 13124
diff --git a/Models/GLB format/rocks.glb b/Models/GLB format/rocks.glb
new file mode 100644
index 0000000000000000000000000000000000000000..de4d828026770b9c30d02317044393c6b6747b83
--- /dev/null
+++ b/Models/GLB format/rocks.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40a7cb558466510ca1976b0e007e351e53c89ac6b61f0b6a277b3226026c3326
+size 9556
diff --git a/Models/GLB format/sign.glb b/Models/GLB format/sign.glb
new file mode 100644
index 0000000000000000000000000000000000000000..7e55477c3d9524541b061489b274b118450e74c2
--- /dev/null
+++ b/Models/GLB format/sign.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:657a32a0d4585ffc1d85ccdf83bc6615890b9d4ec37d190248692ad3ae25c1b1
+size 8844
diff --git a/Models/GLB format/star.glb b/Models/GLB format/star.glb
new file mode 100644
index 0000000000000000000000000000000000000000..6e850482c476ef9253d9ae52d0774aba51d600fe
--- /dev/null
+++ b/Models/GLB format/star.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a102a1b961fe0932c98ca29200ee6becae711b42437f14d58703388114eeff3c
+size 6268
diff --git a/Models/GLB format/stones.glb b/Models/GLB format/stones.glb
new file mode 100644
index 0000000000000000000000000000000000000000..bd82caa4fa1a3e7243b3d7080a1b2d84c7f9edd9
--- /dev/null
+++ b/Models/GLB format/stones.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0468bd937ffe5a7bcaa4cddb08e4660533df4c2079e885da2c3d32df07ff77d6
+size 13752
diff --git a/Models/GLB format/tree-pine.glb b/Models/GLB format/tree-pine.glb
new file mode 100644
index 0000000000000000000000000000000000000000..eee0a6451158a23ab6eedd69630cf2f24c957ac8
--- /dev/null
+++ b/Models/GLB format/tree-pine.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:520ddf910ae7904871fc906169d5e76364d5ff643a92cb983563c1a24d995ebb
+size 22396
diff --git a/Models/GLB format/tree.glb b/Models/GLB format/tree.glb
new file mode 100644
index 0000000000000000000000000000000000000000..0d61d73ac0666bfc4384553e372ba0ba5e0622aa
--- /dev/null
+++ b/Models/GLB format/tree.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:632eb83a4359afd110594ea6f69db4db0c9512c79ae2c88741cf68e527253e41
+size 42680
diff --git a/Models/hero/RobotExpressive.glb b/Models/hero/RobotExpressive.glb
new file mode 100644
index 0000000000000000000000000000000000000000..7cb755065a9a92bb9bdbd723f3f617b59e84fbf1
--- /dev/null
+++ b/Models/hero/RobotExpressive.glb
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:047f5e5fb3bb6d378bd1df16ca6137f2a596c99b3a1b5690b4020c05aaf6f319
+size 463988
diff --git a/README.md b/README.md
index acef59a5559adee5f1d43e83b4b028cd3645654d..ea85fb5baca2609945c7a358fc79fda12b1771b3 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,20 @@
---
-title: Game
-emoji: 📉
-colorFrom: yellow
-colorTo: indigo
-sdk: gradio
-sdk_version: 6.19.0
-python_version: '3.13'
-app_file: app.py
+title: Magic Forest – Learn & Play!
+emoji: 🦊
+colorFrom: green
+colorTo: blue
+sdk: static
+app_file: index.html
pinned: false
-short_description: game
+short_description: A 3D kids learning game – numbers, letters & coins
---
-Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
+# Magic Forest – Learn & Play!
+
+A colorful 3D forest game for kids built with Three.js. Explore, jump, find the
+right numbers and spell their words to clear levels — with cheerful voice
+prompts, sound effects and music.
+
+Controls: arrow keys / on-screen pad to move, Space / JUMP to jump.
+
+Served as a static Space (`index.html` entry point).
diff --git a/cheer_0.mp3 b/audio/cheer_0.mp3
similarity index 100%
rename from cheer_0.mp3
rename to audio/cheer_0.mp3
diff --git a/cheer_1.mp3 b/audio/cheer_1.mp3
similarity index 100%
rename from cheer_1.mp3
rename to audio/cheer_1.mp3
diff --git a/cheer_2.mp3 b/audio/cheer_2.mp3
similarity index 100%
rename from cheer_2.mp3
rename to audio/cheer_2.mp3
diff --git a/cheer_3.mp3 b/audio/cheer_3.mp3
similarity index 100%
rename from cheer_3.mp3
rename to audio/cheer_3.mp3
diff --git a/cheer_4.mp3 b/audio/cheer_4.mp3
similarity index 100%
rename from cheer_4.mp3
rename to audio/cheer_4.mp3
diff --git a/cheer_5.mp3 b/audio/cheer_5.mp3
similarity index 100%
rename from cheer_5.mp3
rename to audio/cheer_5.mp3
diff --git a/cheer_6.mp3 b/audio/cheer_6.mp3
similarity index 100%
rename from cheer_6.mp3
rename to audio/cheer_6.mp3
diff --git a/cheer_7.mp3 b/audio/cheer_7.mp3
similarity index 100%
rename from cheer_7.mp3
rename to audio/cheer_7.mp3
diff --git a/find_1.mp3 b/audio/find_1.mp3
similarity index 100%
rename from find_1.mp3
rename to audio/find_1.mp3
diff --git a/find_10.mp3 b/audio/find_10.mp3
similarity index 100%
rename from find_10.mp3
rename to audio/find_10.mp3
diff --git a/find_2.mp3 b/audio/find_2.mp3
similarity index 100%
rename from find_2.mp3
rename to audio/find_2.mp3
diff --git a/find_3.mp3 b/audio/find_3.mp3
similarity index 100%
rename from find_3.mp3
rename to audio/find_3.mp3
diff --git a/find_4.mp3 b/audio/find_4.mp3
similarity index 100%
rename from find_4.mp3
rename to audio/find_4.mp3
diff --git a/find_5.mp3 b/audio/find_5.mp3
similarity index 100%
rename from find_5.mp3
rename to audio/find_5.mp3
diff --git a/find_6.mp3 b/audio/find_6.mp3
similarity index 100%
rename from find_6.mp3
rename to audio/find_6.mp3
diff --git a/find_7.mp3 b/audio/find_7.mp3
similarity index 100%
rename from find_7.mp3
rename to audio/find_7.mp3
diff --git a/find_8.mp3 b/audio/find_8.mp3
similarity index 100%
rename from find_8.mp3
rename to audio/find_8.mp3
diff --git a/find_9.mp3 b/audio/find_9.mp3
similarity index 100%
rename from find_9.mp3
rename to audio/find_9.mp3
diff --git a/greet.mp3 b/audio/greet.mp3
similarity index 100%
rename from greet.mp3
rename to audio/greet.mp3
diff --git a/instr_move.mp3 b/audio/instr_move.mp3
similarity index 100%
rename from instr_move.mp3
rename to audio/instr_move.mp3
diff --git a/level_complete.mp3 b/audio/level_complete.mp3
similarity index 100%
rename from level_complete.mp3
rename to audio/level_complete.mp3
diff --git a/name_a.mp3 b/audio/name_a.mp3
similarity index 100%
rename from name_a.mp3
rename to audio/name_a.mp3
diff --git a/name_b.mp3 b/audio/name_b.mp3
similarity index 100%
rename from name_b.mp3
rename to audio/name_b.mp3
diff --git a/name_c.mp3 b/audio/name_c.mp3
similarity index 100%
rename from name_c.mp3
rename to audio/name_c.mp3
diff --git a/name_d.mp3 b/audio/name_d.mp3
similarity index 100%
rename from name_d.mp3
rename to audio/name_d.mp3
diff --git a/name_e.mp3 b/audio/name_e.mp3
similarity index 100%
rename from name_e.mp3
rename to audio/name_e.mp3
diff --git a/name_f.mp3 b/audio/name_f.mp3
similarity index 100%
rename from name_f.mp3
rename to audio/name_f.mp3
diff --git a/name_g.mp3 b/audio/name_g.mp3
similarity index 100%
rename from name_g.mp3
rename to audio/name_g.mp3
diff --git a/name_h.mp3 b/audio/name_h.mp3
similarity index 100%
rename from name_h.mp3
rename to audio/name_h.mp3
diff --git a/name_i.mp3 b/audio/name_i.mp3
similarity index 100%
rename from name_i.mp3
rename to audio/name_i.mp3
diff --git a/name_j.mp3 b/audio/name_j.mp3
similarity index 100%
rename from name_j.mp3
rename to audio/name_j.mp3
diff --git a/name_k.mp3 b/audio/name_k.mp3
similarity index 100%
rename from name_k.mp3
rename to audio/name_k.mp3
diff --git a/name_l.mp3 b/audio/name_l.mp3
similarity index 100%
rename from name_l.mp3
rename to audio/name_l.mp3
diff --git a/name_m.mp3 b/audio/name_m.mp3
similarity index 100%
rename from name_m.mp3
rename to audio/name_m.mp3
diff --git a/name_n.mp3 b/audio/name_n.mp3
similarity index 100%
rename from name_n.mp3
rename to audio/name_n.mp3
diff --git a/name_o.mp3 b/audio/name_o.mp3
similarity index 100%
rename from name_o.mp3
rename to audio/name_o.mp3
diff --git a/name_p.mp3 b/audio/name_p.mp3
similarity index 100%
rename from name_p.mp3
rename to audio/name_p.mp3
diff --git a/name_q.mp3 b/audio/name_q.mp3
similarity index 100%
rename from name_q.mp3
rename to audio/name_q.mp3
diff --git a/name_r.mp3 b/audio/name_r.mp3
similarity index 100%
rename from name_r.mp3
rename to audio/name_r.mp3
diff --git a/name_s.mp3 b/audio/name_s.mp3
similarity index 100%
rename from name_s.mp3
rename to audio/name_s.mp3
diff --git a/name_t.mp3 b/audio/name_t.mp3
similarity index 100%
rename from name_t.mp3
rename to audio/name_t.mp3
diff --git a/name_u.mp3 b/audio/name_u.mp3
similarity index 100%
rename from name_u.mp3
rename to audio/name_u.mp3
diff --git a/name_v.mp3 b/audio/name_v.mp3
similarity index 100%
rename from name_v.mp3
rename to audio/name_v.mp3
diff --git a/name_w.mp3 b/audio/name_w.mp3
similarity index 100%
rename from name_w.mp3
rename to audio/name_w.mp3
diff --git a/name_x.mp3 b/audio/name_x.mp3
similarity index 100%
rename from name_x.mp3
rename to audio/name_x.mp3
diff --git a/name_y.mp3 b/audio/name_y.mp3
similarity index 100%
rename from name_y.mp3
rename to audio/name_y.mp3
diff --git a/name_z.mp3 b/audio/name_z.mp3
similarity index 100%
rename from name_z.mp3
rename to audio/name_z.mp3
diff --git a/num_1.mp3 b/audio/num_1.mp3
similarity index 100%
rename from num_1.mp3
rename to audio/num_1.mp3
diff --git a/num_10.mp3 b/audio/num_10.mp3
similarity index 100%
rename from num_10.mp3
rename to audio/num_10.mp3
diff --git a/num_2.mp3 b/audio/num_2.mp3
similarity index 100%
rename from num_2.mp3
rename to audio/num_2.mp3
diff --git a/num_3.mp3 b/audio/num_3.mp3
similarity index 100%
rename from num_3.mp3
rename to audio/num_3.mp3
diff --git a/num_4.mp3 b/audio/num_4.mp3
similarity index 100%
rename from num_4.mp3
rename to audio/num_4.mp3
diff --git a/num_5.mp3 b/audio/num_5.mp3
similarity index 100%
rename from num_5.mp3
rename to audio/num_5.mp3
diff --git a/num_6.mp3 b/audio/num_6.mp3
similarity index 100%
rename from num_6.mp3
rename to audio/num_6.mp3
diff --git a/num_7.mp3 b/audio/num_7.mp3
similarity index 100%
rename from num_7.mp3
rename to audio/num_7.mp3
diff --git a/num_8.mp3 b/audio/num_8.mp3
similarity index 100%
rename from num_8.mp3
rename to audio/num_8.mp3
diff --git a/num_9.mp3 b/audio/num_9.mp3
similarity index 100%
rename from num_9.mp3
rename to audio/num_9.mp3
diff --git a/spell_1.mp3 b/audio/spell_1.mp3
similarity index 100%
rename from spell_1.mp3
rename to audio/spell_1.mp3
diff --git a/spell_10.mp3 b/audio/spell_10.mp3
similarity index 100%
rename from spell_10.mp3
rename to audio/spell_10.mp3
diff --git a/spell_2.mp3 b/audio/spell_2.mp3
similarity index 100%
rename from spell_2.mp3
rename to audio/spell_2.mp3
diff --git a/spell_3.mp3 b/audio/spell_3.mp3
similarity index 100%
rename from spell_3.mp3
rename to audio/spell_3.mp3
diff --git a/spell_4.mp3 b/audio/spell_4.mp3
similarity index 100%
rename from spell_4.mp3
rename to audio/spell_4.mp3
diff --git a/spell_5.mp3 b/audio/spell_5.mp3
similarity index 100%
rename from spell_5.mp3
rename to audio/spell_5.mp3
diff --git a/spell_6.mp3 b/audio/spell_6.mp3
similarity index 100%
rename from spell_6.mp3
rename to audio/spell_6.mp3
diff --git a/spell_7.mp3 b/audio/spell_7.mp3
similarity index 100%
rename from spell_7.mp3
rename to audio/spell_7.mp3
diff --git a/spell_8.mp3 b/audio/spell_8.mp3
similarity index 100%
rename from spell_8.mp3
rename to audio/spell_8.mp3
diff --git a/spell_9.mp3 b/audio/spell_9.mp3
similarity index 100%
rename from spell_9.mp3
rename to audio/spell_9.mp3
diff --git a/try_again.mp3 b/audio/try_again.mp3
similarity index 100%
rename from try_again.mp3
rename to audio/try_again.mp3
diff --git a/celebrate_letters.mp3 b/celebrate_letters.mp3
deleted file mode 100644
index 775687fda58199b5857276a2f73ccd9092c2a792..0000000000000000000000000000000000000000
Binary files a/celebrate_letters.mp3 and /dev/null differ
diff --git a/celebrate_numbers.mp3 b/celebrate_numbers.mp3
deleted file mode 100644
index 65b9adb350e975b240b20053a053be4de83eef38..0000000000000000000000000000000000000000
Binary files a/celebrate_numbers.mp3 and /dev/null differ
diff --git a/delon_boomkin-video-game-collect-item-short-468888.mp3 b/delon_boomkin-video-game-collect-item-short-468888.mp3
deleted file mode 100644
index 1eb4a1b8f687bf05ca6a592e31d870eb23aef1a1..0000000000000000000000000000000000000000
Binary files a/delon_boomkin-video-game-collect-item-short-468888.mp3 and /dev/null differ
diff --git a/Coin collect.mp3 b/efx/Coin collect.mp3
similarity index 100%
rename from Coin collect.mp3
rename to efx/Coin collect.mp3
diff --git a/applause.ogg b/efx/applause.ogg
similarity index 100%
rename from applause.ogg
rename to efx/applause.ogg
diff --git a/cheer_crowd.ogg b/efx/cheer_crowd.ogg
similarity index 100%
rename from cheer_crowd.ogg
rename to efx/cheer_crowd.ogg
diff --git a/collecting effect.mp3 b/efx/collecting effect.mp3
similarity index 100%
rename from collecting effect.mp3
rename to efx/collecting effect.mp3
diff --git a/item-pickup.mp3 b/efx/item-pickup.mp3
similarity index 100%
rename from item-pickup.mp3
rename to efx/item-pickup.mp3
diff --git a/jump effect.mp3 b/efx/jump effect.mp3
similarity index 100%
rename from jump effect.mp3
rename to efx/jump effect.mp3
diff --git a/level_up.ogg b/efx/level_up.ogg
similarity index 100%
rename from level_up.ogg
rename to efx/level_up.ogg
diff --git a/efx/oh no.mp3 b/efx/oh no.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..e4a4301f5771012eb25ad26e8221592349139729
Binary files /dev/null and b/efx/oh no.mp3 differ
diff --git a/player wow.mp3 b/efx/player wow.mp3
similarity index 100%
rename from player wow.mp3
rename to efx/player wow.mp3
diff --git a/task complete.mp3 b/efx/task complete.mp3
similarity index 100%
rename from task complete.mp3
rename to efx/task complete.mp3
diff --git a/team_cheer.ogg b/efx/team_cheer.ogg
similarity index 100%
rename from team_cheer.ogg
rename to efx/team_cheer.ogg
diff --git a/universfield-game-bonus-144751.mp3 b/efx/universfield-game-bonus-144751.mp3
similarity index 100%
rename from universfield-game-bonus-144751.mp3
rename to efx/universfield-game-bonus-144751.mp3
diff --git a/walking effect.mp3 b/efx/walking effect.mp3
similarity index 100%
rename from walking effect.mp3
rename to efx/walking effect.mp3
diff --git a/wow.mp3 b/efx/wow.mp3
similarity index 100%
rename from wow.mp3
rename to efx/wow.mp3
diff --git a/generate_audio.py b/generate_audio.py
deleted file mode 100644
index 7a7e7d4cbbcbbb2eac6fa6d253b4185c88693c73..0000000000000000000000000000000000000000
--- a/generate_audio.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""
-Generate all kids' voice clips for the educational forest game using edge-tts.
-Neural female voice (Jenny), loud + cheerful, English. Outputs to ./audio/*.mp3
-Run: python generate_audio.py
-"""
-import asyncio, edge_tts
-
-VOICE = "en-US-JennyNeural" # friendly adult lady voice
-RATE = "+5%" # a touch lively
-VOLUME = "+100%" # boosted loud (max edge-tts boost)
-PITCH = "+10Hz" # cheerful
-
-# letter -> (word) for "A for Apple"
-LETTERS = {
- "a": "Apple", "b": "Ball", "c": "Cat", "d": "Dog", "e": "Elephant",
- "f": "Fish", "g": "Goat", "h": "Hat", "i": "Igloo", "j": "Jug",
- "k": "Kite", "l": "Lion", "m": "Monkey", "n": "Nest", "o": "Orange",
- "p": "Pig", "q": "Queen", "r": "Rabbit", "s": "Sun", "t": "Tiger",
- "u": "Umbrella", "v": "Van", "w": "Watch", "x": "Xylophone",
- "y": "Yak", "z": "Zebra",
-}
-NUM_WORDS = ["One", "Two", "Three", "Four", "Five",
- "Six", "Seven", "Eight", "Nine", "Ten"]
-
-CLIPS = {}
-
-# greeting & instructions
-CLIPS["greet"] = "Hello little explorer! Welcome to the magic forest! Let's learn our numbers and letters together. Are you ready? Let's go!"
-CLIPS["instr_move"] = "Use the arrow keys to move. Walk over the coins to collect them!"
-CLIPS["instr_numbers"] = "Let's count! Collect the coins to learn your numbers, one to ten!"
-CLIPS["instr_letters"] = "Now let's learn our A B C! Find every letter!"
-CLIPS["instr_infinity"] = "Coin time! Collect as many shiny coins as you can! Go, go, go!"
-
-# numbers
-for i, w in enumerate(NUM_WORDS, start=1):
- CLIPS[f"num_{i}"] = f"{w}!"
-
-# letters: "A for Apple!"
-for ltr, word in LETTERS.items():
- CLIPS[f"letter_{ltr}"] = f"{ltr.upper()} for {word}!"
-
-# cheers
-CHEERS = ["Well done!", "Great job!", "Wow! Amazing!", "You did it!",
- "Super star!", "Fantastic!", "Hooray!", "You are so clever!"]
-for i, c in enumerate(CHEERS):
- CLIPS[f"cheer_{i}"] = c
-
-# big celebrations
-CLIPS["celebrate_numbers"] = "Yay! You counted all the way to ten! You are amazing!"
-CLIPS["celebrate_letters"] = "Wonderful! You learned all your letters! Well done, little star!"
-
-# ── LEVEL / SPELLING GAME PROMPTS ──
-# "Find the number One!" (collect the right digit)
-for i, w in enumerate(NUM_WORDS, start=1):
- CLIPS[f"find_{i}"] = f"Find the number {w}!"
-# "Let's spell ONE! O. N. E." (collect the letters in order)
-for i, w in enumerate(NUM_WORDS, start=1):
- spelled = ". ".join(list(w.upper()))
- CLIPS[f"spell_{i}"] = f"Now let's spell {w}! {spelled}."
-# letter NAMES said as each spelling letter is collected: "A!", "B!", ...
-for ch in "abcdefghijklmnopqrstuvwxyz":
- CLIPS[f"name_{ch}"] = f"{ch.upper()}!"
-# feedback
-CLIPS["try_again"] = "Oops! Try again!"
-CLIPS["level_complete"] = "Hooray! You did it! Here come the coins!"
-CLIPS["level_start"] = "Here we go! Let's play!"
-
-async def gen(name, text):
- comm = edge_tts.Communicate(text, VOICE, rate=RATE, volume=VOLUME, pitch=PITCH)
- await comm.save(f"audio/{name}.mp3")
- print(f" ok {name}.mp3")
-
-async def main():
- print(f"Generating {len(CLIPS)} clips with {VOICE} ...")
- items = list(CLIPS.items())
- # small concurrency so we don't hammer the service
- for i in range(0, len(items), 4):
- await asyncio.gather(*(gen(n, t) for n, t in items[i:i+4]))
- print("Done.")
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/glTF/BirchTree_1.bin b/glTF/BirchTree_1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3465f9217be55041ea1672bed346b8ef8523d666
--- /dev/null
+++ b/glTF/BirchTree_1.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a1b14d1c82ebb8153991de4156b77ceaa1143d64469679147c0ee249c8b90b83
+size 201976
diff --git a/glTF/BirchTree_1.gltf b/glTF/BirchTree_1.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..1210d1c1cf11bc511a30f5a253ae14baab00c2a7
--- /dev/null
+++ b/glTF/BirchTree_1.gltf
@@ -0,0 +1,237 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"BirchTree_1"
+ }
+ ],
+ "materials":[
+ {
+ "doubleSided":true,
+ "name":"BirchTree_Bark",
+ "normalTexture":{
+ "index":0
+ },
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":1
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ },
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"BirchTree_Leaves",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":2
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"BirchTree_1",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ },
+ {
+ "attributes":{
+ "POSITION":4,
+ "NORMAL":5,
+ "TEXCOORD_0":6
+ },
+ "indices":7,
+ "material":1
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ },
+ {
+ "sampler":0,
+ "source":1
+ },
+ {
+ "sampler":0,
+ "source":2
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"BirchTree_Bark_Normal",
+ "uri":"BirchTree_Bark_Normal.png"
+ },
+ {
+ "mimeType":"image/jpeg",
+ "name":"BirchTree_Bark",
+ "uri":"BirchTree_Bark.jpg"
+ },
+ {
+ "mimeType":"image/png",
+ "name":"BirchTree_Leaves",
+ "uri":"BirchTree_Leaves.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":1634,
+ "max":[
+ 0.9670372009277344,
+ 4.8608198165893555,
+ 0.6318668127059937
+ ],
+ "min":[
+ -0.8300637602806091,
+ -0.01774914562702179,
+ -0.5289766192436218
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":1634,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":1634,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":8064,
+ "type":"SCALAR"
+ },
+ {
+ "bufferView":4,
+ "componentType":5126,
+ "count":3816,
+ "max":[
+ 1.3658959865570068,
+ 5.43514347076416,
+ 1.068799376487732
+ ],
+ "min":[
+ -1.341935396194458,
+ 2.142258405685425,
+ -0.8737319111824036
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":5,
+ "componentType":5126,
+ "count":3816,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":6,
+ "componentType":5126,
+ "count":3816,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":7,
+ "componentType":5123,
+ "count":5724,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":19608,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":19608,
+ "byteOffset":19608,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":13072,
+ "byteOffset":39216,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":16128,
+ "byteOffset":52288,
+ "target":34963
+ },
+ {
+ "buffer":0,
+ "byteLength":45792,
+ "byteOffset":68416,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":45792,
+ "byteOffset":114208,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":30528,
+ "byteOffset":160000,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":11448,
+ "byteOffset":190528,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":201976,
+ "uri":"BirchTree_1.bin"
+ }
+ ]
+}
diff --git a/glTF/BirchTree_3.bin b/glTF/BirchTree_3.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d92ff0a233c78c863c48e27f8ee73b3b865ee2c1
--- /dev/null
+++ b/glTF/BirchTree_3.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:98d3a00145beeab868c0e7eb8dbb1118115cb00a44a8a801244eae837805d602
+size 437788
diff --git a/glTF/BirchTree_3.gltf b/glTF/BirchTree_3.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..cf66b242c84ed337fe9119fe65b9dbed129c3c19
--- /dev/null
+++ b/glTF/BirchTree_3.gltf
@@ -0,0 +1,263 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"BirchTree_3"
+ }
+ ],
+ "materials":[
+ {
+ "doubleSided":true,
+ "name":"BirchTree_Bark",
+ "normalTexture":{
+ "index":0
+ },
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":1
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ },
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"BirchTree_Leaves",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":2
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Cube.000",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2,
+ "TEXCOORD_1":3
+ },
+ "indices":4,
+ "material":0
+ },
+ {
+ "attributes":{
+ "POSITION":5,
+ "NORMAL":6,
+ "TEXCOORD_0":7,
+ "TEXCOORD_1":8
+ },
+ "indices":9,
+ "material":1
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ },
+ {
+ "sampler":0,
+ "source":1
+ },
+ {
+ "sampler":0,
+ "source":2
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"BirchTree_Bark_Normal",
+ "uri":"BirchTree_Bark_Normal.png"
+ },
+ {
+ "mimeType":"image/jpeg",
+ "name":"BirchTree_Bark",
+ "uri":"BirchTree_Bark.jpg"
+ },
+ {
+ "mimeType":"image/png",
+ "name":"BirchTree_Leaves",
+ "uri":"BirchTree_Leaves.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":1646,
+ "max":[
+ 1.4055445194244385,
+ 5.545559406280518,
+ 0.8506550192832947
+ ],
+ "min":[
+ -1.446382761001587,
+ -0.008469140157103539,
+ -0.5328736305236816
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":1646,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":1646,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5126,
+ "count":1646,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":4,
+ "componentType":5123,
+ "count":8040,
+ "type":"SCALAR"
+ },
+ {
+ "bufferView":5,
+ "componentType":5126,
+ "count":8276,
+ "max":[
+ 1.7693895101547241,
+ 5.745725154876709,
+ 1.3416640758514404
+ ],
+ "min":[
+ -1.66342294216156,
+ 2.2327804565429688,
+ -0.9253931045532227
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":6,
+ "componentType":5126,
+ "count":8276,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":7,
+ "componentType":5126,
+ "count":8276,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":8,
+ "componentType":5126,
+ "count":8276,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":9,
+ "componentType":5123,
+ "count":12414,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":19752,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":19752,
+ "byteOffset":19752,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":13168,
+ "byteOffset":39504,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":13168,
+ "byteOffset":52672,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":16080,
+ "byteOffset":65840,
+ "target":34963
+ },
+ {
+ "buffer":0,
+ "byteLength":99312,
+ "byteOffset":81920,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":99312,
+ "byteOffset":181232,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":66208,
+ "byteOffset":280544,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":66208,
+ "byteOffset":346752,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":24828,
+ "byteOffset":412960,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":437788,
+ "uri":"BirchTree_3.bin"
+ }
+ ]
+}
diff --git a/glTF/BirchTree_5.bin b/glTF/BirchTree_5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b16cdbf3919b4d690339762cb381647a34260ad0
--- /dev/null
+++ b/glTF/BirchTree_5.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7d1f1009a7609ae1b59b3e0131d63c9b8660aa0fac1aea01ebd7caaa2e6ddab5
+size 180720
diff --git a/glTF/BirchTree_5.gltf b/glTF/BirchTree_5.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..149b27aab066352ac793be4b4e793262c05b753d
--- /dev/null
+++ b/glTF/BirchTree_5.gltf
@@ -0,0 +1,237 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"BirchTree_5"
+ }
+ ],
+ "materials":[
+ {
+ "doubleSided":true,
+ "name":"BirchTree_Bark",
+ "normalTexture":{
+ "index":0
+ },
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":1
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ },
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"BirchTree_Leaves",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":2
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Cube.009",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ },
+ {
+ "attributes":{
+ "POSITION":4,
+ "NORMAL":5,
+ "TEXCOORD_0":6
+ },
+ "indices":7,
+ "material":1
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ },
+ {
+ "sampler":0,
+ "source":1
+ },
+ {
+ "sampler":0,
+ "source":2
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"BirchTree_Bark_Normal",
+ "uri":"BirchTree_Bark_Normal.png"
+ },
+ {
+ "mimeType":"image/jpeg",
+ "name":"BirchTree_Bark",
+ "uri":"BirchTree_Bark.jpg"
+ },
+ {
+ "mimeType":"image/png",
+ "name":"BirchTree_Leaves",
+ "uri":"BirchTree_Leaves.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":1872,
+ "max":[
+ 1.748803734779358,
+ 5.186513900756836,
+ 1.0935114622116089
+ ],
+ "min":[
+ -1.3307640552520752,
+ -0.014205191284418106,
+ -1.4230836629867554
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":1872,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":1872,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":9168,
+ "type":"SCALAR"
+ },
+ {
+ "bufferView":4,
+ "componentType":5126,
+ "count":2928,
+ "max":[
+ 1.8894633054733276,
+ 5.508197784423828,
+ 1.7623989582061768
+ ],
+ "min":[
+ -1.6922731399536133,
+ 2.5803983211517334,
+ -1.752392053604126
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":5,
+ "componentType":5126,
+ "count":2928,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":6,
+ "componentType":5126,
+ "count":2928,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":7,
+ "componentType":5123,
+ "count":4392,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":22464,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":22464,
+ "byteOffset":22464,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":14976,
+ "byteOffset":44928,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":18336,
+ "byteOffset":59904,
+ "target":34963
+ },
+ {
+ "buffer":0,
+ "byteLength":35136,
+ "byteOffset":78240,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":35136,
+ "byteOffset":113376,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":23424,
+ "byteOffset":148512,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":8784,
+ "byteOffset":171936,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":180720,
+ "uri":"BirchTree_5.bin"
+ }
+ ]
+}
diff --git a/glTF/BirchTree_Bark.jpg b/glTF/BirchTree_Bark.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d47b3af228b0961df7caa07950c990fae4fd793d
--- /dev/null
+++ b/glTF/BirchTree_Bark.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f796f02e47bc5afddd17dc2385bbef53a352628ceb348deb1188ef04fe5deff9
+size 1015231
diff --git a/glTF/BirchTree_Bark_Normal.png b/glTF/BirchTree_Bark_Normal.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec92e742b1abc434a51623ffebcb09975a7dad74
--- /dev/null
+++ b/glTF/BirchTree_Bark_Normal.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e30ee9c7561742523340d5657056f8392bc0f944da5145f0af7690cd1d2e6a11
+size 22721595
diff --git a/glTF/BirchTree_Leaves.png b/glTF/BirchTree_Leaves.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6cc77e6f7506a90538472fdf85a1b6f53c7bf43
--- /dev/null
+++ b/glTF/BirchTree_Leaves.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8b674a02017d987f8ec0448bd2a52ad788d1235f91b7f00499b4ca071f8e69fe
+size 77836
diff --git a/glTF/Bush.bin b/glTF/Bush.bin
new file mode 100644
index 0000000000000000000000000000000000000000..80cb2ba6805a1c8ccb225bd1fe1da2d6a4f1edcd
--- /dev/null
+++ b/glTF/Bush.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c8a583d0741f37ec5e256d8dfc05d82f94689cf93bf3fb7b95e716d1e05ba11f
+size 28000
diff --git a/glTF/Bush.gltf b/glTF/Bush.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..e11faed1a5d16c62add9479b5a2f872cf2d47566
--- /dev/null
+++ b/glTF/Bush.gltf
@@ -0,0 +1,144 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"Bush",
+ "rotation":[
+ 0.7904141545295715,
+ 0.20954930782318115,
+ -0.402734637260437,
+ 0.4112655818462372
+ ]
+ }
+ ],
+ "materials":[
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"Bush_Leaves",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":0
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Plane.012",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"Bush_Leaves",
+ "uri":"Bush_Leaves.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":800,
+ "max":[
+ 0.5290597081184387,
+ 0.47277382016181946,
+ 0.36149728298187256
+ ],
+ "min":[
+ -0.5728190541267395,
+ -0.6429753303527832,
+ -0.652008593082428
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":800,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":800,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":1200,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":9600,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":9600,
+ "byteOffset":9600,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":6400,
+ "byteOffset":19200,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":2400,
+ "byteOffset":25600,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":28000,
+ "uri":"Bush.bin"
+ }
+ ]
+}
diff --git a/glTF/Bush_Flowers.bin b/glTF/Bush_Flowers.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5cfb39c70a00dbff9ac7fdb95266d71e95c0ca82
--- /dev/null
+++ b/glTF/Bush_Flowers.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d0b734b66250927042c6b00cf567cc11095fac72a5719cb1c05edaad4d665e0e
+size 31380
diff --git a/glTF/Bush_Flowers.gltf b/glTF/Bush_Flowers.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..c90cbd928253621bafc8c30c654750461553131c
--- /dev/null
+++ b/glTF/Bush_Flowers.gltf
@@ -0,0 +1,232 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"Bush_Flowers",
+ "rotation":[
+ 0.7904141545295715,
+ 0.20954930782318115,
+ -0.402734637260437,
+ 0.4112655818462372
+ ]
+ }
+ ],
+ "materials":[
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"Bush_Leaves",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":0
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ },
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"Flowers",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":1
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Plane.003",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ },
+ {
+ "attributes":{
+ "POSITION":4,
+ "NORMAL":5,
+ "TEXCOORD_0":6
+ },
+ "indices":7,
+ "material":1
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ },
+ {
+ "sampler":0,
+ "source":1
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"Bush_Leaves",
+ "uri":"Bush_Leaves.png"
+ },
+ {
+ "mimeType":"image/png",
+ "name":"Flowers",
+ "uri":"Flowers.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":800,
+ "max":[
+ 0.5290597081184387,
+ 0.47277382016181946,
+ 0.36149728298187256
+ ],
+ "min":[
+ -0.5728190541267395,
+ -0.6429753303527832,
+ -0.652008593082428
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":800,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":800,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":1200,
+ "type":"SCALAR"
+ },
+ {
+ "bufferView":4,
+ "componentType":5126,
+ "count":91,
+ "max":[
+ 0.5439478754997253,
+ 0.42564618587493896,
+ 0.3131656348705292
+ ],
+ "min":[
+ -0.5594223141670227,
+ -0.6218320727348328,
+ -0.6686300039291382
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":5,
+ "componentType":5126,
+ "count":91,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":6,
+ "componentType":5126,
+ "count":91,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":7,
+ "componentType":5123,
+ "count":234,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":9600,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":9600,
+ "byteOffset":9600,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":6400,
+ "byteOffset":19200,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":2400,
+ "byteOffset":25600,
+ "target":34963
+ },
+ {
+ "buffer":0,
+ "byteLength":1092,
+ "byteOffset":28000,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":1092,
+ "byteOffset":29092,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":728,
+ "byteOffset":30184,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":468,
+ "byteOffset":30912,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":31380,
+ "uri":"Bush_Flowers.bin"
+ }
+ ]
+}
diff --git a/glTF/Bush_Large_Flowers.bin b/glTF/Bush_Large_Flowers.bin
new file mode 100644
index 0000000000000000000000000000000000000000..80272f04e5339c58367cb7e16ed0abafd8c4ad00
--- /dev/null
+++ b/glTF/Bush_Large_Flowers.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:780b50270f5bb264c5642eae514191a372a7799eafc444cc9afb5ce501b9109a
+size 24780
diff --git a/glTF/Bush_Large_Flowers.gltf b/glTF/Bush_Large_Flowers.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..941db73edabe3d543f0e3f0cca23e936f4fe5765
--- /dev/null
+++ b/glTF/Bush_Large_Flowers.gltf
@@ -0,0 +1,232 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"Bush_Large_Flowers",
+ "rotation":[
+ 0.8006435632705688,
+ 0.26975396275520325,
+ -0.040793512016534805,
+ 0.5334215760231018
+ ]
+ }
+ ],
+ "materials":[
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"Bush_Leaves",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":0
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ },
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"Flowers",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":1
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Plane.029",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ },
+ {
+ "attributes":{
+ "POSITION":4,
+ "NORMAL":5,
+ "TEXCOORD_0":6
+ },
+ "indices":7,
+ "material":1
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ },
+ {
+ "sampler":0,
+ "source":1
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"Bush_Leaves",
+ "uri":"Bush_Leaves.png"
+ },
+ {
+ "mimeType":"image/png",
+ "name":"Flowers",
+ "uri":"Flowers.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":552,
+ "max":[
+ 1.149157166481018,
+ 0.5573542714118958,
+ 0.4012354910373688
+ ],
+ "min":[
+ -0.8172093629837036,
+ -0.7824836373329163,
+ -1.0758378505706787
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":552,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":552,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":828,
+ "type":"SCALAR"
+ },
+ {
+ "bufferView":4,
+ "componentType":5126,
+ "count":147,
+ "max":[
+ 1.1831327676773071,
+ 0.4660194218158722,
+ 0.07130126655101776
+ ],
+ "min":[
+ -0.6124211549758911,
+ -0.8222407698631287,
+ -1.1121408939361572
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":5,
+ "componentType":5126,
+ "count":147,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":6,
+ "componentType":5126,
+ "count":147,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":7,
+ "componentType":5123,
+ "count":378,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":6624,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":6624,
+ "byteOffset":6624,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":4416,
+ "byteOffset":13248,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":1656,
+ "byteOffset":17664,
+ "target":34963
+ },
+ {
+ "buffer":0,
+ "byteLength":1764,
+ "byteOffset":19320,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":1764,
+ "byteOffset":21084,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":1176,
+ "byteOffset":22848,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":756,
+ "byteOffset":24024,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":24780,
+ "uri":"Bush_Large_Flowers.bin"
+ }
+ ]
+}
diff --git a/glTF/Bush_Leaves.png b/glTF/Bush_Leaves.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1a7650b0146a2d5518849704f3d8002b7739ca7
--- /dev/null
+++ b/glTF/Bush_Leaves.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9f662296a285ca56b1ed56e952a198b93b466ae39ab7b6ee1c1ac1bd1c46242f
+size 74828
diff --git a/glTF/DeadTree_2.bin b/glTF/DeadTree_2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2bc77605034e4fe31eb7a1f7d79c5df1dc2c5d08
--- /dev/null
+++ b/glTF/DeadTree_2.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a03195deef2ed00d77e33930b88683f35852e6b4ee35fb9cede73b4bad4a8126
+size 135936
diff --git a/glTF/DeadTree_2.gltf b/glTF/DeadTree_2.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..5c5ac616bbc271515397bea5525167647a6b2d5b
--- /dev/null
+++ b/glTF/DeadTree_2.gltf
@@ -0,0 +1,149 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"DeadTree_2"
+ }
+ ],
+ "materials":[
+ {
+ "doubleSided":true,
+ "name":"NormalTree_Bark",
+ "normalTexture":{
+ "index":0
+ },
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":1
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Cylinder.004",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ },
+ {
+ "sampler":0,
+ "source":1
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"NormalTree_Bark_Normal",
+ "uri":"NormalTree_Bark_Normal.png"
+ },
+ {
+ "mimeType":"image/jpeg",
+ "name":"NormalTree_Bark",
+ "uri":"NormalTree_Bark.jpg"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":3246,
+ "max":[
+ 1.635667324066162,
+ 6.185760498046875,
+ 0.6366407871246338
+ ],
+ "min":[
+ -1.7882426977157593,
+ -0.010010119527578354,
+ -0.8091591000556946
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":3246,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":3246,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":16032,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":38952,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":38952,
+ "byteOffset":38952,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":25968,
+ "byteOffset":77904,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":32064,
+ "byteOffset":103872,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":135936,
+ "uri":"DeadTree_2.bin"
+ }
+ ]
+}
diff --git a/glTF/DeadTree_6.bin b/glTF/DeadTree_6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..00bb43ed920aa46037f259d093c0fd7107730687
--- /dev/null
+++ b/glTF/DeadTree_6.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5ea86ef84307394d6808d91d61b1685d483ad91862de828b3207b099816477ef
+size 75984
diff --git a/glTF/DeadTree_6.gltf b/glTF/DeadTree_6.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..5eb9ef882a6b23ff40a8ef784f8ed57839ba19a7
--- /dev/null
+++ b/glTF/DeadTree_6.gltf
@@ -0,0 +1,149 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"DeadTree_6"
+ }
+ ],
+ "materials":[
+ {
+ "doubleSided":true,
+ "name":"MapleTree_Bark",
+ "normalTexture":{
+ "index":0
+ },
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":1
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Cube.005",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ },
+ {
+ "sampler":0,
+ "source":1
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"MapleTree_Bark_Normal",
+ "uri":"MapleTree_Bark_Normal.png"
+ },
+ {
+ "mimeType":"image/jpeg",
+ "name":"MapleTree_Bark",
+ "uri":"MapleTree_Bark.jpg"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":1815,
+ "max":[
+ 3.7677536010742188,
+ 6.415181636810303,
+ 1.930820345878601
+ ],
+ "min":[
+ -1.6392756700515747,
+ 0.0006941246683709323,
+ -1.368160605430603
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":1815,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":1815,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":8952,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":21780,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":21780,
+ "byteOffset":21780,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":14520,
+ "byteOffset":43560,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":17904,
+ "byteOffset":58080,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":75984,
+ "uri":"DeadTree_6.bin"
+ }
+ ]
+}
diff --git a/glTF/Flower_1_Clump.bin b/glTF/Flower_1_Clump.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4b7ce0059a0a19acb86a11689f4ffcceaf7e1ab5
--- /dev/null
+++ b/glTF/Flower_1_Clump.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:26d8534f5e7a9e843270acd397dca7b0ca1926a108a75f0dff18ca90cc449d2f
+size 23368
diff --git a/glTF/Flower_1_Clump.gltf b/glTF/Flower_1_Clump.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..cbff64d00a36bf5d0cf58c759efc64def01eb620
--- /dev/null
+++ b/glTF/Flower_1_Clump.gltf
@@ -0,0 +1,138 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"Flower_1_Clump"
+ }
+ ],
+ "materials":[
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"Flowers",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":0
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Plane.049",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"Flowers",
+ "uri":"Flowers.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":614,
+ "max":[
+ 0.23249699175357819,
+ 0.666481614112854,
+ 0.2129351645708084
+ ],
+ "min":[
+ -0.23863986134529114,
+ -0.004863256588578224,
+ -0.22226478159427643
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":614,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":614,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":1860,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":7368,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":7368,
+ "byteOffset":7368,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":4912,
+ "byteOffset":14736,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":3720,
+ "byteOffset":19648,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":23368,
+ "uri":"Flower_1_Clump.bin"
+ }
+ ]
+}
diff --git a/glTF/Flower_4_Clump.bin b/glTF/Flower_4_Clump.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4a0c6ab377882d29fcf21750758cbfae221e048d
--- /dev/null
+++ b/glTF/Flower_4_Clump.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:174f2e1a4c63b6d22ed997af806b541523a3e825a015453392edfeaf30695310
+size 3760
diff --git a/glTF/Flower_4_Clump.gltf b/glTF/Flower_4_Clump.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..9ac7c312f8a163aac29baf3c663e81a9258a2fa4
--- /dev/null
+++ b/glTF/Flower_4_Clump.gltf
@@ -0,0 +1,138 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"Flower_4_Clump"
+ }
+ ],
+ "materials":[
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"Flowers",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":0
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Plane.069",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"Flowers",
+ "uri":"Flowers.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":92,
+ "max":[
+ 0.3156799376010895,
+ 0.6022393703460693,
+ 0.24488729238510132
+ ],
+ "min":[
+ -0.252328097820282,
+ 0.0011882712133228779,
+ -0.25304919481277466
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":92,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":92,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":408,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":1104,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":1104,
+ "byteOffset":1104,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":736,
+ "byteOffset":2208,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":816,
+ "byteOffset":2944,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":3760,
+ "uri":"Flower_4_Clump.bin"
+ }
+ ]
+}
diff --git a/glTF/Flowers.png b/glTF/Flowers.png
new file mode 100644
index 0000000000000000000000000000000000000000..1a66c05eae9313ba194b79547e605f4684f28fde
--- /dev/null
+++ b/glTF/Flowers.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:23673fc87e55d8f7cbc699581a164cffec505376bd8b0b90b593dc387aa569fd
+size 318021
diff --git a/glTF/Grass.png b/glTF/Grass.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce968b85fa63aae638e82844a672390bfae77525
--- /dev/null
+++ b/glTF/Grass.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:facde747020acfefdc84d176dd4037282895d200a66fc20b0d9baca470f310f1
+size 734927
diff --git a/glTF/Grass_Large.bin b/glTF/Grass_Large.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c2bdaed497fd0f26633d683fad061aeb01f22291
--- /dev/null
+++ b/glTF/Grass_Large.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ee07cde133dc9163279170c72d1713708e6433eeb60dd1cc23b18f4ebb690eb7
+size 5448
diff --git a/glTF/Grass_Large.gltf b/glTF/Grass_Large.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..5112235e721e37e17bc455ad351b3b3ff29b72ab
--- /dev/null
+++ b/glTF/Grass_Large.gltf
@@ -0,0 +1,137 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"Grass_Large"
+ }
+ ],
+ "materials":[
+ {
+ "doubleSided":true,
+ "name":"Grass",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":0
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Plane.001",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"Grass",
+ "uri":"Grass.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":150,
+ "max":[
+ 0.3720705807209015,
+ 0.4822842478752136,
+ 0.17142699658870697
+ ],
+ "min":[
+ -0.33639466762542725,
+ -0.002809834200888872,
+ -0.32657596468925476
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":150,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":150,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":324,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":1800,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":1800,
+ "byteOffset":1800,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":1200,
+ "byteOffset":3600,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":648,
+ "byteOffset":4800,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":5448,
+ "uri":"Grass_Large.bin"
+ }
+ ]
+}
diff --git a/glTF/MapleTree_1.bin b/glTF/MapleTree_1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..33b8a6d68f542c30f8205c1a9592e4b3d2e705d7
--- /dev/null
+++ b/glTF/MapleTree_1.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:03cfea606b55f8f38220f2922e28efb92d724abac801f76191ba062c398bf09c
+size 136464
diff --git a/glTF/MapleTree_1.gltf b/glTF/MapleTree_1.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..af6cda33094959c4b076e5aebe1473c52dcbd12c
--- /dev/null
+++ b/glTF/MapleTree_1.gltf
@@ -0,0 +1,237 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"MapleTree_1"
+ }
+ ],
+ "materials":[
+ {
+ "doubleSided":true,
+ "name":"MapleTree_Bark",
+ "normalTexture":{
+ "index":0
+ },
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":1
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ },
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"MapleTree_Leaves",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":2
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Cube.005",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ },
+ {
+ "attributes":{
+ "POSITION":4,
+ "NORMAL":5,
+ "TEXCOORD_0":6
+ },
+ "indices":7,
+ "material":1
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ },
+ {
+ "sampler":0,
+ "source":1
+ },
+ {
+ "sampler":0,
+ "source":2
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"MapleTree_Bark_Normal",
+ "uri":"MapleTree_Bark_Normal.png"
+ },
+ {
+ "mimeType":"image/jpeg",
+ "name":"MapleTree_Bark",
+ "uri":"MapleTree_Bark.jpg"
+ },
+ {
+ "mimeType":"image/png",
+ "name":"MapleTree_Leaves",
+ "uri":"MapleTree_Leaves.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":1815,
+ "max":[
+ 3.7677536010742188,
+ 6.415181636810303,
+ 1.930820345878601
+ ],
+ "min":[
+ -1.6392756700515747,
+ 0.0006941246683709323,
+ -1.368160605430603
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":1815,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":1815,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":8952,
+ "type":"SCALAR"
+ },
+ {
+ "bufferView":4,
+ "componentType":5126,
+ "count":1728,
+ "max":[
+ 4.153177738189697,
+ 6.644845962524414,
+ 2.4542856216430664
+ ],
+ "min":[
+ -2.075911045074463,
+ 2.7419381141662598,
+ -2.4494659900665283
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":5,
+ "componentType":5126,
+ "count":1728,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":6,
+ "componentType":5126,
+ "count":1728,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":7,
+ "componentType":5123,
+ "count":2592,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":21780,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":21780,
+ "byteOffset":21780,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":14520,
+ "byteOffset":43560,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":17904,
+ "byteOffset":58080,
+ "target":34963
+ },
+ {
+ "buffer":0,
+ "byteLength":20736,
+ "byteOffset":75984,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":20736,
+ "byteOffset":96720,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":13824,
+ "byteOffset":117456,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":5184,
+ "byteOffset":131280,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":136464,
+ "uri":"MapleTree_1.bin"
+ }
+ ]
+}
diff --git a/glTF/MapleTree_3.bin b/glTF/MapleTree_3.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f6f27267e8e45ac312c28a289106928de1cda65d
--- /dev/null
+++ b/glTF/MapleTree_3.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c26fd0be6947b3d955a1b64e3f7a57d2d521d652618380d354042621c1b23be1
+size 247012
diff --git a/glTF/MapleTree_3.gltf b/glTF/MapleTree_3.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..cf81b715c340414b12b00b04fbd2a7f5f8e8ec9e
--- /dev/null
+++ b/glTF/MapleTree_3.gltf
@@ -0,0 +1,237 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"MapleTree_3"
+ }
+ ],
+ "materials":[
+ {
+ "doubleSided":true,
+ "name":"MapleTree_Bark",
+ "normalTexture":{
+ "index":0
+ },
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":1
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ },
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"MapleTree_Leaves",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":2
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Cube.008",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ },
+ {
+ "attributes":{
+ "POSITION":4,
+ "NORMAL":5,
+ "TEXCOORD_0":6
+ },
+ "indices":7,
+ "material":1
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ },
+ {
+ "sampler":0,
+ "source":1
+ },
+ {
+ "sampler":0,
+ "source":2
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"MapleTree_Bark_Normal",
+ "uri":"MapleTree_Bark_Normal.png"
+ },
+ {
+ "mimeType":"image/jpeg",
+ "name":"MapleTree_Bark",
+ "uri":"MapleTree_Bark.jpg"
+ },
+ {
+ "mimeType":"image/png",
+ "name":"MapleTree_Leaves",
+ "uri":"MapleTree_Leaves.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":2999,
+ "max":[
+ 4.147934913635254,
+ 6.277482986450195,
+ 1.93081796169281
+ ],
+ "min":[
+ -4.017767429351807,
+ 0.0006945766508579254,
+ -2.8707633018493652
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":2999,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":2999,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":14832,
+ "type":"SCALAR"
+ },
+ {
+ "bufferView":4,
+ "componentType":5126,
+ "count":3468,
+ "max":[
+ 4.569456577301025,
+ 6.987350940704346,
+ 2.6775949001312256
+ ],
+ "min":[
+ -4.410184383392334,
+ 2.417171001434326,
+ -3.935764789581299
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":5,
+ "componentType":5126,
+ "count":3468,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":6,
+ "componentType":5126,
+ "count":3468,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":7,
+ "componentType":5123,
+ "count":5202,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":35988,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":35988,
+ "byteOffset":35988,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":23992,
+ "byteOffset":71976,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":29664,
+ "byteOffset":95968,
+ "target":34963
+ },
+ {
+ "buffer":0,
+ "byteLength":41616,
+ "byteOffset":125632,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":41616,
+ "byteOffset":167248,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":27744,
+ "byteOffset":208864,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":10404,
+ "byteOffset":236608,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":247012,
+ "uri":"MapleTree_3.bin"
+ }
+ ]
+}
diff --git a/glTF/MapleTree_5.bin b/glTF/MapleTree_5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5918dac0ebcb867d1826f384e19be6e3a236140a
--- /dev/null
+++ b/glTF/MapleTree_5.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ccabdf8936019ffade3677971eaa889140d0d88b047c3fba67b6e81279e53399
+size 172432
diff --git a/glTF/MapleTree_5.gltf b/glTF/MapleTree_5.gltf
new file mode 100644
index 0000000000000000000000000000000000000000..2075ad0dffd6a546673405add6a6fedc0efc17ea
--- /dev/null
+++ b/glTF/MapleTree_5.gltf
@@ -0,0 +1,237 @@
+{
+ "asset":{
+ "generator":"Khronos glTF Blender I/O v4.0.44",
+ "version":"2.0"
+ },
+ "scene":0,
+ "scenes":[
+ {
+ "name":"Scene",
+ "nodes":[
+ 0
+ ]
+ }
+ ],
+ "nodes":[
+ {
+ "mesh":0,
+ "name":"MapleTree_5"
+ }
+ ],
+ "materials":[
+ {
+ "doubleSided":true,
+ "name":"MapleTree_Bark",
+ "normalTexture":{
+ "index":0
+ },
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":1
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ },
+ {
+ "alphaMode":"BLEND",
+ "doubleSided":true,
+ "name":"MapleTree_Leaves",
+ "pbrMetallicRoughness":{
+ "baseColorTexture":{
+ "index":2
+ },
+ "metallicFactor":0,
+ "roughnessFactor":0.5
+ }
+ }
+ ],
+ "meshes":[
+ {
+ "name":"Cube.010",
+ "primitives":[
+ {
+ "attributes":{
+ "POSITION":0,
+ "NORMAL":1,
+ "TEXCOORD_0":2
+ },
+ "indices":3,
+ "material":0
+ },
+ {
+ "attributes":{
+ "POSITION":4,
+ "NORMAL":5,
+ "TEXCOORD_0":6
+ },
+ "indices":7,
+ "material":1
+ }
+ ]
+ }
+ ],
+ "textures":[
+ {
+ "sampler":0,
+ "source":0
+ },
+ {
+ "sampler":0,
+ "source":1
+ },
+ {
+ "sampler":0,
+ "source":2
+ }
+ ],
+ "images":[
+ {
+ "mimeType":"image/png",
+ "name":"MapleTree_Bark_Normal",
+ "uri":"MapleTree_Bark_Normal.png"
+ },
+ {
+ "mimeType":"image/jpeg",
+ "name":"MapleTree_Bark",
+ "uri":"MapleTree_Bark.jpg"
+ },
+ {
+ "mimeType":"image/png",
+ "name":"MapleTree_Leaves",
+ "uri":"MapleTree_Leaves.png"
+ }
+ ],
+ "accessors":[
+ {
+ "bufferView":0,
+ "componentType":5126,
+ "count":1952,
+ "max":[
+ 2.441612482070923,
+ 7.126369953155518,
+ 1.9308204650878906
+ ],
+ "min":[
+ -3.0191519260406494,
+ 0.0006941246683709323,
+ -1.3140323162078857
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":1,
+ "componentType":5126,
+ "count":1952,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":2,
+ "componentType":5126,
+ "count":1952,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":3,
+ "componentType":5123,
+ "count":9624,
+ "type":"SCALAR"
+ },
+ {
+ "bufferView":4,
+ "componentType":5126,
+ "count":2592,
+ "max":[
+ 3.4032061100006104,
+ 7.280647277832031,
+ 2.6457133293151855
+ ],
+ "min":[
+ -3.6091811656951904,
+ 2.538853883743286,
+ -2.430192708969116
+ ],
+ "type":"VEC3"
+ },
+ {
+ "bufferView":5,
+ "componentType":5126,
+ "count":2592,
+ "type":"VEC3"
+ },
+ {
+ "bufferView":6,
+ "componentType":5126,
+ "count":2592,
+ "type":"VEC2"
+ },
+ {
+ "bufferView":7,
+ "componentType":5123,
+ "count":3888,
+ "type":"SCALAR"
+ }
+ ],
+ "bufferViews":[
+ {
+ "buffer":0,
+ "byteLength":23424,
+ "byteOffset":0,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":23424,
+ "byteOffset":23424,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":15616,
+ "byteOffset":46848,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":19248,
+ "byteOffset":62464,
+ "target":34963
+ },
+ {
+ "buffer":0,
+ "byteLength":31104,
+ "byteOffset":81712,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":31104,
+ "byteOffset":112816,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":20736,
+ "byteOffset":143920,
+ "target":34962
+ },
+ {
+ "buffer":0,
+ "byteLength":7776,
+ "byteOffset":164656,
+ "target":34963
+ }
+ ],
+ "samplers":[
+ {
+ "magFilter":9729,
+ "minFilter":9987
+ }
+ ],
+ "buffers":[
+ {
+ "byteLength":172432,
+ "uri":"MapleTree_5.bin"
+ }
+ ]
+}
diff --git a/glTF/MapleTree_Bark.jpg b/glTF/MapleTree_Bark.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f331d2694ded65281367bc3666aec995f124842c
--- /dev/null
+++ b/glTF/MapleTree_Bark.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be9d53e27f5af458a8122bfb6a88c93020fd5707f697d2288ea0af04b3019a97
+size 817140
diff --git a/glTF/MapleTree_Bark_Normal.png b/glTF/MapleTree_Bark_Normal.png
new file mode 100644
index 0000000000000000000000000000000000000000..9466c34392cc647544a590f32073c0851a5a9982
--- /dev/null
+++ b/glTF/MapleTree_Bark_Normal.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2e3d97d57838d6e8203f0fab2858bada8ad1e6d6f240c0e898f8e88c110f2f5d
+size 22064128
diff --git a/glTF/MapleTree_Leaves.png b/glTF/MapleTree_Leaves.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a45d450066a2e00a2bf5e0954ee87ac312aa0e5
--- /dev/null
+++ b/glTF/MapleTree_Leaves.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:915f0836e9889e28032662c7aa0d0eb9601ba999eda042c9a4e38690786d6c7b
+size 212333
diff --git a/glTF/NormalTree_Bark.jpg b/glTF/NormalTree_Bark.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..87c54f98e1627d481eb995bd15e3f4844ce0431e
--- /dev/null
+++ b/glTF/NormalTree_Bark.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c1176fee60864e7d47c342309bbaeaf04e4d7dea3821209bc2d35f0a0dd9fd3b
+size 630690
diff --git a/glTF/NormalTree_Bark_Normal.png b/glTF/NormalTree_Bark_Normal.png
new file mode 100644
index 0000000000000000000000000000000000000000..f83115589bbc58d9bad41efdb85f1c7e2fc2ee21
--- /dev/null
+++ b/glTF/NormalTree_Bark_Normal.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8136a8d6dc18e6b055c7cb53cf42bc6bac41319e102289d8ba25ee5837fbc39b
+size 19087640
diff --git a/index.html b/index.html
index 68f49c7fd3b59b84f7ffc6e23000ca2d9c2b6453..f40950607720eebc0dab501e97b4897f9237148d 100644
--- a/index.html
+++ b/index.html
@@ -365,10 +365,11 @@ let actx = null, masterGain = null, comp = null, sfxGain = null, audioReady = fa
const buffers = {}; const voiceQueue = []; let voicePlaying = false;
// sound-effect & music files the user added
const EFX = {
- wow:'player wow.mp3', collect:'Coin collect.mp3', collect2:'collecting effect.mp3',
+ wow:'wow.mp3', playerwow:'player wow.mp3', collect:'Coin collect.mp3', collect2:'collecting effect.mp3',
pickup:'item-pickup.mp3', jump:'jump effect.mp3', walk:'walking effect.mp3',
complete:'task complete.mp3', bonus:'universfield-game-bonus-144751.mp3',
- cheer:'cheer_crowd.ogg', applause:'applause.ogg', teamcheer:'team_cheer.ogg'
+ cheer:'cheer_crowd.ogg', applause:'applause.ogg', teamcheer:'team_cheer.ogg',
+ ohno:'oh no.mp3', levelup:'level_up.ogg'
};
const efxBuf = {};
const MUSIC = ['audiocoffee-game-116679','denis-pavlov-music-marimba-tropical-african-travel-game-197517',
@@ -421,17 +422,6 @@ function sfxWrong() { // gentle low "uh-oh" buzz
g.gain.exponentialRampToValueAtTime(0.0001, t0 + 0.3);
o.connect(g); g.connect(sfxGain); o.start(t0); o.stop(t0 + 0.32);
}
-function sfxStep() { // soft footstep thud while walking
- if (!audioReady || muted) return; const t0 = actx.currentTime;
- const o = actx.createOscillator(), g = actx.createGain();
- o.type = 'sine'; o.frequency.setValueAtTime(95 + Math.random()*30, t0);
- o.frequency.exponentialRampToValueAtTime(55, t0 + 0.09);
- g.gain.setValueAtTime(0.0001, t0);
- g.gain.exponentialRampToValueAtTime(0.16, t0 + 0.01);
- g.gain.exponentialRampToValueAtTime(0.0001, t0 + 0.1);
- o.connect(g); g.connect(sfxGain); o.start(t0); o.stop(t0 + 0.12);
-}
-
// ── REAL SOUND-EFFECT FILES (efx/) ──
function loadEfx(key) {
if (efxBuf[key]) return Promise.resolve(efxBuf[key]);
@@ -549,6 +539,11 @@ function buildWorld() {
place('chest', 9, -9, { rotY: -0.6 }); registerObstacle(9, -9, 0.8, 1.0);
place('flag', -9, -8, { rotY: 0.5 }); registerObstacle(-9, -8, 0.5, 99);
+ // decorative fence ring marking the edge of the play clearing (no collision — purely scenery)
+ const FENCE_R = 30, FENCE_N = 28;
+ for (let i = 0; i < FENCE_N; i++) { const ang = (i / FENCE_N) * Math.PI*2;
+ place('fence-straight', Math.cos(ang)*FENCE_R, Math.sin(ang)*FENCE_R, { rotY: ang + Math.PI/2 }); }
+
// HIGH-POLY NATURE — kept FAR away as a background ring (so the camera never clips them)
const natTrees = ['nat_BirchTree_1','nat_BirchTree_3','nat_BirchTree_5','nat_MapleTree_1','nat_MapleTree_3','nat_MapleTree_5','nat_DeadTree_2','nat_DeadTree_6'];
const natBush = ['nat_Bush','nat_Bush_Flowers','nat_Bush_Large_Flowers'];
@@ -611,6 +606,7 @@ function startLevel(n) {
level = ((n - 1) % 10) + 1;
word = NUM_WORDS[level - 1];
document.getElementById('levelbadge').textContent = 'Level ' + level;
+ playEfx('levelup', 1.1);
startFind();
}
@@ -675,12 +671,14 @@ function accept(c) {
c.collected = true; c.group.visible = false;
score += c.value; updateScore();
burst(c.group.position, c.glow.material.color.getHex());
- playEfx('collect', 1.8); // louder coin-collect sound on success
+ if (c.value >= 5) playEfx('bonus', 1.4); // big jingle for stars/jewels
+ else if (c.kind === 'reward') playEfx('pickup', 1.6); // free-coin pickup
+ else playEfx(Math.random() < 0.5 ? 'collect' : 'collect2', 1.8); // louder coin-collect sound on success
sfxCollect(); // + a bright sparkle note
}
function reject(c) {
const now = performance.now();
- if (now - lastReject > 850) { lastReject = now; sfxWrong(); say('try_again'); }
+ if (now - lastReject > 850) { lastReject = now; playEfx('ohno', 1.5); sfxWrong(); say('try_again'); }
// nudge the player off the wrong coin so they can try another
const dx = playerGroup.position.x - c.x, dz = playerGroup.position.z - c.z, d = Math.hypot(dx, dz) || 1;
playerGroup.position.x += dx/d * 0.7; playerGroup.position.z += dz/d * 0.7;
@@ -689,15 +687,18 @@ function reject(c) {
// ── level finished: celebrate + reward coins, then next level ──
function celebrateLevel() {
phase = 'reward'; clearCollectibles(); confetti();
+ playEfx('playerwow', 1.4); // player's "wow!" cheer on finishing the level
playEfx('complete', 1.4); // task-complete fanfare at a good level
setTimeout(() => playEfx('cheer', 1.1), 300); // + crowd cheer
say('level_complete', true);
taskTitle().textContent = 'GREAT JOB! ⭐';
taskBody().innerHTML = `${level}${word.toUpperCase()}`;
infoEl.textContent = '🎉 Level ' + level + ' done! Grab the coins!';
- for (let i = 0; i < 6; i++) { const [x, z] = freeSpot(); const star = i === 0;
- spawnCollectible(star ? 'star' : 'coin-gold', x, z,
- { hex: star ? '#ffe34d' : NUMBER_HEX, kind: 'reward', value: star ? 5 : 1 }); }
+ for (let i = 0; i < 6; i++) { const [x, z] = freeSpot();
+ const special = i === 0 ? 'star' : (i === 1 ? 'jewel' : 'coin-gold'); // a star + a shiny jewel, rest coins
+ const big = i < 2;
+ spawnCollectible(special, x, z,
+ { hex: i === 0 ? '#ffe34d' : (i === 1 ? '#7be3ff' : NUMBER_HEX), kind: 'reward', value: big ? 5 : 1 }); }
setTimeout(() => startLevel(level + 1), 6500);
}
@@ -858,7 +859,8 @@ document.getElementById('start-btn').addEventListener('click', () => {
document.getElementById('start').style.display = 'none';
initAudio();
if (actx.state === 'suspended') actx.resume();
- ['wow','collect','jump','walk','complete','cheer','applause'].forEach(k => loadEfx(k).catch(()=>{}));
+ ['wow','playerwow','collect','collect2','pickup','jump','walk','complete','bonus','cheer','applause','ohno','levelup']
+ .forEach(k => loadEfx(k).catch(()=>{}));
startMusic(); // background music (reduced, random, looping)
preload(['greet','instr_move','find_1','num_1','level_complete','try_again',
'cheer_0','cheer_1','cheer_2','cheer_3','cheer_4','cheer_5','cheer_6','cheer_7']);
diff --git a/instr_infinity.mp3 b/instr_infinity.mp3
deleted file mode 100644
index 52f7bcba30c21be73c0e6065fd45b9155c37c911..0000000000000000000000000000000000000000
Binary files a/instr_infinity.mp3 and /dev/null differ
diff --git a/instr_letters.mp3 b/instr_letters.mp3
deleted file mode 100644
index a251d6d19ee429648d354084e882ee326757b076..0000000000000000000000000000000000000000
Binary files a/instr_letters.mp3 and /dev/null differ
diff --git a/instr_numbers.mp3 b/instr_numbers.mp3
deleted file mode 100644
index af6dfc27c93dc11c6c8ed5e231b1871fa6583418..0000000000000000000000000000000000000000
Binary files a/instr_numbers.mp3 and /dev/null differ
diff --git a/letter_a.mp3 b/letter_a.mp3
deleted file mode 100644
index ead4281865c216ca575b8de7b138bc0afd2de331..0000000000000000000000000000000000000000
Binary files a/letter_a.mp3 and /dev/null differ
diff --git a/letter_b.mp3 b/letter_b.mp3
deleted file mode 100644
index 9df7b335f9c85921684f530b1808fcdde1c17ba9..0000000000000000000000000000000000000000
Binary files a/letter_b.mp3 and /dev/null differ
diff --git a/letter_c.mp3 b/letter_c.mp3
deleted file mode 100644
index 916883cd9fa9d7d6d10725de0c891f749bd089fe..0000000000000000000000000000000000000000
Binary files a/letter_c.mp3 and /dev/null differ
diff --git a/letter_d.mp3 b/letter_d.mp3
deleted file mode 100644
index b909fa6e735590888b67716637fb902c291caece..0000000000000000000000000000000000000000
Binary files a/letter_d.mp3 and /dev/null differ
diff --git a/letter_e.mp3 b/letter_e.mp3
deleted file mode 100644
index 8051a6b1c1b42c293f29448ed51b3d0e106c3cc1..0000000000000000000000000000000000000000
Binary files a/letter_e.mp3 and /dev/null differ
diff --git a/letter_f.mp3 b/letter_f.mp3
deleted file mode 100644
index 02dda7db2025f3dc785025a5c9ede4bf3de01286..0000000000000000000000000000000000000000
Binary files a/letter_f.mp3 and /dev/null differ
diff --git a/letter_g.mp3 b/letter_g.mp3
deleted file mode 100644
index 3ee4bfcf8fde9fa42d4cf87c177db2b0b1a69f02..0000000000000000000000000000000000000000
Binary files a/letter_g.mp3 and /dev/null differ
diff --git a/letter_h.mp3 b/letter_h.mp3
deleted file mode 100644
index f6bdc9ab845ed5e2268356c5ba98c5e0a60d89e2..0000000000000000000000000000000000000000
Binary files a/letter_h.mp3 and /dev/null differ
diff --git a/letter_i.mp3 b/letter_i.mp3
deleted file mode 100644
index 52f0fdb95c0412d889d6c71dbe1a2f86721f025b..0000000000000000000000000000000000000000
Binary files a/letter_i.mp3 and /dev/null differ
diff --git a/letter_j.mp3 b/letter_j.mp3
deleted file mode 100644
index af1600d0135ca7caf1fd6f6b6a071b25b61e98ef..0000000000000000000000000000000000000000
Binary files a/letter_j.mp3 and /dev/null differ
diff --git a/letter_k.mp3 b/letter_k.mp3
deleted file mode 100644
index ffa1684ddf2dd13e81ca1e4c307e8961e4c81039..0000000000000000000000000000000000000000
Binary files a/letter_k.mp3 and /dev/null differ
diff --git a/letter_l.mp3 b/letter_l.mp3
deleted file mode 100644
index 3bb668bd12c611a7068858e6ac2385bdf7f70477..0000000000000000000000000000000000000000
Binary files a/letter_l.mp3 and /dev/null differ
diff --git a/letter_m.mp3 b/letter_m.mp3
deleted file mode 100644
index 148d2bb4609ad6c2e6cf052064509aad8b98dd2a..0000000000000000000000000000000000000000
Binary files a/letter_m.mp3 and /dev/null differ
diff --git a/letter_n.mp3 b/letter_n.mp3
deleted file mode 100644
index 479df976bf01d1bbd5543756a3fe4ea1f0b8dc23..0000000000000000000000000000000000000000
Binary files a/letter_n.mp3 and /dev/null differ
diff --git a/letter_o.mp3 b/letter_o.mp3
deleted file mode 100644
index c194f2d5c450c7972ccdcafb55fd1952d057e3f8..0000000000000000000000000000000000000000
Binary files a/letter_o.mp3 and /dev/null differ
diff --git a/letter_p.mp3 b/letter_p.mp3
deleted file mode 100644
index f0f7770a996ecb44043104b41f0c70ca489f17fc..0000000000000000000000000000000000000000
Binary files a/letter_p.mp3 and /dev/null differ
diff --git a/letter_q.mp3 b/letter_q.mp3
deleted file mode 100644
index 02665579d87860e03ba66f252cf0fefcd9fd29dd..0000000000000000000000000000000000000000
Binary files a/letter_q.mp3 and /dev/null differ
diff --git a/letter_r.mp3 b/letter_r.mp3
deleted file mode 100644
index 038734e16d6ad5082bcf991ad8f5a1a9b4e2bba8..0000000000000000000000000000000000000000
Binary files a/letter_r.mp3 and /dev/null differ
diff --git a/letter_s.mp3 b/letter_s.mp3
deleted file mode 100644
index be6886ae9b7a4cd592db38ea7260bb90fd012706..0000000000000000000000000000000000000000
Binary files a/letter_s.mp3 and /dev/null differ
diff --git a/letter_t.mp3 b/letter_t.mp3
deleted file mode 100644
index 00baa78edbaa3dde89232124eb0817fedb02d380..0000000000000000000000000000000000000000
Binary files a/letter_t.mp3 and /dev/null differ
diff --git a/letter_u.mp3 b/letter_u.mp3
deleted file mode 100644
index 4abfd7de090b4d7601a706f2ce5932d371b88dd4..0000000000000000000000000000000000000000
Binary files a/letter_u.mp3 and /dev/null differ
diff --git a/letter_v.mp3 b/letter_v.mp3
deleted file mode 100644
index 10f406c06a4f0554003447b8a9147d72a209777c..0000000000000000000000000000000000000000
Binary files a/letter_v.mp3 and /dev/null differ
diff --git a/letter_w.mp3 b/letter_w.mp3
deleted file mode 100644
index 2bc9edecb9620c2b7188f0b7b879f67127a5ae34..0000000000000000000000000000000000000000
Binary files a/letter_w.mp3 and /dev/null differ
diff --git a/letter_x.mp3 b/letter_x.mp3
deleted file mode 100644
index aef35cca0e4148698b45aa29ae29ccd6521d40f3..0000000000000000000000000000000000000000
Binary files a/letter_x.mp3 and /dev/null differ
diff --git a/letter_y.mp3 b/letter_y.mp3
deleted file mode 100644
index b58e4ebadef45ca79b7b1b2cd6cbf85a4f8850df..0000000000000000000000000000000000000000
Binary files a/letter_y.mp3 and /dev/null differ
diff --git a/letter_z.mp3 b/letter_z.mp3
deleted file mode 100644
index f4c85778af21a83dd7f6c93a976f780b7606cb0c..0000000000000000000000000000000000000000
Binary files a/letter_z.mp3 and /dev/null differ
diff --git a/level_start.mp3 b/level_start.mp3
deleted file mode 100644
index 793700f3a11e516e234ed5ad6b5027e04b375e0e..0000000000000000000000000000000000000000
Binary files a/level_start.mp3 and /dev/null differ
diff --git a/Sky.js b/libs/Sky.js
similarity index 100%
rename from Sky.js
rename to libs/Sky.js
diff --git a/audiocoffee-game-116679.mp3 b/sounds/audiocoffee-game-116679.mp3
similarity index 100%
rename from audiocoffee-game-116679.mp3
rename to sounds/audiocoffee-game-116679.mp3
diff --git a/denis-pavlov-music-marimba-tropical-african-travel-game-197517.mp3 b/sounds/denis-pavlov-music-marimba-tropical-african-travel-game-197517.mp3
similarity index 100%
rename from denis-pavlov-music-marimba-tropical-african-travel-game-197517.mp3
rename to sounds/denis-pavlov-music-marimba-tropical-african-travel-game-197517.mp3
diff --git a/good_b_music-fairytail-quest-for-game-394561.mp3 b/sounds/good_b_music-fairytail-quest-for-game-394561.mp3
similarity index 100%
rename from good_b_music-fairytail-quest-for-game-394561.mp3
rename to sounds/good_b_music-fairytail-quest-for-game-394561.mp3
diff --git a/soundore-kid-366901.mp3 b/sounds/soundore-kid-366901.mp3
similarity index 100%
rename from soundore-kid-366901.mp3
rename to sounds/soundore-kid-366901.mp3