Estoy buscando la creación de prototipos de un juego en Unity que consistirá en sprites / azulejos cuadrados sólidos. Me imagino que puedo representar diferentes tipos de objetos con diferentes colores para cada una de las fichas del juego.
Me imagino que puedo importar un solo sprite cuadrado y sombrearlo adecuadamente en Unity en lugar de los cuadrados importados de muchos colores diferentes.
Mi experiencia con el ajuste del tono y la saturación en Photoshop muestra que el blanco no es un color fácil de cambiar, ya que las cosas blancas a menudo permanecen blancas. Mis pruebas en Unity muestran que puedo cambiar el "color" de un sprite a cualquier otro que no sea blanco y el sprite aparentemente está sombreado de manera apropiada, a pesar de lo que hubiera pensado dada mi experiencia con Photoshop.
Dado que los objetos blancos parecen adoptar el sombreado de color apropiado cuando se cambian dentro de Unity, mi instinto me dice que este es el mejor color base para empezar, lo que significa que puedo importar un solo sprite cuadrado blanco y simplemente ajustar el color para representar diferentes objetos y estados de objeto.
¿Es un sprite blanco en realidad el mejor sprite de color para empezar y por qué algo como esto funciona en Unity en lugar de ajustar el tono y la saturación en Photoshop?
Respuestas:
El blanco es el mejor color base para una verdadera representación. También mantener su escala de grises de sprite puede hacer algunos ajustes de color fáciles para los equipos, etc.
Unity aplica un
Multiply
modo de fusión a la textura y el color del sprite.El tipo de color de Unity varía de 0 a 1 inclusive.
Color
(1, 1, 1, 1)
. Blanco es igual a .Sabiendo que a
1
veces todo es en sí mismo.Si la escala de grises
texture
se combina con elColor
campo Sprite Renderer , cada píxel es él mismo. Cambiar este campo simplemente multiplicará cada valor uniforme de escala de grises por cada componente del color.Puedes jugar con el modo de mezcla Multiplicar en tu editor de imágenes favorito como Photoshop o GIMP.
fuente
Sprites-Additive.shader - GitHub Gist
Los colores de la unidad tienen 4 valores flotantes típicos de muchos formatos de color RGBA, correspondientes a los valores de color porcentuales individuales Rojo, Verde, Azul y el canal de transparencia Alfa.
Además, como se mencionó anteriormente, el "Tinte" predeterminado aplicado por Unity es un sombreador multiplicativo que Photoshop llama a este efecto "Multiplicar" y el proceso literalmente multiplica los valores de color en los píxeles de su sprite con el valor de color seleccionado.
El problema con esto es que un sombreador matemático de color multiplicativo SIEMPRE producirá el mismo tono (si "multiplica" por blanco) o un color más oscuro si multiplica por cualquier otra cosa. Encontré la situación en la que quería exactamente el efecto contrario en una situación de tipo herrería. El metal calentado no debe multiplicarse por amarillo para producir un tono más oscuro:
En cambio, reescribí el sombreador multiplicativo predeterminado de Unity para que sea aditivo. Los resultados fueron más similares a lo que estaba buscando:
Proporcionaré una idea general al reescrito Sprites-Additive.shader si alguien está interesado.
Aquí hay una buena referencia sobre terminología y modos de color: http://www.northlite.net/ps/blend.htm
fuente