Commit Graph

66 Commits

Author SHA1 Message Date
kaosat.dev a630494f88 feat(auto_export): continued fixes & tons of restructuring
* cleaned up most of the change detection tracking
 * updated/ fleshed out & improved the tests
 * improved sidebar ui (wip)
   * moved listing of blueprints to export to sidebar
   * improved display of changed objects
   * currently restructuring rest of the code to be able to display BEFORE saving
what will get exported & what not
 * a ton of other cleanups & tweaks
2024-04-10 00:18:34 +02:00
kaosat.dev cf4673c1e3 feat(auto_export): MORE experimenting, cleanup & analysis attempts
* moved temp scene prefix to new 'constants' file, updated code accordingly
 * fixed, updated & refactored handling of auto export & gltf parameters
 * added additional tests to changed_parameters
 * added display of changes since last save in new side tab
 * more investigation & fix attempts for change detection...
 * various related tweaks & cleanups
2024-04-08 23:41:17 +02:00
kaosat.dev 64fd308fd3 feat(auto_export): exploration, changes, debug etc for change detection weirdness 2024-04-08 00:08:06 +02:00
kaosat.dev 11e8786b59 fix(auto_export): first draft, working ! but horribly convoluted solution to the correct reseting of change detection state 2024-04-06 01:29:41 +02:00
kaosat.dev 86a1a4d717 test(auto_export): added tests for changed parameters tracking & change tracking
* added testing based on timestamps of generated files
 * found a (few ?) bugs in change tracking based on these, fixing next
2024-04-06 01:00:24 +02:00
kaosat.dev 9645e812ef fix(auto_export): fixed changed gltf parameters handling 2024-04-05 23:32:41 +02:00
kaosat.dev ccaeecf6f1 chore(auto_export): more minor tweaks 2024-04-05 23:21:39 +02:00
kaosat.dev e139a1496d chore(auto_export): cleanups 2024-04-05 23:19:29 +02:00
kaosat.dev ed09ab7d48 feat(tools):
* auto_export now defaults to being disabled (otherwise you will get export attempts etc even if you only
had the add-on installed !
 * modified logic accordingly
 * various related tweaks
 * adjusted tests
2024-04-05 23:14:38 +02:00
kaosat.dev 1cf47d36b1 refactor(): cleanups 2024-04-05 10:52:14 +02:00
kaosat.dev 0998decb39 feat(animation): changes & some reverts of the latests experiments 2024-04-05 00:17:07 +02:00
kaosat.dev b19e54b3bd refactor(auto_export): cleanups 2024-04-03 13:07:13 +02:00
kaosat.dev 2dae2c41b4 feat(auto_export): a ton of finicky annoying workarounds !
* added workaround for backing up & restoring gltf export settings if there where any,
because it turns out in the glTF2_pre_export_callback, they already get created !
 * added workaround for deleting the temporary gltf file, aka it needs an additional timer, because
the post export callback fires too early !
 * added workaround to deal with the fact that operator uis have global state !!
aka make sure the settings used when calling the gltf exporter do not "contaminate" the normal exporter
 * it all works, but sigh ...
2024-04-03 00:46:45 +02:00
kaosat.dev 73441f34a4 feat(auto_export): restructured & improved changed parameters detection
* now all centralized in the operator's did_export_settings_change() function
 * now works correctly ! ie only compares the parameters for auto & gltf
at the time of exporting ! ie it does not matter anymore how many parameters you changed, until you save/export
 * this solves a lot of randomness bugs in change detection
 * related & various cleanups
2024-04-02 16:45:01 +02:00
kaosat.dev 73e81c2b64 feat(auto_export): continued cleaning up overhaul
* added both gltf exporter button AND auto export button to side bar
 * added storage of gltf settings
 * auto_export now uses stored gltf settings
 * updated override strategies of defaults vs gltf settings
 * removed all gltf specific (not auto export) parameters from preferences
 * updated auto export operator params changed logic to use updated system
 * updated bevy integration test
 * ui improvements
 * various tweaks
2024-04-02 14:15:56 +02:00
kaosat.dev 4a0479fbf0 feat(auto_export): further experimenting with standard gltf exporter integration 2024-04-02 00:46:09 +02:00
kaosat.dev 66a893e5b6 feat(auto_export): experimenting with the insane workarounds needed to get access to standard gltf exporter settings
* got a basic working version that runs the standard exporter with some overrides,
deletes the temporary exported gltf file, extracts the scene level settings etc
 * convoluted as hell , but still better than the alternatives
2024-04-01 16:12:05 +02:00
kaosat.dev df3e335114 feat(animation):
* renamed Animated component to AnimationInfos, fleshed it out with additional
frame informations etc
 * restructured & cleaned up Bevy & Blender code in those areas a bit
 * various related minor tweaks
2024-03-30 18:29:43 +01:00
kaosat.dev c44d82e7dc feat(animation): added basic handling of animation markers
* added additional component on the Bevy side + experimented with handling the data in the testing setup
 * added parsing of animation markers on the Blender side + injection of custom property/ component
 * rough around the edges, but the basics work !
2024-03-30 02:40:52 +01:00
kaosat.dev 37dd6a990c feat(auto_export): experimenting with ways of getting standard gltf export settings & using them 2024-03-22 23:35:10 +01:00
kaosat.dev 4f5f3be317 chore(): minor tweaks 2024-03-21 21:37:10 +01:00
kaosat.dev 4f50c4f6d2 feat():
* auto_export now injecting the list of available animations into the "Animated" component
  for any object with animations
 * modified bevy side struct to match
2024-03-21 15:25:50 +01:00
kaosat.dev a001ee21f6 test(auto_export):
* fleshed out testing of hierarchy
  * added export of serialized hierarchy from the bevy side & comparing it with a reference
 one on the python side
  * various tweaks
2024-03-20 17:57:06 +01:00
kaosat.dev 83258dbd07 fix(auto_export): found & fixed a huge issue with handling of hierarchies
* now various forms of nesting with parenting (not within collections) should be handled correctly
 * restructured a large part of creating copies / duplicates
 * removed some obsolete code
 * related cleanups
2024-03-20 12:29:39 +01:00
kaosat.dev c2f09fbf22 feat(): added 'animated' flag component (wip) to mark any worlds/blueprints entities that have animations
* allows to not be restricted by bevy's a bit weird logic for AnimationPlayers
 * updated crate & tooling
 * updated testing example with a bit more complex nesting cases for testing
2024-03-19 22:12:37 +01:00
kaosat.dev 87c03657e5 chore(auto_export): further experimentation 2024-03-19 14:19:32 +01:00
kaosat.dev 1c51d10da7 chore(auto_export): further exploration & experimenting
* now trying to copy the animation to the "empty" placeholder using animation linking operator
 * now in gltf viewer we can see the two animations/actions, but still nothing in Bevy
2024-03-18 22:26:06 +01:00
kaosat.dev c6468f2b0b feat(auto_export):
* added tests for orphan data
 * changed handling of animation data slightly
 * trying to figure out source of various issues
2024-03-18 20:05:01 +01:00
Mark Moissette 9f21df035b
feat(): Asset preloading basics (#169)
* closes #80 
* preliminary work for further asset management from the Blender side without needing additional dependencies & boilerplate on the Bevy side 
* feat(auto_export): 
     * now injecting list/tree of sub blueprints to main scenes/levels & blueprints
     * made blueprints/asset list conditional on NOT legacy mode
* feat(gltf_blueprints): 
    * basics of dynamic loading of sub_blueprints
    * added same kind of logic to the loading of material files
    * also made a more generic variant of the BlueprintAssetLoadTracker 
    * added gltf file path for more informative error in case a gltf is missing
* refactor(): 
   * made the various gltf assets loaded by bevy_asset_loader optional (to handle the case where they are not present)
   * updated all examples accordingly
* chore(crates): fixed links, slight tweaks, bumped versions
2024-03-18 18:00:19 +01:00
Mark Moissette 1353e14802
feat(bevy_components): qol improvements (#164)
* closes #163 
* closes #153 
* closes #154 
* feat(bevy_components): added tools for diagnostics/ finding & replacing invalid & unregistered components
   * added ui for listing invalid & unregistered components
   * added boilerplate & functionality for component renaming/replacing
   * injection of invalid status & message in case the conversion did not work well
   * added deletion of components individual & bulk
   * added handling of wrong string for unit structs : allows detection of more wrong values for components
   * added progress bars for bulk operators
   * added docs for new features
   * added tests
   * added small "attempt to fix" button for unit struct uis in case they are invalid
* feat(bevy_components): added progress indicators for from/to custom properties
* various other minor ui tweaks for workflow improvement
2024-03-07 16:29:04 +01:00
Mark Moissette 3b7b5f28bd
feat(tools/internal_generate_release_zips): ensure compression (#161) 2024-03-04 22:28:35 +01:00
Mark Moissette 09915f521d
chore(Bevy): Update to bevy 0.13 (#136)
* chore(crates): updated crates to Bevy 0.13
   * updated deps
   * updated / changed code where relevant
   * updated README files
   * bumped version numbers for upcoming release
   * updated rust-toolchain
   * updated assets where relevant
   * closes #132 
* feat(bevy_gltf_components): 
  * added GltfProcessed flag component to improve performance of iteration over added<gltfExtras>
  * closes #144 
  * light & shadow processing is now integrated,  to match  lights coming from Blender: you can now control whether 
  lights cast shadows, the cascade resolution , background color etc  from Blender
   * closes #155 

* feat(bevy_registry_export): added boilerplate to make registry path relative to assets folder 
  * closes #137 
* feat(tools): added boilerplate for internal tools
   * clean zip file generator for blender add-on releases
   * example gltf file generator
* feat(lighting): added components, exporter support & testing for blender-configurable shadows
   * added BlenderLightShadows component to bevy_gltf_components
   * added writing shadow information to gltf_auto_export
   * updated tests
   * closes #157 

Co-authored-by: Jan Hohenheim <jan@hohenheim.ch>
2024-03-04 22:16:31 +01:00
Mark Moissette 9cb9dda5d3
fix(bevy components): fix handling of unit/empty structs (#151)
* closes #133 
* fix(gltf_auto_export): corrected ron value for "spawnHere" components
* fix(bevy_components): fixed handling of empty/ unit structs
   * updated to/from prop_groups
   * updated tests/ expected files
   * bumped version
   * removed verbose "watching schema file for changes"
* fix(bevy_gltf_components): fixed issue of incorect handling of empty component values in non legacy mode:
   * aka: replacing empty component values (ron strings) with '()' should ONLY happen in legacy mode
   * even more aka: ron strings for component values should not be altered when not in legacy mode (provided ron
  strings should be valid)
* tests():
   * changed bevy_component tests to use testing/bevy_example as source for registry data
   * removed testing/bevy_registry_export, as it is redudant
   * related tweaks & cleanups
* chore(crates): bumped up versions because of breaking change
* chore(examples): updated registry export example to use up-to-date / fixed components data
* chore(bevy_gltf_components): added back warning about legacy mode, in a less spammy way
* docs(bevy_components): added notes about v0.3 breaking changes
2024-03-04 08:20:00 +01:00
Mark Moissette b40ab4983f
chore(gltf_auto_export): bumped version for release (#150) 2024-02-29 15:32:19 +01:00
Mark Moissette 7ffcd55f5d
fix(gltf_auto_export): fix animation export (#148)
* fix(gltf_auto_export): added  fix for correct "deep-copying" of objects & hierarchy so that animated
 meshes & nested hierarchies get exported correctly
* test(gltf_auto_export):
   * added visual testing to check for overall regression :
       * added screenshoting in bevy app
       * added visual compare with reference screenshot on python side
    * added testing of correct export of animated models 
    * added testing of correct export of empties
    * added testing of correct export of nested hierarchies
    * added testing of correct export of blueprints, with & without components etc 
* fixes #147
2024-02-29 15:27:02 +01:00
Mark Moissette dfc2be8c50
feat(gltf_auto_export): component filtering for exports, bug-fixes and tests(#143)
* added filtering out of invalid components/ custom properties:
  * includes filtering out of invalid / disabled components as defined in bevy_components, components_meta etc
 * completely changed handling of "unique" (non blueprint) objects by copying them instead of moving/renaming them & manipulating their custom properties : much cleaner, much simpler !
 * disabled default gltf export of optimised animations
 * added tests !
 * closes #139 
 * closes #141 
 * closes #142 
 * closes #146
2024-02-27 00:12:14 +01:00
Mark Moissette 20b6fa6077
feat(bevy_components): set of fixes & improvements (#128)
* fixed issue with "reload registry" not clearing previous data
 * added watcher/ poll system to automatically updated the registry & components list when the registry file has been changed
* BREAKING CHANGE ! changed internal representation of components, incompatible with v0.1, breaks UI values.
* added buttons to regenerate UI to account for/fix the above and to offer the ability to regenerate UI values from custom property values
* lots of cleanups
* added tests 
* closes #127 
* closes #124 
* closes #121 
* closes #130
2024-02-18 17:14:31 +01:00
Mark Moissette 0083295a4d
fix(gltf_auto_export): fixed nested collections export (#126) 2024-02-07 14:22:53 +01:00
Mark Moissette 537f08b959
chore(tools/gltf_auto_export): fixed missing version bump & minor cleanup (#120) 2024-02-06 09:46:55 +01:00
Mark Moissette cfbda24da7
feat(tools/bevy_blueprints): bevy plugin + blender addon for components UI to more easily create components (#70)
* adds a new crate: ```bevy_registry_export``` to be able to create a json import of the registered component/type definitions
* adds a new Blender addon: ```bevy_components``` that takes that json data to generate custom UIs for components , to be to add & edit components easily in Blender 
   * also adds component metadata per object for more advanced features
   * etc
* updates to bevy_gltf_components & bevy_gltf_blueprints to add legacy_mode to support the "old"/current style component definitions
* same with gltf_auto_export Blender add_on
* closes #60
2024-02-05 23:01:19 +01:00
Mark Moissette 5c8f41b4a6
fix(gltf_auto_export): bumped version (#117) 2024-02-05 10:23:53 +01:00
Mark Moissette 2ae8351e0f
feat(gltf_auto_export): rewrite for more cleaner code & a lot of bug fixes (#109)
* fundamental rewrite of a lot of aspects of the exporter, for cleaner code & to solve a number of issues
* set export_separate_dynamic_and_static_objects default to FALSE, as it is an edge use case
* added central tracker class, to track the post save & depsgraph changes
* auto_export is now more operator centric, with functional undo
* now storing add-on configuration at the blend file level  (bpy.data.texts)
* found source of export issues ! mismatch between context.scene & context.window.scene (the last we can set, the other not)
* overhauled & cleaned up materials handling to avoid context issues & reliance on bpy.ops
* huge restructure of how temporary scenes are created & cleaned up
* added support for exports in edit_mode
* updated examples
* a lot more
* fixes #103 
* fixes #112 
* fixes #113 
* fixes #114 
* fixes #115 
* fixes #116
2024-02-05 09:49:19 +01:00
Mark Moissette 5429bf4779
feat(Save & load): new crate bevy_gltf_save_load + lots of upgrades & improvements (#95)
* feat(bevy_gltf_save_load): saving & loading implemented
   * created new crate for save & load features, uses & filters out blueprints for efficient loading
   * saving & loading, even with dynamically spawned nested hierarchies works 
   * component filter , resource filter & save path root are configurable
   * for saving: added removal & cleanup logic for children component with children
  that have been filtered out: ie no more invalid children getting stored in the save files !
   * added sending of event once saving is done

* feat(examples/save-load): example for the new crate
   * loading level static & dynamic data as blueprints
   * added a bit of ui when entering saving & loading states & cleanup when exiting

* feat(bevy_gltf_blueprints): significant rewrite of how the crate works
     * simplified spawning process, no more spawning children containing blueprints etc
     * simplified post process : instead of copying original entity  into blueprint root
      we now copy blueprint root data (components & children) into the original entity ! fixes #96 
     * much simpler code wise
     * solves issue with needing to register components that we only use on the bevy side (not gltf)
    since we are not copying the bevy data into the blueprints data
     * added **copyComponents** helper to copy components from one entity to another, excluding existing
     components on the target entity, & some bells & whistles
     * **Name** is now optional when spawning a blueprint: closes #97 
     * **Transform** is now optional when spawning a blueprint: closes #98 
     * removed transform from bundle (BREAKING change)
     * added (optional)  **NoInBlueprint** component to have finer control over whether to inject the **InBlueprint** component inside spawned blueprint entities
     * added (optional) **Library**  component, so we can override library path when we want
     * added (optional) **AddToGameWorld** component for convenience   to automatically add entities to the game world, if there is one

* chore(bevy_gltf_components): removed verbose output, cleaned it up a bit

* feat(tools/auto_export): added option to split out "dynamic" objects in main scenes
   * ie if a collection instance (or its original collection) has a "dynamic" (aka mutable, saveable etc)
     flag it can get exported to a seperate gltf file (essentially acting like an "initial save")
   * the rest of the levels (the "static" data) is exported without the dynamic objects and
     can be reused with save files !
2024-01-10 14:49:29 +01:00
Mark Moissette 42c1c71b03
fix(tools/gltf_auto_export): correctly scan for sub collections in main scenes (#94)
* scans for 'in-use' collections now correctly looks inside sub collections as well
 * removed obsolete .gltf output (keeping only .glb & .gltf+bin+textures
 * closes #92 
 * closes #93
2024-01-03 10:45:03 +01:00
Mark Moissette af94e49976
feat(Gltf auto export): multiple blend files workflow, combine modes, bugfixes and more ! (#83)
* feat(multiple blend files): added example of multi blend file workflow
* feat(tools/auto_export): 
 * added collection_instances_combine_mode superseeds  & replaces "export nested blueprints", with a lot more flexibilty
 * added preferences & ui settings
 * added (optional) use of marked assets as replacement for "autoExport" collection flag
 * added correct cleaning up of temporary sub_collections
* feat(tools/auto_export): change detection added for material changes
* feat(tools/auto_export): blueprints now also use the "combine" settings for nested collections
*  feat(tools/auto_export): added correct cleanup of data when removing hollow scenes, so that there is no orphan data left behind
* feat(tools/auto_export): changes to nested collections are now triggering change detection of root
 (exportable collections)
* feat(tools/auto_export):  now actually useful tracebacks using traceback.format_exc()
* various minor fixes, cleanups & UI description improvements
* docs(README): updated & fleshed out docs

* closes #87 
* closes #86
* closes #85 
* closes #79 
* closes #61 
* closes #68 
* closes #41
2024-01-01 22:35:21 +01:00
Mark Moissette 6047959b3f
feat(nested_blueprints): added support for nested blueprints both in bevy_gltf_blueprints & in gltf_auto_export (#65)
* feat(bevy_gltf_blueprints): 
  * added support for nested blueprints
  * added example/test for nested blueprints with multiple levels of nesting
* feat(tools/gltf_auto_export): 
  * implemented functionality to export nested blueprints/collection instances
  * added add prefs to control nested blueprints export
  * experiments with nested blueprints merge modes
  * when exporting of nested blueprints is disabled, will not scan for nested blueprints
and thus no export them
* docs(): updated docs & added images for nested blueprints support
2023-12-22 00:37:52 +01:00
Mark Moissette 2c4720b951
fix(tools/gltf_auto_export): fixed lacking preference config that broke the exporter (#77)
* fix(tools/gltf_auto_export): fixed lacking preference config that broke the exporter
* chore(): bumped version
2023-12-17 16:08:20 +01:00
Mark Moissette 0aead0853c
feat(scene components) : added scene components to control ambient, bloom etc from Blender(#76)
* feat(tools):  scene component injection & export
 - ambient light, shadowmap resolution, bloom intensity, ambient occlusion are now directly settable from scene components that are injected automatically in the scene 
 - relaxed requirements for changes(aka when to export gltf) for main scenes,
so that render , background etc changes also trigger a save
 - added scene components examples
 - added additional proxies &  handling for camera & lights
 - in relevant cases, made sure that entity specific components are not overridden by scene components
 - added option to toggle scene level exports of params/ components
 - ambient colour/ intensity is now also set as background/clear colour
  - updated docs
2023-12-17 15:31:25 +01:00
Mark Moissette 3d192f7876
chore(tools/gltf_auto_export): (#73)
* removed the zip file
 * zip file for the addon will now be present under releases
 * updated docs accordingly
2023-12-12 14:10:25 +01:00
Mark Moissette e1aa510457
feat(materials): Materials libraries tooling & bevy code for material/texture reuse (#71)
* updates both gltf_auto_export & bevy_gltf_blueprints to avoid duplicating common materials across blueprints
* feat(tools/gltf_auto_export): added materials library export !
 * export all materials in use by blueprints to a separate temporary scene with cubes (for now)
   with the materials assigned
 * injecting MaterialInfo components to each blueprint above with Material name + library name
 * generated gltf is named based on the project/blend file, so multiple blend file projects
   can each have their own material libraries
 * added preferences & ui & handling to be able to toggle material library exports
* feat(bevy_gltf_blueprints): added support for materials library!
 * material injection (toggleable via the plugin configuration)
 * added example
 * added materials library + texture files + updated assets
 * added physics debug toggling
* updated documentation
* closes #63
2023-12-12 13:21:53 +01:00