feat: add display_amp parameter for visual displacement amplification
Supports display_amp: [ax, ay, az] in input.txt. On rendering, each atom's displacement from its frame-0 equilibrium is multiplied by the corresponding factor. Physics is unchanged; only the rendered positions are scaled. Useful for visualizing small-amplitude waves that would otherwise be invisible. Example: display_amp: [1.0, 1.0, 5.0] exaggerates z-direction motion 5x. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+15
-3
@@ -75,6 +75,7 @@ camera_center_z = 0.0
|
||||
camera_pos_x = None
|
||||
camera_pos_y = None
|
||||
camera_pos_z = None
|
||||
display_amp_str = ""
|
||||
FIXED_MASK_X = None
|
||||
FIXED_MASK_Y = None
|
||||
FIXED_MASK_Z = None
|
||||
@@ -774,7 +775,7 @@ def run_from_config(config, out_dir=None):
|
||||
global box_color_r, box_color_g, box_color_b
|
||||
global use_marker, camera_keyframes_raw, camera_distance, camera_elevation, camera_azimuth
|
||||
global camera_center_x, camera_center_y, camera_center_z
|
||||
global camera_pos_x, camera_pos_y, camera_pos_z
|
||||
global camera_pos_x, camera_pos_y, camera_pos_z, display_amp_str
|
||||
global FIXED_MASK_X, FIXED_MASK_Y, FIXED_MASK_Z
|
||||
global warmup_steps, sample_start, sample_end
|
||||
global GRAVITY_FIELD, GRAVITY_INTERACTION, ELASTIC_FORCE, DAMPING_FORCE, GRAVITY_STRENGTH
|
||||
@@ -849,6 +850,13 @@ def run_from_config(config, out_dir=None):
|
||||
camera_pos_x = config.get("camera_pos_x", None)
|
||||
camera_pos_y = config.get("camera_pos_y", None)
|
||||
camera_pos_z = config.get("camera_pos_z", None)
|
||||
_damp_cfg = config.get("display_amp", None)
|
||||
if _damp_cfg is not None:
|
||||
import ast as _ast_cfg
|
||||
_dv = np.array(_ast_cfg.literal_eval(str(_damp_cfg).strip()), dtype=np.float64)
|
||||
display_amp_str = f"[{_dv[0]},{_dv[1]},{_dv[2]}]"
|
||||
else:
|
||||
display_amp_str = ""
|
||||
|
||||
# 力开关
|
||||
global GRAVITY_FIELD, GRAVITY_INTERACTION, ELASTIC_FORCE, DAMPING_FORCE, GRAVITY_STRENGTH
|
||||
@@ -1179,6 +1187,8 @@ def run_engine(engine, input_dir, output_dir, config):
|
||||
_cam_extra["camera_pos_x"] = str(camera_pos_x)
|
||||
_cam_extra["camera_pos_y"] = str(camera_pos_y)
|
||||
_cam_extra["camera_pos_z"] = str(camera_pos_z)
|
||||
if display_amp_str:
|
||||
_cam_extra["display_amp"] = display_amp_str
|
||||
save_display_npz(
|
||||
_npz_path,
|
||||
_d["frames_x"], _d["frames_y"], _d["frames_z"],
|
||||
@@ -1779,7 +1789,8 @@ def run_simulation(save_trajectory=0):
|
||||
"camera_pos_y": str(camera_pos_y),
|
||||
"camera_pos_z": str(camera_pos_z),
|
||||
} if camera_pos_x is not None else {}),
|
||||
"camera_keyframes": str(camera_keyframes_raw)}
|
||||
"camera_keyframes": str(camera_keyframes_raw),
|
||||
**({"display_amp": display_amp_str} if display_amp_str else {})}
|
||||
)
|
||||
print(f"[compute] display.txt 已保存至: {disp_path} ({n_frames_actual} 帧)")
|
||||
|
||||
@@ -1822,7 +1833,8 @@ def run_simulation(save_trajectory=0):
|
||||
"camera_center_z": str(camera_center_z),
|
||||
"camera_keyframes": str(camera_keyframes_raw),
|
||||
"number_of_frames": str(record_steps),
|
||||
"number_of_particles": str(n_atoms)}
|
||||
"number_of_particles": str(n_atoms),
|
||||
**({"display_amp": display_amp_str} if display_amp_str else {})}
|
||||
save_display_npz(_npz_path,
|
||||
sampled_x[:n_frames_actual], sampled_y[:n_frames_actual],
|
||||
sampled_z[:n_frames_actual],
|
||||
|
||||
Reference in New Issue
Block a user