23 flags_.can_be_constant =
true;
31 f_stop = get_f_stop();
32 focal_length = get_focal_length();
33 max_radius = data_->maxblur;
34 pixels_per_meter = compute_pixels_per_meter();
35 distance_to_image_of_focus = compute_distance_to_image_of_focus();
38 blur_data.
sizex = compute_maximum_defocus_radius();
43 blur_x_operation_->set_data(&blur_data);
44 blur_x_operation_->set_size(1.0f);
45 blur_y_operation_->set_data(&blur_data);
46 blur_y_operation_->set_size(1.0f);
59 const float depth = *it.in(0);
62 const float distance_to_image_of_object = (focal_length * depth) / (depth - focal_length);
67 float diameter =
abs((distance_to_image_of_object - distance_to_image_of_focus) *
68 (focal_length / (f_stop * distance_to_image_of_object)));
71 float radius = (diameter / 2.0f) * pixels_per_meter;
78float ConvertDepthToRadiusOperation::compute_maximum_defocus_radius()
const
80 const float maximum_diameter = compute_maximum_diameter_of_circle_of_confusion();
81 const float pixels_per_meter = compute_pixels_per_meter();
82 const float radius = (maximum_diameter / 2.0f) * pixels_per_meter;
95float ConvertDepthToRadiusOperation::compute_maximum_diameter_of_circle_of_confusion()
const
97 const float f_stop = get_f_stop();
98 const float focal_length = get_focal_length();
99 const float distance_to_image_of_focus = compute_distance_to_image_of_focus();
100 return math::abs((distance_to_image_of_focus / (f_stop * focal_length)) -
101 (focal_length / f_stop));
109float ConvertDepthToRadiusOperation::compute_distance_to_image_of_focus()
const
111 const float focal_length = get_focal_length();
112 const float focus_distance = compute_focus_distance();
113 return (focal_length * focus_distance) / (focus_distance - focal_length);
118float ConvertDepthToRadiusOperation::get_focal_length()
const
126float ConvertDepthToRadiusOperation::compute_focus_distance()
const
128 const Object *camera_object = get_camera_object();
129 if (!camera_object) {
138float ConvertDepthToRadiusOperation::compute_pixels_per_meter()
const
140 const int2 size =
int2(image_input_operation_->get_width(),
141 image_input_operation_->get_height());
145 return default_value;
148 switch (
camera->sensor_fit) {
161 return default_value;
165float ConvertDepthToRadiusOperation::get_f_stop()
const
170const Camera *ConvertDepthToRadiusOperation::get_camera()
const
172 const Object *camera_object = get_camera_object();
177 return reinterpret_cast<Camera *
>(camera_object->
data);
180const Object *ConvertDepthToRadiusOperation::get_camera_object()
const
182 return scene_->camera;
Camera data-block and utility functions.
float BKE_camera_object_dof_distance(const struct Object *ob)
#define DEFAULT_SENSOR_WIDTH
Object is a sort of wrapper for general info.
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Gabor Generate Gabor noise Gradient Generate interpolated color and intensity values based on the input vector Magic Generate a psychedelic color texture Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between camera
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
void init_execution() override
ConvertDepthToRadiusOperation()
a MemoryBuffer contains access to the data
void add_output_socket(DataType datatype)
SocketReader * get_input_socket_reader(unsigned int index)
NodeOperationFlags flags_
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator
T min(const T &a, const T &b)
T max(const T &a, const T &b)
VecBase< int32_t, 2 > int2
static blender::bke::bNodeSocketTemplate inputs[]
ccl_device_inline int abs(int x)