我一直在SpriteKit做一些工作,我似乎无法让自定义着色器和普通纹理的伪3D光照效果同时工作。
我有一对PNG纹理,表示具有基本着色的形状,以及同一图像的法线贴图。如果我创建一个SKSpriteNode,使用这些纹理并为场景添加光线,我会看到我期望的凹凸和斜边。
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
但是,如果我添加一个自定义着色器,我会得到纹理图像中颜色的平面颜色。 (以下代码)
// 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();
}
我是否可以在着色器中使用法线贴图中的内置光照效果?我对编写自定义片段着色器并不太熟悉,所以也许有一些显而易见的我不会做的事情。