From 3025fcf30518a443a8bcb66a141d41e85da09fb8 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Sat, 2 Dec 2023 20:25:36 +0800 Subject: [PATCH] update vt file exporting --- bbp_ng/OP_EXPORT_virtools.py | 70 ++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/bbp_ng/OP_EXPORT_virtools.py b/bbp_ng/OP_EXPORT_virtools.py index 93b8b1a..57055c1 100644 --- a/bbp_ng/OP_EXPORT_virtools.py +++ b/bbp_ng/OP_EXPORT_virtools.py @@ -88,7 +88,8 @@ def _export_virtools(file_name_: str, encodings_: tuple[str], compress_level_: i # export material texture_crets: tuple[_TTexturePair, ...] = _export_virtools_materials( writer, progress, material_crets) - + # export texture + _export_virtools_textures(writer, progress, texture_crets) # save document _save_virtools_document( @@ -325,9 +326,54 @@ def _export_virtools_materials( # start saving progress.enter_substeps(len(material_crets), "Saving Materials") - for material, vtmaterial in material_crets: + for mtl, vtmaterial in material_crets: # set name - vtmaterial.set_name(material.name) + vtmaterial.set_name(mtl.name) + + # get raw mtl + rawmtl: PROP_virtools_material.RawVirtoolsMaterial = PROP_virtools_material.get_raw_virtools_material(mtl) + + # apply vt material + vtmaterial.set_diffuse(rawmtl.mDiffuse) + vtmaterial.set_ambient(rawmtl.mAmbient) + vtmaterial.set_specular(rawmtl.mSpecular) + vtmaterial.set_emissive(rawmtl.mEmissive) + vtmaterial.set_specular_power(rawmtl.mSpecularPower) + + # apply assoc texture + if rawmtl.mTexture is not None: + # create or get new one vt texture + vttexture: bmap.BMTexture | None = texture_cret_map.get(rawmtl.mTexture, None) + if vttexture is None: + vttexture = writer.create_texture() + texture_cret_map[rawmtl.mTexture] = vttexture + texture_crets.append((rawmtl.mTexture, vttexture)) + # assign texture + vtmaterial.set_texture(vttexture) + else: + vtmaterial.set_texture(None) + + vtmaterial.set_texture_border_color(rawmtl.mTextureBorderColor) + + vtmaterial.set_texture_blend_mode(rawmtl.mTextureBlendMode) + vtmaterial.set_texture_min_mode(rawmtl.mTextureMinMode) + vtmaterial.set_texture_mag_mode(rawmtl.mTextureMagMode) + vtmaterial.set_texture_address_mode(rawmtl.mTextureAddressMode) + + vtmaterial.set_source_blend(rawmtl.mSourceBlend) + vtmaterial.set_dest_blend(rawmtl.mDestBlend) + vtmaterial.set_fill_mode(rawmtl.mFillMode) + vtmaterial.set_shade_mode(rawmtl.mShadeMode) + + vtmaterial.set_alpha_test_enabled(rawmtl.mEnableAlphaTest) + vtmaterial.set_alpha_blend_enabled(rawmtl.mEnableAlphaBlend) + vtmaterial.set_perspective_correction_enabled(rawmtl.mEnablePerspectiveCorrection) + vtmaterial.set_z_write_enabled(rawmtl.mEnableZWrite) + vtmaterial.set_two_sided_enabled(rawmtl.mEnableTwoSided) + + vtmaterial.set_alpha_ref(rawmtl.mAlphaRef) + vtmaterial.set_alpha_func(rawmtl.mAlphaFunc) + vtmaterial.set_z_func(rawmtl.mZFunc) # step progress.step() @@ -336,6 +382,24 @@ def _export_virtools_materials( progress.leave_substeps() return tuple(texture_crets) +def _export_virtools_textures( + writer: bmap.BMFileWriter, + progress: ProgressReport, + texture_crets: tuple[_TTexturePair, ...] + ) -> None: + # start saving + progress.enter_substeps(len(texture_crets), "Saving Textures") + + for tex, vttexture in texture_crets: + # set name + vttexture.set_name(tex.name) + + # step + progress.step() + + # leave progress and return + progress.leave_substeps() + def _save_virtools_document( writer: bmap.BMFileWriter, progress: ProgressReport,