如何使用自定义着色器在SKSpriteNode上获得正常着色?

时间:2018-04-06 01:23:59

标签: ios sprite-kit fragment-shader

我一直在SpriteKit做一些工作,我似乎无法让自定义着色器和普通纹理的伪3D光照效果同时工作。

我有一对PNG纹理,表示具有基本着色的形状,以及同一图像的法线贴图。如果我创建一个SKSpriteNode,使用这些纹理并为场景添加光线,我会看到我期望的凹凸和斜边。

enter image description here

cactus = SKSpriteNode(imageNamed: "Saguaro.png")
cactus.normalTexture = SKTexture(imageNamed: "Saguaro_n")
cactus.position = sceneCenter
cactus.lightingBitMask = 1

light = SKLightNode()
light.position = CGPoint.zero
light.lightColor = UIColor.white
light.isEnabled = true
light.categoryBitMask = 1
light.ambientColor = UIColor.white
light.falloff = 0.3

但是,如果我添加一个自定义着色器,我会得到纹理图像中颜色的平面颜色。 (以下代码)

enter image description here

// Assign a shader to the SpriteNode
// Shader loaded from a file with code below
cactus.shader = myShader

// Shader code
void main(void) {    
    gl_FragColor = SKDefaultShading();
}

我是否可以在着色器中使用法线贴图中的内置光照效果?我对编写自定义片段着色器并不太熟悉,所以也许有一些显而易见的我不会做的事情。

0 个答案:

没有答案