Blender V5.0
node_geo_camera_info.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "BKE_camera.h"
6
8
10
12
14{
15 b.use_custom_socket_order();
16
17 b.add_output<decl::Matrix>("Projection Matrix").description("Camera projection matrix");
18 b.add_output<decl::Float>("Focal Length").description("Perspective camera focal length");
19 b.add_output<decl::Vector>("Sensor").description("Size of the camera sensor");
20 b.add_output<decl::Vector>("Shift").description("Camera shift");
21 b.add_output<decl::Float>("Clip Start").description("Camera near clipping distance");
22 b.add_output<decl::Float>("Clip End").description("Camera far clipping distance");
23 b.add_output<decl::Float>("Focus Distance")
24 .description("Distance to the focus point for depth of field");
25 b.add_output<decl::Bool>("Is Orthographic")
26 .description("Whether the camera is using orthographic projection");
27 b.add_output<decl::Float>("Orthographic Scale")
28 .description("Orthographic camera scale (similar to zoom)");
29
30 b.add_input<decl::Object>("Camera").optional_label();
31}
32
34{
35 const Scene *scene = DEG_get_evaluated_scene(params.depsgraph());
36 if (!scene) {
37 params.set_default_remaining_outputs();
38 return;
39 }
40
41 const Object *camera_obj = params.extract_input<Object *>("Camera");
42
43 if (!camera_obj || camera_obj->type != OB_CAMERA) {
44 params.set_default_remaining_outputs();
45 return;
46 }
47
48 Camera *camera = static_cast<Camera *>(camera_obj->data);
49 if (!camera) {
50 params.set_default_remaining_outputs();
51 return;
52 }
53
54 CameraParams camera_params;
55 BKE_camera_params_init(&camera_params);
56 BKE_camera_params_from_object(&camera_params, camera_obj);
58 &camera_params, scene->r.xsch, scene->r.ysch, scene->r.xasp, scene->r.yasp);
60
61 const float4x4 projection_matrix(camera_params.winmat);
62 float focus_distance = BKE_camera_object_dof_distance(camera_obj);
63
64 params.set_output("Projection Matrix", projection_matrix);
65 params.set_output("Focal Length", camera_params.lens);
66 params.set_output("Sensor", float3{camera_params.sensor_x, camera_params.sensor_y, 0.0f});
67 params.set_output("Shift", float3{camera_params.shiftx, camera_params.shifty, 0.0f});
68 params.set_output("Clip Start", camera_params.clip_start);
69 params.set_output("Clip End", camera_params.clip_end);
70 params.set_output("Focus Distance", focus_distance);
71 params.set_output("Is Orthographic", camera_params.is_ortho);
72 params.set_output("Orthographic Scale", camera_params.ortho_scale);
73}
74
75static void node_register()
76{
77 static blender::bke::bNodeType ntype;
78
79 geo_node_type_base(&ntype, "GeometryNodeCameraInfo");
80 ntype.ui_name = "Camera Info";
81 ntype.ui_description = "Retrieve information from a camera object";
84 ntype.declare = node_declare;
86}
88
89} // namespace blender::nodes::node_geo_camera_info_cc
Camera data-block and utility functions.
float BKE_camera_object_dof_distance(const struct Object *ob)
void BKE_camera_params_init(CameraParams *params)
void BKE_camera_params_from_object(CameraParams *params, const struct Object *cam_ob)
void BKE_camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float aspx, float aspy)
void BKE_camera_params_compute_matrix(CameraParams *params)
#define NODE_CLASS_INPUT
Definition BKE_node.hh:447
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
@ OB_CAMERA
#define NOD_REGISTER_NODE(REGISTER_FUNC)
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void node_register_type(bNodeType &ntype)
Definition node.cc:2416
static void node_declare(NodeDeclarationBuilder &b)
static void node_geo_exec(GeoNodeExecParams params)
MatBase< float, 4, 4 > float4x4
VecBase< float, 3 > float3
void geo_node_type_base(blender::bke::bNodeType *ntype, std::string idname, const std::optional< int16_t > legacy_type)
float ortho_scale
Definition BKE_camera.h:47
float sensor_x
Definition BKE_camera.h:56
float winmat[4][4]
Definition BKE_camera.h:71
float clip_start
Definition BKE_camera.h:61
float clip_end
Definition BKE_camera.h:62
float sensor_y
Definition BKE_camera.h:57
struct RenderData r
Defines a node type.
Definition BKE_node.hh:238
std::string ui_description
Definition BKE_node.hh:244
NodeGeometryExecFunction geometry_node_execute
Definition BKE_node.hh:354
NodeDeclareFunction declare
Definition BKE_node.hh:362