render: extract static M2 batch materializer
This commit is contained in:
@@ -60,6 +60,9 @@ const M2_PLACEMENT_GROUPER_SCRIPT := preload(
|
||||
const M2_BUILD_BATCH_PLANNER_SCRIPT := preload(
|
||||
"res://src/render/m2/m2_build_batch_planner.gd"
|
||||
)
|
||||
const M2_STATIC_BATCH_MATERIALIZER_SCRIPT := preload(
|
||||
"res://src/render/m2/m2_static_batch_materializer.gd"
|
||||
)
|
||||
const M2_RUNTIME_MESH_FINALIZER_SCRIPT := preload(
|
||||
"res://src/render/m2/m2_runtime_mesh_finalizer.gd"
|
||||
)
|
||||
@@ -273,6 +276,7 @@ var _m2_unique_placement_registry := (
|
||||
var _m2_placement_transform_resolver := M2_PLACEMENT_TRANSFORM_RESOLVER_SCRIPT.new()
|
||||
var _m2_placement_grouper := M2_PLACEMENT_GROUPER_SCRIPT.new()
|
||||
var _m2_build_batch_planner := M2_BUILD_BATCH_PLANNER_SCRIPT.new()
|
||||
var _m2_static_batch_materializer := M2_STATIC_BATCH_MATERIALIZER_SCRIPT.new()
|
||||
var _m2_runtime_mesh_finalizer := M2_RUNTIME_MESH_FINALIZER_SCRIPT.new()
|
||||
var _m2_raw_model_repository := M2_RAW_MODEL_REPOSITORY_SCRIPT.new()
|
||||
var _m2_prototype_cache_state := M2_PROTOTYPE_CACHE_STATE_SCRIPT.new()
|
||||
@@ -4396,29 +4400,20 @@ func _materialize_m2_group_batch(
|
||||
start: int,
|
||||
count: int,
|
||||
serial: int) -> void:
|
||||
if transforms.is_empty() or count <= 0 or mesh == null:
|
||||
return
|
||||
|
||||
var mm := MultiMesh.new()
|
||||
mm.transform_format = MultiMesh.TRANSFORM_3D
|
||||
mm.mesh = mesh
|
||||
mm.instance_count = count
|
||||
for i in count:
|
||||
mm.set_instance_transform(i, transforms[start + i])
|
||||
|
||||
var mmi := MultiMeshInstance3D.new()
|
||||
mmi.name = "%s_%d" % [rel_path.get_file().get_basename(), serial]
|
||||
mmi.multimesh = mm
|
||||
mmi.cast_shadow = (
|
||||
GeometryInstance3D.SHADOW_CASTING_SETTING_ON
|
||||
if m2_cast_shadows
|
||||
else GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
||||
var multimesh_instance := _m2_static_batch_materializer.materialize_batch(
|
||||
m2_root,
|
||||
rel_path,
|
||||
mesh,
|
||||
transforms,
|
||||
start,
|
||||
count,
|
||||
serial,
|
||||
m2_visibility_range,
|
||||
CHUNK_SIZE,
|
||||
m2_cast_shadows
|
||||
)
|
||||
if m2_visibility_range > 0.0:
|
||||
mmi.visibility_range_end = m2_visibility_range
|
||||
mmi.visibility_range_end_margin = CHUNK_SIZE
|
||||
m2_root.add_child(mmi)
|
||||
_set_editor_owner_recursive(mmi)
|
||||
if multimesh_instance != null:
|
||||
_set_editor_owner_recursive(multimesh_instance)
|
||||
|
||||
|
||||
func _materialize_m2_animated_batch(
|
||||
|
||||
Reference in New Issue
Block a user