Code Monkey home page Code Monkey logo

assetripper's Introduction

AssetRipper

AssetRipper Logo

AssetRipper is a tool for extracting assets from serialized files (CAB-*, *.assets, *.sharedAssets, etc.) and assets bundles (*.unity3d, *.bundle, etc.) and converting them into the native Unity engine format.

Donations

Thank you for considering to support me. I have normal expenses like food, electric, internet, and rent. Your donations help to ensure that I can continue to afford developing this project. Anyone with a positive lifetime contribution is entitled to the Donator role on the Discord server.

GitHub Sponsors

Patreon

Paypal

Supported Versions

Limited support: 3.0.0 to 3.3.0

Full support: 3.4.0 to 2022.2.X

Release Schedule

Releases are put out once a week, usually on either Sunday or Monday.

Links

Website

Downloads

Road Map

Translations

We have a translation platform for those of you who speak another language to work on translating the GUI into your native language. You can get started at https://weblate.samboy.dev/engage/assetripper/.

You'll need to sign up to start translating to a new language, or you can suggest translations for an existing language without an account (but someone with an account will have to manually verify your suggestions). This will send an email to the address you provide. Be sure check your spam folder, as Gmail can sometimes put the emails there.

Discord

The development of this project has a dedicated Discord server. Feel free to come say hi. This is also an alternative location for people to post issues.

Legal Disclaimers

AssetRipper is licensed under the GNU General Public License v3.0.

Please be aware that using or distributing the output from this software may be against copyright legislation in your jurisdiction. You are responsible for ensuring that you're not breaking any laws.

The full list of licensed works can be found on the Credits page.

This software is not sponsored by or affiliated with Unity Technologies or its affiliates. "Unity" is a registered trademark of Unity Technologies or its affiliates in the U.S. and elsewhere.

assetripper's People

Contributors

ds5678 avatar mafaca avatar dependabot[bot] avatar spacehamster avatar jannify avatar oldsportsgit avatar panthr75 avatar trouger avatar marshmello0 avatar redworkde avatar akx avatar facs01-01 avatar nesrak1 avatar luxurypanda avatar barehsolok avatar masonleeback avatar reveillark avatar mf-patino avatar kiruyamomochi avatar thecatontheceiling avatar pyroglyph avatar saharsh1223 avatar lbmaian avatar thunderfrost0001 avatar general-c4 avatar meb-do-stuff avatar infused-doggo avatar asashour avatar wujiayang2007 avatar mcyintian avatar

assetripper's Issues

[Enhancement]: Recover AudioMixers

Describe the new feature or enhancement

AudioMixerController, AudioMixerGroupController, AudioMixerEffectController, AudioMixerSnapshotController.
These assets have complex pre-processing when unity builds them. As a result, the editor and release data won't be mapped to each other, so reversing the data is not a trivial task. The current exported AudioMixerGroups lose all audio effect stacks, exposed parameters, snapshot values, transition overrides...

[Enhancement]: Scene assets should be exported into the scene file

Describe the new feature or enhancement

Scene assets should be exported into the scene file. Currently, only GameObjects and Components are considered "IsSceneCompatible". However, a scene file can contain, say, meshes. Such a mesh should not be exported as an asset on its own. Instead, it should be exported into the scene YAML file.

But what would happen if such a mesh is exported as a separate asset, which is how AssetRipper does?
I'll take tk2d-tilemap running in UnityEditor as an example. As tk2d-tilemap creates meshes and saves them directly in the scene, the PlayMode logic can safely "Object.DestroyImmediate()" them to free memory when finished using them. And the exported mesh assets will thus be literally "destroyed", and the scene gets invalid references to its meshes afterward, which results in a broken scene.

To be more precise, a call to Object.DestroyImmediate() on a mesh asset during PlayMode will not take effect. Instead, an error message is printed into the console. However, tk2d-tilemap does something more to solve this. It actually destroys the mesh by using AssetDatabase APIs if it finds out that the mesh is a separated asset.

[Enhancement]: Add Shader.Find() support for YAML shader assets

Describe the new feature or enhancement

A shader exported as a YAML asset can be assigned to and used by a material as a regular .shader asset, but it does not work with Shader.Find() unless we explicitly register it.

Shader.Find() is essential for exporting a playable Unity project, especially regarding rendering image effects.

[Enhancement]: deterministic exports

Describe the new feature or enhancement

Having deterministic GUIDs, exportIDs, and timestamps across multiple exports of the same game is essential so that any manually-added reference in the exported project won't be lost after a re-export. Also, massive art assets won't have to be re-imported if we keep the Library folder or use a cache server.

[Enhancement]: Correct recovery of sprites

Describe the new feature or enhancement

Sprites from different textures can have different texture importer settings like PixelsToUnits.

When these sprites are packed into a SpriteAtlas in the game build, the exported game project will have all these sprites under one large Texture2D. As PixelsToUnits is a property of texture importer, all sprites will have the same property values, which is incorrect compared to the original game project.

To preserve the render data of sprites, we should export sprites as YAML assets, one .asset file for each sprite, so that each can have its own properties. I've tested this idea in Unity Editor by creating multiple sprites from textures in code, assigning different properties to them, saving them as .asset files, building the game, and finally running the game... All things are as expected.

Textures and SpriteAtlas

Texture import settings - Max size should be no smaller than the exported texture size since textures in the release build can't be larger than the original project's max size setting.

SpriteAtlas - Should not be exported! The corresponding texture of a SpriteAtlas is not an asset in the original project but an artifact of a release build. Now that the texture has been exported, the SpriteAtlas is not necessary for the exported project. Beyond that, exporting the SpriteAtlas will instead crash Unity if SpritePackerMode is enabled in the editor settings, which happens during the packing process when entering PlayMode.

[Enhancement]: Recover file location of unity scenes

Describe the new feature or enhancement

Currently, all exported scenes are located in the "Assets/Scene/" folder. It does not match the scene file locations serialized in EditorBuildSettings.asset. SceneManager.LoadScene series functions will fail to load such scenes.
Thus, scene files should be exported to their original locations.

[Bug]: YAML sprite from SpriteAtlas can have incorrect pivot

Are you on the latest version of AssetRipper?

Yes, I'm on the latest release of AssetRipper.

Which release are you using?

GUI Version Windows x64

Which game did this occur on?

N/A

Which Unity version did this occur on?

N/A

Is the game Mono or IL2Cpp?

Not Applicable

Describe the issue.

A sprite that is packed into a SpriteAtlas may have an incorrect pivot when exported as a YAML asset.
This leads to incorrect bounds for frustum culling, thus missing sprites in the rendered image.
The pivot value should be recalculated with information from the atlas.

Relevant log output

No response

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.