change README.md
This commit is contained in:
70
modeling.py
Normal file
70
modeling.py
Normal file
@ -0,0 +1,70 @@
|
||||
import os
|
||||
import argparse
|
||||
from scripts.infer import generate_response
|
||||
from scripts.blender_runner import run_blender_script
|
||||
from scripts.geometry_utils import parse_obj_file, calculate_bounding_box
|
||||
from scripts.config import CAMERA_ANGLES, BRIGHTNESS
|
||||
|
||||
def generate_blender_script(model_name, prompt):
|
||||
"""Generate a Blender script based on the given model and prompt."""
|
||||
return generate_response(model_name, prompt)
|
||||
|
||||
def ensure_output_folder_exists(output_folder):
|
||||
"""Check if the output folder exists, and create it if not."""
|
||||
if not os.path.exists(output_folder):
|
||||
os.makedirs(output_folder)
|
||||
|
||||
def run_script_and_save_obj(script, obj_name, output_folder, blender_executable):
|
||||
"""Run Blender script to save the generated .obj file."""
|
||||
ensure_output_folder_exists(output_folder)
|
||||
run_blender_script(
|
||||
script, obj_name, output_folder, [], [], (), blender_executable, save_obj=True
|
||||
)
|
||||
return os.path.join(output_folder, f"{obj_name}.obj")
|
||||
|
||||
def calculate_and_render_image(script, obj_name, output_folder, obj_path, blender_executable, brightness):
|
||||
"""Calculate bounding box and render the image using Blender script."""
|
||||
ensure_output_folder_exists(output_folder)
|
||||
vertices = parse_obj_file(obj_path)
|
||||
bounding_coords = calculate_bounding_box(vertices)
|
||||
brightness_value = BRIGHTNESS.get(brightness, BRIGHTNESS["Very Dark"])
|
||||
run_blender_script(
|
||||
script,
|
||||
obj_name,
|
||||
output_folder,
|
||||
bounding_coords,
|
||||
CAMERA_ANGLES,
|
||||
brightness_value,
|
||||
blender_executable,
|
||||
save_image=True,
|
||||
)
|
||||
|
||||
def parse_arguments():
|
||||
"""Parse command-line arguments."""
|
||||
parser = argparse.ArgumentParser(description="Run Blender Script to Generate 3D Objects and Images.")
|
||||
parser.add_argument("--model_name", type=str, default="BlenderLLM", help="Model path to generate the script.")
|
||||
parser.add_argument("--prompt", type=str, required=True, default="Please drow a cube.", help="Text prompt to describe the object.")
|
||||
parser.add_argument("--obj_name", type=str, default="cube", help="Name of the generated object file.")
|
||||
parser.add_argument("--output_folder", type=str, default="images/cube", help="Folder to save output files.")
|
||||
parser.add_argument("--blender_executable", type=str, default="blender", help="Path to Blender executable.")
|
||||
parser.add_argument("--brightness", type=str, default="Dark", choices=BRIGHTNESS.keys(), help="Brightness level for the rendered image. Options: Very Bright, Bright, Medium Bright, Dark, Very Dark.")
|
||||
return parser.parse_args()
|
||||
|
||||
def main():
|
||||
args = parse_arguments()
|
||||
|
||||
script = generate_blender_script(args.model_name, args.prompt)
|
||||
print(f"The bpy script of {args.obj_name} is:\n{script}")
|
||||
|
||||
obj_path = run_script_and_save_obj(
|
||||
script, args.obj_name, args.output_folder, args.blender_executable
|
||||
)
|
||||
print(f"OBJ file saved at {obj_path}.")
|
||||
|
||||
calculate_and_render_image(
|
||||
script, args.obj_name, args.output_folder, obj_path, args.blender_executable, args.brightness
|
||||
)
|
||||
print(f"Image rendered and saved in {args.output_folder} folder.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Reference in New Issue
Block a user