SpriteKit - SKShader Aliasing проблема с использованием пользовательского шейдера - PullRequest
0 голосов
/ 25 ноября 2018

Я использую пользовательский фрагментный шейдер для создания цветового градиента по круговой траектории SKShapeNode.Вот результат:

enter image description here

Что я могу сделать, в SpriteKit или в пользовательском шейдере, чтобы устранить наложение?

PS Я хочу, чтобы это работало и на watchOS.


Фрагмент шейдера:

void main() {
    float normalizedPosition = v_path_distance / u_path_length;
    gl_FragColor = vec4(normalizedPosition, normalizedPosition, normalizedPosition, 1.0);
}

ViewController:

import UIKit
import SpriteKit

class ViewController: UIViewController {
    var skView: SKView {
        return view as! SKView
    }
    var scene: SKScene!

    override func viewDidLoad() {
        super.viewDidLoad()
        scene = SKScene(size: view.frame.size)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        skView.presentScene(scene)

        // Create node
        let ringNode = SKShapeNode(circleOfRadius: scene.size.width / 4)
        ringNode.position = CGPoint(x: scene.frame.midX, y: scene.frame.midY)
        ringNode.lineWidth = 30

        // Apply shader
        ringNode.strokeShader = SKShader(fileNamed: "fragment.fsh")

        // Add node to scene
        scene.addChild(ringNode)
    }
}
...