فك ضغط تنسيق الرسوم المتحركة القديم

صورة



ذات يوم شاهدت مقاطع فيديو مختلفة على YouTube تتعلق بشخصيات برنامج Vocaloid (ليس وصفًا دقيقًا تمامًا ، لكنني سأستمر في تسميته فقط vocaloids). أحد هذه الفيديوهات كان يسمى PV من لعبة Hatsune Miku: Project DIVA 2nd. وهي علاقات الأغنية من The Idolmaster ، والتي أدتها Vocaloids Megurine Luka و Kagamine Rin. كلا الشخصيتين من Crypton Future Media. بعد تصفح الإنترنت أدركت أنه لم يستطع أحد تحويل الرسوم المتحركة من هذه اللعبة؟ لكن لماذا؟ حول هذا تحت الخفض.



تستخدم اللعبة نفسها محرك Alchemy ، الذي طورته شركة Intrinsic Graphics واشتراه لاحقًا Vicarious Visions. يمكن رؤية ذلك من الملفات ذات الامتداد ".igb" (المشار إليه فيما يلي - IGB) ، بالإضافة إلى الأسطر المقابلة فيها. الملفات نفسها ثنائية. بحثت في جوجل قليلاً ، وجدت سيناريو من الرفيق. minmode لالمعروفة Noesis البرنامج في بعض الدوائر . نقوم بتشغيله ، مع وضع البرنامج النصي في المجلد ، حاول فتح ملف الرسوم المتحركة و ... نحصل على اليقطين.



صورة



كرفيق. minmode في كتابه آخر على الوسام، وهذا السيناريو لا يمكن قراءة الرسوم المتحركة ضغط من قبل بعض Enbaya. في براءات اختراع Google لم أجد سوى ما شابه ذلك . براءات الاختراع نفسها هي بالفعل 19-20 سنة ، لذلك أفترض أن خوارزمية الضغط نفسها قديمة أيضًا. والموقع نفسهتلميحات حول هذا أيضًا (متوفرة فقط عبر أرشيف الويب). بعد البحث أكثر قليلاً ، أدركت أن هذه الخوارزمية كانت جزءًا من ProGATE معين من شركة Enbaya. لكن هذا لا يعطينا أي شيء.



دعنا نعود إلى IGB. من خلال إعادة كتابة رمز IGB الذي يمكنني العثور عليه ، وكذلك استخدام نص Noesis في C # ، بدأت الصورة في الوضوح.



سأقدم أدناه جدولًا بالعناصر ، حيث تم وضعه في ملفات IGB في هذه اللعبة (آسف لكونك أخرق. لا يمكنني القيام بخلاف ذلك). سأقدم فقط العناصر التي نحتاجها



توضيح - * قائمة - مجموعة من العناصر *



igAnimationDatabase
--igSkeletonList
---igSkeleton - , , ,   
----igSkeletonBoneInfoList
-----igSkeletonBoneInfo -  
--igAnimationList
---igAnimation -  
----igAnimationBindingList
-----igAnimationBinding -   igSkeleton.      
----igAnimationTrackList
-----igAnimationTrack -   
------igEnbayaTransformSource
-------igEnbayaAnimationSource
--------igData -      Enbaya
igData -   ,     .


بهذه الطريقة تمكنت من الحصول على يدي على البيانات الأولية لمزيد من الدراسة. بمساعدة PPSSPP و Ghidra ومكوِّن إضافي لها ، بدأت في دراسة ثنائي اللعبة. لا أتذكر بالضبط كيف وجدت الوظائف الضرورية ، لكنني سأقدم وظائف محددة من EBOOT.BIN من ULJM05681 [أو NPJH50300] (في هذه الحالة ، هذا هو أول مشروع Diva الثاني ، وليس الثاني ، ما يسمى بإصدار الصفقة أو Project Diva 2nd #) :



0x08A08050 - تهيئة وظيفة إلغاء الضغط بناءً على الرأس من igData

0x08A0876C - طلب البيانات في وقت محدد (نعم. يعمل Enbaya مع الوقت وليس الإطارات).



يتم فك الشفرة نفسها ونشرها على GitLab . إنه مكتوب بلغة C. يجمع في كل من Visual Studio و GCC. يعمل في كل من x86 و x64.



لن أخوض في الخوارزمية نفسها. سيخبرك الرمز الخاص بي بشكل أفضل بالنسبة لي.



لكن باختصار ، يستخدم عنبايا دلتا لبيانات الإزاحة والرباع. يطبق الدلتا ببساطة عن طريق إضافتها / طرحها إلى / من البيانات السابقة / الحالية. تظل الترجمة كما هي ، ويتم تطبيع الرباعي لاستخدامه لاحقًا. تسمح لك الخوارزمية بالعودة بالزمن إلى الوراء دون إعادة تحميل الملف. علاوة على ذلك ، لا يعمل مع معدل الإطارات ، ولكن مع عينات في الثانية. للقيام بذلك ، يقوم بتخزين حالتين في الذاكرة - العينة السابقة والعينة التالية ، والمحرك نفسه يقحم القيمة بينهما. ومع ذلك ، نظرًا لحقيقة أن لدينا بيانات في الملف في كل مكان في شكل عدد صحيح ، يتعين علينا تقسيمها على شيء (بتعبير أدق ، ضربها ، على سبيل المثال ، في 0.0002) للحصول على رقم كسري. يشار إلى هذا الرقم في العنوان. بسبب هذا التقسيم (الضرب في الواقع ، ولكن ليس الجوهر) ، مع كل إضافة وطرح ، تنحرف الدقة قليلاً.



و هذا كل شيء. لأكون صادقًا ، لقد استمتعت بعكس كل شيء. آمل ألا يكون عملي عبثا.



ملاحظة: باستخدام بيانات igSkeleton ، يمكننا بالفعل الحصول على الرسوم المتحركة النهائية وتصديرها ، على سبيل المثال ، إلى Maya. من خلال نفس Noesis.






All Articles