Le blanc est-il la meilleure couleur de base pour commencer lors de la planification de l'ombrage des sprites dans Unity?

10

Je cherche à prototyper un jeu dans Unity qui consistera en sprites / tuiles carrés solides. Je suppose que je peux représenter différents types d'objets avec des couleurs différentes pour chacune des tuiles du jeu.

Je pense que je peux importer un sprite carré unique et le nuancer de manière appropriée dans Unity, par opposition aux carrés importés de nombreuses couleurs différentes.

Mon expérience de l'ajustement de la teinte et de la saturation dans Photoshop montre que le blanc n'est pas une couleur facile à changer car les choses blanches restent souvent blanches. Mes tests dans Unity montrent que je peux changer la "couleur" d'un sprite en autre chose que du blanc et le sprite est apparemment ombré de manière appropriée, malgré ce que j'aurais pensé étant donné mon expérience Photoshop.

Étant donné que les objets blancs semblent prendre la nuance de couleur appropriée lorsqu'ils sont modifiés dans Unity, mon instinct me dit que c'est la meilleure couleur de base pour commencer, ce qui signifie que je peux importer un seul sprite carré blanc et simplement ajuster la couleur pour représenter différents objets et les états d'objet.

Un sprite blanc est-il en fait le meilleur sprite de couleur pour commencer et pourquoi quelque chose comme cela fonctionne-t-il dans Unity plutôt que d'ajuster la teinte et la saturation dans Photoshop?

entrez la description de l'image ici

SpartanDonut
la source
Tout d'abord, définissez "le meilleur".
Krythic

Réponses:

13

Le blanc est la meilleure couleur de base pour une représentation fidèle. Garder également votre échelle de gris de sprite peut faciliter les ajustements de couleur pour les équipes, etc.

Unity applique un Multiplymode de fusion à la texture et à la couleur de l'image-objet.

Le type de couleur d'Unity est compris entre 0 et 1 inclus.

Couleur.Blanc est égal à (1, 1, 1, 1).

Sachant que 1quelque chose est en soi.

Si l'échelle de gris textureest mélangée avec le Colorchamp Sprite Renderer , chaque pixel est lui-même. La modification de ce champ multipliera simplement chaque valeur de gris uniforme par chaque composant de la couleur.

Teinter un sprite


Vous pouvez jouer avec le mode de fusion Multiplier dans votre éditeur d'images préféré comme Photoshop ou GIMP.

Configuration de Photoshop

MLM
la source
4

Sprites-Additive.shader - GitHub Gist

Les couleurs Unity ont 4 valeurs flottantes typiques de nombreux formats de couleurs RGBA, correspondant aux valeurs de pourcentage de couleur individuelles Rouge, Vert, Bleu et le canal de transparence Alpha.

De plus, comme mentionné ci-dessus, la "teinte" par défaut appliquée par Unity est un shader multiplicatif appelé cet effet "Multiplier" et le processus multiplie littéralement les valeurs de couleur dans les pixels de votre image-objet avec la valeur de couleur sélectionnée.

Le problème avec ceci est qu'un shader mathématique multiplicatif produira TOUJOURS la même teinte (si vous "multipliez" par du blanc) ou une couleur plus foncée si vous multipliez par autre chose. Je suis tombé sur la situation où je voulais exactement l'effet inverse dans une situation de type forgeron. Le métal chauffé ne doit pas être multiplié par le jaune pour produire une teinte plus foncée:

shader multiplicatif par Yellow

Au lieu de cela, j'ai réécrit le shader multiplicatif par défaut d'Unity pour qu'il soit additif. Les résultats correspondaient davantage à ce que je recherchais:

shader additif

Je fournirai un résumé au Sprites-Additive.shader réécrit si quelqu'un est intéressé.

Voici une bonne référence sur la terminologie et les modes de couleur: http://www.northlite.net/ps/blend.htm

Joe
la source
Un utilisateur sans réputation suffisante pour commenter a exprimé son intérêt à voir le code shader pour cet effet. L'avez-vous toujours à partager?
DMGregory
1
Hé, je ne l'ai pas facilement disponible maintenant, mais je vais le rechercher et obtenir un lien dès que possible. Ce soir si possible.
Joe
2
Je reprends cela, je l'ai trouvé relativement facilement et l'ai ajouté à un Gist sur mon GitHub. La seule différence MAJEURE entre un shader additif et multiplicatif est la transparence. Dans le shader additif, j'ai défini une coupure de transparence de 10% pour maintenir l'alpha relatif des pixels avec des valeurs alpha faibles. Vous n'avez pas à vous soucier de ce genre de chose sur un shader multiplicatif en raison de la nature de ces mathématiques.
Joe