79 lines
2.7 KiB
Python
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)
|