Blender_bevy_components_wor.../TODO.md

22 KiB

Auto export

  • the original blueprints & levels path are now left as is, and there is an auto injection of xxxpath_full for absolute paths

    • replace all uses of the paths with the correct ones above
      • levels
      • blueprints
      • materials
  • move out the UI for "assets" folder out of "blueprints condition"

  • fix asset path calculations

    • root path => relative to blend file path
    • asset path => relative to root path
    • blueprints/levels/blueprints path => relative to assets path
  • add error handling for de/serialization of project, so that in case of error, the previous saved serialized project is thrown away

  • move out some parameters from auto export to a higher level (as they are now used in multiple places)

    • main/ library scene names
    • paths
  • Data storage for custom properties:

    • for scenes (main scenes)
      • at scene level
    • for blueprints
      • at collection level
      • Note: these should be COPIED to the scene level when exporting, into the temp_scene's properties

    NOTE: UP until we manage to create a PR for Bevy to directly support the scene level gltf_extras, the auto exporter should automatically create (& remove) any additional object with scene_<scene_name>_components to copy that data to

Assets: - blueprint assets should be auto_generated & inserted into the list of assets : these assets are NOT removable by the user - should not change the list of manually added assets

  • store assets
    • per main scene for level/world assets
    • per blueprint for blueprint in lib scene
  • UI:
    • we need to display all direct assets (stored in the scene)
    • indirect assets:
      • QUESTION : do we want to include them in the list of assets per level ?
        • this would enable pre-loading ALL the assets, but is not ideal in most other cases
        • so add an option ?
      • the assets of local blueprints

Blueprints: - [x] on save: write IN THE COLLECTION PROPERTIES - list of assets - export path - [x] blueprint selection for nested blueprints is broken

- [ ] scan & inject on load
- [ ] scan & inject on save
- [ ] decide where & when to do & store blueprints data

Components: - [x] add support for adding components to collections - [x] upgrade all operators: - [x] add - [x] remove - [x] copy & paste - [x] BLENVY_OT_component_rename_component - [x] BLENVY_OT_component_fix - [x] add handling for core::ops::Range & other ranges - [x] fix is_component_valid that is used in blenvy - [x] Hashmap Support - [x] fix parsing of keys's type either on Bevy side (prefered) or on the Blender side - [x] fix weird issue with missing "0" property when adding new entry in empty hashmap => happens only if the values for the "setter" have never been set - [x] handle missing types in registry for keys & values - [x] adding a hashmap nukes every existing component ?? - [x] Add correct upgrade handling from individual component to bevy_components - [x] Settings handling: - [x] move saveable settings out to a settings file - [x] update save & load - [x] add handling of polling frequency & enabling - [x] move advanced tools to components tab - [x] remove most of the (bulk) advanced tools, too complex, too unclear (even for me !) and of limited use - component renaming should be kept, but perhaps simplified: - if a renaming fails because the parameters are incompatible, nuke the old parameters - perhaps just add a display list of all NON component custom properties, so the user can find them easilly ? - [x] status "unregistered" is often false and misleading -> see in registry ui "for custom_property in object.keys():" - [x] overhaul / improve the component selector (with built in searching, etc) - [x] remove select_component_name_to_replace - [x] display of invalid components is not working ? - [x] weird items are present in the components list that do not seem to be components - [x] remove : - BLENVY_OT_component_list_add_item - BLENVY_OT_component_list_remove_item - BLENVY_OT_component_list_select_item: merge it into the rest of the actions - [x] clearing invalid flag after a registry change does not work correctly (ie the ui still says the component is invalid) - [x] should reset ALL "invalid" flags IF they have the matching data - [x] registry auto reload not working ? - [x] changing the registry breaks all the values of existing components !!!!!! -> VERY likely due to the int-offset computation for hashes of components - now switched to tiger_hash - [x] add warning about hash colision (not much we can/ could do if it is the case ?) - [x] double check weird collisions AND/OR reuse existing if applicable - [x] annoying default path for registry, should be relative to the assets path

General things to solve:

  • save settings

  • load settings

    • add blueprints data
  • rename all path stuff using the old naming convention : "blueprints_path_full"

  • generate the full paths directly when setting them in the UI

    • problem : how to deal with defaults: do it on start/load ?
  • filter out scenes that have already been used in scenes list

General issues:

  • there is no safeguard for naming collisions for naming across blender files

  • this can cause an issue for assets list "parent"

  • "parents" can only be blueprints

    • they normally need/have unique export paths (otherwise, user error, perhaps show it ?)
    • perhaps a simple hashing of the parent's path would be enought
  • addon-prefs => settings

  • generate_gltf_export_settings => should not use add-on prefs at all ? since we are not overriding gltf settings that way anymore ?

  • remove hard coded path for standard gltf settings

  • load settings on file load

    • auto_export
    • components
    • add handling of errors when trying to load settings
  • fix auto export workflow

  • add hashing of modifiers/ geometry nodes in serialize scene

  • add ability to FORCE export specific blueprints & levels

  • change scene selector to work on actual scenes aka to deal with renamed scenes

    • remove get_main_and_library_scenes as it should not be needed anymore
  • fix asset file selection

  • change "assets" tab to "levels"/worlds tab & modify UI accordingly

  • remove local assets, useless

  • remove 'export_marked_assets' it should be a default setting

  • disable/ hide asset editing ui for external assets

  • fix level asets UI

  • remove BlueprintsList & replace is with assets list

  • switch to bevy 0.14 rc2

  • trigger events when assets are loaded, blueprints are spawned & co

  • overall cleanup

    • object.add_bevy_component => blenvy.component_add

Blender side:

  • force overwrite of settings files instead of partial updates ?

  • prevent loop when loading/setting/saving settings

  • fix asset changes not being detected as a scene change

  • fix scene setting changes not being detected as a scene change

  • add back lighting_components

  • check if scene components are being deleted through our scene re-orgs in the spawn post process

  • fix unreliable project hashing between sessions: (note, it is due to the use of hash() : https://stackoverflow.com/questions/27522626/hash-function-in-python-3-3-returns-different-results-between-sessions)

  • figure out why there are still changes per session (it is due to object pointer being present in the generated "hash")

    • materials & modifiers, both using the same underlying logic
      • filter out components_meta
      • filter out xxx_ui propgroups
  • fix missing main/lib scene names in blenvy_common_settings

  • fix incorect updating of main/lib scenes list in settings

  • add handling of scene renames

    • store (on load) a mapping of scene objects to scene names
    • on save, calculate another mapping of scene objects to scene names
      • if there is a mismatch between the stored version & the new version for a given scene, it has been renamed !
    • pass this information to scene diffing to remap old/new scene names
    • move the rename detection to AFTER scene serialization, otherwise we could have a naming mistmatch
      • weird behaviour, perhaps find another way , ie for example replace scene name in saved previous data
      • is post save causing the issue ? review
  • investigate weird issue of changes detected to all after a reload

  • should we write the previous _xxx data only AFTER a sucessfull export only ?

  • finer grained control of setting changes to trigger a re-export:

    • common: any of them should trigger
    • components: none
    • auto_export:
      • auto_export: yes
      • gltf settings: yes
      • change detection: no ?
      • export blueprints: YES
        • export split dynamic/static: YES
        • export merge mode : YES
        • materials: YES
  • blenvy tooling not appearing in library scenes ?? (edit: was actually , it was not appearing in anything but object mode)

  • find a solution for the new color handling

    • in theory, srgba, linearrgba , and hsva should be able to be represented visually
    • bevy_render::color::Color => bevy_color::color::Color
  • fix weird issue with hashmaps with enums as values

  • prevent attempting to add unexisting components to targets (ie when using the component search)

    • also for the bulk fix actions
  • selection of nested objects in collections IS NOT WORKING !!! AHH

  • fix/ overhaul upgreadable components

    • add listing of upgradeable components for
      • meshes
      • materials
    • fix display of upgradeaeble components & co
    • add clear visual distinction between internal (selectable) & non selectable ones
    • do not make selection button available for external blueprints/collections
      • perhaps do not show the other buttons & inputs either ? we cannot change the values of an external library file anyway
  • BLENVY_OT_item_select is missing handling for the other types (outside of object & collection)

    • fix selection logic
  • update testing blend files

  • disable 'export_hierarchy_full_collections' for all cases: not reliable and redudant

  • fix systematic material exports despite no changes

  • investigate lack of detection of changes of adding/changing components

    • change scene serialization to account for collections ...sigh
    • also add one NOT PER scene for materials, to fix the above issue with materials
    • move material caching into hash material
  • also remove dummy.bin when export format is gltf

  • fix/cleanup asset information injection (also needed for hot reload)

    • add back per blueprint assets
    • reuse the already existing asset_scan + export thing
    • thoughts:
      • the "list of all assets" is actually the "fake"/generated one: nobody would write a list of assets for sub assets, you would just add the assets to your blueprint

      • in Bevy at spawning we have blueprint => assets for hot reload we need asset => blueprint instances so we can despawn/respawn etc blueprint instances when one of their assets has changed

          problem of untyped vs typed
          perhaps have a mapping of untyped => typed id
          map asset id => [entity ids]
        
  • add option to 'split out' meshes from blueprints ?

    • ie considering meshletts etc , it would make sense to keep blueprints seperate from purely mesh gltfs
  • materials fixes & upgrades

    • materials do not get exported again if the files are missing, until you change a material

    • materials do not get exported when a material is added ?

    • add_material_info_to_objects is now called AFTER the blueprint export, making it useless, needs change !

    • materials_path custom property should be ignored both in the list of fixable component AND on export

    • if we want to add material_infos & others as normal components they should not be editable, so we need another attribute, and adapt the UI for that

    • injection of materials_infos should be done outside of export_materials as it should run even if materials do not need exporting

    • if material library is toggled, then changes to materials should not change the blueprints that are using them => not really: as the name & co might change

    • material assets seem to be added to list regardless of whether material exports are enabled or not

    • review & upgrade overall logic of material libraries, their names & output path

    • change materials logic to work with multiple materials per mesh

      • the index of the generated gltf files is reliable, and can be used both in Blender & Bevy
      • change MaterialInfo to MaterialInfos & turn it into a vec/list & updated logic both on Blender & Bevy side
    • persist exported materials paths in blueprints so that it can be read from library file users

      • just like "export_path" write it into each blueprint's collection
      • scan for used materials per blueprint !
      • for scenes, scan for used materials of all non instance objects (TODO: what about overrides ?)
  • add a way of visualizing per blueprint instances ?

  • display export path of blueprints (mostly external) ?

  • hidden objects/collections only semi respected at export

  • inject_export_path_into_internal_blueprints should be called on every asset/blueprint scan !! Not just on export

  • undo after a save removes any saved "serialized scene" data ? DIG into this

  • add tests for

    • disabled components
    • blueprint instances as children of blueprint instances
    • blueprint instances as children of empties
  • check/ fix behaviour of blender plugin if all folders are the same (ie, all in assets for example)

  • rename all "main scene xx" to "level scene"

  • make sure the "add scene" button is not available unless you have actually selected one

  • make auto export be on by default, however bail out early by detecting if there are any level/blueprint scenes

  • remove custom components to filter out correctly from exported blueprints list

  • for built in Component types that need to be injected to be used by blueprints, namely:

    • BlueprintInfos (not 100% sure for this one)

    • MaterialInfos

    • the various scene Components

    • BlueprintAssets (although not really needed anymore with the meta files)

    • Inject real components instead of just custom properties

    • add boilerplate to generate real component values from type definitions instead of hacking pseudo ron strings

    • fall back to bevy_components if that fails (missing registry) or just basic custom properties

    • If that fails as well ?

  • auto reload registry if absent/possible

    • cannot be done from UI possibly polling with increasing timeout
    • bpy.ops.blenvy.components_registry_reload()
    • double check bpy.context.components_registry
  • filter out MaterialInfos from list of "fixable components"

Bevy Side:

  • deprecate BlueprintName & BlueprintPath & use BlueprintInfo instead

  • make blueprint instances invisible until spawning is done to avoid "spawn flash"?

    • make this controlable via an additional "HideUntilReady" component
    • register "HideUntilReady" so users can set this on their blueprints in Blender directly
  • restructure blueprint spawning

    • "blueprint ready" only be triggered after all its sub blueprints are ready
    • "blueprintInstance ready"/finished BlueprintAssetsLoaded BlueprintSceneSpawned BlueprintChildrenReady BlueprintReadyForPostProcess
    • fix issues with deeply nested blueprints
      • perhaps reverse logic by using iter_ascendants
    • fix materials handling
    • fix animations handling
      • fix/upgrade blueprint level animations
      • fix/upgrade scene level animations
      • rename SceneAnimations to InstanceAnimations (more coherent with the rest)
      • add back & cleanup animation frame triggers
    • move sub blueprint handling to blueprints_finalize_instances
  • look into component overriding , it seems broken:

    • blueprint level/ collection level components are now visible in instances in Blender
    • they do not seem to be transfered to the (instance) entity above: could they be on the "empty node" ?
  • simplify testing example:

    • remove use of rapier physics (or even the whole common boilerplate ?)
    • remove/replace bevy editor pls with some native ui to display hierarchies
    • a full fledged demo (including physics & co)
    • other examples without interactions or physics
  • add hot reloading

    • basics
    • make it enabled/disabled based on general flag
    • account for changes impact both parent & children (ie "world" and "blueprint3") for example, which leads to a crash as there is double despawn /respawn so we need to filter things out
    • if there are many assets/blueprints that have changed at the same time, it causes issues similar to the above, so apply a similar fix
      • also ignore any entities currently spawning (better to loose some information, than cause a crash)
    • for sub blueprint tracking: do not propagate/ deal with parent blueprints if they are not themselves Spawning (ie filter out by "BlueprintSpawning")
    • cleanup internals
    • analyse what is off with blueprint level components
    • add the root blueprint itself to the assets either on the blender side or on the bevy side programatically
    • invalidate despawned entity & parent entities AABB
    • add unloading/cache removal of materials
  • add back and upgrade save-load

  • review & change general component insertion & spawning ordering & logic

    • GltfComponentsSet::Injection => GltfBlueprintsSet::Spawn => GltfBlueprintsSet::AfterSpawn Injection => inject lights & co => spawn => afterSpawn => Injection => inject lights & co
  • add a way of overriding assets for collection instances => how can we make this possible

  • cleanup all the spurious debug messages

  • fix animation handling

    • how to deal with animation graphs ?
  • remove "Library" component & co

  • make "InBlueprint" non optional,

  • and perhaps rename it to "FromBlueprint"

  • perhaps change it to FromBlueprint(BlueprintInfo)

    • in order for this to work correctly, stop iterating descendants as soon as there is one with an Existing FromBlueprint component
  • BlueprintInstanceDisabled => BlueprintInstanceDisabled

  • fix "remove component" operator from the rename/fix/update components panel

  • replace string in BlueprintInfo path with PathBuf ?

  • update main docs

    • rename project to Blenvy
    • replace all references to the old 2 add-ons with those to Blenvy
  • rename repo to "Blenvy"

  • do a deprecation release of all bevy_gltf_xxx crates to point at the new Blenvy crate

  • consider finding a way of having unique ids for all objects & collections in Blender (not trivial, if not impossible) this would allow things such as - mapping uuids to blueprint paths - solving problems with scene renames - the ability to map external TEXT files to data in BLender (git-able, hand editable)

  • make aabbs calculation non configurable, getting rid of the last setting (for now)

  • add information & screenshots about adding assets to the Blender add-on docs

  • finally deal cleanly with gltf export failures & make sure to always reset the state of the blend file

clear && pytest -svv --blender-template ../../testing/bevy_example/art/testing_library.blend --blender-executable /home/ckaos/tools/blender/blender-4.1.0-linux-x64/blender tests/test_bevy_integration_prepare.py && pytest -svv --blender-executable /home/ckaos/tools/blender/blender-4.1.0-linux-x64/blender tests/test_bevy_integration.py


PRE ALPHA1 RELEASE:

  • compress images in blender docs
  • add a small note about using the same version of the Blender add-on & the Bevy crate
  • do a quick check for the basics
  • add "right click to edit blueprint"
  • merge blenvy branch into main
  • push to crates.io
  • tag

POST ALPHA1 RELEASE: BEVY:

  • split up "spawn from blueprint"
  • cleanup very verbose messages
  • fix & cleanup trigger_instance_animation_markers_events
  • fix & cleanup save & load
  • experiment with Bevy side for splitting out animations
  • test hot reload a bit more , improve missing parts (see above)
  • make a fleshed out demo

BLENDER:

  • overall cleanup
  • review wonky logic for cross file components injections
  • update & fix tests

BEFORE FINAL RELASE:

  • cleanup & regenerate all examples assets
  • cleanup & improve all docs