Bab 2: Sepuluh Spesies Ikan
Bab ini membahas semua ikan di folder FishAssets/, dibuat untuk game memancing orang
pertama (RealityKit, iPad/macOS). Tiap ikan diekspor jadi 4 klip animasi baku: Cruise
(berenang santai berpatroli), Bite (menyambar umpan), Caught
(meronta setelah tertangkap), dan Preview (idle berputar untuk tampilan koleksi).
Tiap klip diekspor sepasang: file .glb dan .usdz. Selain 10 ikan inti,
ada juga dua ikan tambahan di luar roster inti (Clownfish dan Blue Tang) yang dibahas juga karena
foldernya memang ada di repo dan sudah diperiksa langsung.
Patokan skala: 1 unit Blender = 1 meter di dunia nyata.
Ringkasan status semua ikan
| No | Nama | Nama ilmiah | Status | Catatan singkat |
|---|---|---|---|---|
| 01 | Clownfish | Amphiprion ocellaris | Di luar roster inti | Hanya 1 animasi asli, 4 file .glb identik byte-per-byte, tidak ada .usdz sama sekali |
| 02 | Blue Tang | Paracanthurus hepatus | Di luar roster inti | Sama seperti Clownfish: hanya 1 animasi asli, tidak ada .usdz |
| 03 | Blue Marlin | Makaira nigricans | Selesai | 4 state lengkap glb+usdz; Caught diperbarui ulang 2026-07-21 |
| 04 | Atlantic Bluefin Tuna | Thunnus thynnus | Selesai | Rig 98-bone bawaan; sempat gelap total gara-gara bug DomeLight, sudah diperbaiki |
| 05 | Giant Trevally | Caranx ignobilis | MASIH RUSAK | Mesh Preview masih sobek/berduri di area kepala-insang-sirip punggung; belum diperbaiki, butuh rebuild total dari sumber mentah |
| 06 | Mekong Giant Catfish | Pangasianodon gigas | Selesai (spesies pengganti) | Model asli tidak ada yang gratis; dipakai model Pangasius (ikan patin) satu famili sebagai pengganti |
| 07 | Yellowfin Tuna | Thunnus albacares | Selesai | Bug normal Preview sudah diperbaiki tuntas (CP43) |
| 08 | Skipjack Tuna | Katsuwonus pelamis | Selesai | Mesh Preview paling parah kotor di antara semua ikan, sudah dibersihkan tuntas (CP47) |
| 09 | Grouper | Epinephelus awoara | Selesai (spesies pengganti) | "Kerapu" umum, bukan spesies spesifik; mesh Preview dibersihkan tuntas (CP48) |
| 10 | Sailfish | Istiophorus platypterus | Selesai | Skor sourcing tertinggi di seluruh proyek (89/100) β sudah rig dan animasi bawaan sejak awal |
Catatan penting yang harus digarisbawahi: dari 10 ikan roster inti (03β10), hanya Giant Trevally (Fish05) yang masih rusak secara mesh/topologi. Jangan pernah melaporkan Giant Trevally sebagai "selesai" β statusnya jelas belum. Empat spesies (Trevally, Skipjack, Grouper, Yellowfin) juga masih punya bug lain yang belum diperbaiki di sumbernya: material USDZ mereka kosong (dijelaskan di bagian catatan lintas-spesies di akhir bab ini).
1. Clownfish (di luar roster inti β slot ikan hias terumbu)
Identitas spesies: nama umum Clownfish (ikan badut/anemonefish), nama ilmiah
Amphiprion ocellaris. Tidak ada dokumen Scientific_Validation.md untuk ikan
ini β artinya ikan ini tidak masuk jalur validasi ilmiah formal yang dipakai untuk ikan-ikan
berikutnya.
Sumber model: diambil dari Sketchfab, dibuat oleh kreator fabip,
UID eb4e28aecc134d259c7c80ab92377cdc. Lisensinya CC-BY (wajib
mencantumkan kredit): "Clownfish by fabip on Sketchfab". Ada 9 kandidat model yang
dipertimbangkan. Yang ditolak antara lain: model 29.400 tris tanpa lisensi jelas (otomatis
ditolak), model kartun animasi 1.500 tris (terlalu rendah poli/gaya kartun), dua model
rigged/animated bagus dari Fab.com (ditolak murni karena berbayar), dan satu model hasil AI dari
Meshy.ai (ditolak karena anatominya kurang presisi). Model fabip menang dengan skor 65/100: jumlah
segitiga pas (20.654 tris), file native Blender, lisensi longgar, tapi belum ada rig/animasi dan
kualitas tekstur belum diketahui saat dipilih.
Riwayat pembuatan: spesifikasi asli 20.654 tris, 11.127 verts, tekstur PNG 2048Γ2048 (4 material), tanpa rig, tanpa animasi. Diskalakan ulang dari sekitar 2 m menjadi 0,08 m (8 cm) β ukuran clownfish sesungguhnya. Material dibangun ulang dari campuran Glossy+Diffuse menjadi Principled BSDF (Base Color + Roughness dari gambar bawaan, Normal dari peta normal 2048Γ2048 tersendiri, Clearcoat 0,3, Subsurface 0,1).
Rig-nya adalah armature custom 10-tulang: Root, Spine,
Spine.001, Tail, Head, Dorsal_Fin,
Anal_Fin, Caudal_Fin, Pectoral_Fin_L,
Pectoral_Fin_R.
Bug yang ditemukan dan diperbaiki:
- Vertex mesh awalnya berada di koordinat dunia (144, β5, 70) sementara armature ada di titik asal (origin) β akibatnya ikan jadi tidak terlihat sama sekali. Diperbaiki dengan memindahkan semua vertex kembali ke origin.
- Fitur auto-weight ("Bone Heat") gagal total (error "failed to find solution") β diganti dengan pembobotan manual berbasis zona anatomi (falloff Gaussian dari pusat tulang; hasil akhir misalnya Head 93,8%, Spine 36,1%, Tail 3,8%, Dorsal_Fin 0,6%).
- Pembersihan transform tanggal 2026-07-14 memverifikasi ulang ikatan rig-mesh: deformasi vertex 76β100% di semua tulang uji, 9 vertex group untuk 10 tulang (root memang tidak punya grup, ini wajar).
4 klip animasi dibuat pada 2026-07-14 (menurut Source_Log): Cruise 60 frame (renang lincah, 3 siklus goyang badan, 6 siklus kibas ekor), Bite 24 frame (menerkam/hentakan kepala/dorongan ekor), Caught 72 frame (10 siklus meronta panik dengan peluruhan eksponensial), Preview 48 frame (idle mengangguk/bergoyang). Saat itu diekspor sebagai 4 file GLB terpisah (~3,79 MB masing-masing).
Status saat ini β ada ketidaksesuaian antara dokumen dan file sungguhan: isi
folder hanya Cruise/Clownfish_Cruise.glb, Bite/Clownfish_Bite.glb,
Caught/Clownfish_Caught.glb, Preview/Clownfish_Preview.glb. Tidak
ada file .usdz sama sekali untuk state apa pun. Setelah diverifikasi lewat
checksum SHA-256: keempat file .glb tersebut identik byte-per-byte
(hash sama, ukuran sama persis 3.972.180 byte) padahal Source_Log mendeskripsikan 4 animasi
berbeda dengan jumlah frame berbeda (60/24/72/48). Ini cocok dengan klaim CLAUDE.md
di root repo bahwa 3 state Clownfish lainnya adalah "duplikat identik byte" β dan ini sudah
dikonfirmasi benar terhadap file sungguhan, bukan cuma asumsi dari dokumen. Artinya, apa pun data
animasi berbeda yang dibuat pada 2026-07-14, file yang benar-benar ada di repo sekarang semuanya
berisi satu klip yang sama (kemungkinan besar klip Cruise, karena hanya file itu yang waktu
modifikasinya lebih baru β 18 Juli β dibanding tiga file lain yang bertanggal 14 Juli β cocok
dengan dugaan hanya Cruise yang pernah disentuh ulang/diekspor ulang, sementara tiga file lain
ditinggalkan sebagai salinan duplikat lama).
Kesimpulan status: Clownfish hanya punya satu animasi asli, tidak punya ekspor USDZ, dan berada di luar roster 10 spesies inti yang sudah selesai. Jangan digambarkan sebagai "selesai" setara dengan 10 spesies inti.
Kewajiban lisensi/atribusi: "Clownfish by fabip on Sketchfab" β CC-BY, wajib dicantumkan kreditnya jika dipakai di produk akhir.
2. Blue Tang (di luar roster inti β slot ikan hias terumbu)
Identitas spesies: nama umum Blue Tang / Regal Tang / Palette Surgeonfish / Hippo Tang, nama ilmiah Paracanthurus hepatus. Taksonomi: Actinopterygii β Acanthuriformes β Acanthuridae (ikan botana/surgeonfish) β Paracanthurus. Ciri pengenal utama: badan oval pipih menyamping seperti "panekuk"; warna biru royal dengan pola hitam tebal berbentuk "palet"/baji yang mengelilingi bulatan biru di tiap sisi tubuh; sirip ekor cabang dua berwarna kuning cerah bergaris hitam di tepinya; duri tajam yang bisa ditarik masuk di pangkal ekor (dipakai untuk pertahanan diri). Ikan muda berwarna kuning dengan corak biru-hitam sebelum berubah jadi warna dewasa. Panjang maksimum 31 cm, umumnya 20β25 cm, berat sekitar 600 gram. Herbivora/pemakan alga, hidup di terumbu Indo-Pasifik Barat, status IUCN Least Concern (risiko rendah). Cara berenangnya labriform (didorong sirip dada), sama seperti Clownfish.
Sumber model: Sketchfab, kreator bronze82, UID
d06263fcde564bbc90af26a914d18b44. Lisensi CC-BY: "BlueTang by bronze82 on
Sketchfab". Ada 7 kandidat dipertimbangkan. Yang ditolak antara lain: model 12.900 tris tanpa
rig, nol unduhan/nol deskripsi (kandidat 2); model dengan geometri identik tapi berlisensi
CC-BY-NC alias non-komersial (kandidat 3, otomatis gugur karena lisensinya tidak cocok); model
"Major" 1.100 tris (kandidat 4, jauh di bawah batas minimum 20 ribu tris); dan dua model bagus
berbayar dari Mikhail Nesterov di Fab.com β satu dengan rig + 22 animasi, satu lagi dengan animasi
berenang berkelompok β keduanya ditolak murni karena berbayar (kandidat 5β6). bronze82 menang
dengan skor 70/100: 51.100 tris (masih dalam rentang LOD0 5 ribuβ80 ribu), CC-BY, 181 unduhan/8
like sebagai bukti validasi komunitas, tapi belum ada rig/animasi dan hanya punya satu tekstur
diffuse resolusi rendah 1024Γ1024.
Riwayat pembuatan: spesifikasi asli 51.136 tris, 26.412 verts, tekstur JPEG diffuse-only 1024Γ1024, 1 material, belum ada rig/animasi. Diskalakan ulang dari sekitar 11,9 unit Blender menjadi 0,31 m (31 cm, ukuran maksimum dewasa yang dilaporkan). Diposisikan ulang ke titik pusat. Material dibangun ulang jadi Principled BSDF: JPEG diffuse β Base Color, roughness disintesis dari diffuse lewat ColorRamp (rentang 0,4β0,7), Coat Weight 0,3, Subsurface Weight 0,1.
Rig-nya sama seperti Clownfish: armature custom 10-tulang standar (Root,
Spine, Spine.001, Tail, Head,
Dorsal_Fin, Anal_Fin, Caudal_Fin, Pectoral_Fin_L,
Pectoral_Fin_R). Pembobotan pakai metode yang sama (zona anatomi falloff Gaussian β
auto bone-heat weighting tidak dicoba/gagal dengan cara yang sama pada ikan-ikan awal proyek ini).
Bug yang diperbaiki: pembersihan transform pada 2026-07-14 menemukan mesh badan bergeser dari armature sejauh (β2,68, 1,31, 0,65) setelah proses import β diperbaiki dengan mereset posisi badan ke origin dan menerapkan (apply) semua transform. Ikatan rig-mesh diverifikasi ulang setelahnya: deformasi vertex 98%+ di semua tulang uji.
4 klip animasi dibuat pada 2026-07-14: Cruise 60 frame (goyangan lembut 2 siklus, kibas ekor 4 siklus), Bite 24 frame (menerkam maju/hentakan kepala/dorongan ekor), Caught 72 frame (meronta panik dengan peluruhan eksponensial + sirip mekar), Preview 48 frame (idle mengangguk). Diekspor sebagai 4 file GLB (~3,33 MB masing-masing).
Status saat ini β ketidaksesuaian yang sama seperti Clownfish: isi folder hanya
Cruise/BlueTang_Cruise.glb, Bite/BlueTang_Bite.glb,
Caught/BlueTang_Caught.glb, Preview/BlueTang_Preview.glb.
Tidak ada file .usdz. Diverifikasi lewat checksum SHA-256: keempat
file .glb identik byte-per-byte (hash sama, ukuran sama persis 3.493.036 byte), lagi-lagi
cocok dengan klaim "duplikat identik byte" di CLAUDE.md root untuk Blue Tang. Hanya
waktu modifikasi file Cruise (18 Juli) yang berbeda dari tiga file lain (14 Juli),
pola yang sama persis dengan Clownfish.
Kesimpulan status: tepat satu animasi asli, tidak ada USDZ, di luar roster 10 spesies inti yang sudah selesai.
Kewajiban lisensi/atribusi: "BlueTang by bronze82 on Sketchfab" β CC-BY, wajib dicantumkan kreditnya jika dipakai.
3. Blue Marlin (roster inti)
Identitas spesies: nama umum Blue Marlin / Atlantic Blue Marlin, nama ilmiah Makaira nigricans. Taksonomi: Actinopterygii β Istiophoriformes β Istiophoridae (ikan-ikan bertombak/billfish) β Makaira. Ciri pengenal: badan silinder di bagian depan sirip anal, memipih menyamping di bagian belakang; tengkuk sangat tinggi (ciri khas pembeda); moncong panjang berbentuk tombak dengan penampang bulat; punggung biru kobalt sampai biru kehitaman, perut putih keperakan; sekitar 15 baris bintik/garis kobalt pucat di sisi tubuh; sirip punggung pertama sangat tinggi (lobus segitiga di depan, 40β45 jari sirip) yang miring tajam ke belakang; sirip ekor besar bercabang kuat dengan 2 lunas (keel) di pangkal ekor; sirip dada panjang runcing yang bisa dilipat rapat ke badan. Panjang maksimum 500 cm, umumnya 290 cm, berat maksimum 820 kg. Cara berenang sub-carangiform sampai thunniform (badan belakang kaku, dorongan kuat dari sirip ekor). Hidup di perairan tropis pelagis seluruh dunia, status IUCN Least Concern tapi ditangkap secara intensif.
Sumber model β perjalanan pencarian yang berliku: pencarian awal tidak menemukan
model Marlin gratis yang layak pakai β hasil pencarian "marlin" di Sketchfab didominasi senapan
merek Marlin, dan sedikit hasil ikan billfish yang ada berlisensi NoAI atau berbayar. Kesimpulan
awal saat itu: "harus generate pakai AI Hunyuan3D." Setelah disapu ulang pada
2026-07-16 (CP34), ternyata kesimpulan sebelumnya adalah bug β pengecekan lisensi
sebelumnya mengacu ke field slug yang ternyata tidak ada, dan kata kunci pencarian
terlalu sempit. Pencarian yang diperbaiki dengan kata kunci "blue marlin / marlin fish / billfish /
swordfish / sailfish / black/striped marlin / xiphias" menemukan beberapa model billfish CC-BY
yang layak pakai.
Model yang dipilih: "Blue Marlin" oleh Gotta_go_evil_Fast, UID Sketchfab
7d5e0636ff5e4d41820b30aefc0669ba (catatan: dokumen Asset_Candidates juga mencantumkan
UID lain yang tidak konsisten, 8ef4..., untuk kandidat tak terkait yang ditolak β UID
yang benar dan dipakai untuk unduhan serta atribusi adalah 7d5e... sesuai
Source_Log.md). Lisensi CC-BY 4.0 (wajib atribusi). Kandidat lain yang ditolak
pada penyapuan ulang: scan pahat 57.420 tris yang bentuknya benar tapi sama sekali tanpa
tekstur (oleh indriyanitini83); model AI Meshy 92.698 tris Black Marlin dan 87.914 tris
Striped Marlin (keduanya melebihi batas atas LOD0). Model pemenang mendapat skor 73/100: siluet
billfish yang benar (moncong, sirip punggung tinggi, ekor cabang, sirip dada), tekstur diffuse 2K,
mesh game bersih 8.280 tris, tapi belum ada rig/animasi.
Riwayat pembuatan: spesifikasi asli 8.280 tris, 4.132 verts, tekstur diffuse 2K +
specular-gloss 2K, tanpa rig. Hierarki empty-node bawaan hasil import Sketchfab yang dalam
dibersihkan dan semua transform bawaan diterapkan. Diputar ulang 180Β° pada sumbu Z
supaya kepala/moncong menghadap βY dan ekor cabang menghadap +Y (konvensi proyek), punggung
menghadap +Z. Dilakukan dengan langsung menegasikan koordinat vertex karena operator
transform_apply di Blender diam-diam tidak berefek (no-op) lewat konteks eksekusi
MCP. Diskalakan ulang ke total panjang 3,0 m, dipusatkan ke origin. Material
disederhanakan dari campuran spec-gloss menjadi Principled BSDF bersih (JPEG diffuse β Base Color,
roughness 0,4, coat 0,3, subsurface 0,05); node gambar spec-gloss dibuang.
Rig-nya adalah armature custom 11-tulang: Root (+Y),
Spine_00/01/02, Head (mencakup moncong+bill), Tail,
Caudal_Fin, Dorsal_Fin, Anal_Fin,
Pectoral_Fin_L/R. Pembobotan pakai metode inverse-distance-to-bone-segment
berbasis zona (pangkat 4, 3 pengaruh teratas, dinormalisasi) β auto-weight bone-heat memang
dicatat tidak bisa diandalkan di seluruh proyek ini. Hasil verifikasi: 0 vertex tanpa bobot,
tidak sobek pada pose uji (perpindahan maksimum 0,52, rata-rata 0,04).
4 klip animasi: Cruise 48 frame (2,0 detik), Bite 24 frame (1,0 detik, 2Γ), Caught 72 frame (3,0 detik, meronta), Preview 48 frame (2,0 detik) β semuanya dibuat sebagai gelombang sinus merambat dari kepala ke ekor (gaya thunniform: badan kaku, dorongan sirip ekor), amplitudo membesar ke arah ekor, berbeda fase, disetel ke jumlah siklus bulat supaya setiap state bisa diputar berulang mulus (terverifikasi celah loop = 0,0 pada keempat state lewat perbandingan titik akhir mesh yang sudah dideformasi β pemeriksaan yang sama yang menangkap "bug loop" pada Sailfish, jadi Marlin memang sengaja dicek dengan teliti).
Bug/keanehan yang tercatat: root node hasil ekspor GLB memakai rotasi identitas
[0,0,0,1] (berbeda dari ikan lain yang memakai [-0.7071,0,0,0.7071])
karena konversi β90Β° Z-upβY-up langsung dipanggang ke data mesh, bukan ke root node, khusus untuk
Marlin β sudah diverifikasi setara secara fungsional dengan mengimpor ulang dan mengonfirmasi
orientasi dunia yang identik dengan Sailfish, jadi ini keanehan yang tidak berbahaya, bukan bug.
Juga: operator transform_apply/rotate-lalu-apply diam-diam tidak berefek lewat
konteks eksekusi MCP add-on ahujasid; diatasi dengan matematika vertex langsung pada data mesh
untuk flip orientasi, dan temp_override eksplisit untuk operator edit/pose armature.
Kejadian belakangan (CP49, 2026-07-21): ditemukan file kerja Marlin.blend
kehilangan action Bite/Caught/Preview β hanya Cruise yang tersisa (dikonfirmasi
lewat backup .blend1, yang juga tidak punya ketiganya). File ekspor yang sudah
terlanjur dirilis masih menyimpan datanya, jadi dipulihkan dengan mengimpor ulang
Caught.glb yang sudah dirilis, mengonversi keyframe quaternion-nya ke Euler XYZ, dan
membangun ulang action dari situ. Dua bug ditemukan dan diperbaiki selama proses pemulihan ini,
keduanya temuan umum untuk proyek ini (bukan cuma soal Marlin):
- Bug rotasi gabungan (compound-rotation): synthesizer animasi menulis sudut yang sama ke ketiga sumbu Euler sekaligus saat sebuah tulang punya keyframe di lebih dari satu sumbu, sehingga secara visual saling meniadakan jadi nyaris tidak bergerak. Diperbaiki dengan mendeteksi sumbu dominan tiap tulang (rentang keyframe asli terbesar) dan hanya menggerakkan sumbu itu.
- Bug action-slot yang tidak terikat (unbound action-slot): sistem layered-action
Blender 5.x mengharuskan
AnimData.action_slotdiikat ulang secara eksplisit ketika sebuah action dipindah dari satu objek armature ke objek lain (misalnya dari rig import sementara ke rig sungguhan) β kalau tidak, data keyframe mentahnya benar tapi pose hasil evaluasinya diam-diam jadi salah/lebih kecil. Diperbaiki dengan mengesetaction_slotsecara eksplisit setelah setiap penugasan ulang.
Setelah itu, animasi Caught baru yang lebih "ngamuk" (meronta lebih keras) dibuat dan diekspor untuk Marlin sebagai bagian dari rollout 7 spesies (lihat bagian catatan lintas-spesies di akhir bab) β diverifikasi tidak sobek lewat rangkaian render.
Status saat ini: keempat state terverifikasi ada di disk sebagai pasangan
.glb+.usdz lengkap (Cruise/Bite/Caught/Preview). Selesai dan sudah
dirilis. State Caught dianimasikan ulang (lebih keras/ganas) per 2026-07-21 dan diekspor ulang;
proses pemulihan data animasi yang hilang berhasil rapi sesuai catatan CP49.
Kewajiban lisensi/atribusi: "Blue Marlin" by Gotta_go_evil_Fast β lisensi CC-BY 4.0 (https://sketchfab.com/3d-models/blue-marlin-7d5e0636ff5e4d41820b30aefc0669ba). Wajib atribusi.
4. Atlantic Bluefin Tuna (roster inti)
Identitas spesies: nama umum Atlantic Bluefin Tuna, dikenal juga sebagai "Toro" atau "Maguro", nama ilmiah Thunnus thynnus. Taksonomi: Actinopterygii β Scombriformes β Scombridae β Thunnus. Ciri pengenal: badan fusiform berbentuk torpedo, penampang hampir bulat sempurna, paling dalam di dekat sirip punggung pertama; punggung biru-hitam metalik, perut putih keperakan; sirip dada sangat pendek (kurang dari 80% panjang kepala β ciri pembeda utama dari spesies Thunnus lain); ekor bercabang bulan sabit (lunate) yang kuat dengan 3 lunas (lunas tengah hitam pada ikan dewasa) di pangkal ekor; finlet kuning bertepi hitam berbaris dari sirip punggung/anal menuju ekor; mampu mengatur suhu tubuh di atas suhu air sekitarnya (jarang dimiliki ikan bertulang). Panjang maksimum 458 cm, umumnya 200 cm, berat maksimum 684 kg, kecepatan kejut hingga 72,5 km/jam. Perenang thunniform β badan depan nyaris kaku, osilasi terkonsentrasi di pangkal ekor, kibasan ekor sekitar 1 Hz. Status IUCN Endangered (terancam punah akibat penangkapan berlebih untuk sushi/sashimi).
Sumber model: 6 kandidat awal semuanya gagal memenuhi batas segitiga LOD0: dua
photoscan CC0/CC-BY masing-masing sekitar 2,3 juta dan 3,3 juta tris (29β40 kali di atas batas
atas 80 ribu); tiga model CC-BY jauh di bawah batas bawah 20 ribu tris (5.600β26.400 tris); satu
opsi CGTrader hanya berbayar. Kesimpulan awal saat itu: "harus generate pakai AI Hunyuan3D."
Kandidat 7 (pemenang, ditemukan pada penyapuan yang sama): dhjwdwd, UID Sketchfab
642c6515d893474a8fc8f129491efcac. CC-BY. Sekitar 13.840 tris (6.920
face), sudah rig (98 tulang, disebut "ExportRIG") dan sudah beranimasi (siklus
renang 60 frame, "FishSwim.012"), tekstur PBR 4K lengkap (BaseColor/MetallicRoughness/Normal).
Skor 85/100 β jauh yang terbaik di seluruh proyek pada titik itu, karena sudah punya rig+animasi
profesional siap pakai.
Riwayat pembuatan: objek hasil import diganti nama supaya rapi di scene
(BluefinTuna_Body, BluefinTuna_Armature). Diskalakan ke 3,0
m, dipusatkan ke origin. Rig-nya tetap memakai armature profesional bawaan
98-tulang dari sumbernya (tidak dibangun ulang) β ini satu-satunya ikan di roster yang
memakai rig kompleks multi-tulang-per-jari-sirip bawaan, bukan rig custom 10/11-tulang standar
proyek.
Bug yang ditemukan dan diperbaiki (beberapa putaran):
- GLB awal kegemukan (54 MB, lalu 17,9 MB setelah diperkecil) akibat tekstur 4K β diperkecil menjadi 2K.
- Hasil import Sketchfab menyisakan 20 node kosong (empty) dan satu salinan duplikat seluruh model β dibersihkan, disisakan satu salinan bersih; armature tersarang 5 tingkat di dalam empty-empty dengan transform yang sudah dipanggang β rantai parent dibersihkan, semua transform diterapkan, mesh badan disejajarkan ulang ke armature (selisihnya adalah skala 0,919 + pergeseran posisi).
- Action hilang: pada suatu titik 3 dari 4 action baku (Cruise/Bite/Caught,
menyisakan hanya Preview) terhapus dari file
.blendkerja β penyebab akarnya diidentifikasi sebagai Blender yang menghapus action non-aktif tanpause_fake_usersaat proses pembersihan data yatim (orphan data purge). File GLB per-state yang sudah terlanjur dirilis masih menyimpan keempat action, mengonfirmasi kehilangan data hanya terjadi di file kerja. - Hanya 22 dari 98 tulang yang benar-benar dianimasikan, dengan amplitudo sekecil 0,003β0,006 radian (sekitar 0,2Β°) β rantai sekitar 50 tulang jari sirip punggung dan sebagian besar segmen sirip dada/anal diam kaku sementara badan bergerak, terlihat seperti "badan kaku, sirip plastik statis." Ini penyebab utama laporan bug "animasi tidak natural."
- Ekspor USDZ memanggang warna latar World scene yang nyaris hitam
(0,051, 0,051, 0,051) menjadi sebuah
DomeLight, karenaconvert_world_material=Trueadalah default exporter β ini membuat model tampak hampir hitam total di Reality Composer/RealityKit dan adalah penyebab sesungguhnya dari laporan bug "kulit kosong/blank" (material sebenarnya baik-baik saja; pencahayaan yang bermasalah). Ini adalah kejadian yang dirujuk diCLAUDE.mdroot (CP24) sebagai alasan kenapasky_dome.usdztidak boleh pernah menyisipkan Light prim. - Setiap ekspor GLB per-state ikut membawa keempat action sekaligus karena
setting default glTF
export_animation_mode='ACTIONS'mengekspor semua action pada armature, bukan cuma yang aktif β jadiCruise.glbtidak selalu memutar klip Cruise yang benar.
Perbaikan: keempat action dibangun ulang dari nol (Cruise 90 frame, Bite 30 frame,
Caught 90 frame, Preview 60 frame) mencakup seluruh rantai tulang (tulang belakang penuh, kedua
lobus ekor, kedua sirip dada Γ 6 segmen masing-masing, kedua sirip anal, seluruh 15 rantai jari
sirip punggung Γ 3 tulang masing-masing, sirip punggung kedua/finlet, sirip punggung bawah, dan
rahang), dengan amplitudo mengecil dari kepala ke ekor (gaya thunniform, sekitar 0,5Β° di kepala
hingga sekitar 18Β° di ujung ekor). Keempat action baru diberi use_fake_user=True
supaya bug orphan-purge tidak terulang. Ekspor USDZ diset convert_world_material=False,
export_lights=False; ekspor GLB diset export_animation_mode='ACTIVE_ACTIONS'.
Regresi sobekan mesh ditemukan segera setelah perbaikan di atas: animasi hasil
rebuild terlihat benar di render terpisah tapi sobek nyata di Reality Composer (jari-jari sirip
punggung lepas, segmen sirip patah-patah). Penyebab akarnya: banyak vertex dekat pangkal sirip
dibobot secara halus lintas beberapa rantai tulang independen sekaligus (misalnya satu
vertex di pangkal sirip punggung membawa bobot pada 3 jari sirip berbeda sekaligus; pangkal sirip
dada dan anal saling tumpang tindih bobot hingga 84%). Rebuild pertama memberi tiap rantai fase/
frekuensi/sumbu independen sendiri-sendiri, yang justru menarik vertex bersama itu terpisah.
Perbaikannya: menyatukan fase (diturunkan dari posisi Y rest-pose tulang lewat fungsi bersama
body_phase()) dan frekuensi di semua rantai, serta meredam amplitudo mendekati nol
untuk sekitar 45% pertama tiap rantai sirip (area yang berbagi bobot lintas-rantai), baru
membesar di segmen luar yang bobotnya bersih. Dicatat sebagai pelajaran umum: jangan pernah
menganggap rantai tulang bernama berbeda pasti mekanis independen hanya karena namanya berbeda
secara semantik β selalu cek dulu bobot vertex group yang saling tumpang tindih.
Keterbatasan tekstur yang diketahui: tekstur badan yang ada di disk resolusinya 512Γ512 (baik di
folder textures/ maupun yang dibundel di .blend), turun dari resolusi 2K
yang tercatat di dokumen β sumber resolusi lebih tinggi aslinya sudah hilang (folder
Model/ kosong) dan perlu diunduh ulang dari Sketchfab UID
642c6515d893474a8fc8f129491efcac untuk dipulihkan.
Bug normal ekspor Preview (CP43, 2026-07-20): mesh Preview Bluefin punya 16 pulau
mesh terpisah dan 1.196 edge non-manifold yang menyebabkan tingkat face terbalik 5,23% saat
diekspor. Sudah diperbaiki β customdata_custom_splitnormals_clear()
lalu normals_make_consistent() menurunkannya jadi 0,26%. Diekspor ulang dan
dikonfirmasi. Gejala "tekstur kosong" yang dilaporkan untuk Bluefin sudah diselidiki dan
tidak bisa direproduksi di level file β PNG BaseColor 512Γ512 memang tekstur yang
dicat dengan benar, dan sampling UV tidak menemukan bukti bug latar abu-abu.
CP49 (2026-07-21): animasi Caught "ngamuk" baru diluncurkan (lihat catatan lintas-spesies) β rig 96-tulang Bluefin memang butuh pemisahan kelas tulang primer/sekunder sejak awal karena gerakan sumber aslinya terlalu halus untuk sekadar diperbesar amplitudonya.
Status saat ini: keempat state terverifikasi ada di disk sebagai pasangan
.glb+.usdz. Ada juga file BluefinTuna.usdz di level akar
folder spesies (file "hero" showcase, state Cruise). Selesai dan sudah dirilis; normal mesh
Preview sudah diperbaiki dan dikonfirmasi (satu dari hanya 2 spesies yang tuntas diperbaiki di CP43,
yang satu lagi Yellowfin); Caught dianimasikan ulang 2026-07-21.
Kewajiban lisensi/atribusi: CC-BY (dhjwdwd, UID Sketchfab
642c6515d893474a8fc8f129491efcac) β wajib atribusi; teks kredit persis harus diambil
dari tabel sumber Source_Log.md untuk layar kredit game.
5. Giant Trevally (roster inti) β MASIH RUSAK, jangan dirilis apa adanya
Identitas spesies: nama umum Giant Trevally / Giant Kingfish, dikenal juga sebagai "Ulua", nama ilmiah Caranx ignobilis. Taksonomi: Actinopterygii β Carangiformes β Carangidae β Caranx. Ciri pengenal: badan oval, memipih sedang; profil kepala curam, nyaris lurus (ciri diagnostik); dimorfisme seksual kuat β ikan muda/betina dewasa berwarna abu-abu keperakan, jantan dewasa gelap sampai hitam legam; garis-garis pucat tipis + bintik hitam kecil di tubuh bagian atas; tidak ada bintik hitam di tutup insang (pembeda dari trevally jenis lain); sirip dada berbentuk sabit (falcate) lebih panjang dari kepala; ekor bercabang kuat; lengkungan garis rusuk (lateral line) yang jelas dengan 26β38 sisik keras (scutes). Panjang maksimum 170 cm (terbesar di genus Caranx), berat maksimum 80 kg. Perenang carangiform (lenturan badan belakang, dorongan ekor bercabang). Status IUCN Least Concern.
Sumber model: Sketchfab, kreator ffishAsia-and-floraZia, UID
e6446df50ba746ed8ce8a3dd66b3b8e8 ("CC0 Giant Trevally"). Lisensi CC0 Public
Domain β tidak wajib atribusi. Hanya 2 kandidat ditemukan; alternatif CGTrader berbayar
langsung ditolak. Pemenang mendapat skor 65/100: photoscan spesies akurat secara ilmiah, lisensi
sebaik mungkin, tapi sekitar 966.446 tris (12 kali di atas batas maksimum LOD0) membutuhkan
retopologi berat, dan belum ada rig/animasi.
Riwayat pembuatan β dua kali percobaan build, yang pertama rusak:
Build pertama (2026-07-13): menggabungkan dua bagian mesh, didesimasi dua tahap (192 ribuβ40 ribuβ20 ribu poligon) langsung pada geometri photoscan mentah yang belum dilas (unwelded). Dirig dengan armature standar 10-tulang (bobot berbasis zona, auto-weight gagal seperti biasa). Dibuat 4 state animasi. Diekspor pada ukuran 17,7 MB (kegemukan, tekstur 4K).
RUSAK β ditemukan 2026-07-15 (CP27/CP28): saat merender GLB asli tanpa modifikasi
dan memeriksa viewport .blend langsung, terlihat mesh badan hancur menjadi
ribuan segitiga terpisah bahkan saat diam, dengan armature dinonaktifkan β ini cacat
geometri dasar, bukan masalah rigging/skinning, dan tidak bisa diperbaiki hanya dengan mengelas
ulang mesh yang sudah dirilis. Penyebab akarnya: proses decimate awal (rasio 0,21) diterapkan
pada geometri triangle-soup photoscan mentah yang belum pernah dilas (merge-by-distance) lebih
dulu, dan pipeline saat itu belum memiliki gerbang pemeriksaan rasio boundary-edge. Ini jenis
cacat yang sama yang dihindari secara independen oleh rebuild Yellowfin (Fish07) dengan cara
mengelas mesh terlebih dahulu.
Rebuild (2026-07-16, CP30): sumber CC0 diunduh ulang segar, tile-tile
digabungkan, satu tile kartu kalibrasi warna yang nyasar dihapus, lalu dilas dengan
merge-by-distance dari 428 ribu menjadi 241 ribu verts, menurunkan rasio boundary-edge
dari 0,366 menjadi 0,0 (terhubung penuh) β gerbang konektivitas ditambahkan
setelahnya untuk memblokir decimation di masa depan kecuali rasio boundary di bawah 15%. Didesimasi
(mode COLLAPSE) dari 483 ribu menjadi 28.000 tris, tetap terhubung (boundary
0,003). Diorientasikan lewat penjajaran sumbu utama PCA (panjang +Y, punggung gelap +Z, tidak
perlu dibalik), diskalakan ulang ke 1,2 m. Rig baru 10-tulang + Jaw,
bobot berbasis zona (semua vertex tercakup). 4 state animasi baru (Cruise 90 frame, Bite 30 frame +
rahang, Caught 90 frame, Preview 60 frame), gelombang merambat kepala ke ekor, diverifikasi tidak
sobek termasuk pada puncak meronta di Caught. Tekstur diperkecil ke 2K; diekspor 4 GLB (~3,3 MB,
turun dari 16,94 MB) + 4 USDZ (~2,0 MB). File GiantTrevally.blend hasil rebuild
menggantikan file kerja yang rusak. Rebuild ini benar-benar memperbaiki mesh dasar yang hancur.
Cacat kedua yang terpisah muncul belakangan (CP43/CP46, 2026-07-20/21) β khusus ekspor Preview: sesi dari sisi tim aplikasi menemukan cacat orientasi/tekstur/normal pada ekspor Preview 5 spesies (memakai Mekong Catfish sebagai referensi yang sudah diketahui baik). Khusus untuk Giant Trevally:
- CP43 menemukan
has_custom_normals=True(sisa data split-normal bawaan photoscan) yang menimpa arah hadap face, tapi percobaan perbaikan pertama (bersihkan + hitung ulang normal) justru membuat keadaan lebih buruk (0,78%β1,41% face terbalik) dan dibatalkan β cacat sesungguhnya pada Trevally ternyata geometri duplikat yang tumpang tindih di sambungan non-manifold, bukan masalah arah hadap yang bisa dibalik, jadi rekalkulasi normal memang tidak bisa memperbaikinya (dikonfirmasi dua kali, CP43 dan CP46). - CP46 melakukan pembersihan di tempat (menghapus 39 segitiga debris terisolasi + 30 face
interior lewat fungsi
select_interior_faces()milik Blender), menurunkan edge non-2-manifold dari 165 ke 101, tapi screenshot viewport Blender milik pengguna sendiri setelahnya menunjukkan mesh masih terlihat berduri/sobek di area kepala/insang/sirip punggung β cacat yang secara materi jauh lebih besar daripada yang bisa dideteksi tes edge/face lokal pada pass pembersihan itu, lebih mirip dengan sobekan kelas CP30 yang asli ketimbang debris halus. Keputusan pengguna: lewati (skip) Giant Trevally, lanjut ke spesies lain. Butuh rebuild total weld-before-decimate dari scan sumber mentah (Model/gltf/scene.gltf, masih ada), bukan sekadar tambalan lokal lagi. - CP49 (2026-07-21) meluncurkan animasi Caught "ngamuk" baru ke Trevally bersama 6 spesies lain β animasinya sendiri hasilnya bersih, tapi secara eksplisit mewarisi cacat mesh CP46 yang belum terselesaikan, karena pass itu hanya menyentuh rigging/animasi, bukan topologi.
- Juga dikonfirmasi masih ada (CP46), di luar cakupan untuk diperbaiki di situ: material
.usdzhasil ekspor Trevally kosong (def Materialtanpa jaringan shader sama sekali) β kelas bug yang sama dengan bug shader-drop CP38 yang memengaruhi semua 4 spesies "pola atlas" (Trevally, Skipjack, Grouper, Yellowfin). Sisi aplikasi sudah punya solusi sementara (membangun ulang material dari tekstur bawaan file.glbsaudaranya).
Status saat ini β MASIH RUSAK: keempat state terverifikasi ada di disk sebagai
pasangan .glb+.usdz, plus ada file sisa
GiantTrevally_REBUILD.blend1 di folder spesies dari proses rebuild CP30.
Dikonfirmasi tegas masih rusak per checkpoint terakhir (CP46/CP49, 2026-07-21):
mesh Preview punya cacat sobek/berduri nyata dan terlihat jelas di area kepala/insang/sirip
punggung yang belum diperbaiki β jangan laporkan Giant Trevally sebagai "selesai"
sejajar dengan spesies roster inti lainnya. Ikan ini butuh rebuild total dari sumber mentah, yang
untuk sekarang ditunda atas permintaan pengguna. Material USDZ-nya juga kosong di semua state
(bug shader-drop), sudah disiasati dari sisi aplikasi tapi belum diperbaiki dari sumbernya.
Kewajiban lisensi/atribusi: CC0 Public Domain (ffishAsia-and-floraZia) β tidak wajib atribusi.
6. Mekong Giant Catfish (roster inti, via spesies pengganti satu famili)
Identitas spesies: nama umum Mekong Giant Catfish ("Trey Reach" dalam bahasa Khmer, "Pla Buek" dalam bahasa Thai), nama ilmiah Pangasianodon gigas. Taksonomi: Actinopterygii β Siluriformes β Pangasiidae ("lele hiu"/shark catfishes) β Pangasianodon. Ciri pengenal: badan memanjang, ramping, mirip hiu; kepala lebar pipih, penampang hampir bulat; tanpa sisik, punggung abu-abu sampai abu-abu kebiruan, perut putih keperakan pucat, tanpa garis atau bintik; sirip punggung kecil berduri 2, sirip adiposa panjang, sirip anal sangat panjang (35 jari sirip); sirip ekor besar bercabang dalam; sungut mengecil/rudimenter pada ikan dewasa (tidak lazim untuk ikan lele); benar-benar tanpa gigi pada ikan dewasa (nama genusnya secara harfiah berarti "tanpa gigi"); mata terletak tidak biasa rendah (di bawah sudut mulut). Salah satu ikan air tawar yang tumbuh tercepat dan terbesar (spesimen 293 kg pernah dikonfirmasi, ikan air tawar terbesar yang pernah ditangkap). Hanya hidup di cekungan Sungai Mekong (China/Thailand/Laos/ Kamboja/Vietnam). Status IUCN Critically Endangered (kritis terancam punah).
Sumber model β tidak ada model spesies asli yang gratis: karena statusnya kritis terancam punah, ketersediaan aset 3D-nya nyaris tidak ada; satu-satunya kandidat yang ditemukan hanya dua model CGTrader berbayar ($129β$179). Kesimpulan awal saat itu: "harus generate pakai AI Hunyuan3D."
Disapu ulang pada 2026-07-16 (CP35): daripada mencari nama spesies persis, pencarian diperluas ke level famili (Pangasiidae) dan kerabat dekatnya "Pangasius"/"ikan patin," yang ternyata punya model CC-BY gratis dengan rencana tubuh diagnostik yang sama (ramping, sirip punggung segitiga tinggi, ekor bercabang dalam, tanpa sisik, bersungut).
Model yang dipilih: "Ikan Patin" (Pangasius), Sketchfab (hasil generasi Meshy AI), UID
d9e7f483b33c4f1cbd74a5eed9b97f8f. CC-BY 4.0 (wajib atribusi). Sekitar
118.096 tris (2 bagian: 106 ribu badan + 12 ribu sirip), PBR 2K lengkap (BaseColor +
MetallicRoughness + Normal), belum ada rig. Alternatif yang ditolak: Wels catfish dan Flathead
Catfish (keduanya sekitar 40 ribu tris, CC-BY, tapi rencana tubuh salah β kepala lebar datar dengan
sungut panjang menonjol, famili berbeda); Amur Catfish CC0 dari ffishAsia (juga rencana tubuh
salah, dan 0,8β2,8 juta tris). Skor 73/100 β Ikan Patin secara eksplisit dicatat sebagai
satu-satunya kandidat dari famili yang benar (Pangasiidae), itu sebabnya ia mengalahkan
alternatif lain yang anatominya salah meski secara umum bagus, walaupun akurasi anatomi adalah
kriteria skor dengan bobot tertinggi.
Alasan substitusi spesies, dinyatakan tegas di Source_Log.md: aset yang dirilis adalah Pangasius sebagai pengganti Pangasianodon gigas yang sebenarnya, dijustifikasi lewat kecocokan rencana tubuh satu famili; substitusi ini harus diungkapkan kalau ensiklopedia ikan dalam game mengklaim akurasi ilmiah.
Riwayat pembuatan: 2 bagian mesh digabung jadi satu objek; hierarki empty bawaan Sketchfab dibersihkan dan transform diterapkan. 3 UV map duplikat berlebih dibuang (artefak import glTF), disisakan UVMap utama. Dilas lebih dulu (merge-by-distance, ambang 0,0008): 73.473 β 59.050 verts, edge boundary 25.705 β 8 β mesh hasil AI ini punya vertex duplikat dan sambungan bagian yang terbuka. Diorientasikan kepala βY / ekor +Y / punggung +Z (sudah benar setelah apply transform, tidak perlu dibalik); diskalakan ulang ke 2,0 m; dipusatkan. Didesimasi (collapse) dari 118.096 menjadi 17.950 tris β diverifikasi rasio boundary 0,0003, 1 pulau terhubung, tanpa fragmentasi (mode kegagalan persis yang merusak Giant Trevally β dihindari di sini khususnya berkat langkah weld lebih dulu). Material PBR metallic-roughness dipertahankan apa adanya (metallic 0 β benar untuk kulit lele yang dielektrik).
Rig-nya 11-tulang: Root (+Y), Spine_00/01/02, Head,
Tail, Caudal_Fin, Dorsal_Fin, Anal_Fin,
Pectoral_Fin_L/R. Bobot inverse-distance berbasis zona (pangkat 4, 3 pengaruh
teratas, dinormalisasi), 0 vertex tanpa bobot.
4 state animasi bergaya subcarangiform (amplitudo gelombang badan lebih besar daripada tuna β 0,35 di pangkal badan depan berbanding 0,12 milik Marlin β dan tempo lebih lambat, karena catfish adalah perenang bertubuh lentur, bukan thunniform kaku): Cruise 48 frame, Bite 24 frame, Caught 72 frame meronta, Preview 48 frame β semuanya loop mulus (selisih titik akhir 0,0).
Bug yang diperbaiki:
- Kehilangan action yatim: proses animasi pertama membuat keempat action tapi
mengembalikan action aktif armature ke Cruise sebelum disimpan, sehingga Bite/Caught/Preview
(0 pengguna saat disimpan) terhapus sebagai data yatim. Diperbaiki dengan
membuat ulang memakai
use_fake_user=True. - Macetnya loop verifikasi: loop evaluasi mesh penuh naif per-frame (perbandingan mesh-ke-mesh sekitar 64 frame Γ 4 state) membuat add-on MCP single-thread macet. Diganti dengan pemeriksaan titik-akhir fcurve pose-bone yang ringan (tanpa perlu evaluasi mesh) β tetap membuktikan integritas loop (selisih 0,0) tanpa render berat.
- Sebuah bendera "Head.rotation amplitudo ~2,0" dari hasil parse GLB ternyata cuma artefak representasi quaternion dari tulang kepala yang menghadap βY, bukan gerakan sungguhan β dikonfirmasi lewat rangkaian render (kepala hanya bergoyang lembut).
Animasi Caught dibuat ulang (CP44/CP45, 2026-07-20): sesuai permintaan handoff tim
aplikasi (APP_TEAM_HANDOFF_CAUGHT_STRUGGLE.md, sudah dihapus setelah selesai), klip
Caught dibangun ulang di tempat dengan struktur baru yang lebih ganas: "meronta β satu puncak
lengkungan penuh badan yang koheren β mereda". Model/rig sama, hanya animasinya yang berubah.
Durasi baru 3,75 detik (90 frame @ 24fps), naik dari 3,0 detik (72 frame)
sebelumnya. Momen paling dramatis (lengkungan penuh badan, sekitar 115Β° kelengkungan total setelah
disetel turun dari percobaan awal yang terlalu berlebihan sekitar 230Β° "hidung nyaris menyentuh
ekor" yang tertangkap lewat render cek tampak atas) jatuh di frame 44, sekitar 1,83 detik
(sekitar 49% dari durasi klip) β sisi aplikasi perlu menyetel ulang konstanta waktu
cutscene tangkapan (catchCutsceneRiseDuration/FreezeDuration/
SettleDuration, kecepatan animasi, selubung slow-motion) supaya cocok dengan timing
baru ini, bukan mengasumsikan timing klip 3,0 detik lama masih pas. Diverifikasi tidak sobek di
setiap sendi termasuk puncak frame-44 lewat render sapuan tampak lebar + close-up + tampak atas;
diekspor dan dikonfirmasi lewat usdchecker (berhasil/Success) dan perbandingan
langsung bindTransforms/restTransforms (sumbu rig tidak berubah).
Status saat ini: keempat state terverifikasi ada di disk sebagai pasangan
.glb+.usdz. Selesai dan sudah dirilis; dipakai di sepanjang proyek
sebagai referensi yang sudah diketahui baik (known-good) untuk cacat ekspor
Preview di spesies lain (CP43) β artinya ekspor Preview Mekong Catfish sendiri tidak punya masalah
yang diketahui.
Kewajiban lisensi/atribusi: "Ikan Patin" (Sketchfab, UID
d9e7f483β¦) β lisensi CC-BY 4.0. Wajib atribusi. Wajib juga mengungkapkan substitusi
Pangasius/Mekong-giant-catfish kalau disajikan sebagai spesimen yang akurat secara ilmiah.
7. Yellowfin Tuna (roster inti)
Identitas spesies: nama umum Yellowfin Tuna ("Madidihang"/"Tuna Sirip Kuning" dalam bahasa Indonesia), nama ilmiah Thunnus albacares. Taksonomi: Scombriformes β Scombridae β Thunnus. Ciri pengenal: badan memanjang, fusiform, agak pipih menyamping; dua sirip punggung dengan celah sempit di antaranya; sirip punggung kedua dan sirip anal jelas berbentuk sabit (falcate), pada ikan dewasa besar bisa melebihi 20% panjang cabang (fork length) β ini siluet khas spesies ini; 8β10 finlet di belakang sirip punggung kedua dan 7β10 di belakang sirip anal, berwarna kuning cerah bertepi hitam/gelap (ciri lapangan utama "yellowfin"); punggung biru metalik gelap memudar ke perak, dengan sekitar 20 garis vertikal samar di sisi tubuh. Panjang maksimum 239 cm FL, berat maksimum sekitar 200 kg. Dipilih sebagai tuna komersial/pancing olahraga andalan Indonesia (menurut Checkpoint 26 proyek ini). Perenang thunniform β badan nyaris kaku, dorongan hampir seluruhnya dari sirip ekor bulan sabit yang kaku, lekukan badan minimal (jauh lebih kaku dibanding Clownfish/Blue Tang yang labriform).
Sumber model: Sketchfab, kreator ffish.asia/floraZia.com, UID
d4eeea976932414d91fc786ce6cec547 ("CC0 γγγ Yellowfin Tuna"). Lisensi CC0
Public Domain β tidak wajib atribusi. Kandidat: photoscan CC0 pemenang (1.387.219 tris,
butuh decimation berat) berbanding model bergaya kartun CC-BY 2.851 tris (ditolak β di bawah batas
bawah LOD0 5 ribu, terlalu bergaya kartun) dan beberapa model generik "tuna"/"animated tuna"
lainnya dengan lisensi belum terverifikasi (disimpan sebagai cadangan yang tidak dipakai). Skor
74/100 β photogrametri sungguhan dari spesimen nyata memberi proporsi/sirip/finlet yang tepat dan
lisensi sebaik mungkin, dengan konsekuensi butuh proses weld+decimate yang berat. Dicatat secara
eksplisit sebagai "keluarga sumber CC0 tepercaya yang sama dengan Fish05 Giant Trevally" (ffish.asia).
Riwayat pembuatan: 20 tile photoscan digabung jadi satu badan; kartu kalibrasi warna photogrametri yang mengambang (objek/material terpisah) dihapus; empty bawaan import Sketchfab dibuang. Pengelasan (weld) β kali ini dilakukan dengan benar sejak awal: scan mentahnya adalah triangle-soup topologis (34% edge boundary). Merge-by-distance mengelas dari 1.174.209 menjadi sekitar 694.000 verts, membawa rasio boundary ke 0,0 (terhubung penuh). Ini secara eksplisit dicatat sebagai langkah yang tidak pernah dilakukan pada build asli (yang rusak) Giant Trevally β gerbang konektivitas (memblokir decimation di atas 15% boundary) diperkenalkan mulai dari ikan ini seterusnya. Didesimasi (collapse) dari 1.387.206 menjadi 28.000 tris (batas atas LOD0), tetap terhubung (boundary 0,007 β cuma di bukaan mulut/insang, masih dapat diterima).
Bug orientasi ditemukan dan diperbaiki: scan-nya punya rotasi kusut/belum diterapkan (lokal β dunia), yang menyebabkan percobaan rig awal duduk miring diagonal. Diperbaiki dengan penjajaran sumbu utama PCA (panjangβ+Y, tinggiβ+Z, lebarβ+X, kepala di origin), lalu dibalik 180Β° pada sumbu Y (mesh + tulang bersamaan, ikatan bobot tetap terjaga) supaya punggung gelap menghadap +Z. Diskalakan ulang ke 2,0 m.
Rig-nya armature standar 10-tulang + Jaw. Auto-weight bone-heat menghasilkan grup kosong (kegagalan yang konsisten di seluruh proyek ini) β dipakai bobot berbasis zona (blend rantai tulang belakang yang halus + sirip yang meruncing dari akar) sebagai gantinya, dengan penempatan tulang terdeteksi otomatis dari garis tengah + kelompok sirip.
4 state animasi lewat gelombang merambat kepala-ke-ekor (thunniform): Cruise 90 frame, Bite 30
frame (+rahang), Caught 90 frame, Preview 60 frame. Diverifikasi tidak sobek dengan rangkaian
render ortografik pada puncak amplitudo. 3 tekstur BaseColor photoscan diperkecil dari 4K ke 2K
(GLB turun dari 28 MB jadi 4,2 MB). Diekspor 4 GLB (~4,2 MB) + 4 USDZ (~1,9 MB), Y-up,
ACTIVE_ACTIONS; validasi impor ulang mengonfirmasi mesh + 3 material bertekstur + 33
channel animasi + 11 joint skin utuh.
Keterbatasan yang diketahui (didokumentasikan, tidak diperbaiki): karena ini scan ikan mati, rest pose-nya punya badan yang sedikit kendur dan mulut sedikit terbuka yang harus "dilewati" oleh animasi (rahang menutup saat idle); sirip masih menyisakan ketidakrataan bekas photoscan di tepinya.
Bug normal ekspor Preview (CP43): punya satu pulau mesh utama dengan data
has_custom_normals basi yang menyebabkan tingkat face terbalik 12,19%.
Sudah diperbaiki β bersihkan + hitung ulang menurunkannya jadi 0,64%, satu dari
hanya 2 spesies (bersama Bluefin) yang tuntas terselesaikan pada pass itu.
CP49: menerima rollout animasi Caught "ngamuk" baru β hasil bersih di percobaan pertama, dan di sinilah bug arah-referensi tulang kepala tim animasi sebenarnya tertangkap (tulang Head Yellowfin berada di posisi Y minimum, berbeda dari Bluefin yang berada di Y maksimum β synthesizer sebelumnya salah mengasumsikan konvensi yang konsisten di semua rig).
Status saat ini: keempat state terverifikasi ada di disk sebagai pasangan
.glb+.usdz. Selesai dan sudah dirilis; normal mesh Preview dikonfirmasi
sudah diperbaiki (CP43); Caught dianimasikan ulang 2026-07-21 (CP49), hasil bersih, tidak ada
cacat tersisa yang diketahui.
Kewajiban lisensi/atribusi: CC0 Public Domain (ffish.asia/floraZia.com) β tidak wajib atribusi.
8. Skipjack Tuna (roster inti)
Identitas spesies: nama umum Skipjack Tuna ("Cakalang" dalam bahasa Indonesia), nama ilmiah Katsuwonus pelamis. Taksonomi: Scombriformes β Scombridae β Katsuwonus. Ciri pengenal: badan kekar, fusiform, bulat β lebih kecil dan gempal dibanding yellowfin; punggung biru keunguan gelap sampai hitam, sisi bawah dan perut putih keperakan; ciri khas utama: 4β6 garis gelap tebal memanjang di sisi bawah tubuh β unik di antara tuna (kebanyakan tuna lain punya garis vertikal atau tidak bergaris sama sekali), terlihat jelas di tekstur hasil scan; tidak ada warna kuning mencolok, finlet berwarna suram. Panjang maksimum sekitar 110 cm FL, umumnya sekitar 80 cm FL. Salah satu perikanan tuna terbesar Indonesia (diolah kaleng/diasap sebagai "cakalang fufu"). Perenang thunniform berkecepatan tinggi, profil renang sama seperti Yellowfin β badan kaku, digerakkan ekor, lekukan minimal.
Sumber model: Sketchfab, kreator ffish.asia/floraZia.com, UID
9431157b2fce4ea9a72d9cfe3ce37a6d ("CC0 γ«γγͺ Skipjack Tuna"). Lisensi CC0
Public Domain β tidak wajib atribusi. Hanya satu model dengan spesies yang benar muncul
lewat semua kata kunci pencarian ("skipjack tuna", "katsuwonus", "bonito", "cakalang") β model
kapal selam USS Skipjack adalah hasil pencarian utama lainnya (bukan ikan, dibuang). Skor 74/100
β sumber keluarga ffishAsia tepercaya yang sama dengan Trevally dan Yellowfin, scan spesimen
sungguhan dengan garis-garis perut diagnostik yang utuh.
Riwayat pembuatan: pipeline weld-first standar (yang sudah terbukti pada rebuild Fish05/Fish07): tile digabung, tile kartu warna dihapus. Pengelasan: rasio boundary 0,318 β 0,0, verts 1,26 juta β 618 ribu. Decimate: COLLAPSE dari 1.260.666 menjadi 28.000 tris, tetap terhubung (boundary 0,003). Orientasi/skala: penjajaran PCA (panjang +Y, punggung gelap +Z, tegak β tidak perlu dibalik); diskalakan ulang ke 0,9 m.
Rig-nya standar 10-tulang + Jaw, penempatan terdeteksi otomatis berdasar anatomi, bobot berbasis zona (semua vertex tercakup). 4 state animasi (Cruise 90 frame, Bite 30 frame + rahang, Caught 90 frame, Preview 60 frame), gelombang merambat thunniform; diverifikasi tidak sobek pada puncak meronta di Caught. Tekstur diperkecil ke 2K; diekspor 4 GLB (~4,1 MB) + 4 USDZ (~1,9 MB).
Keterbatasan yang diketahui (didokumentasikan, tidak diperbaiki): scan ikan mati, rest pose sedikit kendur; sirip masih menyisakan ketidakrataan bekas photoscan di tepinya β sama kelasnya dengan keterbatasan Yellowfin.
Cacat ekspor Preview (CP43/CP47) β kontaminasi terparah dari semua spesies yang diperiksa:
348 pulau debris dan 2.923 edge non-manifold (2.923 di antaranya "overdense",
artinya dipakai bersama oleh 3+ face). Percobaan perbaikan pertama (bersihkan+hitung ulang normal)
justru membuat keadaan lebih buruk (1,83%β10,30% terbalik) dan dibatalkan tanpa
pernah menyentuh file sungguhan. CP47 (2026-07-21) memperbaikinya dengan benar:
pertama dicek dulu apakah ada fragmentasi skala-besar gaya Trevally (tidak ditemukan β panjang edge
maksimum cuma 4,8Γ median, hanya 2 pulau mesh, satu badan sungguhan + satu segitiga debris nyasar)
dan dikonfirmasi lewat render bertekstur asli bahwa bentuknya terlihat bersih dan anatominya benar
(tidak seperti siluet Trevally yang jelas sobek) sebelum melanjutkan. Segitiga debris tunggal
dihapus, lalu select_interior_faces() dijalankan sampai konvergen β menghapus
3.180 face interior (11,4% dari mesh) hanya di pass pertama saja. Hasil akhir: edge
non-2-manifold turun dari 3.194 menjadi 798 (semuanya di kategori "sambungan 4-face" yang lebih
ringan). Diverifikasi dengan tes 5-sudut material-datar/latar-magenta-terang/backface-culling β
solid penuh di setiap sudut, belajar dari kejadian alarm-palsu sebelumnya pada
Trevally (CP46) untuk tidak percaya pada render satu sudut saja. Laporan pengguna soal "tekstur
kosong/putih" di area kepala/hidung diselidiki dan ternyata alarm-palsu akibat pencahayaan
viewport, bukan cacat sungguhan. Diekspor dan dikonfirmasi lewat usdchecker
(berhasil/Success) dan doubleSided=1.
CP49: menerima animasi Caught "ngamuk" baru β hasil bersih, memakai gain yang sama
persis dengan Yellowfin karena Skipjack berbagi data animasi Caught sumber yang
identik dengan Yellowfin (jumlah t_peak/energi/fcurve persis sama β
mengonfirmasi kedua spesies ini dibangun dari template animasi yang disalin).
Status saat ini: keempat state terverifikasi ada di disk sebagai pasangan
.glb+.usdz. Selesai dan sudah dirilis. Mesh Preview sudah dibersihkan dan
dikonfirmasi solid secara visual (CP47) β tingkat keyakinan yang sama dengan Yellowfin/Bluefin,
walau belum dikonfirmasi langsung di perangkat sungguhan (baru diverifikasi di
renderer EEVEE Blender sendiri, sesuai catatan keterbatasan jujur dari sesi tersebut). Caught
dianimasikan ulang 2026-07-21. Masih ada isu yang sama dengan Trevally/Grouper/Yellowfin: material
USDZ hasil ekspor kosong untuk kelas spesies "pola atlas" ini (bug shader-drop kelas CP38/CP43),
sudah disiasati dari sisi aplikasi.
Kewajiban lisensi/atribusi: CC0 Public Domain (ffish.asia/floraZia.com) β tidak wajib atribusi.
9. Grouper (roster inti, via spesies pengganti yang mewakili kategori umum)
Identitas spesies: nama umum Yellow Grouper (dipakai sebagai pengganti "Kerapu," kategori pasar ikan kerapu Indonesia secara umum), nama ilmiah Epinephelus awoara. Taksonomi: Perciformes β Serranidae (kerapu & ikan bass laut) β Epinephelus. Ciri pengenal: badan gempal, dalam, kepala besar dan mulut lebar (predator penerkam/ambush predator); badan coklat-oranye berbintik-bintik dengan bintik kuning/oranye padat dan beberapa garis vertikal gelap samar; perut pucat; sirip punggung berduri panjang; ekor bulat (tidak bercabang). Panjang maksimum sekitar 60 cm. Ikan pangan/akuakultur unggulan Indonesia dan tangkapan terumbu yang ikonik. Perilaku berenangnya secara eksplisit berbeda dari semua tuna di roster: BUKAN thunniform β predator penerkam bentik lambat di terumbu yang memakai lekukan badan amplitudo-rendah lembut + manuver sirip dada saat berenang santai, dengan terkaman suction-feeding mulut lebar mendadak saat menyerang.
Sumber model: Sketchfab, kreator ffish.asia/floraZia.com, UID
17f6e5eb3efa4c969d3857881b35a62f ("CC0 γ’γͺγγΏ Yellow Grouper"). Lisensi CC0
Public Domain β tidak wajib atribusi. Dipilih dibanding 3 model kerapu CC0 ffishAsia lain
yang tersedia (E. septemfasciatus "Bar Cod", E. akaara "Hong Kong Grouper",
Cephalopholis igarashiensis "Neptune Grouper" β semuanya 1,2 jutaβ1,55 juta tris) khusus
karena Yellow Grouper punya jumlah segitiga mentah paling rendah dari kelompok itu
(933.751), berarti risiko decimation paling kecil; keempatnya adalah keluarga sumber tepercaya
yang sama. Dua kandidat lisensi-belum-terverifikasi/bergaya kartun ditolak langsung. Skor 75/100 β
tertinggi dari semua ikan roster inti di Asset_Candidates.
Riwayat pembuatan: pipeline weld-first standar (yang sudah dibangun lewat rebuild Fish05/Fish07/Fish08), dengan animasi yang disetel khusus untuk ikan terumbu sebagai perbedaan utama dari spesies tuna: tile digabung, tile kartu warna dihapus. Pengelasan: rasio boundary 0,381 β 0,0, verts 934 ribu β 465 ribu. Decimate: COLLAPSE dari 933.751 menjadi 28.000 tris, tetap terhubung (boundary 0,003). Orientasi/skala: penjajaran PCA (panjang +Y, punggung gelap +Z, tegak β tidak perlu dibalik); diskalakan ulang ke 0,6 m β paling kecil dari 10 ikan inti.
Rig-nya standar 10-tulang + Jaw, terdeteksi otomatis berdasar anatomi, bobot zona (rahang dibobot secara eksplisit untuk gerakan terkaman suction-feeding). 4 state animasi, disetel dengan amplitudo lebih rendah dan tempo lebih lambat dibanding tuna (karena Grouper bukan thunniform) ditambah bukaan rahang menghisap besar pada state Bite: Cruise 90 frame, Bite 30 frame, Caught 90 frame, Preview 60 frame. Diverifikasi tidak sobek (puncak meronta di Caught) dan dikonfirmasi bukaan rahangnya terbaca benar pada Bite. Tekstur diperkecil ke 2K; diekspor 4 GLB (~3,8 MB) + 4 USDZ (~2,0 MB); keempat GLB per-state diverifikasi benar-benar berbeda lewat checksum yang berbeda (langkah verifikasi langsung yang khusus disebutkan untuk spesies ini).
Cacat ekspor Preview (CP43/CP48): 249 pulau debris + 1.426 edge non-manifold
overdense; percobaan perbaikan pertama (bersihkan+hitung ulang normal, diuji hanya di salinan
scratch, tidak pernah ditulis ke file sungguhan) justru memperburuk keadaan (1,73%β5,52%) dan
memang tidak pernah diterapkan ke file yang dirilis. CP48 (2026-07-21) memperbaikinya
dengan benar: dicek dulu fragmentasi gaya Trevally (tidak ada β panjang edge maksimum
4,17Γ median; 321 pulau tapi pulau terbesar mencakup 98,7% dari mesh) dan dikonfirmasi lewat render
bertekstur asli bahwa bentuknya bersih (pola belang benar, duri punggung utuh, tidak ada siluet
bergerigi). Semua pulau terputus di bawah 20 face dihapus (364 face di sekitar 320 pulau debris
kecil) dalam satu pass, lalu select_interior_faces() dijalankan sampai konvergen
(1.023 face interior dihapus). Hasil akhir: edge non-2-manifold dari 2.511 menjadi 479 (semuanya
di kategori 4-face yang lebih ringan). Diverifikasi bersih dengan tes 5-sudut flat-material/magenta
yang sama seperti Skipjack. Diekspor dan dikonfirmasi lewat usdchecker
(berhasil/Success) dan doubleSided=1.
CP49: menerima animasi Caught "ngamuk" baru β dideskripsikan sebagai hasil
paling dramatis dari semua 7 spesies yang dianimasikan ulang (rahang terbuka lebar,
duri punggung mekar penuh), memang sesuai untuk predator penerkam terumbu, bukan kebetulan dari
metode generik. Grouper punya data animasi Caught sumber sendiri yang berbeda
(t_peak=16 berbanding 30 dan energi berbeda dari template tuna), tidak seperti
Skipjack/Yellowfin yang berbagi template hasil salinan.
Status saat ini: keempat state terverifikasi ada di disk sebagai pasangan
.glb+.usdz. Selesai dan sudah dirilis. Mesh Preview sudah dibersihkan dan
dikonfirmasi solid secara visual (CP48) β ini menuntaskan upaya pembersihan cacat Preview 3 spesies
yang dimulai sejak CP43 (Bluefin/Yellowfin diperbaiki langsung di CP43; Skipjack/Grouper
dibersihkan dan dikonfirmasi di CP47/CP48; hanya Trevally yang masih rusak). Belum dikonfirmasi
langsung di perangkat sungguhan. Caught dianimasikan ulang 2026-07-21 dengan hasil paling dramatis
dari seluruh rollout. Berbagi bug material USDZ kosong "pola atlas" yang sama dengan
Trevally/Skipjack/Yellowfin (solusi sementara sisi aplikasi sudah ada, belum diperbaiki di sumbernya).
Kewajiban lisensi/atribusi: CC0 Public Domain (ffish.asia/floraZia.com) β tidak wajib atribusi.
10. Sailfish (roster inti, mengisi slot "billfish/Marlin kedua")
Identitas spesies: nama umum Sailfish ("Ikan Layaran" dalam bahasa Indonesia), nama ilmiah Istiophorus platypterus (Sailfish Indo-Pasifik). Taksonomi: Istiophoriformes β Istiophoridae (ikan billfish β famili yang sama dengan Marlin). Ciri pengenal: badan memanjang, ramping; moncong panjang seperti tombak (rostrum); "layar" sirip punggung raksasa yang bisa ditarik masuk (ciri utamanya); punggung biru gelap/hitam, perut putih keperakan, garis-garis vertikal biru mengkilap; layarnya sendiri berwarna biru gelap-hitam, sering berbintik. Panjang maksimum sekitar 3,5 m. Salah satu tangkapan ikan besar olahraga paling ikonik di Indonesia.
Sumber model: spesies ini sengaja dicari untuk mengisi slot billfish kedua setelah pencarian Marlin asli terus-menerus gagal (lihat bagian Fish03) β pencarian segar mengonfirmasi tidak ada model Marlin sejati (Makaira) berlisensi gratis/CC yang benar-benar berupa game asset di mana pun, yang ada hanya scan fosil paleontologi (100 ribuβ323 ribu tris, secara eksplisit ditolak sebagai "bukan ikan untuk game") dan hasil pencarian salah sasaran merek senjata api ("Marlin" juga merek senapan).
Model yang dipilih: "Sailfish" oleh Mateus Schwaab, UID Sketchfab
5c7b14e21fba4eefad77c84edccfc9d2. Lisensi CC-BY (wajib atribusi).
4.677 tris, sudah punya rig (17 tulang) dan sudah beranimasi dengan 3 klip (Swim,
SwimFast, Bite), tekstur PBR lengkap (baseColor/metallicRoughness/normal). Alternatif yang
ditolak: "Makhaira" (bentuk marlin bergaya, CC-BY, tapi belum ada rig, 5.382 tris); Swordfish
(CC-BY, 34.940 tris, melebihi LOD0, belum ada rig). Skor 89/100 β skor tertinggi dari
seluruh kandidat di seluruh proyek β khususnya karena ini kasus langka model siap-pakai
game yang rendah-poli, bersih, CC-BY, dan sudah dirig dan dianimasikan sebelumnya,
sehingga menghindari hampir seluruh pipeline weld/decimate/rig/animate yang dibutuhkan ikan-ikan
bersumber photoscan.
Substitusi spesies ini disetujui secara eksplisit oleh pengguna pada 2026-07-16 (didokumentasikan langsung di Scientific_Validation.md dan Source_Log.md) β Marlin (Fish03) sendiri juga baru berhasil dibuka jalannya di hari yang sama lewat temuan CC-BY-nya sendiri (lihat Fish03), jadi Sailfish ini bukan pengganti Marlin, melainkan spesies tambahan tersendiri yang melengkapi kehadiran billfish di roster.
Riwayat pembuatan: ini bukan pipeline photoscan β karena sumbernya sudah berupa model game bersih yang sudah dirig, hanya butuh pembersihan + retargeting, tanpa perlu weld/decimate/rig-dari-nol:
- Mesh bersih 4,7 ribu tris diimpor (tidak perlu weld/decimate).
- Model mentahnya berukuran sekitar 967 unit Blender dengan panjang menghadap sumbu Z dan layar menghadap sumbu Y. Diskalakan ulang ke 2,72 m dan diorientasikan ulang ke konvensi proyek (panjang +Y, layar/punggung +Z, tegak) lewat transform objek armature (mesh mengikuti sebagai child), dipanggang saat ekspor.
- Pemetaan state memakai ulang 3 animasi bawaan model alih-alih membuat animasi
baru: Cruise β
Swim(60 frame); Bite βBite(40 frame); Caught βSwimFast(40 frame β renang cepat gelisah dipakai ulang supaya terbaca sebagai meronta); Preview βSwimdiperlambat kecepatannya sekitar 0,5Γ (120 frame, sesuai spesifikasi proyek untuk state Preview berupa turntable idle lambat). - Diekspor 4 GLB (~1,0 MB) + 4 USDZ (~1,1 MB); keempat GLB diverifikasi benar-benar berbeda lewat checksum, masing-masing membawa animasinya sendiri (51 channel) + skin + tekstur baseColor.
Animasi ulang Caught CP49 (2026-07-21): sama seperti Marlin, file kerja
.blend Sailfish hanya menyisakan action Cruise β Bite/Caught/Preview
hilang dari file kerja (hanya pernah ada di file yang sudah diekspor). Dipulihkan dengan mengimpor
ulang Caught.glb yang sudah dirilis, mengonversi keyframe quaternion ke Euler XYZ, dan
membangun ulang di atasnya. Konvensi penamaan tulang Sailfish yang sama sekali berbeda
(Body1_01..Body5_08, CaudalFin_09, Sail1_010..Sail4_013 β
tidak ada penamaan "Spine"/"Fin" seperti rig lain) mengharuskan daftar kata kunci klasifikasi
animasi diperluas untuk mengenali Body (rantai primer) dan Sail
(kelas sirip sekunder) sebagai kata kunci baru. Hasilnya dilaporkan sebagai yang
paling bagus dari semua 7 spesies yang dianimasikan ulang β moncong, ekor, dan layar
semuanya terbaca bersih tanpa sobekan. Juga mengalami bug "action-slot tidak terikat" yang sama
seperti dijelaskan di bagian Marlin (diperbaiki dengan cara yang sama).
Titik lemah yang tercatat di memori proyek (tidak dinyatakan langsung di dokumen yang
dibaca di sini): catatan sesi pengguna sendiri mendeskripsikan state Caught Sailfish
sebagai "lemah" sebelum animasi ulang CP49 β rollout CP49 di atas kemungkinan besar adalah
perbaikannya, tapi ini tidak bisa diverifikasi secara independen terhadap render sebelum-CP49 karena
hanya kondisi .blend/ekspor saat ini yang diperiksa.
Status saat ini: keempat state terverifikasi ada di disk sebagai pasangan
.glb+.usdz. Selesai dan sudah dirilis. Caught dianimasikan ulang
2026-07-21 dengan hasil paling baik dari rollout 7 spesies. Tidak ada cacat mesh/topologi
tersisa yang didokumentasikan untuk spesies ini (berbeda dari Trevally/Skipjack/Grouper/Yellowfin,
Sailfish tidak ikut diselidiki dalam investigasi cacat ekspor Preview berbasis photoscan karena
memang bukan aset photoscan).
Kewajiban lisensi/atribusi: "Sailfish" oleh Mateus Schwaab, lisensi CC-BY, via Sketchfab (https://sketchfab.com/3d-models/5c7b14e21fba4eefad77c84edccfc9d2). Kredit ini WAJIB muncul di layar kredit game / atribusi aset di mana pun model ini dipakai.
Catatan lintas-spesies (konteks umum untuk buku ini, tidak spesifik ke satu ikan)
Pola pipeline build yang berulang di 8 ikan inti bersumber photoscan (Trevally, Bluefin, Yellowfin, Skipjack, Grouper, dan agak berbeda pada Catfish): photoscan mentah dari Sketchfab berupa triangle-soup dengan rasio boundary-edge tinggi. Aturan proyek yang didapat lewat pengalaman pahit, dibuat setelah build pertama Giant Trevally hancur: selalu lakukan weld (merge-by-distance) sebelum decimate, dan pastikan rasio boundary-edge tetap di bawah 15% setelah decimate. Setiap ikan yang dibangun atau dibangun ulang setelah perbaikan Trevally di CP30 secara eksplisit mengikuti urutan ini dan melaporkan rasio boundary sebelum/sesudah sebagai langkah verifikasi.
Pola rigging yang berulang: algoritma pembobotan otomatis "Bone Heat" Blender gagal menemukan solusi pada hampir setiap ikan di proyek ini. Solusi cadangan standar yang dipakai di mana-mana adalah pembobotan manual berbasis zona / inverse-distance dari posisi rest tiap tulang, dengan hasil dicek untuk memastikan 0 vertex tanpa bobot dan deformasi tidak sobek pada pose uji.
Rollout animasi Caught "ngamuk" (CP44/45/49, 2026-07-20/21): Mekong Catfish
mendapat animasi Caught baru yang lebih ganas dengan 3 fase (merontaβpuncak lengkung
koherenβmereda) lebih dulu, atas permintaan tim aplikasi terkait cutscene "tangkapan" slow-motion.
Ini kemudian digeneralisasi jadi teknik yang bisa dipakai ulang lintas-rig (mengklasifikasikan
otomatis tulang tiap rig ke kategori primer/sirip/wajah/lainnya berdasar kecocokan
substring-nama) dan diluncurkan ke 6 spesies lengkap lainnya (Bluefin, Yellowfin, Skipjack,
Trevally, Grouper, Marlin, Sailfish) β Clownfish/Blue Tang dikecualikan karena di luar roster
inti. Dua bug halus ditemukan dan diperbaiki baru di tengah rollout ini (bug rotasi gabungan
3-sumbu pada Marlin, dan bug pengikatan ulang action-slot Blender 5.x pada Marlin dan Sailfish) β
patut ditandai di buku ini sebagai contoh peringatan tentang bug yang tetap tersembunyi selama 5
spesies sebelum akhirnya terungkap oleh rig ke-6/ke-7. Skrip animasi yang bisa dipakai ulang
(ngamuk_lib2.py) hanya ada di scratchpad sesi, tidak pernah di-commit ke repo.
Investigasi cacat ekspor Preview (CP43/46/47/48, 2026-07-20/21): sesi dari sisi
aplikasi menemukan cacat normal/orientasi/tekstur pada ekspor Preview/ milik 5 spesies
(Bluefin, Yellowfin, Skipjack, Grouper, Giant Trevally), memakai Mekong Catfish sebagai referensi
yang sudah diketahui baik. Hasilnya: Bluefin dan Yellowfin diperbaiki bersih dan langsung (CP43);
Skipjack dan Grouper butuh pass pembersihan interior-face/debris yang lebih berat dan berhasil
diperbaiki serta dikonfirmasi solid secara visual (CP47/CP48); hanya Giant Trevally yang
tetap benar-benar rusak dan secara eksplisit dilewati atas instruksi pengguna, butuh
rebuild total, bukan sekadar tambalan. Tidak ada satu pun dari perbaikan ini yang sudah dikonfirmasi
di perangkat sungguhan β semua verifikasi dilakukan hanya di dalam renderer Blender sendiri.
Bug shader terpisah yang belum diperbaiki, memengaruhi material USDZ hasil ekspor Trevally,
Skipjack, Grouper, dan Yellowfin secara khusus: keempat spesies ini memakai pola material
multi-material "UV-atlas", dan material .usdz hasil ekspornya keluar kosong
(def Material tanpa jaringan shader) β kelas bug material-drop exporter Blender-USD
yang sama yang didokumentasikan di CLAUDE.md root Β§7 (CP38). Sisi aplikasi sudah
punya solusi sementara (membangun ulang material dari tekstur bawaan .glb
saudaranya) tapi bug ekspor .usdz yang mendasarinya sendiri belum diperbaiki di repo
ini.