Files
design2garmentcode-impl/test_garment_sim.py
2025-07-03 17:03:00 +08:00

79 lines
2.7 KiB
Python

import os
import argparse
from pathlib import Path
from pygarment.meshgen.boxmeshgen import BoxMesh
from pygarment.meshgen.simulation import run_sim
import pygarment.data_config as data_config
from pygarment.meshgen.sim_config import PathCofig
def get_command_args():
"""command line arguments to control the run"""
# https://stackoverflow.com/questions/40001892/reading-named-command-arguments
parser = argparse.ArgumentParser()
parser.add_argument(
'--pattern_spec', '-p',
help='pattern specification JSON file. File name should end with "_specification.json"',
type=str,
default='./assets/Patterns/shirt_mean_specification.json')
parser.add_argument(
"--body", "-b", type=str,
choices=['mean_all', 'mean_female', 'mean_male', 'f_smpl_average_A40', 'm_smpl_average_A40', 'nana'],
default='mean_all', help="Body to use.")
parser.add_argument(
'--sim_config', '-s',
help='Path to simulation config',
type=str,
default='./assets/Sim_props/default_sim_props.yaml')
args = parser.parse_args()
print('Commandline arguments: ', args)
return args
if __name__ == "__main__":
args = get_command_args()
props = data_config.Properties(args.sim_config)
props.set_section_stats('sim', fails={}, sim_time={}, spf={}, fin_frame={}, body_collisions={}, self_collisions={})
props.set_section_stats('render', render_time={})
spec_path = Path(args.pattern_spec)
garment_name, _, _ = spec_path.stem.rpartition('_') # assuming ending in '_specification'
sys_props = data_config.Properties('./system.json')
paths = PathCofig(
in_element_path=spec_path.parent,
out_path=sys_props['output'],
in_name=garment_name,
body_name=args.body, # 'f_smpl_average_A40'
smpl_body=False, # NOTE: depends on chosen body model
add_timestamp=True
)
# Generate and save garment box mesh (if not existent)
print(f"Generate box mesh of {garment_name} with resolution {props['sim']['config']['resolution_scale']}...")
print('\nGarment load: ', paths.in_g_spec)
garment_box_mesh = BoxMesh(paths.in_g_spec, props['sim']['config']['resolution_scale'])
garment_box_mesh.load()
garment_box_mesh.serialize(
paths, store_panels=False, uv_config=props['render']['config']['uv_texture'])
props.serialize(paths.element_sim_props)
run_sim(
garment_box_mesh.name,
props,
paths,
save_v_norms=False,
store_usd=False, # NOTE: False for fast simulation!
optimize_storage=False, # props['sim']['config']['optimize_storage'],
verbose=False
)
props.serialize(paths.element_sim_props)