From 8b4bb473dcc707dd52af5d61d708c175ba6505c8 Mon Sep 17 00:00:00 2001 From: "kaosat.dev" Date: Tue, 18 Jun 2024 22:32:17 +0200 Subject: [PATCH] feat(Blenvy): overhauled pieces of export to make use of Bevy 0.14 upgrade * aka we have scene_gltf_extras, no more need for cumbersome xxx_components objects ! * still wip --- tools/blenvy/TODO.md | 8 +++-- .../generate_temporary_scene_and_export.py | 30 +++++++------------ .../levels/bevy_scene_components.py | 29 +++++++++--------- 3 files changed, 31 insertions(+), 36 deletions(-) diff --git a/tools/blenvy/TODO.md b/tools/blenvy/TODO.md index f0428d4..2641f3d 100644 --- a/tools/blenvy/TODO.md +++ b/tools/blenvy/TODO.md @@ -156,12 +156,16 @@ General issues: - [ ] rename project to Blenvy - [ ] replace all references to the old 2 add-ons with those to Blenvy - [ ] rename repo to "Blenvy" +- [x] switch to bevy 0.14 rc2 +- [ ] find a solution for the new color handling +- [ ] add back lighting_components +- [ ] check if scene components are being deleted through our scene re-orgs in the spawn post process - [ ] simplify testing example: - - [ ] remove use of rapier physics (or even the whole common boilerplate ?) + - [x] remove use of rapier physics (or even the whole common boilerplate ?) - [ ] remove/replace bevy editor pls with some native ui to display hierarchies - - [ ] switch to bevy rc2 + - [ ] simplify examples: - [ ] a full fledged demo (including physics & co) diff --git a/tools/blenvy/add_ons/auto_export/common/generate_temporary_scene_and_export.py b/tools/blenvy/add_ons/auto_export/common/generate_temporary_scene_and_export.py index d300ee7..c33325a 100644 --- a/tools/blenvy/add_ons/auto_export/common/generate_temporary_scene_and_export.py +++ b/tools/blenvy/add_ons/auto_export/common/generate_temporary_scene_and_export.py @@ -20,23 +20,13 @@ def generate_temporary_scene_and_export(settings, gltf_export_settings, gltf_out temp_root_collection = temp_scene.collection print("additional_dataAAAAAAAAAAAAAAAH", additional_data) + properties_black_list = ['user_assets', 'components_meta'] if additional_data is not None: # FIXME not a fan of having this here for entry in dict(additional_data): - print("entry in additional data", entry) - if entry == "local_assets": - temp_scene["local_assets"] = additional_data[entry] # this is for bevy 0.14 - temp_root_collection["local_assets"] = additional_data[entry] # for previous bevy versions, remove when migration done - bla = "[(name: \"test_asset\", path: \"audio/fake.mp3\")]" - local_assets = additional_data.get(entry, []) - local_assets = [entry for entry in local_assets] - add_scene_property(temp_scene, 'assets_components', {"LocalAssets": f"LocalAssets({local_assets})".replace("'", '')}) - - if entry == entry == "AllAssets": - temp_scene["AllAssets"] = additional_data[entry] - temp_root_collection["AllAssets"] = additional_data[entry] # for previous bevy versions, remove when migration done - all_assets = additional_data.get(entry, []) - all_assets = [entry for entry in all_assets] - add_scene_property(temp_scene, 'assets_components', {"AllAssets": f"AllAssets({all_assets})".replace("'", '')}) + # we copy everything over except those on the black list + if entry not in properties_black_list: + print("entry in additional data", entry, "value", additional_data[entry], "in", additional_data.name) + temp_scene[entry] = additional_data[entry] # save active scene active_scene = bpy.context.window.scene @@ -121,13 +111,13 @@ def clear_hollow_scene(temp_scene, original_root_collection): def restore_original_names(collection): if collection.name.endswith("____bak"): collection.name = collection.name.replace("____bak", "") - for object in collection.objects: - if object.instance_type == 'COLLECTION': - if object.name.endswith("____bak"): - object.name = object.name.replace("____bak", "") - else: + for object in collection.all_objects: + """if object.instance_type == 'COLLECTION': if object.name.endswith("____bak"): object.name = object.name.replace("____bak", "") + else: """ + if object.name.endswith("____bak"): + object.name = object.name.replace("____bak", "") for child_collection in collection.children: restore_original_names(child_collection) diff --git a/tools/blenvy/add_ons/auto_export/levels/bevy_scene_components.py b/tools/blenvy/add_ons/auto_export/levels/bevy_scene_components.py index f77d116..9c7dfa8 100644 --- a/tools/blenvy/add_ons/auto_export/levels/bevy_scene_components.py +++ b/tools/blenvy/add_ons/auto_export/levels/bevy_scene_components.py @@ -5,32 +5,33 @@ from blenvy.core.object_makers import make_empty # TODO: replace this with placing scene level custom properties once support for that has been added to bevy_gltf def upsert_scene_components(main_scenes): for scene in main_scenes: - lighting_components_name = f"lighting_components_{scene.name}" + """lighting_components_name = f"lighting_components_{scene.name}" lighting_components = bpy.data.objects.get(lighting_components_name, None) if not lighting_components: root_collection = scene.collection - lighting_components = make_empty('lighting_components_'+scene.name, [0,0,0], [0,0,0], [0,0,0], root_collection) + lighting_components = make_empty('lighting_components_'+scene.name, [0,0,0], [0,0,0], [0,0,0], root_collection)""" - if scene.world is not None: - lighting_components['BlenderBackgroundShader'] = ambient_color_to_component(scene.world) - lighting_components['BlenderShadowSettings'] = scene_shadows_to_component(scene) + """if scene.world is not None: + lighting_components['BlenderBackgroundShader'] = ambient_color_to_component(scene.world)""" # FIXME add back + scene['BlenderShadowSettings'] = scene_shadows_to_component(scene) if scene.eevee.use_bloom: - lighting_components['BloomSettings'] = scene_bloom_to_component(scene) - elif 'BloomSettings' in lighting_components: - del lighting_components['BloomSettings'] + scene['BloomSettings'] = scene_bloom_to_component(scene) + elif 'BloomSettings' in scene: + del scene['BloomSettings'] if scene.eevee.use_gtao: - lighting_components['SSAOSettings'] = scene_ao_to_component(scene) - elif 'SSAOSettings' in lighting_components: - del lighting_components['SSAOSettings'] + scene['SSAOSettings'] = scene_ao_to_component(scene) + elif 'SSAOSettings' in scene: + del scene['SSAOSettings'] def remove_scene_components(main_scenes): - for scene in main_scenes: + pass + """for scene in main_scenes: lighting_components_name = f"lighting_components_{scene.name}" lighting_components = bpy.data.objects.get(lighting_components_name, None) if lighting_components: - bpy.data.objects.remove(lighting_components, do_unlink=True) + bpy.data.objects.remove(lighting_components, do_unlink=True)""" def ambient_color_to_component(world): @@ -44,7 +45,7 @@ def ambient_color_to_component(world): if color is not None and strength is not None: - colorRgba = f"Rgba(red: {color[0]}, green: {color[1]}, blue: {color[2]}, alpha: {color[3]})" + colorRgba = f"LinearRgba(red: {color[0]}, green: {color[1]}, blue: {color[2]}, alpha: {color[3]})" component = f"( color: {colorRgba}, strength: {strength})" return component return None