gpt4 book ai didi

ios - 使用 SKShader 时性能下降

转载 作者:搜寻专家 更新时间:2023-11-01 07:20:32 24 4
gpt4 key购买 nike

我查看了 SKShader,以便在一些 Sprite 四处移动的应用程序中获得一些水汪汪的效果。基于本教程 Making a Pixel Shader for iOS8 with Sprite Kit ,我创建了一个效果,但我的帧速率在模拟器中下降了很多,我在 iPhone 5s 中遇到了内存问题。

我的代码如下所示来自游戏场景:

override func didMoveToView(view: SKView) {
super.didMoveToView(view)

// MARK: BACKGROUND IMAGE & SHADER

let backgroundImage = SKSpriteNode(imageNamed: "Background")
backgroundImage.size.width = frame.size.width
backgroundImage.size.height = frame.size.height
backgroundImage.position = CGPointMake(CGRectGetMidX(frame), CGRectGetMidY(frame))
backgroundImage.zPosition = -1000
addChild(backgroundImage)

let shaderContainer = SKSpriteNode(color: SKColor(red: 1, green: 1, blue: 1, alpha: 0), size: (CGSizeMake(frame.width, frame.height)))
shaderContainer.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2)
shaderContainer.zPosition = 1000
addChild(shaderContainer)

let shader = SKShader(fileNamed: "shader_water.fsh")
shader.uniforms = [
SKUniform(name: "size", floatVector3:GLKVector3Make(Float(self.frame.size.width), Float(self.frame.size.height), 0)),
]
shaderContainer.shader = shader

.fsh 文件直接取自教程。

void main( void )
{
float time = u_time * .5;
vec2 sp = gl_FragCoord.xy / size.xy;
vec2 p = sp * 6.0 - 20.0;
vec2 i = p;
float c = 1.0;
float inten = .05;

for (int n = 0; n < 5; n++)
{
float t = time * (1.0 - (3.5 / float(n+1)));
i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(t + i.x));
c += 1.0/length(vec2(p.x / (sin(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));
}

c /= float(5);
c = 1.55-sqrt(c);
vec3 colour = vec3(pow(abs(c), 15.0));

gl_FragColor = vec4(clamp(colour + vec3(0.0, 0.17, 0.3), 0.0, .5), 0.3);
}

有谁知道可能会发生什么以及如何让着色器更有效地工作?

最佳答案

片段着色器中的整个计算基于 u_timegl_FragCoord,这意味着可以将相同的计算移至顶点着色器。提高着色器性能的一些基本技巧。

  • 按顶点进行所有计算,避免按片段计算
  • 避免着色器中的循环(在你的例子中是 for 循环),GPU 不擅长循环

关于ios - 使用 SKShader 时性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39346599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com