SpriteKit - SKEffectnode Blendmode, Растеризация и Частота кадров
Я пытаюсь сделать простое освещение в игре с боковой прокруткой, используя SKEffectnode. Сначала я создаю полноэкранный спрайт-узел с серым цветом, устанавливаю его режим смешивания на добавление и добавляю его в качестве дочернего к узлу эффекта. Затем я добавляю узлы спрайтов с легкой текстурой, также как потомки узла эффекта. Наконец, я установил режим смешивания узла эффекта для умножения и добавил его в качестве дочернего элемента в мою сцену. Что-то вроде этого:
SKEffectNode *effectNode = [[SKEffectNode alloc] init];
SKSpriteNode *overlay = [SKSpriteNode spriteNodeWithColor: [SKColor grayColor] size: [self.size];
SKSpriteNode *light = [SKSpriteNode spriteNodeWithImageNamed: @"LightTexture.png"];
[overlay setBlendMode: SKBlendModeAdd];
[light setBlendMode: SKBlendModeAdd];
[effectNode addChild: overlay];
[effectNode addChild: light];
[effectNode setBlendMode: SKBlendModeMultiply];
[self addChild: effectNode];
Поэтому моя проблема в том, что режим наложения узла эффекта, похоже, ничего не делает. Как будто он застрял в режиме альфа-смешивания или что-то в этом роде. Тем не менее, если я установил флажок shouldRasterize в значение YES, режим смешивания начнет работать так, как ожидается. Кто-нибудь знает почему это?
Кроме того, добавление полноэкранного эффекта, подобного этому, с узлом эффекта полностью разрушает частоту кадров. Особенно, если вы начинаете перемещать узел эффекта (или создаете новый каждый кадр). Но я не вижу другого способа сделать такое освещение в спрайтовом наборе. Я в основном хочу создать маску освещения для каждого кадра, а затем умножить ее на буфер кадра сцены. Возможно ли что-то подобное с помощью Sprite Kit? Или я должен посмотреть в Cocos2d с помощью пользовательских шейдеров?