Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/svm/svm_voronoi.h
| Show All 40 Lines | |||||
| { | { | ||||
| return fabsf(b - a); | return fabsf(b - a); | ||||
| } | } | ||||
| ccl_device void voronoi_f1_1d(float w, | ccl_device void voronoi_f1_1d(float w, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float *outW) | ccl_private float *outW) | ||||
| { | { | ||||
| float cellPosition = floorf(w); | float cellPosition = floorf(w); | ||||
| float localPosition = w - cellPosition; | float localPosition = w - cellPosition; | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| float targetOffset = 0.0f; | float targetOffset = 0.0f; | ||||
| float targetPosition = 0.0f; | float targetPosition = 0.0f; | ||||
| for (int i = -1; i <= 1; i++) { | for (int i = -1; i <= 1; i++) { | ||||
| Show All 11 Lines | ccl_device void voronoi_f1_1d(float w, | ||||
| *outW = targetPosition + cellPosition; | *outW = targetPosition + cellPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_smooth_f1_1d(float w, | ccl_device void voronoi_smooth_f1_1d(float w, | ||||
| float smoothness, | float smoothness, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float *outW) | ccl_private float *outW) | ||||
| { | { | ||||
| float cellPosition = floorf(w); | float cellPosition = floorf(w); | ||||
| float localPosition = w - cellPosition; | float localPosition = w - cellPosition; | ||||
| float smoothDistance = 8.0f; | float smoothDistance = 8.0f; | ||||
| float smoothPosition = 0.0f; | float smoothPosition = 0.0f; | ||||
| float3 smoothColor = make_float3(0.0f, 0.0f, 0.0f); | float3 smoothColor = make_float3(0.0f, 0.0f, 0.0f); | ||||
| for (int i = -2; i <= 2; i++) { | for (int i = -2; i <= 2; i++) { | ||||
| Show All 13 Lines | ccl_device void voronoi_smooth_f1_1d(float w, | ||||
| *outColor = smoothColor; | *outColor = smoothColor; | ||||
| *outW = cellPosition + smoothPosition; | *outW = cellPosition + smoothPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_f2_1d(float w, | ccl_device void voronoi_f2_1d(float w, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float *outW) | ccl_private float *outW) | ||||
| { | { | ||||
| float cellPosition = floorf(w); | float cellPosition = floorf(w); | ||||
| float localPosition = w - cellPosition; | float localPosition = w - cellPosition; | ||||
| float distanceF1 = 8.0f; | float distanceF1 = 8.0f; | ||||
| float distanceF2 = 8.0f; | float distanceF2 = 8.0f; | ||||
| float offsetF1 = 0.0f; | float offsetF1 = 0.0f; | ||||
| float positionF1 = 0.0f; | float positionF1 = 0.0f; | ||||
| Show All 17 Lines | else if (distanceToPoint < distanceF2) { | ||||
| positionF2 = pointPosition; | positionF2 = pointPosition; | ||||
| } | } | ||||
| } | } | ||||
| *outDistance = distanceF2; | *outDistance = distanceF2; | ||||
| *outColor = hash_float_to_float3(cellPosition + offsetF2); | *outColor = hash_float_to_float3(cellPosition + offsetF2); | ||||
| *outW = positionF2 + cellPosition; | *outW = positionF2 + cellPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_distance_to_edge_1d(float w, float randomness, float *outDistance) | ccl_device void voronoi_distance_to_edge_1d(float w, | ||||
| float randomness, | |||||
| ccl_private float *outDistance) | |||||
| { | { | ||||
| float cellPosition = floorf(w); | float cellPosition = floorf(w); | ||||
| float localPosition = w - cellPosition; | float localPosition = w - cellPosition; | ||||
| float midPointPosition = hash_float_to_float(cellPosition) * randomness; | float midPointPosition = hash_float_to_float(cellPosition) * randomness; | ||||
| float leftPointPosition = -1.0f + hash_float_to_float(cellPosition - 1.0f) * randomness; | float leftPointPosition = -1.0f + hash_float_to_float(cellPosition - 1.0f) * randomness; | ||||
| float rightPointPosition = 1.0f + hash_float_to_float(cellPosition + 1.0f) * randomness; | float rightPointPosition = 1.0f + hash_float_to_float(cellPosition + 1.0f) * randomness; | ||||
| float distanceToMidLeft = fabsf((midPointPosition + leftPointPosition) / 2.0f - localPosition); | float distanceToMidLeft = fabsf((midPointPosition + leftPointPosition) / 2.0f - localPosition); | ||||
| float distanceToMidRight = fabsf((midPointPosition + rightPointPosition) / 2.0f - localPosition); | float distanceToMidRight = fabsf((midPointPosition + rightPointPosition) / 2.0f - localPosition); | ||||
| *outDistance = min(distanceToMidLeft, distanceToMidRight); | *outDistance = min(distanceToMidLeft, distanceToMidRight); | ||||
| } | } | ||||
| ccl_device void voronoi_n_sphere_radius_1d(float w, float randomness, float *outRadius) | ccl_device void voronoi_n_sphere_radius_1d(float w, float randomness, ccl_private float *outRadius) | ||||
| { | { | ||||
| float cellPosition = floorf(w); | float cellPosition = floorf(w); | ||||
| float localPosition = w - cellPosition; | float localPosition = w - cellPosition; | ||||
| float closestPoint = 0.0f; | float closestPoint = 0.0f; | ||||
| float closestPointOffset = 0.0f; | float closestPointOffset = 0.0f; | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| for (int i = -1; i <= 1; i++) { | for (int i = -1; i <= 1; i++) { | ||||
| ▲ Show 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | else { | ||||
| return 0.0f; | return 0.0f; | ||||
| } | } | ||||
| } | } | ||||
| ccl_device void voronoi_f1_2d(float2 coord, | ccl_device void voronoi_f1_2d(float2 coord, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float2 *outPosition) | ccl_private float2 *outPosition) | ||||
| { | { | ||||
| float2 cellPosition = floor(coord); | float2 cellPosition = floor(coord); | ||||
| float2 localPosition = coord - cellPosition; | float2 localPosition = coord - cellPosition; | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| float2 targetOffset = make_float2(0.0f, 0.0f); | float2 targetOffset = make_float2(0.0f, 0.0f); | ||||
| float2 targetPosition = make_float2(0.0f, 0.0f); | float2 targetPosition = make_float2(0.0f, 0.0f); | ||||
| for (int j = -1; j <= 1; j++) { | for (int j = -1; j <= 1; j++) { | ||||
| Show All 14 Lines | ccl_device void voronoi_f1_2d(float2 coord, | ||||
| *outPosition = targetPosition + cellPosition; | *outPosition = targetPosition + cellPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_smooth_f1_2d(float2 coord, | ccl_device void voronoi_smooth_f1_2d(float2 coord, | ||||
| float smoothness, | float smoothness, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float2 *outPosition) | ccl_private float2 *outPosition) | ||||
| { | { | ||||
| float2 cellPosition = floor(coord); | float2 cellPosition = floor(coord); | ||||
| float2 localPosition = coord - cellPosition; | float2 localPosition = coord - cellPosition; | ||||
| float smoothDistance = 8.0f; | float smoothDistance = 8.0f; | ||||
| float3 smoothColor = make_float3(0.0f, 0.0f, 0.0f); | float3 smoothColor = make_float3(0.0f, 0.0f, 0.0f); | ||||
| float2 smoothPosition = make_float2(0.0f, 0.0f); | float2 smoothPosition = make_float2(0.0f, 0.0f); | ||||
| for (int j = -2; j <= 2; j++) { | for (int j = -2; j <= 2; j++) { | ||||
| Show All 16 Lines | ccl_device void voronoi_smooth_f1_2d(float2 coord, | ||||
| *outColor = smoothColor; | *outColor = smoothColor; | ||||
| *outPosition = cellPosition + smoothPosition; | *outPosition = cellPosition + smoothPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_f2_2d(float2 coord, | ccl_device void voronoi_f2_2d(float2 coord, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float2 *outPosition) | ccl_private float2 *outPosition) | ||||
| { | { | ||||
| float2 cellPosition = floor(coord); | float2 cellPosition = floor(coord); | ||||
| float2 localPosition = coord - cellPosition; | float2 localPosition = coord - cellPosition; | ||||
| float distanceF1 = 8.0f; | float distanceF1 = 8.0f; | ||||
| float distanceF2 = 8.0f; | float distanceF2 = 8.0f; | ||||
| float2 offsetF1 = make_float2(0.0f, 0.0f); | float2 offsetF1 = make_float2(0.0f, 0.0f); | ||||
| float2 positionF1 = make_float2(0.0f, 0.0f); | float2 positionF1 = make_float2(0.0f, 0.0f); | ||||
| Show All 20 Lines | for (int i = -1; i <= 1; i++) { | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| *outDistance = distanceF2; | *outDistance = distanceF2; | ||||
| *outColor = hash_float2_to_float3(cellPosition + offsetF2); | *outColor = hash_float2_to_float3(cellPosition + offsetF2); | ||||
| *outPosition = positionF2 + cellPosition; | *outPosition = positionF2 + cellPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_distance_to_edge_2d(float2 coord, float randomness, float *outDistance) | ccl_device void voronoi_distance_to_edge_2d(float2 coord, | ||||
| float randomness, | |||||
| ccl_private float *outDistance) | |||||
| { | { | ||||
| float2 cellPosition = floor(coord); | float2 cellPosition = floor(coord); | ||||
| float2 localPosition = coord - cellPosition; | float2 localPosition = coord - cellPosition; | ||||
| float2 vectorToClosest = make_float2(0.0f, 0.0f); | float2 vectorToClosest = make_float2(0.0f, 0.0f); | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| for (int j = -1; j <= 1; j++) { | for (int j = -1; j <= 1; j++) { | ||||
| for (int i = -1; i <= 1; i++) { | for (int i = -1; i <= 1; i++) { | ||||
| Show All 22 Lines | for (int i = -1; i <= 1; i++) { | ||||
| normalize(perpendicularToEdge)); | normalize(perpendicularToEdge)); | ||||
| minDistance = min(minDistance, distanceToEdge); | minDistance = min(minDistance, distanceToEdge); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| *outDistance = minDistance; | *outDistance = minDistance; | ||||
| } | } | ||||
| ccl_device void voronoi_n_sphere_radius_2d(float2 coord, float randomness, float *outRadius) | ccl_device void voronoi_n_sphere_radius_2d(float2 coord, | ||||
| float randomness, | |||||
| ccl_private float *outRadius) | |||||
| { | { | ||||
| float2 cellPosition = floor(coord); | float2 cellPosition = floor(coord); | ||||
| float2 localPosition = coord - cellPosition; | float2 localPosition = coord - cellPosition; | ||||
| float2 closestPoint = make_float2(0.0f, 0.0f); | float2 closestPoint = make_float2(0.0f, 0.0f); | ||||
| float2 closestPointOffset = make_float2(0.0f, 0.0f); | float2 closestPointOffset = make_float2(0.0f, 0.0f); | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| for (int j = -1; j <= 1; j++) { | for (int j = -1; j <= 1; j++) { | ||||
| ▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | else { | ||||
| return 0.0f; | return 0.0f; | ||||
| } | } | ||||
| } | } | ||||
| ccl_device void voronoi_f1_3d(float3 coord, | ccl_device void voronoi_f1_3d(float3 coord, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float3 *outPosition) | ccl_private float3 *outPosition) | ||||
| { | { | ||||
| float3 cellPosition = floor(coord); | float3 cellPosition = floor(coord); | ||||
| float3 localPosition = coord - cellPosition; | float3 localPosition = coord - cellPosition; | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| float3 targetOffset = make_float3(0.0f, 0.0f, 0.0f); | float3 targetOffset = make_float3(0.0f, 0.0f, 0.0f); | ||||
| float3 targetPosition = make_float3(0.0f, 0.0f, 0.0f); | float3 targetPosition = make_float3(0.0f, 0.0f, 0.0f); | ||||
| for (int k = -1; k <= 1; k++) { | for (int k = -1; k <= 1; k++) { | ||||
| Show All 17 Lines | ccl_device void voronoi_f1_3d(float3 coord, | ||||
| *outPosition = targetPosition + cellPosition; | *outPosition = targetPosition + cellPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_smooth_f1_3d(float3 coord, | ccl_device void voronoi_smooth_f1_3d(float3 coord, | ||||
| float smoothness, | float smoothness, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float3 *outPosition) | ccl_private float3 *outPosition) | ||||
| { | { | ||||
| float3 cellPosition = floor(coord); | float3 cellPosition = floor(coord); | ||||
| float3 localPosition = coord - cellPosition; | float3 localPosition = coord - cellPosition; | ||||
| float smoothDistance = 8.0f; | float smoothDistance = 8.0f; | ||||
| float3 smoothColor = make_float3(0.0f, 0.0f, 0.0f); | float3 smoothColor = make_float3(0.0f, 0.0f, 0.0f); | ||||
| float3 smoothPosition = make_float3(0.0f, 0.0f, 0.0f); | float3 smoothPosition = make_float3(0.0f, 0.0f, 0.0f); | ||||
| for (int k = -2; k <= 2; k++) { | for (int k = -2; k <= 2; k++) { | ||||
| Show All 19 Lines | ccl_device void voronoi_smooth_f1_3d(float3 coord, | ||||
| *outColor = smoothColor; | *outColor = smoothColor; | ||||
| *outPosition = cellPosition + smoothPosition; | *outPosition = cellPosition + smoothPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_f2_3d(float3 coord, | ccl_device void voronoi_f2_3d(float3 coord, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float3 *outPosition) | ccl_private float3 *outPosition) | ||||
| { | { | ||||
| float3 cellPosition = floor(coord); | float3 cellPosition = floor(coord); | ||||
| float3 localPosition = coord - cellPosition; | float3 localPosition = coord - cellPosition; | ||||
| float distanceF1 = 8.0f; | float distanceF1 = 8.0f; | ||||
| float distanceF2 = 8.0f; | float distanceF2 = 8.0f; | ||||
| float3 offsetF1 = make_float3(0.0f, 0.0f, 0.0f); | float3 offsetF1 = make_float3(0.0f, 0.0f, 0.0f); | ||||
| float3 positionF1 = make_float3(0.0f, 0.0f, 0.0f); | float3 positionF1 = make_float3(0.0f, 0.0f, 0.0f); | ||||
| Show All 23 Lines | for (int j = -1; j <= 1; j++) { | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| *outDistance = distanceF2; | *outDistance = distanceF2; | ||||
| *outColor = hash_float3_to_float3(cellPosition + offsetF2); | *outColor = hash_float3_to_float3(cellPosition + offsetF2); | ||||
| *outPosition = positionF2 + cellPosition; | *outPosition = positionF2 + cellPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_distance_to_edge_3d(float3 coord, float randomness, float *outDistance) | ccl_device void voronoi_distance_to_edge_3d(float3 coord, | ||||
| float randomness, | |||||
| ccl_private float *outDistance) | |||||
| { | { | ||||
| float3 cellPosition = floor(coord); | float3 cellPosition = floor(coord); | ||||
| float3 localPosition = coord - cellPosition; | float3 localPosition = coord - cellPosition; | ||||
| float3 vectorToClosest = make_float3(0.0f, 0.0f, 0.0f); | float3 vectorToClosest = make_float3(0.0f, 0.0f, 0.0f); | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| for (int k = -1; k <= 1; k++) { | for (int k = -1; k <= 1; k++) { | ||||
| for (int j = -1; j <= 1; j++) { | for (int j = -1; j <= 1; j++) { | ||||
| Show All 26 Lines | for (int j = -1; j <= 1; j++) { | ||||
| minDistance = min(minDistance, distanceToEdge); | minDistance = min(minDistance, distanceToEdge); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| *outDistance = minDistance; | *outDistance = minDistance; | ||||
| } | } | ||||
| ccl_device void voronoi_n_sphere_radius_3d(float3 coord, float randomness, float *outRadius) | ccl_device void voronoi_n_sphere_radius_3d(float3 coord, | ||||
| float randomness, | |||||
| ccl_private float *outRadius) | |||||
| { | { | ||||
| float3 cellPosition = floor(coord); | float3 cellPosition = floor(coord); | ||||
| float3 localPosition = coord - cellPosition; | float3 localPosition = coord - cellPosition; | ||||
| float3 closestPoint = make_float3(0.0f, 0.0f, 0.0f); | float3 closestPoint = make_float3(0.0f, 0.0f, 0.0f); | ||||
| float3 closestPointOffset = make_float3(0.0f, 0.0f, 0.0f); | float3 closestPointOffset = make_float3(0.0f, 0.0f, 0.0f); | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| for (int k = -1; k <= 1; k++) { | for (int k = -1; k <= 1; k++) { | ||||
| ▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | else { | ||||
| return 0.0f; | return 0.0f; | ||||
| } | } | ||||
| } | } | ||||
| ccl_device void voronoi_f1_4d(float4 coord, | ccl_device void voronoi_f1_4d(float4 coord, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float4 *outPosition) | ccl_private float4 *outPosition) | ||||
| { | { | ||||
| float4 cellPosition = floor(coord); | float4 cellPosition = floor(coord); | ||||
| float4 localPosition = coord - cellPosition; | float4 localPosition = coord - cellPosition; | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| float4 targetOffset = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | float4 targetOffset = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | ||||
| float4 targetPosition = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | float4 targetPosition = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | ||||
| for (int u = -1; u <= 1; u++) { | for (int u = -1; u <= 1; u++) { | ||||
| Show All 20 Lines | ccl_device void voronoi_f1_4d(float4 coord, | ||||
| *outPosition = targetPosition + cellPosition; | *outPosition = targetPosition + cellPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_smooth_f1_4d(float4 coord, | ccl_device void voronoi_smooth_f1_4d(float4 coord, | ||||
| float smoothness, | float smoothness, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float4 *outPosition) | ccl_private float4 *outPosition) | ||||
| { | { | ||||
| float4 cellPosition = floor(coord); | float4 cellPosition = floor(coord); | ||||
| float4 localPosition = coord - cellPosition; | float4 localPosition = coord - cellPosition; | ||||
| float smoothDistance = 8.0f; | float smoothDistance = 8.0f; | ||||
| float3 smoothColor = make_float3(0.0f, 0.0f, 0.0f); | float3 smoothColor = make_float3(0.0f, 0.0f, 0.0f); | ||||
| float4 smoothPosition = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | float4 smoothPosition = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | ||||
| for (int u = -2; u <= 2; u++) { | for (int u = -2; u <= 2; u++) { | ||||
| Show All 22 Lines | ccl_device void voronoi_smooth_f1_4d(float4 coord, | ||||
| *outColor = smoothColor; | *outColor = smoothColor; | ||||
| *outPosition = cellPosition + smoothPosition; | *outPosition = cellPosition + smoothPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_f2_4d(float4 coord, | ccl_device void voronoi_f2_4d(float4 coord, | ||||
| float exponent, | float exponent, | ||||
| float randomness, | float randomness, | ||||
| NodeVoronoiDistanceMetric metric, | NodeVoronoiDistanceMetric metric, | ||||
| float *outDistance, | ccl_private float *outDistance, | ||||
| float3 *outColor, | ccl_private float3 *outColor, | ||||
| float4 *outPosition) | ccl_private float4 *outPosition) | ||||
| { | { | ||||
| float4 cellPosition = floor(coord); | float4 cellPosition = floor(coord); | ||||
| float4 localPosition = coord - cellPosition; | float4 localPosition = coord - cellPosition; | ||||
| float distanceF1 = 8.0f; | float distanceF1 = 8.0f; | ||||
| float distanceF2 = 8.0f; | float distanceF2 = 8.0f; | ||||
| float4 offsetF1 = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | float4 offsetF1 = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | ||||
| float4 positionF1 = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | float4 positionF1 = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | ||||
| Show All 26 Lines | for (int k = -1; k <= 1; k++) { | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| *outDistance = distanceF2; | *outDistance = distanceF2; | ||||
| *outColor = hash_float4_to_float3(cellPosition + offsetF2); | *outColor = hash_float4_to_float3(cellPosition + offsetF2); | ||||
| *outPosition = positionF2 + cellPosition; | *outPosition = positionF2 + cellPosition; | ||||
| } | } | ||||
| ccl_device void voronoi_distance_to_edge_4d(float4 coord, float randomness, float *outDistance) | ccl_device void voronoi_distance_to_edge_4d(float4 coord, | ||||
| float randomness, | |||||
| ccl_private float *outDistance) | |||||
| { | { | ||||
| float4 cellPosition = floor(coord); | float4 cellPosition = floor(coord); | ||||
| float4 localPosition = coord - cellPosition; | float4 localPosition = coord - cellPosition; | ||||
| float4 vectorToClosest = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | float4 vectorToClosest = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| for (int u = -1; u <= 1; u++) { | for (int u = -1; u <= 1; u++) { | ||||
| for (int k = -1; k <= 1; k++) { | for (int k = -1; k <= 1; k++) { | ||||
| Show All 32 Lines | for (int k = -1; k <= 1; k++) { | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| *outDistance = minDistance; | *outDistance = minDistance; | ||||
| } | } | ||||
| ccl_device void voronoi_n_sphere_radius_4d(float4 coord, float randomness, float *outRadius) | ccl_device void voronoi_n_sphere_radius_4d(float4 coord, | ||||
| float randomness, | |||||
| ccl_private float *outRadius) | |||||
| { | { | ||||
| float4 cellPosition = floor(coord); | float4 cellPosition = floor(coord); | ||||
| float4 localPosition = coord - cellPosition; | float4 localPosition = coord - cellPosition; | ||||
| float4 closestPoint = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | float4 closestPoint = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | ||||
| float4 closestPointOffset = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | float4 closestPointOffset = make_float4(0.0f, 0.0f, 0.0f, 0.0f); | ||||
| float minDistance = 8.0f; | float minDistance = 8.0f; | ||||
| for (int u = -1; u <= 1; u++) { | for (int u = -1; u <= 1; u++) { | ||||
| Show All 36 Lines | for (int k = -1; k <= 1; k++) { | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| *outRadius = distance(closestPointToClosestPoint, closestPoint) / 2.0f; | *outRadius = distance(closestPointToClosestPoint, closestPoint) / 2.0f; | ||||
| } | } | ||||
| template<uint node_feature_mask> | template<uint node_feature_mask> | ||||
| ccl_device_noinline int svm_node_tex_voronoi(const KernelGlobals *kg, | ccl_device_noinline int svm_node_tex_voronoi(ccl_global const KernelGlobals *kg, | ||||
| ShaderData *sd, | ccl_private ShaderData *sd, | ||||
| float *stack, | ccl_private float *stack, | ||||
| uint dimensions, | uint dimensions, | ||||
| uint feature, | uint feature, | ||||
| uint metric, | uint metric, | ||||
| int offset) | int offset) | ||||
| { | { | ||||
| uint4 stack_offsets = read_node(kg, &offset); | uint4 stack_offsets = read_node(kg, &offset); | ||||
| uint4 defaults = read_node(kg, &offset); | uint4 defaults = read_node(kg, &offset); | ||||
| ▲ Show 20 Lines • Show All 229 Lines • Show Last 20 Lines | |||||