Ist Weiß die beste Grundfarbe, wenn Sie Sprites in Unity schattieren möchten?

10

Ich beschäftige mich mit dem Prototyping eines Spiels in Unity, das aus festen quadratischen Sprites / Kacheln bestehen wird. Ich denke, ich kann verschiedene Arten von Objekten mit unterschiedlichen Farben für jedes der Plättchen im Spiel darstellen.

Ich denke, dass ich ein einzelnes quadratisches Sprite importieren und in Unity entsprechend schattieren kann, im Gegensatz zu importierten Quadraten mit vielen verschiedenen Farben.

Meine Erfahrung mit dem Anpassen des Farbtons und der Sättigung in Photoshop zeigt, dass Weiß keine leicht zu ändernde Farbe ist, da weiße Dinge häufig weiß bleiben. Meine Tests in Unity haben gezeigt, dass ich die "Farbe" eines Sprites in etwas anderes als Weiß ändern kann und das Sprite scheinbar angemessen schattiert ist, ungeachtet dessen, was ich angesichts meiner Photoshop-Erfahrung gedacht hätte.

Da weiße Objekte beim Ändern in Unity anscheinend die entsprechende Farbschattierung annehmen, sagt mir mein Bauch, dass dies zunächst die beste Grundfarbe ist, was bedeutet, dass ich ein einzelnes Sprite mit weißen Quadraten importieren und die Farbe einfach anpassen kann, um verschiedene Objekte darzustellen und Objektzustände.

Ist ein weißes Sprite eigentlich das beste Farb-Sprite und warum funktioniert so etwas in Unity, anstatt den Farbton und die Sättigung in Photoshop anzupassen?

Geben Sie hier die Bildbeschreibung ein

SpartanDonut
quelle
Definieren Sie zunächst "am besten".
Krythic

Antworten:

13

Weiß ist die beste Grundfarbe für eine echte Darstellung. Wenn Sie Ihre Sprite-Graustufen beibehalten, können Sie die Farben für Teams usw. leicht anpassen.

Unity wendet einen MultiplyMischmodus auf die Sprite-Textur und -Farbe an.

Einheit des Farbtyp wird von 0 bis einschließlich 1 reicht.

Color.White ist gleich (1, 1, 1, 1).

Zu wissen, dass 1mal alles selbst ist.

Wenn die Graustufen texturemit dem Sprite-Renderer- ColorFeld gemischt werden , ist jedes Pixel für sich. Durch Ändern dieses Feldes wird einfach jeder einheitliche Graustufenwert mit jeder Komponente der Farbe multipliziert.

Ein Sprite einfärben


Sie können mit dem Mischmodus "Multiplizieren" in Ihrem bevorzugten Bildeditor wie Photoshop oder GIMP spielen.

Photoshop-Setup

MLM
quelle
4

Sprites-Additive.shader - GitHub Gist

Unity-Farben haben 4 Gleitkommawerte, die für viele RGBA-Farbformate typisch sind und den einzelnen prozentualen Farbwerten Rot, Grün, Blau und dem Alpha-Transparenzkanal entsprechen.

Wie oben erwähnt, ist der von Unity angewendete Standard-Farbton ein multiplikativer Shader. Photoshop nennt diesen Effekt "Multiplizieren" und der Prozess multipliziert buchstäblich die Farbwerte in den Pixeln Ihres Sprites mit dem ausgewählten Farbwert.

Das Problem dabei ist, dass ein Multiplikativer Farbmathematik-Shader IMMER den gleichen Farbton (wenn Sie mit Weiß "multiplizieren") oder eine dunklere Farbe erzeugt, wenn Sie mit etwas anderem multiplizieren. Ich bin auf die Situation gestoßen, in der ich in einer Schmiedesituation genau das Gegenteil wollte. Erhitztes Metall sollte nicht mit Gelb multipliziert werden, um einen dunkleren Farbton zu erzielen:

multiplikativer Shader von Yellow

Stattdessen habe ich den standardmäßigen multiplikativen Shader von Unity so umgeschrieben, dass er additiv ist. Die Ergebnisse entsprachen eher dem, wonach ich gesucht hatte:

additiver Shader

Ich werde dem umgeschriebenen Sprites-Additive.shader einen Überblick geben, wenn jemand interessiert ist.

Hier ist eine gute Referenz zu Farbterminologie und -modi: http://www.northlite.net/ps/blend.htm

Joe
quelle
Ein Benutzer ohne ausreichenden Ruf zum Kommentieren hat Interesse bekundet, den Shader-Code für diesen Effekt zu sehen. Haben Sie es noch zum Teilen zur Verfügung?
DMGregory
1
Hey, ich habe es jetzt nicht sofort verfügbar, aber ich werde es ausgraben und einen Link erhalten, sobald ich kann. Wenn möglich heute Abend.
Joe
2
Ich nehme das zurück, fand es relativ leicht und fügte es einem Gist auf meinem GitHub hinzu. Der einzige große Unterschied zwischen einem additiven und einem multiplikativen Shader besteht in der Transparenz. Im additiven Shader habe ich einen Transparenzgrenzwert von 10% festgelegt, um das relative Alpha von Pixeln mit niedrigen Alpha-Werten beizubehalten. Aufgrund der Natur dieser Mathematik müssen Sie sich bei einem multiplikativen Shader keine Gedanken über solche Dinge machen.
Joe