-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkernel.cl
More file actions
32 lines (30 loc) · 1.13 KB
/
kernel.cl
File metadata and controls
32 lines (30 loc) · 1.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
__kernel void wrinkleDeform(
__global float* finalPositions,
__global const float* initialPositions,
__global const float* vertexNormals,
__global const float* wrinklePhase,
__global const float* strainMask,
__global const float* vertexAmps,
const float envelope,
const float compressionThreshold,
const uint numElements)
{
uint id = get_global_id(0);
if (id >= numElements) return;
uint p = id * 3;
float strain = strainMask[id];
if (strain > 0.0001f) {
float phase = wrinklePhase[id];
float amp = vertexAmps[id];
float wave = pow(fabs(sin(phase)), 0.5f) * (sin(phase) > 0.0f ? 1.0f : -1.0f);
float disp = wave * amp * envelope;
finalPositions[p] = initialPositions[p] + vertexNormals[p] * disp;
finalPositions[p + 1] = initialPositions[p + 1] + vertexNormals[p + 1] * disp;
finalPositions[p + 2] = initialPositions[p + 2] + vertexNormals[p + 2] * disp;
}
else {
finalPositions[p] = initialPositions[p];
finalPositions[p + 1] = initialPositions[p + 1];
finalPositions[p + 2] = initialPositions[p + 2];
}
}