-
Notifications
You must be signed in to change notification settings - Fork 2
Home
DISCLAIMER: This tool is not to be used for commercial purposes, nor for redistributing or exposing the original game’s protected assets in any form that violates intellectual property laws.
Ensure any content created using this tool complies with applicable copyright laws in your region.
Properly credit the original creators for any derivative work. This tool and its creator assume no responsibility for misuse or infringement.
-
What
sssekai_blender_iois- A hobby project of mine to study CG, Blender, and reverse engineering.
- A probably good enough starting point for developing Blender importer plugins for other Unity games.
- A Blender plugin specialized in importing the game Project SEKAI's (JP: プロジェクトセカイ カラフルステージ! feat.初音ミク) game assets
- That allows some interoperability with other asset IO plugins (e.g.,
mmd_tools,glTF-Blender-IO) - With limited compatibility with other Unity engine games as is
- That allows some interoperability with other asset IO plugins (e.g.,
-
What
sssekai_blender_ioisn't-
A drop-in replacement for other Unity engine asset ripping/recovery tools (e.g., AssetStudio, AssetRipper)
- Only Meshes (Skinned or static, w/wo Blend Shape), Textures, and Animations are generally supported. See below for Sekai-specific additions.
- AssetBundles are assumed to be NOT obfuscated/encrypted.
-
A drop-in replacement for other Unity engine asset ripping/recovery tools (e.g., AssetStudio, AssetRipper)
Please refer to the main README for instructions
This part is for developers and advanced users with interest in debugging, or extending the plugin's support for other Unity games.
Most features are documented in the operator (buttons, etc)'s tooltips as well. Hover over them to check for more information.
You may jump to the Guide Section for general usage and quickstart.
This is only necessary for bundles with stripped version. In such cases, this value MUST be set to the correct Player version, or the behavior is undefined.
You can check this by taking a look at the bundle files' header section in a hex editor. When Unity version is stripped, it will show as 0.0.0f0, or simply not present at all.
Please refer to https://github.com/mos9527/sssekai/wiki#note-on-unity-version for more information.
Assets can be imported from directories, with two tiers of selection:
-
Directoryassets will be recursively loaded unconditionally, which would in turn load/decompress all bundles found within the directory tree. -
Aux. Directoryserves as an reference directory for on-demand loading of dependencies. Assets in this directory will only be loaded if they are required by the assets in the mainDirectory.
ATTENTION: Asset picker will ONLY show objects enumerated from bundles in the main Directory. If memory constraints are a concern, consider copying select bundles into a separate folder for importing.
This applies to both import types described below.
A Hierarchy corresponds to a single GameObject (with Transform) in Unity, where it's considered a root object with NO parent in the Scene graph, inside a Scene or a Prefab.
Hierarchies MAY contain child GameObjects (with Transform), which are imported as Armature bones in Blender while replicating the final (global) transform. You can refer to the source to learn more about the reconstruction.
Importing a Hierarchy, with children GameObject containing a MeshFilter or SkinnedMeshRenderer component will result in Mesh objects to be created in Blender, parenting to the corresponding GameObject's Armature bone.
An Animation corresponds to a single AnimationClip in Unity, and MAY use an Animator component to recover target bind poses for TRS keyframes.
ATTENTION: For Quaternion rotation curves - the values are ALWAYS linearlly interpolated in Blender - AFTER being resampled to framerate set by Blender's scene settings. The values can be considered exact when sampling, albeit with extra storage cost when sampling at higher-than-original framerates.
For other curve types (Location, Scale), the Hermite tangents are correctly mapped to Blender's Bezier handles, with necessary coordinate system transformation applied. These values can be considered as exact when sampling.
- In
Object Mode, useSekai CharacterHierarchy Option with nothing selected. - Use
Create Character Controllerto create a root node where the character models will be parented to. - Locate a
face/bundle, selectMesh TypeasFace, and import. - Locate a
body/bundle, selectMesh TypeasBody, and import. -
NOTE: You may find
mdl_prefixed models alongsidebody.prefabandface.prefabones - always use the latter option as explained in #26. - The models are currently detached - use
Attachto parent them together. - ...In cases where exporting as singular Armatures is desired, you can use
Mergeinstead. - You can now set the character height - which is unconditonally scaled as 1.0 meter for all models. The option will be available in
Character Height - ...Offical height, gender and other body parameters (used for outfits) can be found at https://github.com/Sekai-World/sekai-master-db-diff/blob/main/gameCharacters.json
This ONLY applies to Project SEKAI assets.
We'll assume a workflow where importing a character model with Animation is desired, and secondary animations (e.g., hair, cloth physics) are to be imported as well.
-
Ensure the character model is set up first (Face, Body inside a Character Controller, and
Attachis applied, with correct height set) - Ensure character motion (Animation) is imported as well.
- You need to locate the exact bundles for the Face, Body that you have just imported
- For Face armature:
- Load the exact bundle used for the
face/asset - select the Amarture object within the Character Controller that corresponds to it. - A
Apply Rigid Bodiesbutton will appear - click it to apply physics to the selectedface/model
- Load the exact bundle used for the
- For Body armature:
- Load the exact bundle used for the
body/asset - select the Amarture object within the Character Controller that corresponds to it. - A
Apply Rigid Bodiesbutton will appear - click it to apply physics to the selectedbody/model
- Load the exact bundle used for the
- You can refer to #26 - which contains relevant screenshots for the procedure
- The Rigid Body cache frame range may be incorrect - set it manually in
Properties > Scene > Rigid Body World > Cacheto match the Animation length.
TBD. Let me know in the Issues section if some tips are needed here.