Prune segments with empty triangle strips. ZE and most versions of ZETools require triangle strips.
This commit is contained in:
parent
84a910f747
commit
7b9f5c9cfb
|
@ -8,6 +8,25 @@ import math
|
||||||
from mathutils import Vector, Matrix
|
from mathutils import Vector, Matrix
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Convert model with geometry to null.
|
||||||
|
# Currently not used, but could be necessary in the future.
|
||||||
|
def make_null(model : Model):
|
||||||
|
model.model_type = ModelType.NULL
|
||||||
|
bone_map = None
|
||||||
|
geometry = None
|
||||||
|
|
||||||
|
|
||||||
|
# I think this is all we need to check for to avoid
|
||||||
|
# common ZE/ZETools crashes...
|
||||||
|
def validate_geometry_segment(segment : GeometrySegment) -> bool:
|
||||||
|
if not segment.positions or not segment.triangle_strips:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def inject_dummy_data(model : Model):
|
def inject_dummy_data(model : Model):
|
||||||
""" Adds a triangle and material to the model (scene root). Needed to export zenasst-compatible skeletons. """
|
""" Adds a triangle and material to the model (scene root). Needed to export zenasst-compatible skeletons. """
|
||||||
model.hidden = True
|
model.hidden = True
|
||||||
|
|
|
@ -9,7 +9,7 @@ from mathutils import Vector
|
||||||
from .msh_model import Model, Animation, ModelType
|
from .msh_model import Model, Animation, ModelType
|
||||||
from .msh_scene import Scene, SceneAABB
|
from .msh_scene import Scene, SceneAABB
|
||||||
from .msh_model_gather import gather_models
|
from .msh_model_gather import gather_models
|
||||||
from .msh_model_utilities import sort_by_parent, has_multiple_root_models, reparent_model_roots, get_model_world_matrix, inject_dummy_data
|
from .msh_model_utilities import make_null, validate_geometry_segment, sort_by_parent, has_multiple_root_models, reparent_model_roots, get_model_world_matrix, inject_dummy_data
|
||||||
from .msh_model_triangle_strips import create_models_triangle_strips
|
from .msh_model_triangle_strips import create_models_triangle_strips
|
||||||
from .msh_material import *
|
from .msh_material import *
|
||||||
from .msh_material_gather import gather_materials
|
from .msh_material_gather import gather_materials
|
||||||
|
@ -53,6 +53,20 @@ def create_scene(generate_triangle_strips: bool, apply_modifiers: bool, export_t
|
||||||
for segment in model.geometry:
|
for segment in model.geometry:
|
||||||
segment.triangle_strips = segment.triangles
|
segment.triangle_strips = segment.triangles
|
||||||
|
|
||||||
|
# After generating triangle strips we must prune any segments that don't have
|
||||||
|
# them, or else ZE and most versions of ZETools will crash.
|
||||||
|
|
||||||
|
# We could also make models with no valid segments nulls, since they might as well be,
|
||||||
|
# but that could have unforseeable consequences further down the modding pipeline
|
||||||
|
# and is not necessary to avoid the aforementioned crashes...
|
||||||
|
for model in scene.models:
|
||||||
|
if model.geometry is not None:
|
||||||
|
# Doing this in msh_model_gather would be messy and the presence/absence
|
||||||
|
# of triangle strips is required for a validity check.
|
||||||
|
model.geometry = [segment for segment in model.geometry if validate_geometry_segment(segment)]
|
||||||
|
#if not model.geometry:
|
||||||
|
# make_null(model)
|
||||||
|
|
||||||
if has_multiple_root_models(scene.models):
|
if has_multiple_root_models(scene.models):
|
||||||
scene.models = reparent_model_roots(scene.models)
|
scene.models = reparent_model_roots(scene.models)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue