blender相机设置
相机有的属性
Blender 中的虚拟相机通常包含以下参数。
- Resolution X & Y,相机分辨率,如,1920 * 1080
- Type,相机类型,如,Perspective(透视相机),Orthographic(正射相机),Panoramic(全景相机)
- Focal Length,焦距
- Image Sensor Size,传感器尺寸
- Camera XYZ,相机在场景中的位置
- Camera Euler XYZ,相机的俯仰角,方位角,翻滚角
参考: https://zhuanlan.zhihu.com/p/154526553
设置当前视角为相机位置
- 新建(复制)一个camera,并选中它
- ctrl + ‘0’ 将新建的相机设置为活动相机
- ctrl + alt + 0 将当前视图设置为相机观察视图
求解相机的外参数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120import bpy from mathutils import Matrix, Vector #--------------------------------------------------------------- # 3x4 P matrix from Blender camera #--------------------------------------------------------------- # BKE_camera_sensor_size def get_sensor_size(sensor_fit, sensor_x, sensor_y): if sensor_fit == 'VERTICAL': return sensor_y return sensor_x # BKE_camera_sensor_fit def get_sensor_fit(sensor_fit, size_x, size_y): if sensor_fit == 'AUTO': if size_x >= size_y: return 'HORIZONTAL' else: return 'VERTICAL' return sensor_fit # Build intrinsic camera parameters from Blender camera data # # See notes on this in # blender.stackexchange.com/questions/15102/what-is-blenders-camera-projection-matrix-model # as well as # https://blender.stackexchange.com/a/120063/3581 def get_calibration_matrix_K_from_blender(camd): if camd.type != 'PERSP': raise ValueError('Non-perspective cameras not supported') scene = bpy.context.scene f_in_mm = camd.lens scale = scene.render.resolution_percentage / 100 resolution_x_in_px = scale * scene.render.resolution_x resolution_y_in_px = scale * scene.render.resolution_y sensor_size_in_mm = get_sensor_size(camd.sensor_fit, camd.sensor_width, camd.sensor_height) sensor_fit = get_sensor_fit( camd.sensor_fit, scene.render.pixel_aspect_x * resolution_x_in_px, scene.render.pixel_aspect_y * resolution_y_in_px ) pixel_aspect_ratio = scene.render.pixel_aspect_y / scene.render.pixel_aspect_x if sensor_fit == 'HORIZONTAL': view_fac_in_px = resolution_x_in_px else: view_fac_in_px = pixel_aspect_ratio * resolution_y_in_px pixel_size_mm_per_px = sensor_size_in_mm / f_in_mm / view_fac_in_px s_u = 1 / pixel_size_mm_per_px s_v = 1 / pixel_size_mm_per_px / pixel_aspect_ratio # Parameters of intrinsic calibration matrix K u_0 = resolution_x_in_px / 2 - camd.shift_x * view_fac_in_px v_0 = resolution_y_in_px / 2 + camd.shift_y * view_fac_in_px / pixel_aspect_ratio skew = 0 # only use rectangular pixels K = Matrix( ((s_u, skew, u_0), ( 0, s_v, v_0), ( 0, 0, 1))) return K # Returns camera rotation and translation matrices from Blender. # # There are 3 coordinate systems involved: # 1. The World coordinates: "world" # - right-handed # 2. The Blender camera coordinates: "bcam" # - x is horizontal # - y is up # - right-handed: negative z look-at direction # 3. The desired computer vision camera coordinates: "cv" # - x is horizontal # - y is down (to align to the actual pixel coordinates # used in digital images) # - right-handed: positive z look-at direction def get_3x4_RT_matrix_from_blender(cam): # bcam stands for blender camera R_bcam2cv = Matrix( ((1, 0, 0), (0, -1, 0), (0, 0, -1))) # Transpose since the rotation is object rotation, # and we want coordinate rotation # R_world2bcam = cam.rotation_euler.to_matrix().transposed() # T_world2bcam = -1*R_world2bcam @ location # # Use matrix_world instead to account for all constraints location, rotation = cam.matrix_world.decompose()[0:2] R_world2bcam = rotation.to_matrix().transposed() # Convert camera location to translation vector used in coordinate changes # T_world2bcam = -1*R_world2bcam @ cam.location # Use location from matrix_world to account for constraints: T_world2bcam = -1*R_world2bcam @ location # Build the coordinate transform matrix from world to computer vision camera R_world2cv = R_bcam2cv@R_world2bcam T_world2cv = R_bcam2cv@T_world2bcam #print(R_world2cv) #print(T_world2cv) # put into 3x4 matrix RT = Matrix(( R_world2cv[0][:] + (T_world2cv[0],), R_world2cv[1][:] + (T_world2cv[1],), R_world2cv[2][:] + (T_world2cv[2],) )) return RT def get_3x4_P_matrix_from_blender(cam): K = get_calibration_matrix_K_from_blender(cam.data) RT = get_3x4_RT_matrix_from_blender(cam) return K@RT, K, RT cam = bpy.data.objects['Camera'] P, K, RT = get_3x4_P_matrix_from_blender(cam)
最后
以上就是斯文金毛最近收集整理的关于blender相机设置blender相机设置的全部内容,更多相关blender相机设置blender相机设置内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复