4 changed files with 7562 additions and 0 deletions
@ -0,0 +1,4 @@ |
|||||||
|
# Camera list with one line of data per camera: |
||||||
|
# CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[] |
||||||
|
# Number of cameras: 1 |
||||||
|
1 PINHOLE 3460 5249 2765.2381577550354 2793.306325513402 1730.0 2624.5 |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
# Image list with two lines of data per image: |
||||||
|
# IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME |
||||||
|
# POINTS2D[] as (X, Y, POINT3D_ID) |
||||||
|
# Number of images: 32 |
||||||
|
1 1.5731778311453921e-06 -0.9999939882958248 -0.003466943528196175 -6.059956329361548e-05 0.012758568267169307 1.5010812761400716 1.312532601201028 1 123_2.jpg |
||||||
@ -0,0 +1,134 @@ |
|||||||
|
"""Blender 头图渲染脚本。""" |
||||||
|
|
||||||
|
# pyright: reportMissingImports=false |
||||||
|
|
||||||
|
import bpy |
||||||
|
import numpy as np |
||||||
|
from pathlib import Path |
||||||
|
import os |
||||||
|
import argparse |
||||||
|
import sys |
||||||
|
|
||||||
|
|
||||||
|
bpy.ops.preferences.addon_enable(module="photogrammetry_importer") |
||||||
|
|
||||||
|
def load_obj_vertices(obj_file_path): |
||||||
|
""" |
||||||
|
使用bpy加载OBJ文件并获取顶点数据。 |
||||||
|
返回网格object和顶点数组。 |
||||||
|
""" |
||||||
|
# 清除当前场景中的所有网格对象 |
||||||
|
bpy.ops.object.select_all(action='DESELECT') |
||||||
|
bpy.ops.object.select_by_type(type='MESH') |
||||||
|
bpy.ops.object.delete(use_global=False, confirm=False) |
||||||
|
|
||||||
|
# 判断文件是否存在 |
||||||
|
if not os.path.exists(obj_file_path): |
||||||
|
print(f"{obj_file_path} not exist") |
||||||
|
return None, None |
||||||
|
|
||||||
|
# 导入OBJ |
||||||
|
bpy.ops.wm.obj_import(filepath=obj_file_path, forward_axis='Y', up_axis='Z') |
||||||
|
obj_original = [obj for obj in bpy.data.objects if obj.type == 'MESH'][0] |
||||||
|
bpy.context.view_layer.objects.active = obj_original |
||||||
|
obj_original.select_set(True) |
||||||
|
mesh = obj_original.data |
||||||
|
vertices = np.array([v.co for v in mesh.vertices]) |
||||||
|
return obj_original, vertices |
||||||
|
|
||||||
|
def render_and_save(camera, output_path, cam_name): |
||||||
|
""" |
||||||
|
设置渲染参数并执行渲染操作,最后保存为图片 |
||||||
|
:param camera: 相机对象 |
||||||
|
:param output_path: 输出图片的路径 |
||||||
|
:param cam_name: 相机名称 |
||||||
|
""" |
||||||
|
# 设置渲染引擎为 Workbench |
||||||
|
bpy.context.scene.render.engine = 'BLENDER_WORKBENCH' |
||||||
|
# bpy.context.scene.render.engine = 'WORKBENCH' |
||||||
|
# 设置 Workbench 渲染的着色模式为 Flat 光和 Texture 颜色 |
||||||
|
bpy.context.scene.display.shading.light = 'FLAT' |
||||||
|
# bpy.context.scene.display.shading.color_type = 'ATTRIBUTE' |
||||||
|
bpy.context.scene.display.shading.color_type = 'TEXTURE' |
||||||
|
# 设置 Viewtransform 为 standard |
||||||
|
bpy.context.scene.view_settings.view_transform = 'Standard' |
||||||
|
|
||||||
|
# 设置背景颜色为白色 |
||||||
|
bpy.context.scene.world.color = (1, 1, 1) |
||||||
|
|
||||||
|
# 设置输出路径 |
||||||
|
bpy.context.scene.render.filepath = os.path.join(output_path, f"123_2.jpg") |
||||||
|
# 设置图像格式为 PNG |
||||||
|
bpy.context.scene.render.image_settings.file_format = 'JPEG' |
||||||
|
# 设置渲染分辨率为 100% |
||||||
|
bpy.context.scene.render.resolution_percentage = 100 |
||||||
|
|
||||||
|
# 设置当前相机为活动相机 |
||||||
|
bpy.context.scene.camera = camera |
||||||
|
# 执行渲染操作 |
||||||
|
bpy.ops.render.render(write_still=True) |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
parser = argparse.ArgumentParser() |
||||||
|
parser.add_argument("--sparse_file", type=str, required=True) |
||||||
|
parser.add_argument("--mesh_file", type=str, required=True) |
||||||
|
parser.add_argument("--output_path", type=str, required=True) |
||||||
|
args = parser.parse_args(sys.argv[sys.argv.index("--") + 1:]) |
||||||
|
# --------------------- 示例使用 --------------------- |
||||||
|
sparse_file = args.sparse_file |
||||||
|
mesh_file = args.mesh_file |
||||||
|
output_path = args.output_path |
||||||
|
|
||||||
|
|
||||||
|
# 调用操作符 |
||||||
|
bpy.ops.import_scene.colmap_model( |
||||||
|
directory = sparse_file, # 指向模型文件夹 |
||||||
|
import_points = False, # 导入稀疏点云 |
||||||
|
import_cameras = True, # 导入相机 |
||||||
|
add_background_images = False, # 把原始照片挂到相机上 |
||||||
|
adjust_render_settings = True, # 自动把渲染分辨率改成相机分辨率 |
||||||
|
adjust_clipping_distance= False # 自动把裁剪面设置得更合适 |
||||||
|
) |
||||||
|
print("导入成功!") |
||||||
|
|
||||||
|
mesh_object, vertices = load_obj_vertices(mesh_file) |
||||||
|
# 场景中查找相机名称为74_8_cam的相机 |
||||||
|
camera = None |
||||||
|
for obj in bpy.data.objects: |
||||||
|
if obj.type == 'CAMERA': |
||||||
|
camera = obj |
||||||
|
if camera.name == "123_2_cam": |
||||||
|
render_and_save(camera, str(output_path), camera.name) |
||||||
|
# break |
||||||
|
# 加载 mesh,得到 mesh_object 和 顶点数组 |
||||||
|
|
||||||
|
# if camera: |
||||||
|
# print("找到名称为74_8_cam的相机。") |
||||||
|
# else: |
||||||
|
# print("未找到名称为74_8_cam的相机。") |
||||||
|
|
||||||
|
""" |
||||||
|
blender --background --python /data/code/pose_toolkit/render_img.py -- \ |
||||||
|
--sparse_file "/data/datasets_20t/Downloads_google/rander_obj_image/2124/render_pose/" \ |
||||||
|
--mesh_file "/data/datasets_20t/Downloads_google/rander_obj_image/2124/2124.obj" \ |
||||||
|
--output_path "/data/datasets_20t/Downloads_google/rander_obj_image/2124/output" |
||||||
|
|
||||||
|
|
||||||
|
blender --background --python /data/code/pose_toolkit/render_img.py -- \ |
||||||
|
--sparse_file "/data/datasets_20t/Downloads_google/rander_obj_image/1030/render_pose/" \ |
||||||
|
--mesh_file "/data/datasets_20t/Downloads_google/rander_obj_image/1030/obj/1030.obj" \ |
||||||
|
--output_path "/data/datasets_20t/Downloads_google/rander_obj_image/1030/output" |
||||||
|
|
||||||
|
|
||||||
|
blender --background --python /data/code/pose_toolkit/render_img.py -- \ |
||||||
|
--sparse_file "/data/datasets_20t/Downloads_google/rander_obj_image/1026/render_pose/" \ |
||||||
|
--mesh_file "/data/datasets_20t/Downloads_google/rander_obj_image/1026/obj/1026.obj" \ |
||||||
|
--output_path "/data/datasets_20t/Downloads_google/rander_obj_image/1026/output" |
||||||
|
|
||||||
|
blender --background --python /data/code/pose_toolkit/render_img.py -- \ |
||||||
|
--sparse_file "/data/datasets_20t/Downloads_google/rander_obj_image/959/render_pose/" \ |
||||||
|
--mesh_file "/data/datasets_20t/Downloads_google/rander_obj_image/959/obj/959.obj" \ |
||||||
|
--output_path "/data/datasets_20t/Downloads_google/rander_obj_image/959/output" |
||||||
|
|
||||||
|
""" |
||||||
Loading…
Reference in new issue