56 if (
params.metric ==
"euclidean") {
59 else if (
params.metric ==
"manhattan") {
60 return abs(a.x -
b.x) +
abs(a.y -
b.y);
62 else if (
params.metric ==
"chebychev") {
65 else if (
params.metric ==
"minkowski") {
76 if (
params.metric ==
"euclidean") {
79 else if (
params.metric ==
"manhattan") {
80 return abs(a[0] -
b[0]) +
abs(a[1] -
b[1]) +
abs(a[2] -
b[2]);
82 else if (
params.metric ==
"chebychev") {
85 else if (
params.metric ==
"minkowski") {
97 if (
params.metric ==
"euclidean") {
100 else if (
params.metric ==
"manhattan") {
103 else if (
params.metric ==
"chebychev") {
106 else if (
params.metric ==
"minkowski") {
120 return vector2((
b != 0.0) ? a.x /
b : 0.0, (
b != 0.0) ? a.y /
b : 0.0);
125 return vector4((
b != 0.0) ? a.x /
b : 0.0,
126 (
b != 0.0) ? a.y /
b : 0.0,
127 (
b != 0.0) ? a.z /
b : 0.0,
128 (
b != 0.0) ? a.w /
b : 0.0);
151 return vector4(0.0, 0.0, 0.0, coord);
156 float cellPosition =
floor(coord);
157 float localPosition = coord - cellPosition;
160 float targetOffset = 0.0;
161 float targetPosition = 0.0;
162 for (
int i = -1; i <= 1; i++) {
163 float cellOffset = i;
164 float pointPosition = cellOffset +
167 if (distanceToPoint < minDistance) {
168 targetOffset = cellOffset;
169 minDistance = distanceToPoint;
170 targetPosition = pointPosition;
183 float cellPosition =
floor(coord);
184 float localPosition = coord - cellPosition;
186 float smoothDistance = 0.0;
187 float smoothPosition = 0.0;
190 for (
int i = -2; i <= 2; i++) {
191 float cellOffset = i;
192 float pointPosition = cellOffset +
195 h = h == -1.0 ? 1.0 :
198 0.5 + 0.5 * (smoothDistance - distanceToPoint) /
params.smoothness);
199 float correctionFactor =
params.smoothness * h * (1.0 - h);
200 smoothDistance =
mix(smoothDistance, distanceToPoint, h) - correctionFactor;
201 correctionFactor /= 1.0 + 3.0 *
params.smoothness;
203 smoothColor =
mix(smoothColor, cellColor, h) - correctionFactor;
204 smoothPosition =
mix(smoothPosition, pointPosition, h) - correctionFactor;
209 octave.
Color = smoothColor;
216 float cellPosition =
floor(coord);
217 float localPosition = coord - cellPosition;
221 float offsetF1 = 0.0;
222 float positionF1 = 0.0;
223 float offsetF2 = 0.0;
224 float positionF2 = 0.0;
225 for (
int i = -1; i <= 1; i++) {
226 float cellOffset = i;
227 float pointPosition = cellOffset +
230 if (distanceToPoint < distanceF1) {
231 distanceF2 = distanceF1;
232 distanceF1 = distanceToPoint;
234 offsetF1 = cellOffset;
235 positionF2 = positionF1;
236 positionF1 = pointPosition;
238 else if (distanceToPoint < distanceF2) {
239 distanceF2 = distanceToPoint;
240 offsetF2 = cellOffset;
241 positionF2 = pointPosition;
254 float cellPosition =
floor(coord);
255 float localPosition = coord - cellPosition;
260 float distanceToMidLeft =
abs((midPointPosition + leftPointPosition) / 2.0 - localPosition);
261 float distanceToMidRight =
abs((midPointPosition + rightPointPosition) / 2.0 - localPosition);
263 return min(distanceToMidLeft, distanceToMidRight);
268 float cellPosition =
floor(coord);
269 float localPosition = coord - cellPosition;
271 float closestPoint = 0.0;
272 float closestPointOffset = 0.0;
274 for (
int i = -1; i <= 1; i++) {
275 float cellOffset = i;
276 float pointPosition = cellOffset +
278 float distanceToPoint =
abs(pointPosition - localPosition);
279 if (distanceToPoint < minDistance) {
280 minDistance = distanceToPoint;
281 closestPoint = pointPosition;
282 closestPointOffset = cellOffset;
287 float closestPointToClosestPoint = 0.0;
288 for (
int i = -1; i <= 1; i++) {
292 float cellOffset = i + closestPointOffset;
293 float pointPosition = cellOffset +
295 float distanceToPoint =
abs(closestPoint - pointPosition);
296 if (distanceToPoint < minDistance) {
297 minDistance = distanceToPoint;
298 closestPointToClosestPoint = pointPosition;
302 return abs(closestPointToClosestPoint - closestPoint) / 2.0;
309 return vector4(coord.x, coord.y, 0.0, 0.0);
314 vector2 cellPosition =
floor(coord);
315 vector2 localPosition = coord - cellPosition;
318 vector2 targetOffset = vector2(0.0, 0.0);
319 vector2 targetPosition = vector2(0.0, 0.0);
320 for (
int j = -1; j <= 1; j++) {
321 for (
int i = -1; i <= 1; i++) {
322 vector2 cellOffset = vector2(i, j);
326 if (distanceToPoint < minDistance) {
327 targetOffset = cellOffset;
328 minDistance = distanceToPoint;
329 targetPosition = pointPosition;
343 vector2 cellPosition =
floor(coord);
344 vector2 localPosition = coord - cellPosition;
346 float smoothDistance = 0.0;
348 vector2 smoothPosition = vector2(0.0, 0.0);
350 for (
int j = -2; j <= 2; j++) {
351 for (
int i = -2; i <= 2; i++) {
352 vector2 cellOffset = vector2(i, j);
359 0.0, 1.0, 0.5 + 0.5 * (smoothDistance - distanceToPoint) /
params.smoothness);
360 float correctionFactor =
params.smoothness * h * (1.0 - h);
361 smoothDistance =
mix(smoothDistance, distanceToPoint, h) - correctionFactor;
362 correctionFactor /= 1.0 + 3.0 *
params.smoothness;
364 smoothColor =
mix(smoothColor, cellColor, h) - correctionFactor;
365 smoothPosition =
mix(smoothPosition, pointPosition, h) - correctionFactor;
371 octave.
Color = smoothColor;
378 vector2 cellPosition =
floor(coord);
379 vector2 localPosition = coord - cellPosition;
383 vector2 offsetF1 = vector2(0.0, 0.0);
384 vector2 positionF1 = vector2(0.0, 0.0);
385 vector2 offsetF2 = vector2(0.0, 0.0);
386 vector2 positionF2 = vector2(0.0, 0.0);
387 for (
int j = -1; j <= 1; j++) {
388 for (
int i = -1; i <= 1; i++) {
389 vector2 cellOffset = vector2(i, j);
393 if (distanceToPoint < distanceF1) {
394 distanceF2 = distanceF1;
395 distanceF1 = distanceToPoint;
397 offsetF1 = cellOffset;
398 positionF2 = positionF1;
399 positionF1 = pointPosition;
401 else if (distanceToPoint < distanceF2) {
402 distanceF2 = distanceToPoint;
403 offsetF2 = cellOffset;
404 positionF2 = pointPosition;
418 vector2 cellPosition =
floor(coord);
419 vector2 localPosition = coord - cellPosition;
421 vector2 vectorToClosest = vector2(0.0, 0.0);
423 for (
int j = -1; j <= 1; j++) {
424 for (
int i = -1; i <= 1; i++) {
425 vector2 cellOffset = vector2(i, j);
426 vector2 vectorToPoint = cellOffset +
430 float distanceToPoint =
dot(vectorToPoint, vectorToPoint);
431 if (distanceToPoint < minDistance) {
432 minDistance = distanceToPoint;
433 vectorToClosest = vectorToPoint;
439 for (
int j = -1; j <= 1; j++) {
440 for (
int i = -1; i <= 1; i++) {
441 vector2 cellOffset = vector2(i, j);
442 vector2 vectorToPoint = cellOffset +
446 vector2 perpendicularToEdge = vectorToPoint - vectorToClosest;
447 if (
dot(perpendicularToEdge, perpendicularToEdge) > 0.0001) {
448 float distanceToEdge =
dot((vectorToClosest + vectorToPoint) / 2.0,
450 minDistance =
min(minDistance, distanceToEdge);
460 vector2 cellPosition =
floor(coord);
461 vector2 localPosition = coord - cellPosition;
463 vector2 closestPoint = vector2(0.0, 0.0);
464 vector2 closestPointOffset = vector2(0.0, 0.0);
466 for (
int j = -1; j <= 1; j++) {
467 for (
int i = -1; i <= 1; i++) {
468 vector2 cellOffset = vector2(i, j);
471 float distanceToPoint =
distance(pointPosition, localPosition);
472 if (distanceToPoint < minDistance) {
473 minDistance = distanceToPoint;
474 closestPoint = pointPosition;
475 closestPointOffset = cellOffset;
481 vector2 closestPointToClosestPoint = vector2(0.0, 0.0);
482 for (
int j = -1; j <= 1; j++) {
483 for (
int i = -1; i <= 1; i++) {
484 if (i == 0 && j == 0) {
487 vector2 cellOffset = vector2(i, j) + closestPointOffset;
490 float distanceToPoint =
distance(closestPoint, pointPosition);
491 if (distanceToPoint < minDistance) {
492 minDistance = distanceToPoint;
493 closestPointToClosestPoint = pointPosition;
498 return distance(closestPointToClosestPoint, closestPoint) / 2.0;
505 return vector4(coord.x, coord.y, coord.z, 0.0);
511 vector3 localPosition = coord - cellPosition;
516 for (
int k = -1; k <= 1; k++) {
517 for (
int j = -1; j <= 1; j++) {
518 for (
int i = -1; i <= 1; i++) {
523 if (distanceToPoint < minDistance) {
524 targetOffset = cellOffset;
525 minDistance = distanceToPoint;
526 targetPosition = pointPosition;
542 vector3 localPosition = coord - cellPosition;
544 float smoothDistance = 0.0;
548 for (
int k = -2; k <= 2; k++) {
549 for (
int j = -2; j <= 2; j++) {
550 for (
int i = -2; i <= 2; i++) {
558 0.0, 1.0, 0.5 + 0.5 * (smoothDistance - distanceToPoint) /
params.smoothness);
559 float correctionFactor =
params.smoothness * h * (1.0 - h);
560 smoothDistance =
mix(smoothDistance, distanceToPoint, h) - correctionFactor;
561 correctionFactor /= 1.0 + 3.0 *
params.smoothness;
563 smoothColor =
mix(smoothColor, cellColor, h) - correctionFactor;
564 smoothPosition =
mix(smoothPosition, pointPosition, h) - correctionFactor;
571 octave.
Color = smoothColor;
579 vector3 localPosition = coord - cellPosition;
587 for (
int k = -1; k <= 1; k++) {
588 for (
int j = -1; j <= 1; j++) {
589 for (
int i = -1; i <= 1; i++) {
594 if (distanceToPoint < distanceF1) {
595 distanceF2 = distanceF1;
596 distanceF1 = distanceToPoint;
598 offsetF1 = cellOffset;
599 positionF2 = positionF1;
600 positionF1 = pointPosition;
602 else if (distanceToPoint < distanceF2) {
603 distanceF2 = distanceToPoint;
604 offsetF2 = cellOffset;
605 positionF2 = pointPosition;
621 vector3 localPosition = coord - cellPosition;
625 for (
int k = -1; k <= 1; k++) {
626 for (
int j = -1; j <= 1; j++) {
627 for (
int i = -1; i <= 1; i++) {
629 vector3 vectorToPoint = cellOffset +
633 float distanceToPoint =
dot(vectorToPoint, vectorToPoint);
634 if (distanceToPoint < minDistance) {
635 minDistance = distanceToPoint;
636 vectorToClosest = vectorToPoint;
643 for (
int k = -1; k <= 1; k++) {
644 for (
int j = -1; j <= 1; j++) {
645 for (
int i = -1; i <= 1; i++) {
647 vector3 vectorToPoint = cellOffset +
651 vector3 perpendicularToEdge = vectorToPoint - vectorToClosest;
652 if (
dot(perpendicularToEdge, perpendicularToEdge) > 0.0001) {
653 float distanceToEdge =
dot((vectorToClosest + vectorToPoint) / 2.0,
655 minDistance =
min(minDistance, distanceToEdge);
667 vector3 localPosition = coord - cellPosition;
672 for (
int k = -1; k <= 1; k++) {
673 for (
int j = -1; j <= 1; j++) {
674 for (
int i = -1; i <= 1; i++) {
678 float distanceToPoint =
distance(pointPosition, localPosition);
679 if (distanceToPoint < minDistance) {
680 minDistance = distanceToPoint;
681 closestPoint = pointPosition;
682 closestPointOffset = cellOffset;
690 for (
int k = -1; k <= 1; k++) {
691 for (
int j = -1; j <= 1; j++) {
692 for (
int i = -1; i <= 1; i++) {
693 if (i == 0 && j == 0 && k == 0) {
699 float distanceToPoint =
distance(closestPoint, pointPosition);
700 if (distanceToPoint < minDistance) {
701 minDistance = distanceToPoint;
702 closestPointToClosestPoint = pointPosition;
708 return distance(closestPointToClosestPoint, closestPoint) / 2.0;
720 vector4 cellPosition =
floor(coord);
721 vector4 localPosition = coord - cellPosition;
724 vector4 targetOffset = vector4(0.0, 0.0, 0.0, 0.0);
725 vector4 targetPosition = vector4(0.0, 0.0, 0.0, 0.0);
726 for (
int u = -1; u <= 1; u++) {
727 for (
int k = -1; k <= 1; k++) {
728 for (
int j = -1; j <= 1; j++) {
729 for (
int i = -1; i <= 1; i++) {
730 vector4 cellOffset = vector4(i, j, k, u);
734 if (distanceToPoint < minDistance) {
735 targetOffset = cellOffset;
736 minDistance = distanceToPoint;
737 targetPosition = pointPosition;
753 vector4 cellPosition =
floor(coord);
754 vector4 localPosition = coord - cellPosition;
756 float smoothDistance = 0.0;
758 vector4 smoothPosition = vector4(0.0, 0.0, 0.0, 0.0);
760 for (
int u = -2; u <= 2; u++) {
761 for (
int k = -2; k <= 2; k++) {
762 for (
int j = -2; j <= 2; j++) {
763 for (
int i = -2; i <= 2; i++) {
764 vector4 cellOffset = vector4(i, j, k, u);
772 0.5 + 0.5 * (smoothDistance - distanceToPoint) /
params.smoothness);
773 float correctionFactor =
params.smoothness * h * (1.0 - h);
774 smoothDistance =
mix(smoothDistance, distanceToPoint, h) - correctionFactor;
775 correctionFactor /= 1.0 + 3.0 *
params.smoothness;
777 smoothColor =
mix(smoothColor, cellColor, h) - correctionFactor;
778 smoothPosition =
mix(smoothPosition, pointPosition, h) - correctionFactor;
786 octave.
Color = smoothColor;
793 vector4 cellPosition =
floor(coord);
794 vector4 localPosition = coord - cellPosition;
798 vector4 offsetF1 = vector4(0.0, 0.0, 0.0, 0.0);
799 vector4 positionF1 = vector4(0.0, 0.0, 0.0, 0.0);
800 vector4 offsetF2 = vector4(0.0, 0.0, 0.0, 0.0);
801 vector4 positionF2 = vector4(0.0, 0.0, 0.0, 0.0);
802 for (
int u = -1; u <= 1; u++) {
803 for (
int k = -1; k <= 1; k++) {
804 for (
int j = -1; j <= 1; j++) {
805 for (
int i = -1; i <= 1; i++) {
806 vector4 cellOffset = vector4(i, j, k, u);
810 if (distanceToPoint < distanceF1) {
811 distanceF2 = distanceF1;
812 distanceF1 = distanceToPoint;
814 offsetF1 = cellOffset;
815 positionF2 = positionF1;
816 positionF1 = pointPosition;
818 else if (distanceToPoint < distanceF2) {
819 distanceF2 = distanceToPoint;
820 offsetF2 = cellOffset;
821 positionF2 = pointPosition;
837 vector4 cellPosition =
floor(coord);
838 vector4 localPosition = coord - cellPosition;
840 vector4 vectorToClosest = vector4(0.0, 0.0, 0.0, 0.0);
842 for (
int u = -1; u <= 1; u++) {
843 for (
int k = -1; k <= 1; k++) {
844 for (
int j = -1; j <= 1; j++) {
845 for (
int i = -1; i <= 1; i++) {
846 vector4 cellOffset = vector4(i, j, k, u);
847 vector4 vectorToPoint = cellOffset +
851 float distanceToPoint =
dot(vectorToPoint, vectorToPoint);
852 if (distanceToPoint < minDistance) {
853 minDistance = distanceToPoint;
854 vectorToClosest = vectorToPoint;
862 for (
int u = -1; u <= 1; u++) {
863 for (
int k = -1; k <= 1; k++) {
864 for (
int j = -1; j <= 1; j++) {
865 for (
int i = -1; i <= 1; i++) {
866 vector4 cellOffset = vector4(i, j, k, u);
867 vector4 vectorToPoint = cellOffset +
871 vector4 perpendicularToEdge = vectorToPoint - vectorToClosest;
872 if (
dot(perpendicularToEdge, perpendicularToEdge) > 0.0001) {
873 float distanceToEdge =
dot((vectorToClosest + vectorToPoint) / 2.0,
875 minDistance =
min(minDistance, distanceToEdge);
887 vector4 cellPosition =
floor(coord);
888 vector4 localPosition = coord - cellPosition;
890 vector4 closestPoint = vector4(0.0, 0.0, 0.0, 0.0);
891 vector4 closestPointOffset = vector4(0.0, 0.0, 0.0, 0.0);
893 for (
int u = -1; u <= 1; u++) {
894 for (
int k = -1; k <= 1; k++) {
895 for (
int j = -1; j <= 1; j++) {
896 for (
int i = -1; i <= 1; i++) {
897 vector4 cellOffset = vector4(i, j, k, u);
900 float distanceToPoint =
distance(pointPosition, localPosition);
901 if (distanceToPoint < minDistance) {
902 minDistance = distanceToPoint;
903 closestPoint = pointPosition;
904 closestPointOffset = cellOffset;
912 vector4 closestPointToClosestPoint = vector4(0.0, 0.0, 0.0, 0.0);
913 for (
int u = -1; u <= 1; u++) {
914 for (
int k = -1; k <= 1; k++) {
915 for (
int j = -1; j <= 1; j++) {
916 for (
int i = -1; i <= 1; i++) {
917 if (i == 0 && j == 0 && k == 0 && u == 0) {
920 vector4 cellOffset = vector4(i, j, k, u) + closestPointOffset;
923 float distanceToPoint =
distance(closestPoint, pointPosition);
924 if (distanceToPoint < minDistance) {
925 minDistance = distanceToPoint;
926 closestPointToClosestPoint = pointPosition;
933 return distance(closestPointToClosestPoint, closestPoint) / 2.0;
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 Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves 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 Invert a color
SIMD_FORCE_INLINE btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
SIMD_FORCE_INLINE btScalar length() const
Return the length of the vector.
local_group_size(16, 16) .push_constant(Type b
pow(value.r - subtrahend, 2.0)") .do_static_compilation(true)
additional_info("compositor_sum_squared_difference_float_shared") .push_constant(Type output_img float dot(value.rgb, luminance_coefficients)") .define("LOAD(value)"
MINLINE float smoothstep(float edge0, float edge1, float x)
ccl_device_inline float2 floor(const float2 a)
color hash_vector3_to_color(vector3 k)
color hash_float_to_color(float k)
color hash_vector4_to_color(vector4 k)
color hash_vector2_to_color(vector2 k)
vector2 hash_vector2_to_vector2(vector2 k)
vector4 hash_vector4_to_vector4(vector4 k)
float hash_float_to_float(float k)
vector3 hash_vector3_to_vector3(vector3 k)
float distance(float a, float b)
float voronoi_distance(float a, float b)
vector2 safe_divide(vector2 a, float b)
float voronoi_n_sphere_radius(VoronoiParams params, float coord)
vector4 voronoi_position(float coord)
VoronoiOutput voronoi_f1(VoronoiParams params, float coord)
VoronoiOutput voronoi_smooth_f1(VoronoiParams params, float coord)
VoronoiOutput voronoi_f2(VoronoiParams params, float coord)
float voronoi_distance_to_edge(VoronoiParams params, float coord)
ccl_device_inline int abs(int x)