Unreal Tarafı — Araçlar, Warping, Saha Deneyimi
Animasyon R-005 Çizen: Alparslan TamamUE 5.8 Animation Data Modifier'ları, çalışma zamanı düzeltme node'ları (Stride / Orientation / Slope Warping, Foot Placement), Motion Matching, Control Rig post-process, teşhis araçları, locomotion'ın neden kötü hissettirdiğine dair saha deneyimi ve Claude'un animasyondaki yeri.
Animation Data Modifiers (UE 5.8)
Konum: Engine/Plugins/Animation/AnimationModifierLibrary/.../Public/
| Modifier | Ne yapar |
|---|---|
| CopyBonesModifier | Bir kemiğin transformunu diğerine kopyalar |
| CurveFromSyncMarkersModifier | Deneysel — sync marker’lardan float curve üretir |
| EncodeRootBoneModifier / ZeroOutRootBoneModifier | Root motion’ı 1. kareye göreli yapar |
| ReOrientRootBoneModifier | Mesh dünya pozunu koruyarak root’u döndürür |
| FootstepAnimEventsModifier | Ayak/zemin kesişiminden otomatik footstep notify |
| MirrorModifier | Mirror Data Table ile aynalama |
| MotionExtractorModifier | Bir kemiğin hareketini eğriye bake eder |
Hiçbiri poz kalitesini yeniden şekillendirmiyor — retiming, yumuşatma veya key azaltma/ekleme yapan bir modifier YOK. Bizim işimize yarayabilecek ikisi: MotionExtractorModifier (yeniden export etmeden hız/ayak-kilidi eğrisi üretir) ve FootstepAnimEventsModifier (notify yerleştirmeyi otomatikleştirir).
Özel modifier yazılabilir: temel sınıf Blueprintable, OnApply/OnRevert BlueprintNativeEvent. Python’a açık bir giriş noktası motor kaynağında bulunamadı — Python ile modifier yazmak doğrulanmış bir yol değil. (engine source)
Çalışma zamanı düzeltme node’ları
| Node | Neyi gizler | Ne gerektirir |
|---|---|---|
| Stride Warping | Adım boyu ile gerçek hız uyuşmazlığı | ROOT MOTION ŞART — header’da açıkça yazıyor |
| Orientation Warping | Gövde/hareket yönü ayrışması | ROOT MOTION ŞART; yön zaten uyuşuyorsa hiçbir şey yapmaz |
| Slope Warping | Eğimde ayak açısı | Per-foot IK/FK ayak kemiği tanımı |
| Foot Placement | Ayak kilitleme/çözme | IK ayak zinciri; eğri opsiyonel |
| Offset Root Bone | Hızlı duruş/dönüşte ışınlanma | Root motion attribute veya pin |
| Inertialization | Klipler arası geçiş sıçraması | Kaynak klipten bir şey istemiyor |
| Power IK | — | UE 5.8’de YOK; üçüncü parti, UE5’te çalışmadığı bildiriliyor |
Motion Matching / Pose Search
PoseSearch eklentisi varsayılan kapalı. Epic dokümanı “herhangi bir miktarda animasyon varlığıyla” çalıştığını söylüyor, tasarım gereği büyük veritabanı şartı yok. Ama Epic’in kendi referansı olan Game Animation Sample 500+ klip / ~10 GB ile geliyor. Birkaç klip için teknik olarak kullanılabilir ama işlevsel olarak “en az kötü klibi seç”e dönüşür. Bizim sorunumuz (belirli bir poz kalitesini düzeltmek) için orantısız makine. (Epic docs + inference)
Control Rig post-process
FAnimNode_ControlRig herhangi bir AnimGraph’a, USkeletalMesh::PostProcessAnimBlueprint dahil, yerleştirilebiliyor (LOD eşiğiyle kapatılabilir). Prosedürel bir düzeltme (kalça salınımı sönümleme, kol yayı sınırlama) için doğru çalışma zamanı yeri burası — tüm node’lardan sonra, mesh genelinde çalışıyor. (engine source)
Teşhis araçları
- Rewind Debugger / Animation Insights — kayıt alıp kare kare sarma.
- ShowDebug ANIMATION —
UAnimInstance::DisplayDebug, ekranda aktif montage/state machine/curve dökümü. - Pose Watch — belirli bir AnimGraph node’unun pozunu viewport’ta izole eder; bir warping node’unu suçlamak için kullanışlı.
- Curve Editor — Foot Placement ve distance matching’in tükettiği eğrileri DCC’ye dönmeden incelemek/elle yazmak için.
Saha deneyimi — locomotion neden kötü hissettiriyor
Sıklık sırasıyla bildirilen sebepler:
| # | Sebep | Kaynak |
|---|---|---|
| 1 | Oynatma hızı / adım uyuşmazlığı → ayak kayması. IK ayağı sadece dikeyde sabitler; yatay patinaj oynatma hızının gerçek hıza uymamasından gelir. | dev blog |
| 2 | Ağırlıksız start/stop — eksik klipten değil, destek ayağına göre doğru duruş pozunun seçilmemesinden ve “baskı altında impulse” şeklinin olmamasından. | dev blog |
| 3 | Tepkisiz dur→başla geçişi — Guerrilla (Horizon Zero Dawn) bunu kısa yerinde “shuffle” ve küçük “step” animasyonlarıyla çözdü; seçim animasyon event’leriyle, yani kod+animasyon sözleşmesiyle. | GDC 2017 |
| 4 | Root motion ile kod tabanlı hareketin ayrışması. | dev blog |
| 5 | Blend süreleri, ivme eğrileri, input gecikmesi — çok tartışılıyor ama birinci elden “şu sayı yanlıştı” hesabı az. | düşük güven |
Kod mu animasyon mu uyum sağlar
Tek bir uzlaşı çıkmadı, ama birinci elden kaynaklardaki desen: animasyon, kodun belirlediği hız/mesafe sözleşmesine uyum sağlar; animasyon ikincil hareketlerle katkı verir. Hem Guerrilla’nın sunumu hem Epic’in stride warping dokümanı, warping’i “hareket hızlarını animasyona uydurma ihtiyacını azaltan” şey olarak çerçeveliyor. Kanıtlanmış evrensel kural değil, bulunan hesapların gösterdiği. (GDC + Epic docs, orta güven)
Warping toleransı
Tekrarlayan uyarı: oynatma hızı ve stride-warp düzeltmelerini doğal adımın %15–20’si içinde tut, yoksa poz gözle görülür şekilde geriliyor. Ölçülmüş bir eşik değil, kural-ı kaide. (dev blog, doğrulanmamış hassasiyet)
Bizim ölçümümüz: oynatma oranı 0.71–1.27, yani −%29…+%27. Bandın dışında.
Claude’un animasyondaki yeri
Gerçekten işe yaradığı yer: DCC’nin etrafındaki araç/script yazımı ve sayısal veri okuma. Blender MCP (26.6k yıldız) animasyon/rigging/keyframe aracı İÇERMİYOR — modelleme aracı. Houdini ve Maya köprüleri de aynı. İstisna Unreal: UE MCP’leri AnimSequence bilgisi, notify, sync marker ve float curve sunuyor. (github repo)
Yapamadığı: animasyonu izleyemiyor. Claude Code video dosyasını girdi olarak almıyor; video desteği isteyen GitHub issue (anthropics/claude-code#12676) hâlâ açık ve cevapsız. Uygulamada bulunan tek çözüm: kare çıkarıp zaman damgalı kontakt sayfası halinde döşemek. (github issue + blog)
“12 prensibi LLM’e checklist olarak vermek”
Fikir şu: Disney’in 12 animasyon prensibini (Thomas & Johnston, The Illusion of Life, 1981) bir denetim listesine çevirip modele “bu klibi madde madde değerlendir” demek. Araştırmada bunun gerçekten uygulandığına dair tek bir bildirilmiş örnek bulunamadı; aşağısı fikrin ne vadettiği ve nerede tıkandığı üzerine çıkarımdır, doğrulanmış pratik değil.
Neden bugünkü hâliyle çalışmaz: bir checklist ancak gözlem varsa anlam taşır ve model animasyonu izleyemiyor (yukarıdaki issue). Prensiplerin yarısı da zaten sayıya değil göze dayanır. Ayrım yapılmadan verilen liste, modelin klibi görmeden “arcs iyi, timing iyi” diye doldurduğu bir form olur.
Hangi prensip veriden okunabilir: iskelet verisi (kemik transformları, float curve’ler) elimizde olduğunda bazı maddeler ölçüme indirgenebilir, bazıları hiç.
| Prensip | Veriden | Nasıl ölçülür |
|---|---|---|
| Timing | Evet | Key aralıkları; bir eylemin kaç karede tamamlandığı |
| Slow in / slow out | Evet | Eklem hız profili — konum/açı eğrisinin türevi başta ve sonda sıfıra yaklaşıyor mu |
| Arcs | Kısmen | El/ayak ucunun 3B yörüngesi; düz çizgi mi, yay mı |
| Anticipation | Kısmen | Ana hareketten hemen önce ters yönde küçük bir hareket var mı (root’un push-off öncesi geri gitmesi gibi) |
| Follow-through / overlapping action | Kısmen | Zincir eklemleri arasındaki zaman kayması: omuz → dirsek → bilek sırayla mı duruyor |
| Squash & stretch | Zayıf | Rigid iskelette kemik uzunluğu sabittir; ancak bone scale kanalı veya morph target varsa |
| Secondary action | Zayıf | Ana hareket dışındaki kemiklerde hareket var mı — var/yok’tan öteye geçmez |
| Staging, straight-ahead / pose-to-pose, exaggeration, solid drawing, appeal | Hayır | Görsel ve estetik yargı; kare görmeden değerlendirilemez |
Uygulanabilir biçimi: liste ikiye bölünür. Ölçülebilir beş-yedi madde sayıya
çevrilip kemik ve eğri verisiyle beslenir — MotionExtractorModifier’ın ürettiği hız
eğrisi ve UE MCP’lerinin sunduğu curve okuma tam bu girdidir. Kalan maddeler ancak
zaman damgalı kontakt sayfası üzerinden karelerle sorulabilir ve orada da yargının
güvenilirliği bilinmiyor. Yani fikir, “hangi prensip hangi veriden okunur” ayrımı
yapılırsa test edilebilir bir hipoteze döner; ayrım yapılmadan verilen liste ise kanıtı
olmayan bir varsayım olarak kalır.
| Rev | Tarih | Çizen | Değişiklik |
|---|---|---|---|
| R-005 | Alparslan | İlk kayıt |