带 SpriteKit 的 ShaderToy?

ShaderToy with SpriteKit?

有人可以提供一些关于如何使用 shadertoy site in sprite kit? This works with other shaders in an .fsh file but I can't seem to get any code from shadertoy 中的代码工作的指导。我正在使用 .sks 文件将我的 SpriteNode 添加到场景中。我在界面生成器中使用 SKNode 检查器将自定义着色器应用到 SpriteNode。

我已经设法从 shadertoy web-site 中获得了一些着色器来与 Sprite Kit 一起工作。

首先,在您看到的着色器中:

void mainImage( out vec4 fragColor, in vec2 fragCoord )</pre>

将其更改为:

void main ()</pre>

通常,您需要更改这些变量的名称:

iGlobalTimeu_time

fragColorgl_FragColor

fragCoordgl_FragCoord

iResolutionu_sprite_size

但是在iOS9中,u_sprite_size坏了。我一直在遵循其他地方建议的解决方案,方法是创建自己的制服并将其命名为 c_sprite_size 并在检查器的 sks 文件中设置值。

SpriteKit 制服列表在这里:

SKShader Class Reference

全局变量在 fsh 文件中似乎不太适用;在某些情况下,我不得不更改代码以将变量值作为函数参数传递;我对着色器编程很陌生;可能还有其他方法可以使变量如何声明为统一和变化等。

我遇到过一些着色器无法在模拟器或 Sprite Kit 场景编辑器中运行,但可以在设备上运行。我一直在使用 iPhone 6s 和 iOS 9.2.

最后,值得注意的是,当您 运行 在 iDevice 上运行应用程序时,着色器编译错误将显示在调试控制台中。例如


Jet: Error Domain=MTLLibraryErrorDomain Code=3 "Compilation failed: </p>

<p>program_source:6:1: error: unknown type name 'precision'
precision mediump float;
^
program_source:6:19: error: expected unqualified-id
precision mediump float;
                  ^
program_source:8:1: error: unknown type name 'varying'
varying vec2 position;
^
program_source:8:13: error: expected ';' after top level declarator
varying vec2 position;
            ^
</pre>

我能够通过这种方式修复一些着色器。