Kafayı yiyecektim! Şaka gibi ama, iki günümü aldı. "Şu karakteri oyuna sokalım, basit iş" diye düşünmüştüm. Meğerse rig ve skin weighting denen şey, tam bir sanatçılık ve sabır işiymiş. StackOverflow'da bile doğru düzgün Godot örneği bulamadım, söyleyeyim.
Blender'dan Çıkan Çılgınlık
Karakter modelimi Blender'da hazırladım, basit bir iskelet (armature) ekledim. Her şey yolunda gibiydi. Dosyayı .gltf olarak export edip Godot'a sürükledim. Ve... bomboş bir sahne. Model duruyor ama iskelet yok! Meğerse export ayarlarında "Armature" seçeneğini işaretlemeyi unutmuşum. İlk ders: Export ayarlarına dikkat!
İskeleti Görünce Sevindim Ama...
Export'u düzelttim, iskelet de geldi. Skeleton3D node'u görününce sevindim. "Tamam, artık hareket ettirebilirim" dedim. AnimationPlayer ekleyip bir kemik (bone) oynatmak istedim. Karakterin bacağı, sanki bir plastik örtü gibi, kemikten bağımsız hareket etti! O an anladım: Skin weighting yapmamışım. Yani, her bir verteksin (noktanın) hangi kemiğe ne kadar etkileneceğini tanımlamamışım.
Weight Paint ile Cinnet Geçirmek
Blender'a geri döndüm, Weight Paint moduna geçtim. Amacım, diz bölgesindeki noktaların hem uyluk kemiğinden hem de baldır kemiğinden doğru oranda etkilenmesini sağlamak. Şaka gibi, bir noktayı fazla boyarsan bacak bükülürken model yırtılıyor gibi görünüyor. Bir noktayı az boyarsan, o bölge "rijit" kalıyor, kemikten kopuk hareket ediyor. Bu işi profesyonel yapan 3D sanatçılarına saygım katlandı. Onlar bu işi saatlerce, titizlikle yapıyor.
Godot'daki Son Dokunuş ve Sonuç
Nihayet doğru ağırlıkları (weights) atayıp, Godot'da Skeleton3D üzerinden poseları kaydedince karakterim kusursuz hareket etmeye başladı. O anki rahatlama duygusu tarif edilemez. Basit bir "rig ekleme" işlemi, bana yazılımın sadece kod olmadığını, disiplinler arası bir dans olduğunu hatırlattı.
Siz de Godot ile 3D karakter rig'lerken benzer çılgınlıklar yaşadınız mı? Blender'da weight paint için pratik bir yönteminiz var mı? Yoksa siz de benim gibi "Keşke bir sanatçı ile çalışsam mı?" diyorsunuz? Yorumlara yazın, dertleşelim!
Karakter modelimi Blender'da hazırladım, basit bir iskelet (armature) ekledim. Her şey yolunda gibiydi. Dosyayı .gltf olarak export edip Godot'a sürükledim. Ve... bomboş bir sahne. Model duruyor ama iskelet yok! Meğerse export ayarlarında "Armature" seçeneğini işaretlemeyi unutmuşum. İlk ders: Export ayarlarına dikkat!
Kod:
# Eksik Export -> Hayalet Model
Export'u düzelttim, iskelet de geldi. Skeleton3D node'u görününce sevindim. "Tamam, artık hareket ettirebilirim" dedim. AnimationPlayer ekleyip bir kemik (bone) oynatmak istedim. Karakterin bacağı, sanki bir plastik örtü gibi, kemikten bağımsız hareket etti! O an anladım: Skin weighting yapmamışım. Yani, her bir verteksin (noktanın) hangi kemiğe ne kadar etkileneceğini tanımlamamışım.
Blender'a geri döndüm, Weight Paint moduna geçtim. Amacım, diz bölgesindeki noktaların hem uyluk kemiğinden hem de baldır kemiğinden doğru oranda etkilenmesini sağlamak. Şaka gibi, bir noktayı fazla boyarsan bacak bükülürken model yırtılıyor gibi görünüyor. Bir noktayı az boyarsan, o bölge "rijit" kalıyor, kemikten kopuk hareket ediyor. Bu işi profesyonel yapan 3D sanatçılarına saygım katlandı. Onlar bu işi saatlerce, titizlikle yapıyor.
Python:
# Temel mantık: vertex_weight = (bone1_influence, bone2_influence...)
Nihayet doğru ağırlıkları (weights) atayıp, Godot'da Skeleton3D üzerinden poseları kaydedince karakterim kusursuz hareket etmeye başladı. O anki rahatlama duygusu tarif edilemez. Basit bir "rig ekleme" işlemi, bana yazılımın sadece kod olmadığını, disiplinler arası bir dans olduğunu hatırlattı.
Siz de Godot ile 3D karakter rig'lerken benzer çılgınlıklar yaşadınız mı? Blender'da weight paint için pratik bir yönteminiz var mı? Yoksa siz de benim gibi "Keşke bir sanatçı ile çalışsam mı?" diyorsunuz? Yorumlara yazın, dertleşelim!