Камера в Blender всегда определяется двумя углами поля видимости FOV – вертикальным и горизонтальным.
Один из них всегда задается пользователем через параметр камеры – Feild of View (или комбинации параметров Focal Length и Sensor Width).
Какой именно это будет угол камеры, вертикальный vFOV или горизонтальный hFOV – зависит от соотношения разрешения сторон рендера Aspect Ratio.
1 2 3 |
render_width = bpy.context.scene.render.resolution_x render_height = bpy.context.scene.render.resolution_y aspect = render_width / render_height |
Если Aspect Ratio больше 1 – параметры камеры определяют горизонтальный FOV (hFOV). Если Aspect Ratio меньше 1 – параметрами камеры задается вертикальный FOV (vFOV).
Зная один из углов FOV, всегда можно найти второй угол, воспользовавшись следующей формулой:
где:
w – разрешение по горизонтали width в пикселях
h – разрешение по вертикали height в пикселях
Следуя формулам, можно определить оба угла FOV для камеры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import bpy import math camera = bpy.context.active_object render_width = bpy.context.scene.render.resolution_x render_height = bpy.context.scene.render.resolution_y aspect = render_width / render_height if aspect > 1: hFOV = camera.data.angle vFOV = 2 * math.atan((0.5 * render_height) / (0.5 * render_width / math.tan(hFOV / 2))) else: vFOV = camera.data.angle hFOV = 2 * math.atan((0.5 * render_width) / (0.5 * render_height / math.tan(vFOV / 2))) print(math.degrees(vFOV), math.degrees(hFOV)) # 53.13 90.0 |