21 input_program_ =
nullptr;
24 distortion_const_ =
false;
25 dispersion_const_ =
false;
26 variables_ready_ =
false;
31 distortion_ = distortion;
32 distortion_const_ =
true;
37 dispersion_ = dispersion;
38 dispersion_const_ =
true;
51 distortion_ =
static_cast<ConstantOperation *
>(distortion_op)->get_constant_elem()[0];
54 dispersion_ =
static_cast<ConstantOperation *
>(dispersion_op)->get_constant_elem()[0];
56 update_variables(distortion_, dispersion_);
61 if (distortion_const_ && dispersion_const_) {
62 update_variables(distortion_, dispersion_);
63 variables_ready_ =
true;
88 if (!variables_ready_) {
91 if (!distortion_const_) {
96 if (!dispersion_const_) {
102 update_variables(distortion_, dispersion_);
103 variables_ready_ =
true;
111 void ScreenLensDistortionOperation::get_uv(
const float xy[2],
float uv[2])
const
113 uv[0] = sc_ * ((
xy[0] + 0.5f) - cx_) / cx_;
114 uv[1] = sc_ * ((
xy[1] + 0.5f) - cy_) / cy_;
117 void ScreenLensDistortionOperation::distort_uv(
const float uv[2],
float t,
float xy[2])
const
119 float d = 1.0f / (1.0f +
sqrtf(
t));
124 bool ScreenLensDistortionOperation::get_delta(
float r_sq,
127 float delta[2])
const
129 float t = 1.0f - k4 * r_sq;
131 distort_uv(uv,
t, delta);
138 void ScreenLensDistortionOperation::accumulate(
const MemoryBuffer *
buffer,
143 const float delta[3][2],
149 float dsf =
len_v2v2(delta[
a], delta[
b]) + 1.0f;
150 int ds = jitter_ ? (dsf < 4.0f ? 2 : (int)
sqrtf(dsf)) : (
int)dsf;
151 float sd = 1.0f / (
float)ds;
156 for (
float z = 0;
z < ds;
z++) {
158 float t = 1.0f - (k4 + tz * dk4) * r_sq;
161 distort_uv(uv,
t,
xy);
186 int count[3] = {0, 0, 0};
188 float sum[4] = {0, 0, 0, 0};
190 bool valid_r = get_delta(uv_dot, k4_[0], uv, delta[0]);
191 bool valid_g = get_delta(uv_dot, k4_[1], uv, delta[1]);
192 bool valid_b = get_delta(uv_dot, k4_[2], uv, delta[2]);
194 if (valid_r && valid_g && valid_b) {
219 input_program_ =
nullptr;
223 void ScreenLensDistortionOperation::determineUV(
float result[6],
float x,
float y)
const
225 const float xy[2] = {
x,
y};
233 get_delta(uv_dot, k4_[0], uv,
result + 0);
234 get_delta(uv_dot, k4_[1], uv,
result + 2);
235 get_delta(uv_dot, k4_[2], uv,
result + 4);
241 rcti new_input_value;
242 new_input_value.
xmin = 0;
243 new_input_value.
ymin = 0;
244 new_input_value.
xmax = 2;
245 new_input_value.
ymax = 2;
267 image_input.
xmin = 0;
269 image_input.
ymin = 0;
277 const float margin = 2;
281 if (dispersion_const_ && distortion_const_) {
283 # define UPDATE_INPUT(x, y) \
286 determineUV(coords, x, y); \
287 new_input.xmin = min_ffff(new_input.xmin, coords[0], coords[2], coords[4]); \
288 new_input.ymin = min_ffff(new_input.ymin, coords[1], coords[3], coords[5]); \
289 new_input.xmax = max_ffff(new_input.xmax, coords[0], coords[2], coords[4]); \
290 new_input.ymax = max_ffff(new_input.ymax, coords[1], coords[3], coords[5]); \
303 float dispersion = dispersion_const_ ? dispersion_ : 1.0f;
305 # define UPDATE_INPUT(x, y, distortion) \
308 update_variables(distortion, dispersion); \
309 determineUV(coords, x, y); \
310 new_input.xmin = min_ffff(new_input.xmin, coords[0], coords[2], coords[4]); \
311 new_input.ymin = min_ffff(new_input.ymin, coords[1], coords[3], coords[5]); \
312 new_input.xmax = max_ffff(new_input.xmax, coords[0], coords[2], coords[4]); \
313 new_input.ymax = max_ffff(new_input.ymax, coords[1], coords[3], coords[5]); \
317 if (distortion_const_) {
319 UPDATE_INPUT(
input->xmin,
input->xmax, distortion_);
320 UPDATE_INPUT(
input->xmin,
input->ymax, distortion_);
321 UPDATE_INPUT(
input->xmax,
input->ymax, distortion_);
322 UPDATE_INPUT(
input->xmax,
input->ymin, distortion_);
326 UPDATE_INPUT(
input->xmin,
input->xmax, -1.0f);
327 UPDATE_INPUT(
input->xmin,
input->ymax, -1.0f);
328 UPDATE_INPUT(
input->xmax,
input->ymax, -1.0f);
329 UPDATE_INPUT(
input->xmax,
input->ymin, -1.0f);
340 new_input.
xmin -= margin;
341 new_input.
ymin -= margin;
342 new_input.
xmax += margin;
343 new_input.
ymax += margin;
353 void ScreenLensDistortionOperation::update_variables(
float distortion,
float dispersion)
357 float d = 0.25f *
max_ff(
min_ff(dispersion, 1.0f), 0.0f);
360 maxk_ =
max_fff(k_[0], k_[1], k_[2]);
361 sc_ = (fit_ && (maxk_ > 0.0f)) ? (1.0f / (1.0f + 2.0f * maxk_)) : (1.0f / (1.0f + maxk_));
362 dk4_[0] = 4.0f * (k_[1] - k_[0]);
363 dk4_[1] = 4.0f * (k_[2] - k_[1]);
390 if (input_idx != 0) {
402 r_input_area =
image->get_canvas();
406 const float margin = 2;
410 if (dispersion_const_ && distortion_const_) {
412 # define UPDATE_INPUT(x, y) \
415 determineUV(coords, x, y); \
416 new_input.xmin = min_ffff(new_input.xmin, coords[0], coords[2], coords[4]); \
417 new_input.ymin = min_ffff(new_input.ymin, coords[1], coords[3], coords[5]); \
418 new_input.xmax = max_ffff(new_input.xmax, coords[0], coords[2], coords[4]); \
419 new_input.ymax = max_ffff(new_input.ymax, coords[1], coords[3], coords[5]); \
432 float dispersion = dispersion_const_ ? dispersion_ : 1.0f;
434 # define UPDATE_INPUT(x, y, distortion) \
437 update_variables(distortion, dispersion); \
438 determineUV(coords, x, y); \
439 new_input.xmin = min_ffff(new_input.xmin, coords[0], coords[2], coords[4]); \
440 new_input.ymin = min_ffff(new_input.ymin, coords[1], coords[3], coords[5]); \
441 new_input.xmax = max_ffff(new_input.xmax, coords[0], coords[2], coords[4]); \
442 new_input.ymax = max_ffff(new_input.ymax, coords[1], coords[3], coords[5]); \
446 if (distortion_const_) {
448 UPDATE_INPUT(
input->xmin,
input->xmax, distortion_);
449 UPDATE_INPUT(
input->xmin,
input->ymax, distortion_);
450 UPDATE_INPUT(
input->xmax,
input->ymax, distortion_);
451 UPDATE_INPUT(
input->xmax,
input->ymin, distortion_);
455 UPDATE_INPUT(
input->xmin,
input->xmax, -1.0f);
456 UPDATE_INPUT(
input->xmin,
input->ymax, -1.0f);
457 UPDATE_INPUT(
input->xmax,
input->ymax, -1.0f);
458 UPDATE_INPUT(
input->xmax,
input->ymin, -1.0f);
469 new_input.
xmin -= margin;
470 new_input.
ymin -= margin;
471 new_input.
xmax += margin;
472 new_input.
ymax += margin;
475 if (operation->determine_depending_area_of_interest(&new_input, read_operation,
output)) {
488 float xy[2] = {(
float)it.x, (
float)it.y};
494 const bool valid_r = get_delta(uv_dot, k4_[0], uv, delta[0]);
495 const bool valid_g = get_delta(uv_dot, k4_[1], uv, delta[1]);
496 const bool valid_b = get_delta(uv_dot, k4_[2], uv, delta[2]);
497 if (!(valid_r && valid_g && valid_b)) {
502 int count[3] = {0, 0, 0};
503 float sum[4] = {0, 0, 0, 0};
504 accumulate(input_image, 0, 1, uv_dot, uv, delta,
sum,
count);
505 accumulate(input_image, 1, 2, uv_dot, uv, delta,
sum,
count);
typedef float(TangentPoint)[2]
MINLINE float max_fff(float a, float b, float c)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void zero_v4(float r[4])
MINLINE float len_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
void BLI_rng_free(struct RNG *rng) ATTR_NONNULL(1)
struct RNG * BLI_rng_new(unsigned int seed)
float BLI_rng_get_float(struct RNG *rng) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_rcti_init_minmax(struct rcti *rect)
void BLI_rcti_translate(struct rcti *rect, int x, int y)
#define POINTER_AS_INT(i)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble z
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
Platform independent time functions.
static T sum(const btAlignedObjectArray< T > &items)
a MemoryBuffer contains access to the data of a chunk
NodeOperation contains calculation logic.
unsigned int get_height() const
void add_output_socket(DataType datatype)
const NodeOperationFlags get_flags() const
SocketReader * get_input_socket_reader(unsigned int index)
unsigned int get_width() const
eExecutionModel execution_model_
NodeOperationFlags flags_
NodeOperation * get_input_operation(int index)
virtual bool determine_depending_area_of_interest(rcti *input, ReadBufferOperation *read_operation, rcti *output)
void read_sampled(float result[4], float x, float y, PixelSampler sampler)
void set_determined_canvas_modifier(std::function< void(rcti &canvas)> fn)
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
virtual void * initialize_tile_data(rcti *)
virtual void determine_canvas(const rcti &preferred_area, rcti &r_area)
void deinit_execution() override
bool determine_depending_area_of_interest(rcti *input, ReadBufferOperation *read_operation, rcti *output) override
void * initialize_tile_data(rcti *rect) override
void set_distortion(float distortion)
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override
Get input operation area being read by this operation on rendering given output area.
void execute_pixel(float output[4], int x, int y, void *data) override
void determine_canvas(const rcti &preferred_area, rcti &r_area) override
ScreenLensDistortionOperation()
void init_data() override
void set_dispersion(float dispersion)
void init_execution() override
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx in_weight_img image(1, GPU_R32F, Qualifier::WRITE, ImageType::FLOAT_2D_ARRAY, "out_weight_img") .image(3
ccl_global float * buffer
ccl_global KernelShaderEvalInput ccl_global float * output
ccl_global KernelShaderEvalInput * input
static void area(int d1, int d2, int e1, int e2, float weights[2])
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator
constexpr rcti COM_CONSTANT_INPUT_AREA_OF_INTEREST
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
static bNodeSocketTemplate inputs[]
bool is_constant_operation
long int PIL_check_seconds_timer_i(void)