#opengl #sprite-kit #shader #sprite #game-development
Вопрос:
Я бы хотел добиться чего-то подобного эффекта
https://www.youtube.com/watch?v=1e2a9-OKXmI (0:27) Это похоже на двойной круг, который вырастает и взрывается, но он имеет некоторые неправильные формы и выглядит очень органично
Я считаю, что использование таблицы спрайтов на самом деле не лучшая идея, так что, может быть, шейдер??
Каков был бы наилучший подход для достижения чего-то подобного?
Редактировать:
Этот код в шейдерной https://www.shadertoy.com/view/3dcfWj выглядит очень похоже на то, что я ищу
#define SPEED 0.5
#define OUTER_ACCEL 1.0
#define INNER_ACCEL 2.0
#define COLOR vec3(1.0, 1.0, 1.0)
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 p = (2.0*fragCoord.xy - iResolution.xy) / min(iResolution.x, iResolution.y);
float r = length(p);
float t = mod(iTime * SPEED, 1.0);
float r2 = pow(t, OUTER_ACCEL);
float r1 = pow(t, INNER_ACCEL);
float region = smoothstep(r1-0.01, r1, r) - smoothstep(r2-0.01, r2, r);
fragColor = vec4(region * COLOR, 1.0);
}
Который портирован на шейдер spritekit
void main(){
float SPEED = 0.5;
float OUTER_ACCEL = 1.0;
float INNER_ACCEL = 2.0;
vec3 COLOR = vec3(1.0, 1.0, 1.0);
vec2 p = (2.0*gl_FragCoord.xy - u_sprite_size.xy) / min(u_sprite_size.x, u_sprite_size.y);
float r = length(p);
float t = mod(u_time * SPEED, 1.0);
float r2 = pow(t, OUTER_ACCEL);
float r1 = pow(t, INNER_ACCEL);
float region = smoothstep(r1-0.01, r1, r) - smoothstep(r2-0.01, r2, r);
gl_FragColor = vec4(region * COLOR, 1.0);
}
-------------
let s = SKSpriteNode(color: .red, size: CGSize(width: 400, height: 400))
addChild(s)
s.shader = SKShader(fileNamed: "CartoonExplosion.fsh")
let spriteSize = vector_float2(Float(s.frame.size.width),
Float(s.frame.size.height))
s.shader?.uniforms = [
SKUniform(name: "u_sprite_size", vectorFloat2: spriteSize),
SKUniform(name: "u_speed", float: 0)
]
Но показывает только черный квадрат
Правка 2 Мне удалось заставить его работать, но ему не хватает той жизни, которая есть у другого, похоже, он более динамичен
Комментарии:
1. Взгляните на это. gameartpartners.com/game-art-fx