49 float localPosition =
w - cellPosition;
51 float minDistance = 8.0f;
52 float targetOffset = 0.0f;
53 float targetPosition = 0.0f;
54 for (
int i = -1; i <= 1; i++) {
56 float pointPosition = cellOffset +
hash_float_to_float(cellPosition + cellOffset) * randomness;
57 float distanceToPoint =
voronoi_distance_1d(pointPosition, localPosition, metric, exponent);
58 if (distanceToPoint < minDistance) {
59 targetOffset = cellOffset;
60 minDistance = distanceToPoint;
61 targetPosition = pointPosition;
64 *outDistance = minDistance;
66 *outW = targetPosition + cellPosition;
79 float localPosition =
w - cellPosition;
81 float smoothDistance = 8.0f;
82 float smoothPosition = 0.0f;
84 for (
int i = -2; i <= 2; i++) {
86 float pointPosition = cellOffset +
hash_float_to_float(cellPosition + cellOffset) * randomness;
87 float distanceToPoint =
voronoi_distance_1d(pointPosition, localPosition, metric, exponent);
89 0.0f, 1.0f, 0.5f + 0.5f * (smoothDistance - distanceToPoint) / smoothness);
90 float correctionFactor = smoothness * h * (1.0f - h);
91 smoothDistance =
mix(smoothDistance, distanceToPoint, h) - correctionFactor;
92 correctionFactor /= 1.0f + 3.0f * smoothness;
94 smoothColor =
mix(smoothColor, cellColor, h) - correctionFactor;
95 smoothPosition =
mix(smoothPosition, pointPosition, h) - correctionFactor;
97 *outDistance = smoothDistance;
98 *outColor = smoothColor;
99 *outW = cellPosition + smoothPosition;
110 float cellPosition =
floorf(
w);
111 float localPosition =
w - cellPosition;
113 float distanceF1 = 8.0f;
114 float distanceF2 = 8.0f;
115 float offsetF1 = 0.0f;
116 float positionF1 = 0.0f;
117 float offsetF2 = 0.0f;
118 float positionF2 = 0.0f;
119 for (
int i = -1; i <= 1; i++) {
120 float cellOffset = i;
121 float pointPosition = cellOffset +
hash_float_to_float(cellPosition + cellOffset) * randomness;
122 float distanceToPoint =
voronoi_distance_1d(pointPosition, localPosition, metric, exponent);
123 if (distanceToPoint < distanceF1) {
124 distanceF2 = distanceF1;
125 distanceF1 = distanceToPoint;
127 offsetF1 = cellOffset;
128 positionF2 = positionF1;
129 positionF1 = pointPosition;
131 else if (distanceToPoint < distanceF2) {
132 distanceF2 = distanceToPoint;
133 offsetF2 = cellOffset;
134 positionF2 = pointPosition;
137 *outDistance = distanceF2;
139 *outW = positionF2 + cellPosition;
144 float cellPosition =
floorf(
w);
145 float localPosition =
w - cellPosition;
150 float distanceToMidLeft =
fabsf((midPointPosition + leftPointPosition) / 2.0f - localPosition);
151 float distanceToMidRight =
fabsf((midPointPosition + rightPointPosition) / 2.0f - localPosition);
153 *outDistance =
min(distanceToMidLeft, distanceToMidRight);
158 float cellPosition =
floorf(
w);
159 float localPosition =
w - cellPosition;
161 float closestPoint = 0.0f;
162 float closestPointOffset = 0.0f;
163 float minDistance = 8.0f;
164 for (
int i = -1; i <= 1; i++) {
165 float cellOffset = i;
166 float pointPosition = cellOffset +
hash_float_to_float(cellPosition + cellOffset) * randomness;
167 float distanceToPoint =
fabsf(pointPosition - localPosition);
168 if (distanceToPoint < minDistance) {
169 minDistance = distanceToPoint;
170 closestPoint = pointPosition;
171 closestPointOffset = cellOffset;
176 float closestPointToClosestPoint = 0.0f;
177 for (
int i = -1; i <= 1; i++) {
181 float cellOffset = i + closestPointOffset;
182 float pointPosition = cellOffset +
hash_float_to_float(cellPosition + cellOffset) * randomness;
183 float distanceToPoint =
fabsf(closestPoint - pointPosition);
184 if (distanceToPoint < minDistance) {
185 minDistance = distanceToPoint;
186 closestPointToClosestPoint = pointPosition;
189 *outRadius =
fabsf(closestPointToClosestPoint - closestPoint) / 2.0f;
226 float2 localPosition = coord - cellPosition;
228 float minDistance = 8.0f;
231 for (
int j = -1; j <= 1; j++) {
232 for (
int i = -1; i <= 1; i++) {
234 float2 pointPosition = cellOffset +
236 float distanceToPoint =
voronoi_distance_2d(pointPosition, localPosition, metric, exponent);
237 if (distanceToPoint < minDistance) {
238 targetOffset = cellOffset;
239 minDistance = distanceToPoint;
240 targetPosition = pointPosition;
244 *outDistance = minDistance;
246 *outPosition = targetPosition + cellPosition;
259 float2 localPosition = coord - cellPosition;
261 float smoothDistance = 8.0f;
264 for (
int j = -2; j <= 2; j++) {
265 for (
int i = -2; i <= 2; i++) {
267 float2 pointPosition = cellOffset +
269 float distanceToPoint =
voronoi_distance_2d(pointPosition, localPosition, metric, exponent);
271 0.0f, 1.0f, 0.5f + 0.5f * (smoothDistance - distanceToPoint) / smoothness);
272 float correctionFactor = smoothness * h * (1.0f - h);
273 smoothDistance =
mix(smoothDistance, distanceToPoint, h) - correctionFactor;
274 correctionFactor /= 1.0f + 3.0f * smoothness;
276 smoothColor =
mix(smoothColor, cellColor, h) - correctionFactor;
277 smoothPosition =
mix(smoothPosition, pointPosition, h) - correctionFactor;
280 *outDistance = smoothDistance;
281 *outColor = smoothColor;
282 *outPosition = cellPosition + smoothPosition;
294 float2 localPosition = coord - cellPosition;
296 float distanceF1 = 8.0f;
297 float distanceF2 = 8.0f;
302 for (
int j = -1; j <= 1; j++) {
303 for (
int i = -1; i <= 1; i++) {
305 float2 pointPosition = cellOffset +
307 float distanceToPoint =
voronoi_distance_2d(pointPosition, localPosition, metric, exponent);
308 if (distanceToPoint < distanceF1) {
309 distanceF2 = distanceF1;
310 distanceF1 = distanceToPoint;
312 offsetF1 = cellOffset;
313 positionF2 = positionF1;
314 positionF1 = pointPosition;
316 else if (distanceToPoint < distanceF2) {
317 distanceF2 = distanceToPoint;
318 offsetF2 = cellOffset;
319 positionF2 = pointPosition;
323 *outDistance = distanceF2;
325 *outPosition = positionF2 + cellPosition;
331 float2 localPosition = coord - cellPosition;
334 float minDistance = 8.0f;
335 for (
int j = -1; j <= 1; j++) {
336 for (
int i = -1; i <= 1; i++) {
338 float2 vectorToPoint = cellOffset +
341 float distanceToPoint =
dot(vectorToPoint, vectorToPoint);
342 if (distanceToPoint < minDistance) {
343 minDistance = distanceToPoint;
344 vectorToClosest = vectorToPoint;
350 for (
int j = -1; j <= 1; j++) {
351 for (
int i = -1; i <= 1; i++) {
353 float2 vectorToPoint = cellOffset +
356 float2 perpendicularToEdge = vectorToPoint - vectorToClosest;
357 if (
dot(perpendicularToEdge, perpendicularToEdge) > 0.0001f) {
358 float distanceToEdge =
dot((vectorToClosest + vectorToPoint) / 2.0f,
360 minDistance =
min(minDistance, distanceToEdge);
364 *outDistance = minDistance;
370 float2 localPosition = coord - cellPosition;
374 float minDistance = 8.0f;
375 for (
int j = -1; j <= 1; j++) {
376 for (
int i = -1; i <= 1; i++) {
378 float2 pointPosition = cellOffset +
380 float distanceToPoint =
distance(pointPosition, localPosition);
381 if (distanceToPoint < minDistance) {
382 minDistance = distanceToPoint;
383 closestPoint = pointPosition;
384 closestPointOffset = cellOffset;
391 for (
int j = -1; j <= 1; j++) {
392 for (
int i = -1; i <= 1; i++) {
393 if (i == 0 && j == 0) {
397 float2 pointPosition = cellOffset +
399 float distanceToPoint =
distance(closestPoint, pointPosition);
400 if (distanceToPoint < minDistance) {
401 minDistance = distanceToPoint;
402 closestPointToClosestPoint = pointPosition;
406 *outRadius =
distance(closestPointToClosestPoint, closestPoint) / 2.0f;
444 float3 localPosition = coord - cellPosition;
446 float minDistance = 8.0f;
449 for (
int k = -1; k <= 1; k++) {
450 for (
int j = -1; j <= 1; j++) {
451 for (
int i = -1; i <= 1; i++) {
453 float3 pointPosition = cellOffset +
456 pointPosition, localPosition, metric, exponent);
457 if (distanceToPoint < minDistance) {
458 targetOffset = cellOffset;
459 minDistance = distanceToPoint;
460 targetPosition = pointPosition;
465 *outDistance = minDistance;
467 *outPosition = targetPosition + cellPosition;
480 float3 localPosition = coord - cellPosition;
482 float smoothDistance = 8.0f;
485 for (
int k = -2; k <= 2; k++) {
486 for (
int j = -2; j <= 2; j++) {
487 for (
int i = -2; i <= 2; i++) {
489 float3 pointPosition = cellOffset +
492 pointPosition, localPosition, metric, exponent);
494 0.0f, 1.0f, 0.5f + 0.5f * (smoothDistance - distanceToPoint) / smoothness);
495 float correctionFactor = smoothness * h * (1.0f - h);
496 smoothDistance =
mix(smoothDistance, distanceToPoint, h) - correctionFactor;
497 correctionFactor /= 1.0f + 3.0f * smoothness;
499 smoothColor =
mix(smoothColor, cellColor, h) - correctionFactor;
500 smoothPosition =
mix(smoothPosition, pointPosition, h) - correctionFactor;
504 *outDistance = smoothDistance;
505 *outColor = smoothColor;
506 *outPosition = cellPosition + smoothPosition;
518 float3 localPosition = coord - cellPosition;
520 float distanceF1 = 8.0f;
521 float distanceF2 = 8.0f;
526 for (
int k = -1; k <= 1; k++) {
527 for (
int j = -1; j <= 1; j++) {
528 for (
int i = -1; i <= 1; i++) {
530 float3 pointPosition = cellOffset +
533 pointPosition, localPosition, metric, exponent);
534 if (distanceToPoint < distanceF1) {
535 distanceF2 = distanceF1;
536 distanceF1 = distanceToPoint;
538 offsetF1 = cellOffset;
539 positionF2 = positionF1;
540 positionF1 = pointPosition;
542 else if (distanceToPoint < distanceF2) {
543 distanceF2 = distanceToPoint;
544 offsetF2 = cellOffset;
545 positionF2 = pointPosition;
550 *outDistance = distanceF2;
552 *outPosition = positionF2 + cellPosition;
558 float3 localPosition = coord - cellPosition;
561 float minDistance = 8.0f;
562 for (
int k = -1; k <= 1; k++) {
563 for (
int j = -1; j <= 1; j++) {
564 for (
int i = -1; i <= 1; i++) {
566 float3 vectorToPoint = cellOffset +
569 float distanceToPoint =
dot(vectorToPoint, vectorToPoint);
570 if (distanceToPoint < minDistance) {
571 minDistance = distanceToPoint;
572 vectorToClosest = vectorToPoint;
579 for (
int k = -1; k <= 1; k++) {
580 for (
int j = -1; j <= 1; j++) {
581 for (
int i = -1; i <= 1; i++) {
583 float3 vectorToPoint = cellOffset +
586 float3 perpendicularToEdge = vectorToPoint - vectorToClosest;
587 if (
dot(perpendicularToEdge, perpendicularToEdge) > 0.0001f) {
588 float distanceToEdge =
dot((vectorToClosest + vectorToPoint) / 2.0f,
590 minDistance =
min(minDistance, distanceToEdge);
595 *outDistance = minDistance;
601 float3 localPosition = coord - cellPosition;
605 float minDistance = 8.0f;
606 for (
int k = -1; k <= 1; k++) {
607 for (
int j = -1; j <= 1; j++) {
608 for (
int i = -1; i <= 1; i++) {
610 float3 pointPosition = cellOffset +
612 float distanceToPoint =
distance(pointPosition, localPosition);
613 if (distanceToPoint < minDistance) {
614 minDistance = distanceToPoint;
615 closestPoint = pointPosition;
616 closestPointOffset = cellOffset;
624 for (
int k = -1; k <= 1; k++) {
625 for (
int j = -1; j <= 1; j++) {
626 for (
int i = -1; i <= 1; i++) {
627 if (i == 0 && j == 0 && k == 0) {
631 float3 pointPosition = cellOffset +
633 float distanceToPoint =
distance(closestPoint, pointPosition);
634 if (distanceToPoint < minDistance) {
635 minDistance = distanceToPoint;
636 closestPointToClosestPoint = pointPosition;
641 *outRadius =
distance(closestPointToClosestPoint, closestPoint) / 2.0f;
678 float4 cellPosition =
floor(coord);
679 float4 localPosition = coord - cellPosition;
681 float minDistance = 8.0f;
682 float4 targetOffset =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
683 float4 targetPosition =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
684 for (
int u = -1; u <= 1; u++) {
685 for (
int k = -1; k <= 1; k++) {
688 for (
int i = -1; i <= 1; i++) {
690 float4 pointPosition = cellOffset +
693 pointPosition, localPosition, metric, exponent);
694 if (distanceToPoint < minDistance) {
695 targetOffset = cellOffset;
696 minDistance = distanceToPoint;
697 targetPosition = pointPosition;
703 *outDistance = minDistance;
705 *outPosition = targetPosition + cellPosition;
717 float4 cellPosition =
floor(coord);
718 float4 localPosition = coord - cellPosition;
720 float smoothDistance = 8.0f;
722 float4 smoothPosition =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
723 for (
int u = -2; u <= 2; u++) {
724 for (
int k = -2; k <= 2; k++) {
727 for (
int i = -2; i <= 2; i++) {
729 float4 pointPosition = cellOffset +
732 pointPosition, localPosition, metric, exponent);
734 0.0f, 1.0f, 0.5f + 0.5f * (smoothDistance - distanceToPoint) / smoothness);
735 float correctionFactor = smoothness * h * (1.0f - h);
736 smoothDistance =
mix(smoothDistance, distanceToPoint, h) - correctionFactor;
737 correctionFactor /= 1.0f + 3.0f * smoothness;
739 smoothColor =
mix(smoothColor, cellColor, h) - correctionFactor;
740 smoothPosition =
mix(smoothPosition, pointPosition, h) - correctionFactor;
745 *outDistance = smoothDistance;
746 *outColor = smoothColor;
747 *outPosition = cellPosition + smoothPosition;
758 float4 cellPosition =
floor(coord);
759 float4 localPosition = coord - cellPosition;
761 float distanceF1 = 8.0f;
762 float distanceF2 = 8.0f;
763 float4 offsetF1 =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
764 float4 positionF1 =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
765 float4 offsetF2 =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
766 float4 positionF2 =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
767 for (
int u = -1; u <= 1; u++) {
768 for (
int k = -1; k <= 1; k++) {
771 for (
int i = -1; i <= 1; i++) {
773 float4 pointPosition = cellOffset +
776 pointPosition, localPosition, metric, exponent);
777 if (distanceToPoint < distanceF1) {
778 distanceF2 = distanceF1;
779 distanceF1 = distanceToPoint;
781 offsetF1 = cellOffset;
782 positionF2 = positionF1;
783 positionF1 = pointPosition;
785 else if (distanceToPoint < distanceF2) {
786 distanceF2 = distanceToPoint;
787 offsetF2 = cellOffset;
788 positionF2 = pointPosition;
794 *outDistance = distanceF2;
796 *outPosition = positionF2 + cellPosition;
801 float4 cellPosition =
floor(coord);
802 float4 localPosition = coord - cellPosition;
804 float4 vectorToClosest =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
805 float minDistance = 8.0f;
806 for (
int u = -1; u <= 1; u++) {
807 for (
int k = -1; k <= 1; k++) {
810 for (
int i = -1; i <= 1; i++) {
812 float4 vectorToPoint = cellOffset +
815 float distanceToPoint =
dot(vectorToPoint, vectorToPoint);
816 if (distanceToPoint < minDistance) {
817 minDistance = distanceToPoint;
818 vectorToClosest = vectorToPoint;
826 for (
int u = -1; u <= 1; u++) {
827 for (
int k = -1; k <= 1; k++) {
830 for (
int i = -1; i <= 1; i++) {
832 float4 vectorToPoint = cellOffset +
835 float4 perpendicularToEdge = vectorToPoint - vectorToClosest;
836 if (
dot(perpendicularToEdge, perpendicularToEdge) > 0.0001f) {
837 float distanceToEdge =
dot((vectorToClosest + vectorToPoint) / 2.0f,
839 minDistance =
min(minDistance, distanceToEdge);
845 *outDistance = minDistance;
850 float4 cellPosition =
floor(coord);
851 float4 localPosition = coord - cellPosition;
853 float4 closestPoint =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
854 float4 closestPointOffset =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
855 float minDistance = 8.0f;
856 for (
int u = -1; u <= 1; u++) {
857 for (
int k = -1; k <= 1; k++) {
860 for (
int i = -1; i <= 1; i++) {
862 float4 pointPosition = cellOffset +
864 float distanceToPoint =
distance(pointPosition, localPosition);
865 if (distanceToPoint < minDistance) {
866 minDistance = distanceToPoint;
867 closestPoint = pointPosition;
868 closestPointOffset = cellOffset;
876 float4 closestPointToClosestPoint =
make_float4(0.0f, 0.0f, 0.0f, 0.0f);
877 for (
int u = -1; u <= 1; u++) {
878 for (
int k = -1; k <= 1; k++) {
881 for (
int i = -1; i <= 1; i++) {
882 if (i == 0 && j == 0 && k == 0 && u == 0) {
885 float4 cellOffset =
make_float4(i, j, k, u) + closestPointOffset;
886 float4 pointPosition = cellOffset +
888 float distanceToPoint =
distance(closestPoint, pointPosition);
889 if (distanceToPoint < minDistance) {
890 minDistance = distanceToPoint;
891 closestPointToClosestPoint = pointPosition;
897 *outRadius =
distance(closestPointToClosestPoint, closestPoint) / 2.0f;
911 uint coord_stack_offset, w_stack_offset, scale_stack_offset, smoothness_stack_offset;
912 uint exponent_stack_offset, randomness_stack_offset, distance_out_stack_offset,
913 color_out_stack_offset;
914 uint position_out_stack_offset, w_out_stack_offset, radius_out_stack_offset;
920 &smoothness_stack_offset);
922 &exponent_stack_offset,
923 &randomness_stack_offset,
924 &distance_out_stack_offset,
925 &color_out_stack_offset);
927 stack_offsets.
z, &position_out_stack_offset, &w_out_stack_offset, &radius_out_stack_offset);
939 float distance_out = 0.0f, w_out = 0.0f, radius_out = 0.0f;
943 randomness =
clamp(randomness, 0.0f, 1.0f);
944 smoothness =
clamp(smoothness / 2.0f, 0.0f, 0.5f);
949 switch (dimensions) {
951 switch (voronoi_feature) {
954 w, exponent, randomness, voronoi_metric, &distance_out, &color_out, &w_out);
968 w, exponent, randomness, voronoi_metric, &distance_out, &color_out, &w_out);
985 switch (voronoi_feature) {
995 #if NODES_FEATURE(NODE_FEATURE_VORONOI_EXTRA)
1026 position_out =
make_float3(position_out_2d.
x, position_out_2d.
y, 0.0f);
1030 switch (voronoi_feature) {
1040 #if NODES_FEATURE(NODE_FEATURE_VORONOI_EXTRA)
1074 #if NODES_FEATURE(NODE_FEATURE_VORONOI_EXTRA)
1077 float4 position_out_4d;
1078 switch (voronoi_feature) {
1117 position_out =
make_float3(position_out_4d.x, position_out_4d.y, position_out_4d.z);
1118 w_out = position_out_4d.w;
MINLINE float safe_divide(float a, float b)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(float *stack, uint a)
ccl_device_inline uint4 read_node(KernelGlobals *kg, int *offset)
ccl_device_inline float stack_load_float_default(float *stack, uint a, uint value)
ccl_device_forceinline void svm_unpack_node_uchar3(uint i, uint *x, uint *y, uint *z)
ccl_device_inline void stack_store_float3(float *stack, uint a, float3 f)
ccl_device_forceinline void svm_unpack_node_uchar4(uint i, uint *x, uint *y, uint *z, uint *w)
ccl_device_inline void stack_store_float(float *stack, uint a, float f)
ccl_device_inline bool stack_valid(uint a)
#define kernel_assert(cond)
#define ccl_loop_no_unroll
#define CCL_NAMESPACE_END
#define make_float2(x, y)
#define make_float4(x, y, z, w)
#define make_float3(x, y, z)
float hash_float_to_float(float k)
@ NODE_VORONOI_N_SPHERE_RADIUS
@ NODE_VORONOI_DISTANCE_TO_EDGE
NodeVoronoiDistanceMetric
ccl_device void voronoi_distance_to_edge_3d(float3 coord, float randomness, float *outDistance)
ccl_device void voronoi_f2_3d(float3 coord, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float3 *outPosition)
ccl_device void voronoi_n_sphere_radius_1d(float w, float randomness, float *outRadius)
ccl_device float voronoi_distance_4d(float4 a, float4 b, NodeVoronoiDistanceMetric metric, float exponent)
ccl_device void voronoi_n_sphere_radius_4d(float4 coord, float randomness, float *outRadius)
ccl_device float voronoi_distance_2d(float2 a, float2 b, NodeVoronoiDistanceMetric metric, float exponent)
ccl_device void voronoi_distance_to_edge_1d(float w, float randomness, float *outDistance)
ccl_device void voronoi_n_sphere_radius_3d(float3 coord, float randomness, float *outRadius)
ccl_device void voronoi_distance_to_edge_2d(float2 coord, float randomness, float *outDistance)
ccl_device void voronoi_distance_to_edge_4d(float4 coord, float randomness, float *outDistance)
ccl_device void voronoi_f2_2d(float2 coord, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float2 *outPosition)
ccl_device void voronoi_f1_1d(float w, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float *outW)
ccl_device void voronoi_f1_2d(float2 coord, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float2 *outPosition)
ccl_device void voronoi_n_sphere_radius_2d(float2 coord, float randomness, float *outRadius)
ccl_device void voronoi_f1_4d(float4 coord, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float4 *outPosition)
ccl_device void voronoi_smooth_f1_1d(float w, float smoothness, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float *outW)
ccl_device void voronoi_f2_4d(float4 coord, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float4 *outPosition)
ccl_device void voronoi_f2_1d(float w, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float *outW)
ccl_device void voronoi_smooth_f1_4d(float4 coord, float smoothness, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float4 *outPosition)
ccl_device float voronoi_distance_3d(float3 a, float3 b, NodeVoronoiDistanceMetric metric, float exponent)
CCL_NAMESPACE_BEGIN ccl_device float voronoi_distance_1d(float a, float b, NodeVoronoiDistanceMetric metric, float exponent)
ccl_device void voronoi_smooth_f1_3d(float3 coord, float smoothness, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float3 *outPosition)
ccl_device void voronoi_smooth_f1_2d(float2 coord, float smoothness, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float2 *outPosition)
ccl_device void svm_node_tex_voronoi(KernelGlobals *kg, ShaderData *sd, float *stack, uint dimensions, uint feature, uint metric, int *offset)
ccl_device void voronoi_f1_3d(float3 coord, float exponent, float randomness, NodeVoronoiDistanceMetric metric, float *outDistance, float3 *outColor, float3 *outPosition)
ccl_device_inline float3 hash_float_to_float3(float k)
ccl_device_inline float3 hash_float4_to_float3(float4 k)
ccl_device_inline float3 hash_float2_to_float3(float2 k)
ccl_device_inline float2 hash_float2_to_float2(float2 k)
ccl_device_inline float4 hash_float4_to_float4(float4 k)
ccl_device_inline float3 hash_float3_to_float3(float3 k)
ccl_device_inline float smoothstep(float edge0, float edge1, float x)
ccl_device_inline int clamp(int a, int mn, int mx)
ccl_device_inline float distance(const float2 &a, const float2 &b)
ccl_device_inline float2 normalize(const float2 &a)
ccl_device_inline float dot(const float2 &a, const float2 &b)
ccl_device_inline float2 floor(const float2 &a)
ccl_device_inline float2 safe_divide_float2_float(const float2 a, const float b)
ccl_device_inline float3 safe_divide_float3_float(const float3 a, const float b)
ccl_device_inline float4 safe_divide_float4_float(const float4 a, const float b)