Bab 3: Lingkungan Danau
Bab ini membahas semua aset 3D untuk lingkungan danau dalam game memancing: dermaga, air,
dasar danau, joran dan senar pancing, langit, bukit-bukit di kejauhan, serta semua benda kecil
penghias (batu, tanaman, pohon, properti dermaga). Semua aset dibuat di Blender dan disimpan
sebagai file .usdz — format file 3D yang bisa menyimpan bentuk, warna/gambar, dan
(khusus untuk joran dan senar) rangka tulang yang bisa digerakkan.
Pengecekan langsung ke folder FishAssets/Environment/ menunjukkan ada
21 file .usdz. Ke-18 aset yang tercatat di dokumen status proyek
semuanya ada. Ada 2 aset tambahan di luar rencana 18-aset awal —
foliage_fern_01.usdz dan foliage_shrub_01.usdz — ditambahkan belakangan
sebagai penghias ekstra, bukan bagian dari hitungan "18/18 selesai" yang resmi.
| File di disk | Ukuran | Termasuk daftar 18 asli? |
|---|---|---|
dock_main.usdz | 3.841.398 B (3,8 MB) | Ya |
water_surface.usdz | 184.062 B | Ya |
terrain_underwater.usdz | 2.700.413 B | Ya |
rod_main.usdz | 2.448.022 B | Ya |
rod_line.usdz | 12.622 B | Ya |
sky_dome.usdz | 738.977 B | Ya |
terrain_horizon_ring.usdz | 13.128.837 B (13,1 MB) | Ya |
rock_shoreline_01.usdz | 620.446 B | Ya |
rock_shoreline_02.usdz | 228.841 B | Ya |
rock_shoreline_03.usdz | 667.417 B | Ya |
foliage_grass_01.usdz | 1.568.757 B | Ya |
foliage_reed_01.usdz | 1.645.435 B | Ya |
tree_01.usdz | 921.062 B | Ya |
tree_02.usdz | 542.015 B | Ya |
tree_03.usdz | 1.141.803 B | Ya |
prop_bucket_01.usdz | 726.934 B | Ya |
prop_tacklebox_01.usdz | 761.955 B | Ya |
prop_rope_01.usdz | 19.280 B | Ya |
foliage_fern_01.usdz | 4.841.864 B | Tidak — bonus, ditambah belakangan |
foliage_shrub_01.usdz | 16.861.079 B (16,9 MB) | Tidak — bonus, ditambah belakangan; ditandai kebesaran, lihat detail di bawah |
Catatan: ukuran file di disk sekarang lebih besar dari ukuran yang tercatat saat aset pertama kali dinyatakan "selesai" di dokumen, karena sebagian besar aset mengalami perbaikan/ekspor ulang belakangan (ganti HDRI, upgrade tekstur, perbaikan bug) yang dijelaskan per-aset di bawah ini.
Aset 1 — dock_main.usdz (dermaga kayu)
Apa itu: dermaga kayu tempat pemain berdiri. Dermaga memancing yang sudah usang dengan tiang penyangga kayu (piling), bantalan ban karet, dan detail tali.
Sumber: diunduh dari Sketchfab, bukan dibuat dari nol. Nama model: "Old pier
(Game ready)" oleh PT34. ID model: 3c21842960a74452a13609a584f38762.
Lisensi: CC-BY 4.0 — atribusi wajib secara hukum (harus mencantumkan kredit "Old
pier (Game ready)" oleh PT34, lisensi CC-BY 4.0, di layar kredit game). Sebanyak 97 model kandidat
ditinjau dan disaring; model ini mendapat skor 86/100 dari sistem penilaian proyek (kecocokan
visual, kualitas tekstur, anggaran jumlah poligon, performa, lisensi). Kandidat lain ditolak karena
terlalu bergaya kartun, punya pondok atap yang tidak diinginkan, atau jumlah poligonnya 2-24 kali
lipat di atas anggaran.
Riwayat pembuatan/perbaikan:
Versi asli: 9.084 segitiga, 7.034 titik (vertex), tiga gambar tekstur 2K (warna dasar,
metallic/roughness, normal map). Struktur folder bertingkat bawaan unduhan Sketchfab dibersihkan,
dan transformasi (posisi/rotasi/skala) "diterapkan" (dikunci jadi geometri asli objek) sesuai aturan
proyek. Diskalakan seragam ke panjang nyata 9,0 meter (ukuran akhir 4,09 x 9,0 x
2,86 m). Diposisikan agar dek (permukaan berjalan) berada tepat di z = +0,80 m, dengan
garis air di z = 0. Tekstur dikompres ulang untuk menghemat ukuran: warna dasar ke JPEG kualitas 88
(1,38 MB), normal map ke JPEG kualitas 92 (1,66 MB), dan peta metallic/roughness diturunkan dari 2K
ke 1K (0,25 MB). Total berat tekstur turun dari 13,3 MB menjadi 3,66 MB (pengurangan 72%) demi
anggaran performa real-time di iPad.
Bug — ekspor tanpa tekstur: ekspor "optimal" pertama hanya menghasilkan 0,45 MB
(geometri saja, tanpa gambar) karena importer glTF Blender sudah membungkus gambar di dalam file
kerja, dan langkah ekspor gagal menuliskannya kembali ke luar. Alat validasi (usdchecker)
menangkap ini dengan error file hilang (pier_normal.jpg). Juga ditemukan bahwa nama
parameter berubah di versi Blender ini — nama yang benar adalah export_textures_mode
(bukan export_textures), diset ke NEW. Diperbaiki dengan mengarahkan
gambar ke file yang sudah dioptimalkan di disk sebelum ekspor ulang; hasilnya 3,66 MB, validator
lolos.
Bug — perbaikan tidak sengaja dibatalkan sendiri: perintah Blender untuk
"membongkar" gambar (unpack(method='USE_ORIGINAL')) diam-diam mengembalikan jalur file
ke PNG asli yang berat, membatalkan hasil kompresi. Diperbaiki dengan mengatur jalur file secara
langsung, bukan memakai perintah itu.
Bug — dek terpasang di bawah air: pengecekan otomatis "di mana letak dek" menghitung jumlah permukaan datar yang menghadap ke atas di tiap ketinggian, dan salah mengunci ke banyak puncak tiang kecil, bukan dek sesungguhnya, sehingga melaporkan dek 1 meter terlalu rendah (sebagian terendam). Diperbaiki dengan mengukur berdasarkan total luas permukaan — dek sesungguhnya adalah satu permukaan besar seluas 21,69 meter persegi, mudah dibedakan dari puncak tiang yang masing-masing di bawah 0,4 meter persegi. Pelajaran: kenali lantai/dek dari luasnya, bukan dari jumlah permukaannya.
Fakta skala/posisi: ukuran akhir 4,09 m lebar x 9,0 m panjang x 2,86 m tinggi.
Permukaan dek: tepat z = +0,80 m di atas garis air (z = 0). Tiang penyangga turun
hingga z = -0,67 m di bawah garis air — ini batasan keras yang harus dipenuhi aset
dasar danau (perlu ada rak dangkal di kedalaman itu supaya tiang "tertancap" ke dasar danau, bukan
mengambang). Termasuk bantalan ban dan tali — bisa dihapus nanti jika diminta, tapi saat ini masih
menjadi bagian model.
Status saat ini: Selesai. Validasi usdchecker lolos.
Aset 2 — water_surface.usdz (permukaan air datar)
Apa itu: lembaran datar yang mewakili permukaan air. Saat ini belum ada animasi dan belum terlihat seperti air sungguhan — baru bentuk pengganti sementara, menunggu sisi aplikasi membangun efek visual air bergerak yang sesungguhnya.
Sumber: tidak diunduh — dibuat langsung di Blender sebagai bentuk grid sederhana ("primitive"). Tim sengaja tidak mencari di Sketchfab untuk ini: grid datar adalah geometri yang sangat sederhana sehingga model unduhan hanya akan menambah struktur, pemetaan gambar, dan kewajiban lisensi yang tidak diketahui, tanpa manfaat. Tidak ada kandidat yang dinilai karena dianggap tidak perlu. Lisensi: tidak diperlukan (milik proyek, dibuat sendiri).
Riwayat pembuatan/perbaikan: dibuat sebagai grid 80 x 60 meter, dibagi jadi
60 x 44 bagian berbentuk segi empat (quad), menghasilkan 5.280 segitiga dan 2.745 titik (vertex) —
cukup padat agar efek riak di masa depan bisa menggerakkan titik-titik individual untuk membuat
gelombang. Jarak antar garis grid: sekitar 1,333 x 1,364 meter. Setiap titik berada tepat di
z = 0,0 — ini menentukan ketinggian "garis air" yang dipakai semua aset lain di scene.
Koordinat pemetaan gambar (UV) membentang di seluruh lembaran 80x60m dalam satu rentang 0-sampai-1,
artinya tekstur air di masa depan perlu berulang sekitar 40 kali agar terlihat berukuran benar
(sekitar 2 meter per riak). Material: baru placeholder — warna hijau-biru pudar tenang, roughness
0,08 (cukup halus), transmission 0,85 (85% tembus pandang), indeks bias 1,333 (sesuai sifat
pembelokan cahaya air asli). Ini hanya supaya file tidak hitam pekat saat dibuka — bukan tampilan
air final.
Bug (belakangan, lintas-aset) — arah hadap permukaan (face winding): lihat bagian "Bug Lintas Aset" di akhir bab; aset ini TIDAK terkena bug backface-culling yang menimpa kubah langit dan cincin bukit, karena dibangun dengan metode generasi yang berbeda dan lebih sederhana.
Fakta skala/posisi: ukuran 80 x 60 meter (sama persis dengan jejak dasar danau). Ketinggian: z = 0,0 di semua titik (ini "garis air" acuan proyek). Dikonfirmasi lewat pengukuran langsung: rentang dermaga dari bawah ke atas adalah z = -0,67 sampai +2,19 m, dengan dek di +0,80 m — artinya dek berjarak tepat 0,80 m di atas permukaan air sesuai rencana, dan tiang penyangga tercelup ke air.
Status saat ini: Geometri selesai dan sudah dikirim. Tampilan air bergerak yang sesungguhnya (normal map beriak, refraksi, gradasi warna berdasarkan kedalaman) secara eksplisit adalah tugas terpisah yang belum dibangun untuk siapa pun yang menulis kode render game — aset ini hanya menyediakan bentuk untuk menempelkan efek itu. Ada keanehan kecil: dalam mode pratinjau cepat Blender, material placeholder ini menampilkan pola bintik/dithering — ini hanya keterbatasan renderer pratinjau untuk material yang sangat tembus pandang, bukan cacat pada file yang sesungguhnya dikirim, dan tidak relevan lagi begitu shader asli menggantikan placeholder ini.
Aset 3 — terrain_underwater.usdz (dasar danau / tanah bawah air)
Apa itu: bentuk tanah di bawah air — lereng dari pantai dangkal dekat dermaga turun ke cekungan dalam lebih jauh, dengan gundukan batu kecil dan detail pasir yang dipahat.
Sumber: geometri dibuat sendiri di Blender (bukan diunduh) karena harus sesuai
persis dengan ukuran dermaga dan air proyek ini (rak di kedalaman tepat yang dibutuhkan tiang
dermaga). Tekstur permukaan (gambar pasir) memang diambil dari sumber luar:
damp_sand dari Poly Haven, lisensi CC0 (domain publik — tanpa
atribusi), diunduh di resolusi 1K. Sebanyak 58 tekstur pasir berbeda ditinjau sebelum
memilih ini; dipilih karena tampilan "basah/kasar"-nya terbaca benar sebagai dasar bawah air, bukan
pantai kering.
Riwayat pembuatan/perbaikan: ukuran 80 x 60 meter (sama dengan permukaan air). Grid: 80 x 56 quad = 8.960 segitiga, 4.617 titik. Profil kedalaman dari pantai ke air dalam (sepanjang sumbu Y): tepian di +1,5 m (di atas air) → garis pantai di 0,0 m (sekitar y≈-12) → rak di -0,65 m di bawah dermaga → -1,6 m (y=9) → -4,0 m (y=14) → -7,0 m (y=20) → dasar cekungan dalam di -11,0 m. Transisi dihaluskan (tanpa lipatan tajam). Sebanyak 26 gundukan batu prosedural dipahat langsung ke bentuk tanah (radius 0,9-2,8 m, tinggi 0,25-0,75 m) — memberi bentuk/bayangan 3D nyata, bukan batu palsu berupa gambar datar. Detail riak pasir halus (gundukan 0,03 m) plus gelombang lebih besar (gundukan 0,15 m) ditambahkan ke permukaan. Area tepat di bawah dermaga (plus margin aman 1,2 m) sengaja dimatikan gundukan batu/derau-nya, agar tanah tetap rata dan bersih di tempat tiang dermaga perlu tertancap merata. Pemetaan gambar diskalakan ke ukuran nyata: satu ubin tekstur = 2,04 meter (ukuran nyata tekstur pasir), menghasilkan sekitar 39 x 29 ubin di seluruh tanah. Susunan tekstur: sumber pasir datang dengan 7 peta gambar berbeda — tim hanya memakai 3 (warna, normal map, roughness) dan membuang sisanya — normal map gaya DirectX (arah salah untuk pipeline ini), peta ambient-occlusion yang redundan, dan peta displacement (yang toh tidak bisa ikut terekspor ke format USDZ). Nilai metallic diset 0 (pasir bukan logam).
Bug — crash saat pembersihan material: sebuah skrip mencoba menghapus beberapa node sambungan gambar sambil masih memeriksa properti pada node yang baru saja dihapus, menyebabkan error ("StructRNA has been removed"). Diperbaiki dengan lebih dulu membuat daftar semua yang akan dihapus, baru menghapus — bukan memeriksa dan menghapus dalam satu proses bersamaan. Dipulihkan dengan memuat ulang file dari sebelum crash, bukan melanjutkan dari keadaan setengah rusak.
Pengaturan bernama blendermcp_use_polyhaven (yang menyalakan/mematikan kemampuan
unduh tekstur Poly Haven) harus dinyalakan ulang secara manual — statusnya mati secara default.
Fakta skala/posisi: dikonfirmasi lewat pengukuran langsung: ketinggian tanah tepat di bawah jejak dermaga terukur z = -0,649 sampai -0,601 m, sementara dasar tiang dermaga ada di -0,67 m — artinya tiang menembus 0,02-0,07 m ke dalam tanah (tertancap benar, tidak mengambang). Cekungan dalam terukur -9,46 m di y=25, minimum -11,04 m secara keseluruhan; tepian di atas air terukur +1,34 m di y=-28. Penyimpangan dari rencana awal: rak di bawah dermaga (hanya sekitar 0,65 m dalam) lebih dangkal dari rentang 0,5-1,5 m yang awalnya dibayangkan untuk "cukup dalam bagi ikan besar" — ini trade-off yang disengaja agar sesuai kedalaman tiang dermaga yang tetap. Air dalam sesungguhnya untuk patroli ikan terjadi lebih jauh di cekungan (-9,5 sampai -11 m), yang realistis (dermaga asli memang berada di air dangkal dekat pantai).
Status saat ini: Selesai, validasi usdchecker lolos.
Perbaikan penting belakangan: aset ini juga terkena bug arah-hadap-permukaan
(backface-culling) yang dijelaskan di bagian bug lintas-aset — sudah diperbaiki di level file yang
dikirim (CP42), meski efek visualnya saat ini tersembunyi karena shader air real-time belum benar-
benar tembus pandang.
Aset 4 — rod_main.usdz (joran + reel, hanya rangka)
Apa itu: joran pancing dan reel yang dipegang pemain. Tidak punya animasi bawaan — dikirim sebagai rangka tulang (rig) dalam pose istirahat. Kode game sendiri harus menekuk tulang secara langsung, setiap frame, berdasarkan bagaimana pemain memiringkan ponselnya.
Sumber: geometri diunduh dari Sketchfab: "Fishing Rod, Rigged and Animated" oleh
ergin3d.com, ID model 78991bf44cf54acb8660bef317d72c7a.
Lisensi: CC-BY 4.0 — atribusi wajib ("Fishing Rod, Rigged and Animated" oleh
ergin3d.com, CC-BY 4.0). Sebanyak 47 kandidat ditinjau; model ini mendapat skor 84/100. Rangka/rig
dan satu klip animasi bawaan dari unduhan dibuang sepenuhnya dan diganti dengan rig
buatan sendiri (lihat di bawah) — meski rig sumbernya sebenarnya cukup bagus, aturan proyek
mengharuskan penamaan/rantai tulang tertentu yang tidak bisa diasumsikan cocok dengan rig unduhan.
Riwayat pembuatan/perbaikan: unduhan asli: 23.316 segitiga dari 7 bagian mesh
terpisah, rangka 10-tulang miliknya sendiri (bernama Bone001_00 sampai
Bone010_09), satu animasi bawaan, dan tiga gambar tekstur 4096x4096 piksel (warna,
normal, metallic/roughness). Menghapus bentuk placeholder sisa impor yang tak dipakai (sebuah
"Icosphere" 80 segitiga) yang bukan bagian joran sesungguhnya. Menggabungkan 6 bagian mesh nyata jadi
satu objek; membuang rig 10-tulang sepenuhnya. Reorientasi model: awalnya panjang
joran mengarah sepanjang sumbu X (ujung mengarah ke -X). Diputar sehingga panjangnya sekarang
mengarah sepanjang +Y (gagang di titik nol, ujung ke arah +Y) — menyesuaikan konvensi sumbu yang sama
dipakai model ikan lain di proyek ini. Diskalakan ke total panjang 2,2 meter, dengan
titik pivot (origin) diletakkan di ujung bawah gagang.
Pengurangan jumlah poligon secara selektif: bagian yang membulat (batang joran + badan reel) dipisahkan dan disederhanakan (decimate) dengan rasio 0,49 (sekitar 19.384 → ~9.500 segitiga), sementara lilitan senar tipis di spul disederhanakan lebih lembut dengan rasio 0,78 (sekitar 3.892 → ~3.000 segitiga) karena geometri tipis terlihat buruk jika terlalu disederhanakan. Digabung kembali setelahnya. Total: 23.276 → 12.531 segitiga, memenuhi anggaran 8.000-15.000 segitiga proyek untuk properti "hero" (dekat kamera, penting).
Tekstur dikompres ulang: peta warna 4K→2K JPEG kualitas 90, normal map 4K→2K JPEG kualitas 92, peta metallic/roughness 4K→1K JPEG kualitas 85.
Bug — gagal validasi ekspor pada normal map: gambar normal map dan metallic/roughness yang baru dimuat secara default memakai pengaturan "ruang warna" yang salah (sRGB, untuk gambar warna biasa) alih-alih "Non-Color" (untuk data seperti normal map, yang menyimpan informasi arah, bukan warna). Ini membuat pencahayaan terlihat salah (data ini "dikoreksi gamma" dua kali secara tidak sengaja). Diperbaiki dengan mengatur kedua gambar secara eksplisit ke Non-Color sebelum ekspor.
Bug — reload memakai data cache, bukan file sesungguhnya: kode awalnya mencoba mengarahkan data gambar Blender ke file baru yang lebih kecil lalu "reload", tapi reload sebenarnya membaca data yang sudah dibungkus di dalam file kerja (bukan file baru di disk), sehingga gambar diam-diam tetap di ukuran 4096 piksel lama. Diperbaiki dengan memaksa pemuatan gambar yang benar-benar baru dengan nama unik baru, lalu mengarahkan ulang setup shading ke salinan baru itu, dan menghapus yang lama tak terpakai. Ini sekarang jadi pelajaran tercatat untuk seluruh proyek: jangan pernah percaya opsi "pakai ulang gambar yang sudah ada jika ditemukan" setelah mengubah jalur file secara manual — paksa pemuatan yang benar-benar baru.
Dibangun rangka 6-tulang baru: Root (jangkar diam) →
Handle (kaku, mencakup gagang + reel, rentang y 0 sampai 0,55 m) → Rod_01
(0,55-1,05 m) → Rod_02 (1,05-1,55 m) → Rod_03 (1,55-1,95 m) →
Tip (1,95-2,2 m). Setiap titik mesh (vertex) diberikan bobot ke 2 segmen tulang terdekat,
dengan kekuatan bobot melemah sesuai jarak — lebih sederhana dari rig ikan karena ini rantai tekukan
satu-arah, bukan struktur sirip bercabang.
Bug — rantai tulang tidak sejajar dengan mesh (ditemukan orang yang melihat tangkapan layar, bukan oleh pengecekan otomatis): setelah dikirim, tampilan rangka terlihat berjalan di samping tabung joran, bukan menembus tengahnya. Penyebab: saat model diputar untuk mengubah sumbu arah panjangnya, rotasi itu hanya memperbaiki sumbu panjang — tidak menyadari atau memperbaiki bahwa bentuk file unduhan asli sebenarnya tidak pernah berpusat di titik tengahnya sendiri pada sumbu tinggi (rentang atas-bawah asli sebelum diputar adalah -0,26 sampai 1,04, jelas tidak center). Tulang dibangun dengan asumsi bentuk sempurna center di tinggi 0, padahal center sesungguhnya sekitar 0,055 m lebih tinggi. Diperbaiki dengan menggeser seluruh mesh turun 0,0556 m di sumbu itu agar sejajar dengan tulang (menyisakan goyangan alami ±0,026 m dari bentuk meruncing normal joran, bukan kesalahan sistematis). Pelajaran: setiap kali memutar data titik model unduhan untuk mengubah arahnya, cek juga apakah model itu tidak center di sumbu LAIN, bukan cuma sumbu yang sedang diperbaiki.
Fakta skala/posisi: rantai dan nama tulang (untuk siapa pun yang menulis kode
tekukan): Root → Handle → Rod_01 → Rod_02 → Rod_03 → Tip.
Handle mencakup gagang dan reel — harus tetap kaku (tidak ditekuk). Rod_01
sampai Tip harus diputar dengan jumlah tekukan makin besar semakin dekat ke ujung (lebih
banyak tekukan di Tip dibanding Rod_01), digerakkan oleh besarnya kemiringan ponsel. Gagang berada di
titik nol dunia (0,0,0); ujung, dalam pose istirahat, berada di lokal Y = +2,2 m. Total panjang joran:
2,2 meter.
Status saat ini: Selesai. Validasi usdchecker lolos dengan 0 vertex
tak berbobot (13.100 vertex, 5 tulang penekuk). Tes tekukan terprogram (memposisikan tulang pada
sudut 6°, 14°, 24°, 34° tekukan yang makin besar) menghasilkan kurva mulus dengan pergeseran titik
maksimum 0,807 dan rata-rata 0,127, tanpa celah atau penjepitan di sendi, dan gagang/reel tetap kaku
dengan benar.
Aset 5 — rod_line.usdz (senar pancing, hanya rangka)
Apa itu: senar pancing sesungguhnya yang tergantung dari ujung joran. Seperti joran, tidak punya animasi bawaan — punya rangka sendiri terpisah agar kode game bisa menganimasikan tegangan/kendur senar secara independen dari seberapa besar joran itu sendiri ditekuk.
Sumber: dibuat sendiri di Blender. Sketchfab dicari lebih dulu (56 kandidat untuk kata kunci seperti "fishing line," "fishing line rigged," dll) tapi tidak ada model senar pancing berdiri sendiri di situs itu — semua hasil adalah perahu, joran tak relevan, atau kota/rumah bertema memancing. Lisensi: tidak diperlukan (milik proyek).
Riwayat pembuatan/perbaikan: dibuat sebagai tabung bersisi 6, 18 segmen panjang,
dengan tutup ujung, radius 2,5 milimeter (ukuran realistis untuk senar/monofilamen
pancing sesungguhnya). Panjang: 2,4 meter saat istirahat — sedikit lebih panjang
dari joran (2,2 m), mewakili jumlah "senar yang diulur" yang masuk akal saat pertarungan ikan.
224 segitiga, 114 titik, semua terbobot ke tulang dengan benar (0 titik tak berbobot). Material: warna
datar pucat (0,82, 0,83, 0,80), roughness 0,28, tanpa metallic — sengaja tanpa gambar/tekstur
sama sekali. Pada radius 2,5mm, tekstur gambar hanya akan menambah ukuran file tanpa manfaat
visual apa pun — ini disebut sebagai keputusan desain positif, bukan jalan pintas. Rangka 6-tulang
sendiri, sepenuhnya independen dari rangka joran: Root → Anchor
(kaku) → Line_01 → Line_02 → Line_03 → Line_04.
Metode pembobotan sama seperti joran (2 segmen tulang terdekat, terbobot jarak).
Fakta skala/posisi — kritis untuk siapa pun yang memasangnya: titik nol lokal
senar ini adalah ujung jangkarnya (tempat diikatkan ke joran).
Kode game harus memposisikan titik nol aset ini di TAIL (ekor) tulang Tip
milik rod_main, dalam pose istirahat joran — posisi dunia (0, 2,2, 0). Ini
BUKAN sama dengan HEAD (kepala) tulang Tip, yang berada di (0, 1,95, 0).
Salah menukar head dan tail di sini diam-diam menempatkan senar 0,25 meter lebih pendek
dari posisi ujung joran sesungguhnya — kesalahan persis ini pernah terjadi saat render verifikasi tim
sendiri dan ketahuan dengan membandingkan angka terhadap panjang 2,2m joran yang sudah diketahui;
ditandai secara eksplisit di sini agar tidak terulang oleh siapa pun yang mengintegrasikannya di
aplikasi.
Status saat ini: Selesai. Validasi usdchecker lolos. Tes tekukan pada
sudut makin curam (8°/18°/30°/42°) menghasilkan kurva mulus tanpa robek (pergeseran maksimum 1,542,
memang diperkirakan lebih besar dari tes joran karena ini sapuan lebih besar pada rantai yang lebih
tipis dan fleksibel). Tes penempatan gabungan mengonfirmasi jangkar senar berada tepat di panduan
ujung joran tanpa celah atau tumpang tindih terlihat jika diposisikan dengan benar.
Aset 6 — sky_dome.usdz (kubah langit / latar belakang)
Apa itu: kubah raksasa (seperti mangkuk terbalik) yang mengelilingi seluruh scene, dengan gambar langit/cakrawala dilukis di bagian dalamnya sehingga selalu terlihat seperti suasana golden-hour cerah dari arah mana pun pemain melihat. Tanpa cahaya (unlit) — menampilkan gambarnya pada kecerahan penuh terlepas dari pencahayaan game sesungguhnya, dan sengaja tidak mengandung sumber cahaya sendiri. Cahaya directional hangat terpisah yang dibutuhkan game (sesuai sudut matahari tertentu) harus ditambahkan oleh kode render game sendiri, tidak dipanggang ke dalam file ini.
Sumber: bentuk kubah dan gambar bakuannya dibuat sendiri; gambar langit itu sendiri (HDRI — foto/render panorama sangat detail untuk pencahayaan dan latar belakang realistis) diambil dari Poly Haven, lisensi CC0 (domain publik, tanpa atribusi). HDRI ini ditukar berkali-kali sepanjang umur proyek — lihat linimasa di bawah; setiap versi yang dipakai adalah CC0 dari Poly Haven, jadi tidak ada atribusi yang berutang untuk versi mana pun.
Riwayat pembuatan — geometri kubah: bentuk: kubah setengah-bola (hemisphere), radius 300 meter, memanjang 12° di bawah garis cakrawala (agar bukit jauh terlihat wajar di tepian).
Bug — terlalu banyak segitiga di awal: versi pertama memakai 16 cincin x 24 segmen = 744 segitiga, di atas anggaran <500. Dikurangi jadi 12 cincin x 16 segmen = 368 segitiga (langit tidak butuh detail halus).
Bug — permukaan rusak tepat di puncak (kesalahan pemodelan nyata, bukan kosmetik): kode pembuat cincin secara tidak sengaja memperlakukan kutub paling atas sebagai "cincin 0", menciptakan titik duplikat dan segitiga berluas nol di puncak kubah. Diperbaiki dengan hanya membuat cincin di bawah kutub, lalu menyambungkan kipas segitiga yang benar dari cincin pertama sungguhan ke titik puncak yang diletakkan terpisah.
Bug — sambungan terlihat di tempat gambar melingkar: koordinat pemetaan gambar untuk permukaan yang melintasi "belakang" bola melompat langsung dari mendekati 0,0 ke mendekati 1,0, yang akan menyapu seluruh lebar gambar ke satu kolom permukaan (kesalahan umum saat membuat pemetaan gambar bola 360° secara manual). Diperbaiki dalam dua langkah: pertama, perbaikan umum per-permukaan agar pemetaan tiap permukaan tetap berkesinambungan secara lokal; kedua, perbaikan khusus untuk segitiga yang bertemu di kutub paling atas, karena titik kutub tidak punya posisi kiri-kanan yang jelas (secara matematis tidak terdefinisi) dan perlu dihitung khusus agar duduk benar di antara dua titik tetangganya. Diverifikasi dengan 0 permukaan rusak dan 0 permukaan bersambung tersisa, dikonfirmasi lewat pengukuran langsung dan render khusus ke arah lokasi sambungan lama.
Riwayat gambar langit (HDRI) — beberapa kali ditukar:
bell_park_dawn(pilihan awal) — pencahayaan hangat matahari-rendah yang cocok dengan spesifikasi pencahayaan proyek, meski opsi saingan (bell_park_pier) secara harfiah menampilkan dermaga di atas danau yang sama — tetap ditolak karena pencahayaannya datar/mendung-biru, bukan hangat.lakeside_sunrise(penukaran CP40) — pilihan asli dinilai terlalu polos/membosankan; ditukar demi warna golden-hour yang lebih kaya pada resolusi 4K, diunduh dalam format HDR penuh (bukan sekadar gambar biasa) demi kualitas pencahayaan lebih baik.evening_road_01_puresky(penukaran CP41) —lakeside_sunriseditolak setelah menyadari ada cabang pohon mati di gambar langit yang terbaca seperti "cabang di langit." Tiga kandidat lain juga dicoba dan ditolak:belfast_sunset_puresky(terlalu berkabut),kloppenheim_02_puresky(ternyata sebenarnya langit malam),industrial_sunset_02_puresky(ada pita silau pudar di ketinggian mata).qwantani_sunset(penukaran susulan CP42 #5) — pengguna minta "lebih berawan, lebih golden-hour." Pilihan pertama yang diinstruksikan,kloppenheim_05, diperiksa langsung dan ternyata pemandangan siang datar berwarna biru dingin — ditolak.qwantani_sunset(opsi cadangan) punya warna oranye/emas hangat sungguhan, awan terlihat, dan danau dalam bingkai — dipilih meski berstatus "cadangan," bukan saran utama.cedar_bridge_sunset_1— dicoba berikutnya untuk drama awan badai yang lebih pekat, dikirim, lalu pengguna menolaknya langsung setelah melihatnya berjalan di game sesungguhnya: terlalu gelap/dramatis, ingin sesuatu "yang lebih menenangkan, menyenangkan, cerah."cloud_layers(saat ini, per penulisan dokumen ini) — setelah penolakan itu, pencarian dipersempit hanya ke kategori cerah/siang/langit bersih (menyingkirkan sunset/senja/malam/ badai sepenuhnya). Lima kandidat diperiksa langsung;cloud_layersdipilih karena langit birunya jenuh, awan putih besar-besar, dan matahari penuh cerah tanpa nuansa senja. Belum dikonfirmasi secara visual berjalan di game sesungguhnya — satu percobaan mengambil tangkapan layar gagal, dan kesenjangan ini dilaporkan jujur, bukan diasumsikan baik-baik saja.
Fakta skala/posisi: radius 300 meter, berpusat di scene. Tidak ada sumber cahaya yang dipanggang — aplikasi harus menambahkan cahaya directional sendiri kira-kira elevasi 15°, azimuth (arah kompas) 135°, warna hangat sekitar 3200-4000K (putih hangat/keoranyean, seperti cahaya pagi atau senja). Resolusi tekstur saat ini: 4096x2048 piksel (dinaikkan dari resolusi awal 2048x1024). Resolusi mesh kubah saat ini: 24 cincin lintang x 32 segmen bujur (~768 permukaan / ~1.536 setara-segitiga) — ini sengaja dinaikkan dari versi 368-segitiga semula (lihat bug di bawah), sedikit penyimpangan terencana dari target <500 segitiga asli, dijustifikasi karena memperbaiki cacat visual nyata.
Status saat ini: Selesai, tapi memiliki riwayat bug paling panjang dari semua aset di proyek ini — baca bagian ini dengan saksama jika menyentuh file ini lagi:
Bug (besar) — shader kosong/rusak sepenuhnya selama dua siklus ekspor ulang.
Material langit asli memakai setup shader tertentu ("Emission shader" tersambung langsung ke output)
yang alat ekspor USD/USDZ Blender sama sekali tidak tahu cara menerjemahkannya —
diam-diam menulis material kosong tanpa error dan tanpa peringatan, dan file itu tetap lolos alat
pengecek skema (usdchecker). Ini didokumentasikan sebagai jenis bug nyata dan berulang
di seluruh proyek: alat ekspor Blender hanya menangani secara andal (a) nilai warna/angka datar, dan
(b) gambar yang dikaitkan langsung ke "Base Color" atau "Normal Map → Normal." Apa pun yang lebih
canggih (jaringan node Emission berdiri sendiri, atau jaringan node matematika/prosedural) bisa diam-
diam terekspor rusak atau abu-abu default dengan tanpa error sama sekali —
usdchecker lolos TIDAK berarti gambar/warna yang dimaksud benar-benar masuk ke file;
harus diperiksa isi file secara manual (unzip + usdcat, alat pembongkar teks)
untuk memastikan. Diperbaiki dengan membangun ulang shader langit memakai gambar yang dikaitkan ke
"Emission Color" pada node material standar — hasil visual sama, tapi memakai pola koneksi yang benar-
benar dipahami alat ekspor.
Bug — mengedit salinan material yang salah secara tidak sengaja. Setelah beberapa
putaran membuka dan menempelkan ulang file kerja yang sama, objek langit ternyata bergeser ke salinan
duplikat mesh dan material miliknya sendiri yang otomatis-diganti-namanya (seperti
sky_dome_mat.002, bukan sky_dome_mat) — setiap perubahan mendarat di
salinan tak terpakai yang teronggok, sementara versi asli yang dipakai tetap rusak. Diperbaiki dengan
secara eksplisit memeriksa material mana yang sebenarnya terpasang di objek, bukan berasumsi sebuah
nama masih berarti seperti dulu.
Bug (besar, ditemukan belakangan, oleh tim terpisah yang membangun aplikasi game
sesungguhnya) — cahaya nyasar yang terpanggang ke dalam file. Bahkan setelah shader
diperbaiki, tim aplikasi melaporkan seluruh scene terlihat datar, kusam, dan pudar keabu-abuan.
Memeriksa file yang dikirim secara langsung mengungkap bahwa file itu diam-diam mengandung
DomeLight (sumber cahaya ambient penuh) dengan gambar abu-abu rata dan intensitas penuh
— ini kategori bug yang sama persis dengan insiden model ikan sebelumnya (lihat
CHECKPOINT.md CP24): pengaturan pencahayaan latar/dunia scene bisa tidak sengaja terpanggang ke dalam
file yang diekspor sebagai cahaya sungguhan, yang mana engine 3D standar mana pun (termasuk game ini)
akan menerapkannya sebagai cahaya ambient terang sungguhan, memudarkan segala sesuatu yang lain.
Penyebab langsung: pengaturan ekspor bernama convert_world_material (terpisah dari
pengaturan export_lights, yang SUDAH benar dimatikan) rupanya default "menyala" saat
ekspor ulang belakangan dan memanggang pengaturan latar belakang saat itu menjadi cahaya. Diperbaiki
dengan langsung mengedit bentuk teks file yang sudah diekspor (mengekstraknya, menghapus blok cahaya
secara manual, dan mengemas ulang) daripada menunggu ekspor ulang penuh dari Blender.
Bug (besar, kedua, ditemukan segera setelah memperbaiki yang pertama) — tidak ada yang sebenarnya tergambar sama sekali. Setelah cahaya nyasar dihapus, tim aplikasi tetap melaporkan langit MASIH datar abu-abu gelap — tapi karena alasan berbeda. Investigasi (menulis program uji mandiri kecil untuk memuat file langsung, dan menukar file ke dalam salinan game yang sudah dibangun untuk mengambil tangkapan layar hasil sesungguhnya) mengungkap penyebab sebenarnya: segitiga kubah menghadap "ke luar" (benar untuk dilihat dari luar, seperti pratinjau Blender sendiri), tapi kamera game sesungguhnya duduk DI DALAM kubah 300-meter — jadi setiap segitiga menunjukkan sisi belakangnya ke kamera, dan dengan render satu-sisi (yang menjadi default engine game, terlepas dari tanda "double-sided" pada file), seluruh kubah tidak pernah tergambar sama sekali. Yang terlihat seperti "kabut abu-abu" sebenarnya hanya ruang kosong tanpa apa pun di baliknya. Diperbaiki dengan membalik arah depan/belakang setiap segitiga (hanya urutan perhitungan, tidak memindahkan titik apa pun) sehingga permukaan dalam kubah yang tergambar. Dikonfirmasi dengan mengambil sampel warna gambar dari tangkapan layar sebelum dan sesudah perbaikan.
Bug — tekstur tak terpakai tersisa membengkakkan ukuran file: setup gambar latar belakang lama yang tak terpakai dan tertinggal di file kerja menyebabkan alat ekspor membundel gambar sementara 5,5 MB yang tak terkait dan tak dipakai ke dalam file yang dikirim, karena alat ekspor membundel berdasarkan "apakah gambar ini dirujuk di mana pun dalam seluruh file," bukan "apakah benar- benar dipakai oleh yang sedang diekspor." Diperbaiki dengan menghapus setup nyasar itu sebelum ekspor.
Bug — tidak sengaja menerapkan koreksi pencahayaan dua kali ("double tonemapping"): proses yang dipakai untuk mengubah gambar HDRI mentah menjadi gambar JPEG bakuan kubah (gaya koreksi warna tertentu bernama "AgX," dipakai di seluruh proyek) sudah benar untuk file final yang dikirim, tapi memakai gambar yang SUDAH-dikoreksi ini sekali lagi di dalam scene pratinjau Blender yang JUGA menerapkan koreksi sama menyebabkan langit yang harusnya cerah terlihat datar dan abu-abu — hanya di pratinjau (bukan di file sesungguhnya yang dikirim). Diperbaiki dengan memakai gambar asli tanpa koreksi untuk pratinjau internal, dan menyimpan versi yang benar-terkoreksi untuk file yang sesungguhnya dikirim.
Bug — jalur sambungan material yang cuma bekerja secara kebetulan: saat kubah resolusi-lebih-tinggi dibuat ulang dari skrip mandiri (bukan lewat Blender, karena koneksi langsung Blender tidak responsif untuk sementara waktu di proyek ini), versi pertama yang dimuat di game engine memakai tampilan generik cadangan, bukan tampilan material realistis yang benar — karena referensi sambungan material disalin dari file kerja lama, menunjuk ke lokasi folder persis yang sebenarnya tidak cocok dengan struktur internal file baru. Kesalahan jenis ini valid secara skema (alat pengecek file tidak menangkapnya) dan hanya ketahuan dengan memuat file sesungguhnya di game engine sesungguhnya dan memeriksa apa yang terurai. Pelajaran tercatat: jalur sambungan material harus diperiksa terhadap struktur file sesungguhnya, bukan disalin-tempel dari file lain, setiap kali struktur sekitarnya berubah sama sekali.
Kosmetik, belum sepenuhnya teratasi: pita vertikal samar (sambungan terlihat) di antara panel datar kubah terlihat jelas pada resolusi 368-segitiga semula; menggandakan resolusi (24x32 cincin/segmen) memperbaiki pita yang terlihat itu. Jika terlihat lagi nanti, perbaikannya adalah lebih banyak geometri, bukan perubahan material lain.
Item terbuka yang masih berdiri: pengaturan ekspor file .blend kerja
sendiri belum pernah benar-benar diperbaiki dengan convert_world_material=False — artinya
ekspor ulang di masa depan langsung dari Blender (bukan lewat skrip mandiri yang dipakai saat ini)
bisa diam-diam memunculkan kembali bug cahaya nyasar. Juga, kubah saat ini dihasilkan oleh skrip
mandiri, bukan dari setup prosedural Blender sendiri — keputusan metode mana yang dianggap pipeline
"resmi" ke depannya masih terbuka. Semua versi saat ini sudah dikirim identik-byte-per-byte
(dikonfirmasi cocok, memakai alat checksum bernama shasum) ke repo aset ini maupun repo
aplikasi/game terpisah yang membundel salinan setiap file lingkungan.
Aset 7 — terrain_horizon_ring.usdz (bukit jauh / cincin cakrawala)
Apa itu: jalur berbentuk cincin berisi bukit-bukit berombak dengan sebaran siluet pohon sederhana, duduk di antara scene danau utama dan kubah langit yang jauh — ditambahkan khusus untuk menghentikan transisi agar tidak terlihat seperti "kardus potongan" (scene 3D datar yang tiba-tiba berakhir menabrak gambar langit yang datar).
Sumber: dibuat sendiri — geometri dibuat khusus sesuai ukuran scene proyek ini sendiri, bukan sesuatu yang bisa dicocokkan model unduhan generik. Tekstur tanah yang dipakai di atasnya diambil terpisah dari Poly Haven (semua CC0, tanpa atribusi) — lihat riwayat tekstur di bawah.
Riwayat pembuatan/perbaikan: spesifikasi awal: sebuah annulus (cincin) dari radius dalam 55 m ke radius luar 140 m, 64 segmen x 7 cincin, dengan profil ketinggian bukit berombak dan sekitar 18 "pohon impostor" segitiga jarang di sepanjang punggungan (3 segitiga tiap satu — siluet pohon palsu yang murah, bukan model pohon penuh). 971 segitiga, diwarnai hanya dengan tekstur gradasi bakuan (coklat dekat, lebih kabur/terang jauh, untuk memberi kesan kabut jarak). 39,3 KB.
Bug — cincin mengambang terputus dari pantai, ketahuan pengguna dari tangkapan layar: tepi dalam cincin (55 m) mulai jauh di luar tepi air/tanah sesungguhnya (setengah-jarak 40 x 30 m), menyisakan celah 15-25 meter benar-benar kosong di antaranya, dengan bukit yang dilukis di gambar langit terlihat lewat celah itu. Ditambah lagi, fungsi ketinggian cincin langsung melompat ke titik awal setinggi 6 meter, bukan menurun bertahap ke tanah, jadi juga terlihat seperti mengambang di udara bahkan di tempat ia mulai. Perbaikan: dibangun ulang dengan radius dalam dikurangi jadi 27 meter (aman di dalam setengah-jarak 30 m tanah/air yang lebih kecil, menjamin tumpang tindih penuh tanpa celah di sekeliling lingkaran), ketinggian diset tepat 0,0 di tepi dalam dan naik mulus (rumus kurva: 14,0 x t^1,3, dengan t adalah seberapa jauh keluar, dari 0 sampai 1), dengan detail bergelombang juga memudar masuk secara bertahap sepanjang 15% jarak pertama agar sambungan dengan air benar-benar rata. Duri pohon dipindah lebih jauh keluar (sekarang mulai sekitar 60% jarak keluar) agar berada di tanah lebih tinggi, bukan tepat di tepi air. Kepadatan cincin dinaikkan dari 7 ke 9 cincin untuk pengecilan yang lebih halus. Hasil: 971 → 1.233 segitiga, 39,3 KB → 48,2 KB.
Bug (besar, pola lintas-proyek) — gradasi warna yang dimaksud terekspor sebagai abu-abu
rata. Setup warna asli memakai jaringan node prosedural (data posisi → matematika → node
gradasi warna) untuk memvariasikan warna berdasarkan jarak dari pusat — ini terekspor tanpa
error sama sekali, dan pengecek skema (usdchecker) lolos, tapi memeriksa file
sesungguhnya secara manual menunjukkan warna diam-diam menjadi abu-abu default rata (0,8, 0,8, 0,8),
bukan gradasi yang dimaksud — karena alat ekspor Blender tidak bisa mengevaluasi matematika prosedural
semacam itu menjadi gambar atau nilai tetap nyata; ia hanya diam-diam jatuh kembali ke default.
Diperbaiki dengan memanggang gradasi yang dimaksud ke dalam gambar JPEG kecil sungguhan
(8x256 piksel) dan mengaitkannya langsung ke "Base Color" — pola yang didukung andal alat ekspor.
Upgrade tekstur belakangan — gambar tanah sungguhan, bukan sekadar gradasi rata (atas
permintaan pengguna: "kasih tekstur... biar hidup"): pertama dicoba tekstur
aerial_grass_rock dari Poly Haven, tapi mengulanginya berkali-kali di sepanjang cincin
menghasilkan pita horizontal berulang yang jelas terlihat — dilacak ke fakta bahwa tekstur ini adalah
satu foto udara tunggal yang dimaksudkan dipakai sekali untuk seluruh lanskap, bukan diulang-ulang;
gradasi pencahayaan fotografi alaminya sendiri menjadi pola berulang yang jelas saat diulang. Diganti
ke brown_mud_leaves_01 (Poly Haven, CC0) — tekstur yang memang dirancang
untuk diulang — yang memperbaiki pita itu. Resolusi cincin juga dinaikkan dari 9 ke 26 cincin untuk
kurva bukit yang lebih halus (perbaikan kualitas nyata, meski pengujian membuktikan itu BUKAN yang
memperbaiki pita — pita diperbaiki oleh penukaran tekstur). Duri pohon diberi material hijau-tua
datar terpisah agar tekstur tanah tidak tembus lewatnya. Pengulangan gambar tanah disetel ke 14x
angular / 8x radial. Final: 3.409 segitiga, 618,5 KB.
Belakangan lagi — diganti dengan set tekstur 3-peta yang layak + pengulangan lebih rapat:
gambar tanah tunggal 1024x1024 terlihat belepotan di lebar cincin ~280 meter tanpa detail benjolan
permukaan. Diganti dengan set 2K leafy_grass Poly Haven (warna + normal
map + peta roughness, semua CC0), ditambahkan dengan benar (pengaturan raw/non-color pada normal dan
roughness map, nilai skala/bias benar agar normal map terbaca benar), dan koordinat pemetaan gambar
dikalikan manual 5x di seluruh bagian agar tekstur rumput mengulang lebih rapat, bukan satu gambar
terentang tipis di seluruh bentang 280m. Ukuran file naik dari 550,4 KB jadi 12,5 MB (tiga gambar 2K
tak terkompresi — ukuran yang dianggap dapat diterima, sejalan dengan aset "hero" lain di proyek ini
seperti dermaga 3,8 MB).
Bug — sisa segitiga "duri pohon" placeholder tertinggal setelah pohon sungguhan disebar di sekitarnya: 81 permukaan mesh masih segitiga hijau-datar pohon-palsu lama dari tahap sebelumnya, sekarang terlihat jelas palsu di sebelah model pohon 3D sungguhan yang disebar di scene. Permukaan itu dan materialnya yang kini tak terpakai dihapus sepenuhnya (1.745 → 1.664 permukaan), menyisakan satu material tanah yang bersih.
Bug lintas-aset — backface culling (lihat bagian Lintas Aset): seperti kubah langit, mesh buatan tangan ini awalnya memiliki permukaan yang menghadap arah salah untuk dilihat dari level tanah (berdiri di dermaga melihat keluar), artinya engine game sesungguhnya tidak menggambarnya sama sekali, membuat bukit tak terlihat — dilaporkan tim aplikasi sebagai "tidak ada tanah/dataran terlihat, pohon mengambang di garis air." Diperbaiki dengan cara sama seperti kubah langit: membalik urutan titik tiap permukaan.
Sebuah pass "pratinjau terisi" terpisah (bukan aset baru yang dikirim) menyebar salinan-tertaut dari aset pohon/batu/tanaman yang sudah ada di sekeliling cincin dan garis pantai murni untuk render verifikasi di dalam Blender — ini TIDAK dipanggang ke file USDZ mana pun yang dikirim; game sesungguhnya harus melakukan instancing/penyebaran sendiri saat runtime. Sebuah tabel acuan kepadatan/campuran spesies kira-kira dicatat untuk tujuan itu (lihat Source_Log.md lengkap untuk jumlah persis per spesies dan rentang radius, karena angkanya berubah antar-tahap — tahap final memakai kira-kira 26 pohon campuran di radius 32-95m, 14 batu di 29-50m, 30 rumpun rumput di 20-60m, 36 alang-alang di 26-34m, belakangan kira-kira digandakan lagi di pass "sebar lebih banyak").
Fakta skala/posisi: radius dalam: 27 meter (saat ini, setelah
perbaikan celah-mengambang) — harus aman di dalam setengah-jarak 30 m milik air/tanah sendiri untuk
menjamin tidak ada celah terlihat. Radius luar: 140 meter. Ketinggian di tepi dalam: tepat 0,0 (sama
dengan ketinggian 0,0 permukaan air sendiri, agar sambungannya mulus). Ketinggian naik dengan rumus:
kira-kira 14,0 * (pecahan jarak)^1,3 meter di bagian terluar. Tekstur tanah mengulang di
14x angular, 8x radial (sebelum pengali 5x belakangan), dengan set normal-map dan roughness-map
sungguhan (leafy_grass, 2K) untuk detail benjolan permukaan. Saat ini: 3.409 segitiga
(secara struktural; perbaikan set tekstur belakangan menjaga jumlah permukaan sama), 618,5 KB dasar,
sekarang naik ke kira-kira 12,5 MB dengan set tekstur yang lebih lengkap (sesuai daftar disk di atas,
file yang dikirim saat ini adalah 13,1 MB).
Status saat ini: Selesai dan terkirim, lewat banyak putaran perbaikan.
Item yang masih terbuka: file sumber .blend kerja belum pernah benar-
benar diperbaiki dengan perbaikan urutan-permukaan atau pembersihan duri-pohon di sumbernya — setiap
perbaikan sejauh ini diterapkan langsung ke file yang sudah diekspor. Siapa pun yang mendapat akses
Blender kembali sebaiknya memindahkan perbaikan-perbaikan ini ke skrip/file pembuat sesungguhnya.
Aset 8 — rock_shoreline_01.usdz (batu bersudut telanjang)
Apa itu: batu telanjang bersudut untuk disebar di sepanjang garis pantai.
Sumber: model Sketchfab "Gray Lake Rock" oleh bilgehan.korkmaz,
ID efc76e8b35c8…. Lisensi: CC-BY — atribusi wajib. Dipilih dari 107
model batu kandidat yang ditinjau untuk 3 slot batu, dipilih demi variasi bentuk/jenis.
Riwayat pembuatan/perbaikan: 594 segitiga, dibiarkan apa adanya (sudah dalam
anggaran, tidak perlu disederhanakan). Diskalakan setinggi 0,65 m. Ekspor pertama memakai tekstur 2K,
mendarat di 6,4 MB — dipertimbangkan ulang mengingat aturan proyek sendiri bahwa hanya dermaga dan
joran yang boleh dapat tekstur 2K (semua yang lain 1K), dan diturunkan lagi ke 1K, mendarat di
605,9 KB. Bug (belakangan, lintas-proyek): material batu ini memiliki bug
IOR = 1000 (indeks bias, sifat fisik pembelokan cahaya) yang sama, ditemukan di beberapa
aset lain — lihat Bug Lintas Aset — yang membuatnya terbaca hampir seperti cermin-putih di bawah
cahaya terang; kurang kentara secara visual dibanding pada tanaman (batu memang secara alami lebih
kusam), tapi dikonfirmasi ada dan disetel ulang ke nilai normal 1,5.
Fakta skala/posisi: diskalakan setinggi 0,65 m; titik pivot (origin) dipindah ke dasar batu (konvensi "properti-tanah" yang dipakai untuk semua properti benda alami di proyek ini, agar aplikasi bisa menempatkan pivot di ketinggian tanah, bukan di tengah visual batu, yang akan tidak akurat karena batu tidak simetris atas-bawah).
Status saat ini: Selesai, usdchecker lolos, bug IOR diperbaiki dan
diekspor ulang (605,9 KB).
Aset 9 — rock_shoreline_02.usdz (batu bulat berlumut)
Apa itu: batu bulat dengan pertumbuhan lumut terlihat.
Sumber: model Sketchfab "Mossy Rock" oleh electronshaman, ID
deefa362c850…. Lisensi: CC-BY — atribusi wajib.
Riwayat pembuatan/perbaikan: 876 segitiga. Satu gambar warna 1K, dikonversi dari PNG ke JPEG. Diskalakan setinggi 0,85 m. Batu terkecil dari tiga batu di disk, 223,5 KB — batu bertekstur tunggal murah untuk disimpan. Batu ini diaudit untuk bug IOR=1000 yang ditemukan di aset lain dan dikonfirmasi bersih (tidak terpengaruh).
Fakta skala/posisi: diskalakan setinggi 0,85 m, titik pivot dipindah ke dasar (konvensi sama seperti rock_shoreline_01).
Status saat ini: Selesai, usdchecker lolos.
Aset 10 — rock_shoreline_03.usdz (kelompok batu majemuk)
Apa itu: formasi/kelompok beberapa batu bersama-sama, varian terbesar dari tiga batu, memberi variasi ukuran.
Sumber: model Sketchfab "Low Poly Rock Formation" oleh MalsumGaming,
ID 3c8bba7c8c44…. Lisensi: CC-BY — atribusi wajib.
Riwayat pembuatan/perbaikan: 1.484 segitiga, datang dengan set tekstur PBR 4K penuh (warna + metallic/roughness + normal map), semua diturunkan ke JPEG 1K. Diskalakan setinggi 1,0 m (yang terbesar dari tiga batu). 653,8 KB. Diaudit untuk bug IOR=1000 dan dikonfirmasi bersih.
Fakta skala/posisi: diskalakan setinggi 1,0 m, titik pivot dipindah ke dasar.
Status saat ini: Selesai, usdchecker lolos.
Aset 11 — foliage_grass_01.usdz (rumpun rumput)
Apa itu: rumpun helai rumput, dibangun sebagai geometri kartu potong nyata (bukan billboard datar) untuk disebar di seluruh tanah.
Sumber: model Sketchfab "Realistics grass 07" oleh POLYSCAN3D,
ID 475ee85b733c…. Lisensi: CC-BY — atribusi wajib. Dipilih dari 51 hasil
pencarian rumput.
Riwayat pembuatan/perbaikan: 728 segitiga, geometri kartu helai alpha-cutout nyata, sudah benar memakai mode transparansi "HASHED" dengan transparansi yang sudah terkait dengan benar ke material. Penyederhanaan material: cabang tekstur "specular-gloss" (memberi makan dua node pencampur warna yang mengatur kilau/rona) dihapus dan diganti nilai datar (roughness 0,6, tanpa metallic) — ini memperbaiki error ekspor (lihat Log Perbaikan di bawah) dan toh tidak berarti secara visual untuk rumput di skala ini. Diskalakan setinggi 0,28 m. Dipertahankan sebagai PNG (bukan dikonversi ke JPEG) karena benar-benar butuh kanal transparansi — JPEG tidak bisa menyimpan itu. Terbesar dari aset "sekunder" (tingkat-latar-belakang) di 1,53 MB — trade-off yang diterima demi potongan foliage yang benar.
Bug — error ekspor dari tekstur yang "kelihatannya" tak terpakai tapi sebenarnya tidak: alat ekspor melaporkan error "UnresolvableDependency" mengarah ke gambar specular-gloss. Akar penyebab: kode hanya menghapus tekstur jika Blender melaporkan "0 pengguna," tapi gambar itu secara teknis masih dirujuk oleh node shading tersisa meski node itu tidak penting secara visual — jadi tidak pernah benar-benar menjadi "0 pengguna," dan ekspor mencoba (dan gagal) merujuk tekstur yang tidak pernah benar dibundel ulang. Diperbaiki dengan menghapus node shading sesungguhnya, bukan hanya memeriksa angka pemakaian gambar secara bersyarat — begitu node yang merujuk dihapus, gambar dengan sendirinya benar menjadi tak terpakai. Pelajaran tercatat lintas-proyek: "apakah gambar ini tak terpakai" harus diperiksa dengan melihat jaringan node shading sesungguhnya, bukan hanya percaya angka pemakaian saat pembersihan baru sebagian selesai.
Bug (belakangan, lintas-proyek) — IOR = 1000: material rumput ini
juga punya bug IOR hampir-cermin yang sama (lihat Bug Lintas Aset) — ini sebenarnya kasus paling
jelas terlihat secara visual, berkontribusi pada tampilan "pohon/rumput putih" di bawah cahaya
terang. Disetel ulang ke 1,5 dan diekspor ulang (1.532 KB).
Fakta skala/posisi: diskalakan setinggi 0,28 m.
Status saat ini: Selesai, kedua bug diperbaiki, usdchecker lolos.
Aset 12 — foliage_reed_01.usdz (tanaman alang-alang / cattail)
Apa itu: tanaman cattail/bulrush bergaya khas dengan kepala biji, untuk disebar di garis air.
Sumber: model Sketchfab "Cattail Plant" oleh sxuno, ID
c50630051edd…. Lisensi: CC-BY — atribusi wajib.
Riwayat pembuatan/perbaikan: 2 bagian mesh (daun 930 segitiga + kepala biji 384
segitiga) digabung jadi total 1.314 segitiga. Dua material terpisah, keduanya sudah terkait benar
untuk transparansi (mode HASHED, gambar 512x512) — dibiarkan tak disentuh karena sudah kecil dan
benar. Diskalakan setinggi 0,9 m. Bug — masalah IOR=1000 yang sama ditemukan di kedua
material (m_plant_cattail dan m_plant_cattail_top) — keduanya
disetel ulang ke 1,5 dan diekspor ulang (1.606,9 KB, naik dari 1,61 MB).
Fakta skala/posisi: diskalakan setinggi 0,9 m.
Status saat ini: Selesai, bug IOR diperbaiki, usdchecker lolos.
Aset 13 — tree_01.usdz (pohon cemara / spruce)
Apa itu: pohon berdaun jarum (bergaya pinus/cemara), satu dari tiga spesies pohon yang memberi variasi biome/jenis di sekitar danau.
Sumber: model Sketchfab "Low-Poly Game-Ready Spruce Tree" oleh
Dark_Knife15, ID ef06bbc949b6…. Lisensi: CC-BY — atribusi
wajib. Dipilih dari 96 hasil pencarian pohon; dua kandidat "Oak Tree" dan satu "weeping
willow" bergaya kartun (pohon maskot memakai kacamata hitam dalam pot merah muda) ditolak langsung
karena terlalu bergaya kartun.
Riwayat pembuatan/perbaikan: sumber adalah aset bergaya "speedtree" dibangun dari 93 objek mesh terpisah (92 kartu dedaunan individual masing-masing 40 segitiga, plus 1 batang 64 segitiga) — semua digabung jadi satu mesh 3.744 segitiga. Titik pivot dipindah ke dasar batang, bukan pusat kotak-pembatas keseluruhan — kanopi secara alami tidak simetris, jadi menempatkan pivot di tengah bentuk penuh akan menggeser batang dari tempat aplikasi sebenarnya ingin menempatkannya. Diskalakan setinggi 7,0 m. Perbaikan material: penghapusan "cabang specular-gloss" yang sama seperti aset rumput (lihat Aset 11) — nilai kilau/rona berbasis tekstur tidak memberi hasil visual nyata — diratakan jadi roughness 0,75, tanpa metallic. Tekstur batang diturunkan dari PNG 2K ke JPEG 1K. Digabung dengan pembersihan sisa yatim, ukuran file turun dari 9,02 MB jadi 899,5 KB.
Dicatat (bukan bug): sekelompok kecil dedaunan terpisah tampak dekat dasar batang di render final — penghitungan jumlah segitiga mengonfirmasi tidak ada yang terduplikasi atau hilang selama proses penggabungan mesh, jadi ini terbaca sebagai detail tumbuhan bawah/ranting jatuh yang memang disengaja dari sumber 93-objek asli, bukan artefak pemrosesan.
Bug (lintas-proyek) — IOR = 1000 pada KEDUA material batang dan
tree_01_foliage_mat. Ini sebenarnya aset di mana bug ini PERTAMA KALI disadari
(dijelaskan pengguna sebagai "pohon putih" di bawah cahaya golden-hour terang) — nilai reflektansi
hampir-cermin membuat seluruh pohon terbaca putih pudar, bukan warna hijau/coklat aslinya. Kedua
material disetel ulang ke 1,5. Diekspor ulang: 899,5 KB (dikonfirmasi lewat usdcat bahwa
kedua material sekarang benar mengekspor float inputs:ior = 1.5).
Fakta skala/posisi: diskalakan setinggi 7,0 m, titik pivot di dasar batang.
Status saat ini: Selesai, bug IOR diperbaiki, usdchecker lolos.
Aset 14 — tree_02.usdz (pohon berdaun lebar / deciduous) — MASIH PUNYA CACAT BELUM
TERSELESAIKAN
Apa itu: pohon berdaun lebar, spesies kedua dari tiga jenis pohon. Aset ini saat ini masih dikirim dengan cacat visual yang diketahui dan belum diperbaiki (lihat di bawah), dan sisi game sudah diberitahu untuk menghindari pemakaiannya sampai benar-benar diperbaiki.
Sumber: model Sketchfab "Low-Poly And Realistic Trees For Tropical Areas" oleh
chenuka_wy, ID 538245447f80…. Lisensi: CC-BY — atribusi
wajib.
Riwayat pembuatan/perbaikan: file sumber ternyata membundel 2 pohon
terpisah (satu set bagian berawalan Plane_*/Base.001_*, satu pohon
lebih kecil berawalan Tree01_*, plus decal bayangan-tanah datar 2-segitiga). Diidentifikasi
dengan membandingkan kotak-pembatas tiap bagian; hanya menyimpan pohon yang lebih besar (3.018
segitiga), membuang pohon kecil dan decal bayangan — aset ini harus persis satu pohon agar game bisa
menduplikasi/menyebarnya sesuai kebutuhan, bukan pasangan yang terbundel. Titik pivot dipindah ke
dasar batang, diskalakan setinggi 8,5 m. Mempertahankan 4 tekstur sumber asli (resolusi 1K/1K/512/256)
sebagian besar apa adanya karena tidak ada yang terlalu besar. 1,70 MB.
Bug (lintas-proyek) — IOR = 1000 pada material tree_02 juga;
diperbaiki jadi 1,5.
Bug — tidak ada tekstur terkait pada material batang. Material batang
(Material_46.001) ternyata tidak punya gambar sama sekali — warna abu-
abu default rata (0,588, 0,588, 0,588). Tidak ada tekstur kulit kayu di file sumber mana pun untuk
dikaitkan sebagai gantinya (sudah dicek). Diperbaiki dengan mengatur warna kulit kayu coklat datar
yang masuk akal (0,22, 0,14, 0,08), roughness 0,85.
Bug — puing terputus mengambang: sekitar 28 gumpalan mesh terputus (253 titik total), memakai material bertekstur foto rumput-tanah yang tidak relevan, mengambang 4-7 meter di atas kanopi pohon sebagai geometri cabang-gundul nyasar. Dihapus (mesh island mana pun yang memakai eksklusif material itu).
Bug (belum terselesaikan) — sosok menyerupai manusia menyatu langsung ke geometri mesh batang. Gumpalan berbentuk manusia — berbagi permukaan/tepi yang sama dengan batang itu sendiri, bukan objek terpisah yang bisa langsung dihapus — ditemukan terlas ke dalam mesh batang. Ditemukan dengan menganalisis radius batang di tiap pita ketinggian: normalnya konsisten 0,02-0,26 m, tapi melonjak sampai sekitar 0,5 m di rentang z≈0,65-1,6 m (cocok dengan tempat lengan/tubuh sosok akan berada). Aturan yang menghapus titik bermaterial-batang mana pun di pita ketinggian itu dengan radius lebih besar dari 0,22 m berhasil menghapus gumpalan manusia yang jelas (lengan/tubuh), tapi sisa kaki/kepala yang lebih tipis masih tersisa di atas dan di bawah pita itu — menghapusnya sepenuhnya butuh seseorang memilih geometri buruk itu secara manual di dalam Blender; tidak ada aturan matematis murni yang dicoba sejauh ini bisa memisahkan "sisa sosok" dari "peruncingan batang normal yang sah," karena pengukuran keduanya tumpang tindih. Ini dicek ulang sekali lagi belakangan di proyek (menjalankan ulang analisis radius yang persis sama) dan dikonfirmasi masih belum terselesaikan — tidak ada perbaikan otomatis lebih lanjut yang aman dicoba tanpa risiko merusak geometri batang yang sah.
Diterapkan identik baik ke file tree_02.blend yang berdiri sendiri maupun ke data mesh
bersama yang dipakai setiap salinan tersebar di scene pratinjau.
Mitigasi yang dipakai alih-alih perbaikan sungguhan: tabel sebar milik basis kode
aplikasi-game terpisah (EnvironmentSceneBuilder.swift) diubah untuk menggantikan
tree_01 atau tree_03 di setiap posisi yang awalnya direncanakan untuk
tree_02, sehingga sekitar 36 instance sosok-manusia tersebut tidak benar-benar dirender
di game — tapi file aset itu sendiri masih rusak dan belum diperbaiki. Bagi siapa pun
yang membaca ini: jangan tambahkan kembali tree_02 ke tabel sebar/penempatan
mana pun sampai mesh batangnya benar-benar diperbaiki dengan proses pemilihan vertex manual
yang layak di Blender.
Fakta skala/posisi: diskalakan setinggi 8,5 m, titik pivot di dasar batang. File saat ini: 1.040 segitiga (turun dari 3.018 setelah pembersihan puing/sosok), 529,3 KB.
Status saat ini: Diketahui rusak, dalam mitigasi aktif (tidak dihapus, tapi dikecualikan dari pemakaian aktif di game). Semua perbaikan lain (IOR, tekstur hilang, puing mengambang) sudah selesai; hanya sisa sosok manusia yang tersisa, dan butuh pengeditan manual langsung di Blender untuk menyelesaikannya, bukan skrip.
Aset 15 — tree_03.usdz (pohon palem)
Apa itu: pohon palem realistis — spesies pohon ketiga, sengaja dipilih agar cocok dengan premis cerita "danau eksotis yang ditebar ikan" (menjustifikasi ikan air hangat dan air dingin berbagi satu badan air) lebih baik dibanding spesies temperate kedua.
Sumber: model Sketchfab "Palm Tree Realistic" oleh 00amza, ID
ced3b31f14f9…. Lisensi: CC-BY — atribusi wajib.
Riwayat pembuatan/perbaikan: 1.812 segitiga, satu mesh, satu gambar alpha 2K (transparansi HASHED — benar-benar dibutuhkan untuk potongan daun pelepah, dipertahankan sebagai PNG bukan JPEG karena alasan itu). Diskalakan setinggi 9,0 m. Tekstur diturunkan dari 2K ke 1K PNG. 1,12 MB. Diaudit untuk bug IOR=1000 dan dikonfirmasi bersih (tidak terpengaruh, tidak seperti beberapa aset pohon/tanaman lainnya).
Fakta skala/posisi: diskalakan setinggi 9,0 m.
Status saat ini: Selesai, usdchecker lolos, tanpa cacat terbuka yang
diketahui.
Aset 16 — prop_bucket_01.usdz (ember logam berkarat)
Apa itu: ember logam galvanis yang usang, properti hiasan dermaga kecil.
Sumber: model Sketchfab "Rusty Metal Bucket" oleh MaX3Dd, ID
eaf9684106664…. Lisensi: CC-BY — atribusi wajib.
Riwayat pembuatan/perbaikan: 1.054 segitiga, datang dengan set tekstur PBR 4K penuh, ketiga peta (warna, metallic/roughness, normal) diturunkan ke JPEG 1K. Diskalakan setinggi 0,32 m (termasuk gagang). 709,9 KB.
Fakta skala/posisi: diskalakan setinggi 0,32 m.
Status saat ini: Selesai, usdchecker lolos.
Aset 17 — prop_tacklebox_01.usdz (kotak perlengkapan pancing)
Apa itu: kotak perlengkapan pancing usang dengan label merek nautika terlihat, properti hiasan dermaga.
Sumber: model Sketchfab "Fishing Tackle Box" oleh
Sebastian.Hamish.Webster, ID cdadbdff6b2c…. Lisensi: CC-BY —
atribusi wajib.
Riwayat pembuatan/perbaikan: 5 bagian mesh (badan/tutup/gagang/kait/label) digabung bersama, lalu disederhanakan (decimate) dari 4.174 jadi 2.003 segitiga (rasio 0,48) untuk memenuhi anggaran properti sekunder 300-2.000 segitiga — decal label datar 40-segitiga bertahan dari penyederhanaan tanpa kehilangan keterbacaan karena detailnya berasal dari gambarnya, bukan bentuknya. Diskalakan setinggi 0,42 m. Set tekstur PBR 2K penuh diturunkan ke JPEG 1K. 744,1 KB.
Bug — pengukuran basi segera setelah mengedit: mengukur ukuran objek tepat setelah menerapkan operasi penyederhanaan/penggabungan (memakai properti "dimensions" ter-cache Blender) menghasilkan angka yang sangat salah dan kebesaran (26 x 36 x 20 meter, bukan sekitar 0,4 m sesungguhnya), karena properti ter-cache itu tidak langsung diperbarui setelah pengeditan mesh dalam skrip yang sama. Diperbaiki dengan mengukur langsung dari koordinat titik mentah (mencari posisi min/max sesungguhnya), bukan mempercayai properti ter-cache tepat setelah pengeditan dalam satu jalannya skrip. Kategori bug yang persis sama ini pernah terlihat lebih dulu pada pohon palem di tempat lain dalam proyek — sekarang ditandai sebagai gotcha yang dikonfirmasi berulang dalam pipeline ini, bukan kesalahan sekali saja, agar tidak ditemukan ulang untuk ketiga kalinya.
Fakta skala/posisi: diskalakan setinggi 0,42 m.
Status saat ini: Selesai, usdchecker lolos.
Aset 18 — prop_rope_01.usdz (gulungan tali, dibuat sendiri)
Apa itu: tumpukan tali yang tergulung, properti hiasan dermaga kecil.
Sumber: dibuat sendiri — tanpa atribusi diperlukan, milik proyek. Sketchfab dicari lebih dulu (36 kandidat untuk kata kunci seperti "rope coil," "nautical rope," "dock rope cleat") tapi semua hasil bergaya voxel/piksel-art blok (tampilan salah untuk game ini) atau bagian dari scene rigging-kapal/jembatan yang jauh terlalu besar — tidak ada model tali-gulung realistis berdiri sendiri yang dapat diterima.
Riwayat pembuatan/perbaikan: dibangun sebagai tabung bersisi 5 (radius tali 14mm) disapu sepanjang jalur spiral (3,5 putaran, radius dalam 3cm membesar ke luar 16cm), dengan sedikit goyangan naik-turun ditambahkan untuk tampilan alami, tidak sempurna-rata. Material warna tan/rami datar, tanpa tekstur gambar dibutuhkan pada skala kecil ini (alasan sama seperti aset senar pancing). 496 segitiga (dalam target <500), 18,8 KB, jejak 0,33 x 0,31 x 0,11 m.
Bug — perintah ekspor gagal dengan "context is incorrect" setelah reset scene:
kategori perbaikan yang sama dibutuhkan untuk setiap aset buatan-tangan dalam sesi ini — operasi
ekspor Blender perlu diberi tahu secara eksplisit jendela/area/layar mana untuk berjalan
("temp_override" memakai area viewport-3D yang benar), karena mereset scene
(read_homefile) tidak menyisakan konteks default yang valid untuk operator ekspor
berjalan di dalamnya.
Fakta skala/posisi: jejak kira-kira 0,33 x 0,31 x 0,11 m.
Status saat ini: Selesai, usdchecker lolos.
Aset 19 (bonus, di luar daftar 18 asli) — foliage_fern_01.usdz
Apa itu: tanaman pakis dengan 4 kelompok daun (frond) terpisah, ditambahkan belakangan sebagai penghias sebar ekstra di luar rencana 18-aset asli.
Sumber: diunduh langsung sebagai model USD asli dari Poly Haven
(fern_02, resolusi 2K), lisensi CC0 — tanpa atribusi. Perlu dicatat ini
diunduh sebagai file USD yang sudah jadi, tanpa melalui Blender sama sekali.
Riwayat pembuatan/perbaikan: 4 frond pakis
(fern_02_a/b/c/d), masing-masing bentuk terpisah sendiri, berbagi satu material.
Investigasi material (diperiksa cermat, tidak diasumsikan baik-baik saja): file
unduhan sudah punya material standar terkait dengan benar (mengikuti pola aman proyek ini "gambar
langsung → Base Color") — tapi juga membawa jaringan shader lanjutan paralel kedua (grafik
"MaterialX") yang punya bug nyata dalam ekspor Poly Haven sendiri (referensi jenis-shader hilang dan
ketidakcocokan jenis data) — keduanya di dalam jaringan kedua yang tak terpakai, tak terkait dengan
bagian yang sebenarnya dibaca game engine. Diperbaiki dengan membuang seluruh jaringan lanjutan yang
tak terpakai itu, hanya menyisakan material standar yang bersih — konsisten dengan aturan proyek
untuk menghindari apa pun di luar nilai datar atau kaitan gambar langsung.
Normal map dan peta roughness dikirim dalam format EXR (format gambar presisi-tinggi), yang tidak
didukung andal USDZ — dikonversi keduanya ke PNG 8-bit memakai pustaka pemrosesan-gambar
(opencv-python) karena dua alat sederhana lain tidak bisa membuka file EXR di mesin ini.
Gambar alpha (transparansi) juga diratakan dari 16-bit ke 8-bit.
Fakta skala/posisi: total 3.116 permukaan (~6.232 setara-segitiga) di 4 frond. 4,84 MB total.
Status saat ini: Selesai, usdchecker lolos, dikonfirmasi memuat benar
dalam tes langsung di game engine (material terkait tekstur sungguhan, bukan fallback generik, dengan
transparansi alpha-cutout bekerja benar).
Aset 20 (bonus, di luar daftar 18 asli, DITANDAI KEBESARAN) — foliage_shrub_01.usdz
Apa itu: semak/perdu terdiri dari 9 kelompok cabang terpisah, ditambahkan pada tahap belakangan yang sama dengan pakis.
Sumber: diunduh dengan cara sama seperti pakis, dari Poly Haven
(shrub_01, resolusi 2K), lisensi CC0 — tanpa atribusi.
Riwayat pembuatan/perbaikan: 9 bentuk kelompok-cabang
(shrub_01_a sampai _i), berbagi satu material.
Bug — tidak ada material yang bisa dipakai sama sekali seperti diunduh. Tidak seperti
pakis, material file ini hanya punya jaringan shader lanjutan/tak-terpakai yang
terkait — tidak ada sambungan material fallback standar sama sekali. Jika dipakai tanpa modifikasi,
game engine akan diam-diam menampilkan material abu-abu default generik, bukan tampilan semak
sesungguhnya — jenis kegagalan yang sama yang pernah dialami proyek ini dengan sambungan material
rusak. Diperbaiki dengan menghapus jaringan lanjutan yang tak terpakai dan
membangun material standar baru dari nol dengan tangan, mengikuti pola aman proyek
yang sudah mapan: gambar warna (sRGB), normal map (raw/non-color, diskalakan benar), gambar roughness
(raw/non-color), dan gambar alpha/transparansi (raw/non-color) — keempatnya dikaitkan dengan cara
langsung standar. Metode konversi EXR-ke-PNG sama seperti pakis untuk peta normal/roughness.
Fakta skala/posisi dan kekhawatiran yang ditandai: total
97.076 permukaan (~156.012 setara-segitiga) di 9 kelompok — 16,86 MB.
Jumlah segitiga ini secara eksplisit ditandai sebagai pencilan dan masalah, bukan
diam-diam diterima: kira-kira 25 kali jumlah segitiga pakis dan
sekitar 40 kali 3.744 segitiga milik tree_01, meski tergolong "kelas
sama" sebagai aset sebar-latar-belakang. Ini adalah kepadatan mesh asli Poly Haven sesungguhnya
(memilih "2K" hanya memengaruhi resolusi tekstur, bukan kompleksitas bentuk yang mendasarinya) — dan
tidak ada alat penyederhanaan mesh yang tersedia saat ini dibangun (biasanya Blender akan melakukan
ini, tapi tidak tersedia untuk seluruh sesi kerja ini). Rekomendasi tercatat secara eksplisit:
sederhanakan (decimate) geometri shrub_01 sebelum dipakai pada kepadatan sebar nyata
mana pun di scene, atau pertimbangkan ulang apakah aset ini layak jadi properti latar belakang sama
sekali mengingat ukurannya saat ini.
Status saat ini: Dikirim apa adanya (material diperbaiki dan dikonfirmasi bekerja benar di dalam game), tapi ditandai butuh pengurangan poligon sebelum benar-benar dipakai — belum di-decimate.
Bug-Bug Lintas Aset yang Pernah Ditemukan
Berikut bug/pelajaran yang berulang di banyak file berbeda, tidak terikat hanya pada satu aset — baca ini sebelum menyentuh aset APA PUN:
1. Alat ekspor USD/USDZ Blender hanya andal memahami dua pola shading: (a) nilai
warna atau angka datar, dan (b) gambar yang dikaitkan langsung ke "Base Color" atau, lewat node
Normal Map, ke "Normal." Apa pun yang lebih canggih — shader Emission-saja berdiri sendiri,
jaringan matematika/gradasi-warna prosedural, atau nilai kilau/rona berbasis mix-node — bisa diam-diam
terekspor sebagai material kosong atau abu-abu default, dengan NOL error dan pengecekan skema yang
lolos penuh (usdchecker). Ini sudah terjadi setidaknya dua kali di proyek ini
(shader Emission asli kubah langit, dan gradasi warna prosedural asli cincin bukit) dan
didokumentasikan sebagai aturan tetap: setiap material yang memakai apa pun di luar dua pola
aman itu harus diperiksa manual setelah ekspor dengan mengekstrak file (unzip)
dan membaca bentuk teksnya (usdcat), khusus mencari apakah warna/gambar yang dimaksud
benar-benar masuk — lolos usdchecker bukan bukti yang cukup.
2. Bug IOR = 1000 (material hampir-cermin-putih): pada suatu titik,
beberapa material di proyek berakhir dengan "indeks bias" (sifat fisik pembelokan cahaya, normalnya
sekitar 1,4-1,5 untuk sebagian besar material padat) tidak sengaja diset ke 1000 — nilai ekstrem yang
secara fisik salah dan membuat permukaan terlihat seperti cermin putih di bawah cahaya terang. Pertama
disadari sebagai "pohon putih" di bawah pencahayaan golden-hour. Dikonfirmasi ada dan diperbaiki
(disetel ulang ke 1,5) pada: tree_01 (kedua material), foliage_grass_01,
foliage_reed_01 (kedua material), rock_shoreline_01, dan
tree_02. Dikonfirmasi BERSIH (diperiksa dan tidak terpengaruh) pada:
rock_shoreline_02, rock_shoreline_03, tree_03, dan aset
dermaga/joran/senar/tanah/air/properti.
3. Bug backface culling / arah-hadap-permukaan (geometri tak terlihat saat dilihat dari
dalam/jarak dekat): beberapa mesh buatan-tangan yang dihasilkan secara prosedural (kubah
langit, cincin bukit, dan tanah bawah air) memiliki sisi "depan" segitiga menghadap arah yang salah
untuk cara mereka sesungguhnya dimaksudkan dilihat di game sesungguhnya (dari dalam kubah langit;
berdiri di level tanah melihat ke bukit). Pratinjau Blender sendiri sangat toleran soal ini dan tetap
menampilkan bentuknya dengan baik terlepas dari arah hadapnya — tapi engine game sesungguhnya
(RealityKit) secara ketat menyembunyikan sisi belakang segitiga satu-sisi secara default, terlepas
dari apa yang dikatakan tanda "double-sided" pada file. Ini membuat seluruh objek tak terlihat
(dilaporkan sebagai "langit abu-abu rata" dan "tidak ada tanah terlihat, pohon mengambang di garis
air") meski file-nya termuat dan tervalidasi tanpa error. Diperbaiki pada ketiga aset yang terkena
dengan membalik urutan titik tiap segitiga (yang membalik sisi mana yang dianggap "depan") tanpa
memindahkan titik apa pun. Pelajaran: mesh apa pun yang dimaksudkan dilihat dari dalam (kubah,
terowongan, dll) atau pada sudut menyerempet harus diuji dengan benar-benar memuatnya di engine
target sesungguhnya dan melihat dari sudut pandang sesungguhnya yang dimaksud — viewport Blender
sendiri bukan pengecekan yang bisa diandalkan untuk ini. dock_main (diunduh,
objek menghadap-keluar normal) dan water_surface (dibangun dengan metode berbeda yang
lebih sederhana) tidak terpengaruh.
4. Sumber cahaya yang tidak sengaja terpanggang ke dalam file yang dikirim (kambuhnya bug
lama): file kubah langit pada suatu titik diam-diam mengandung sumber cahaya ambient penuh
(sebuah DomeLight) yang terpanggang dari pengaturan latar/dunia saat ini, karena opsi
ekspor (convert_world_material) default "menyala." Ini kategori bug yang sama dengan yang
pernah membuat seluruh model ikan berubah hampir hitam pada insiden lama tak terkait (didokumentasikan
di tempat lain di proyek ini sebagai CP24) — pengaturan pencahayaan latar scene bisa diam-diam
terekspor sebagai sumber cahaya sungguhan di dalam file yang seharusnya "unlit." Aturan tetap:
setiap kali mengekspor apa pun yang dimaksudkan bebas-pencahayaan (seperti kubah langit), secara
eksplisit set KEDUA export_lights=False DAN convert_world_material=False,
dan konfirmasi dengan langsung mencari kata "Light" di teks file yang diekspor sesudahnya —
memeriksa hanya salah satu dari dua pengaturan itu adalah yang membuat bug ini lolos sekali.
5. Pengaturan Blender untuk mengizinkan unduhan Poly Haven mereset sendiri: tombol
yang mengizinkan unduh tekstur/HDRI dari Poly Haven (blendermcp_use_polyhaven /
scene.blendermcp_use_polyhaven) tersimpan per-scene, bukan global, dan tidak bertahan
lewat reset scene penuh (read_homefile) — harus dinyalakan ulang manual berkali-kali
sepanjang proyek setiap kali scene baru dimulai.
6. Membaca ukuran/kotak-pembatas objek segera setelah mengeditnya bisa memberi angka yang sangat salah: properti "dimensions" ter-cache Blender tidak selalu diperbarui segera setelah pengeditan mesh dalam jalannya skrip yang sama — ini menyebabkan setidaknya dua kesalahan nyata (sekali pada pohon palem, sekali pada kotak perlengkapan, keduanya menghasilkan kotak pembatas puluhan meter terlalu besar). Perbaikan: selalu ukur langsung dari koordinat titik/vertex mentah (posisi minimum dan maksimum sesungguhnya), bukan mempercayai properti dimensions ter-cache segera setelah pengeditan.
7. Mempercayai "apakah gambar ini masih dipakai" hanya dari angka jumlah-pemakaian, bukan benar-benar memeriksa jaringan shading, menyebabkan negatif-palsu: baik pada rumput maupun pohon cemara, skrip pembersihan tekstur hanya menghapus gambar jika Blender melaporkan "0 pengguna," tapi sebuah gambar bisa tetap secara teknis "dipakai" oleh node shading tersisa yang tidak penting secara visual bahkan setelah sambungan bermaknanya hilang — menyebabkan error ekspor merujuk tekstur yang tidak pernah benar dibundel ulang. Perbaikan: hapus node shading sesungguhnya lebih dulu; pembersihan gambar mengikuti dengan sendirinya begitu tidak ada lagi yang merujuknya.
8. File kerja .blend sisi-Blender untuk tiga aset tanah/langit buatan-tangan
(sky_dome, terrain_horizon_ring, terrain_underwater) BELUM
benar-benar diperbaiki dengan perbaikan urutan-permukaan di sumbernya — setiap perbaikan
sejauh ini menambal file yang sudah diekspor secara langsung (lalu disalin byte-demi-byte ke repo
aplikasi-game terpisah). Artinya ekspor ulang di masa depan langsung dari Blender berisiko diam-diam
membatalkan perbaikan-perbaikan ini kecuali seseorang secara manual menerapkannya ulang di skrip/file
pembuat sesungguhnya lebih dulu.
Ringkasan Lisensi
Berikut rangkuman status lisensi tiap aset, untuk keperluan layar kredit aplikasi.
| Kategori | Aset | Sumber / Nama Kredit |
|---|---|---|
| CC0 (domain publik) — tanpa atribusi | damp_sand (tekstur, dipakai di terrain_underwater) | Poly Haven |
Semua HDRI langit yang pernah dipakai di sky_dome (bell_park_dawn,
lakeside_sunrise, evening_road_01_puresky, qwantani_sunset,
cedar_bridge_sunset_1, cloud_layers) | Poly Haven | |
brown_mud_leaves_01 dan leafy_grass (tekstur, dipakai di
terrain_horizon_ring) | Poly Haven | |
fern_02 (foliage_fern_01.usdz) | Poly Haven | |
shrub_01 (foliage_shrub_01.usdz) | Poly Haven | |
| CC-BY 4.0 — atribusi WAJIB di layar kredit | dock_main.usdz | "Old pier (Game ready)" oleh PT34 |
rod_main.usdz | "Fishing Rod, Rigged and Animated" oleh ergin3d.com | |
rock_shoreline_01.usdz | "Gray Lake Rock" oleh bilgehan.korkmaz | |
rock_shoreline_02.usdz | "Mossy Rock" oleh electronshaman | |
rock_shoreline_03.usdz | "Low Poly Rock Formation" oleh MalsumGaming | |
foliage_grass_01.usdz | "Realistics grass 07" oleh POLYSCAN3D | |
foliage_reed_01.usdz | "Cattail Plant" oleh sxuno | |
tree_01.usdz | "Low-Poly Game-Ready Spruce Tree" oleh Dark_Knife15 | |
tree_02.usdz (masih bercacat, lihat Aset 14) | "Low-Poly And Realistic Trees For Tropical Areas" oleh chenuka_wy | |
tree_03.usdz | "Palm Tree Realistic" oleh 00amza | |
prop_bucket_01.usdz | "Rusty Metal Bucket" oleh MaX3Dd | |
prop_tacklebox_01.usdz | "Fishing Tackle Box" oleh Sebastian.Hamish.Webster | |
| Milik proyek sendiri — tanpa atribusi (dibuat dari nol) | water_surface.usdz, rod_line.usdz,
prop_rope_01.usdz, geometri dasar terrain_horizon_ring.usdz, geometri dasar
terrain_underwater.usdz, geometri kubah sky_dome.usdz | |