| { |
| "MaxCount": 800, |
| "Duration": 4, |
| "Rate": 120, |
| "Drawable": { |
| "Type": "SkCircleDrawable", |
| "Radius": 2 |
| }, |
| "Spawn": [ |
| "// float rand; Every read returns a random float [0 .. 1)", |
| "layout(ctype=float) in uniform float dt;", |
| "layout(ctype=float) in uniform float effectAge;", |
| "", |
| "struct Particle {", |
| " float age;", |
| " float lifetime;", |
| " float2 pos;", |
| " float2 dir;", |
| " float scale;", |
| " float2 vel;", |
| " float spin;", |
| " float4 color;", |
| " float frame;", |
| "};", |
| "", |
| "void main(inout Particle p) {", |
| " p.lifetime = 2 + rand;", |
| " float a = radians(effectAge * 1080);", |
| " float s = 50 + rand * 10;", |
| " p.vel.x = cos(a) * s;", |
| " p.vel.y = sin(a) * s;", |
| "}", |
| "" |
| ], |
| "Update": [ |
| "// float rand; Every read returns a random float [0 .. 1)", |
| "layout(ctype=float) in uniform float dt;", |
| "layout(ctype=float) in uniform float effectAge;", |
| "", |
| "struct Particle {", |
| " float age;", |
| " float lifetime;", |
| " float2 pos;", |
| " float2 dir;", |
| " float scale;", |
| " float2 vel;", |
| " float spin;", |
| " float4 color;", |
| " float frame;", |
| "};", |
| "", |
| "void main(inout Particle p) {", |
| " p.scale = 0.5 + 1.5 * p.age;", |
| " float3 a0 = float3(0.098, 0.141, 0.784);", |
| " float3 a1 = float3(0.525, 0.886, 0.980);", |
| " float3 b0 = float3(0.376, 0.121, 0.705);", |
| " float3 b1 = float3(0.933, 0.227, 0.953);", |
| " p.color.rgb = mix(mix(a0, a1, p.age), mix(b0, b1, p.age), rand);", |
| "}", |
| "" |
| ], |
| "Bindings": [] |
| } |