es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo configurar el nivel de saturación de un canal de color completo en Unity

Me gustaría ajustar la saturación de un canal de color completo en mi cámara principal. La opción más cercana que he encontrado es la Curva de Gradación de Matiz vs. Saturación. En el fondo de la escena hay una palmera de color verde azulado. Quiero que el nivel de verde del árbol siga mostrándose. Lo mismo ocurre con la parte superior de la hierba en primer plano, que está más cerca del amarillo que del verde, pero aún así quiero ver el poco valor de verde que tiene.

He estado buscando en la documentación de Unity y en la tienda de activos durante semanas en busca de un posible shader de terceros, pero no he encontrado nada. Mi resultado actual es lo mejor que pude encontrar, cualquier ayuda sería muy apreciada. Gracias.

SOLUCIONADO: – por respuesta marcada con check. Solo quería compartir cómo se ven los resultados para cualquier persona en el futuro que se encuentre con este problema. Compara la captura de pantalla anterior, donde la palmera en el fondo y la parte superior de la hierba en primer plano son solo blanco y negro, con la captura de pantalla posterior a continuación. ¡Control total en la escena de la saturación RGB!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para ajustar la saturación de un canal de color específico en la cámara principal de Unity, puedes utilizar un shader personalizado. En este caso, deseas ajustar el canal verde mientras preservas los otros canales.

    Para hacer esto, puedes comenzar con un shader de superficie básico y modificar el color de salida en función de la saturación del canal verde. Aquí tienes un ejemplo:

    Shader "Custom/SaturateGreen" {
        Properties {
            _MainTex ("Textura", 2D) = "white" {}
            _Saturation ("Saturación Verde", Float) = 1.0
        }
    
        SubShader {
            Tags { "RenderType"="Opaque" }
    
            CGPROGRAM
            #pragma surface surf Lambert
    
            sampler2D _MainTex;
            float _Saturation;
    
            struct Input {
                float2 uv_MainTex;
            };
    
            void surf (Input IN, inout SurfaceOutput o) {
                // Muestrea la textura y calcula el valor en escala de grises
                float4 tex = tex2D(_MainTex, IN.uv_MainTex);
                float gray = dot(tex.rgb, float3(0.299, 0.587, 0.114));
    
                // Calcula la cantidad de verde en el píxel
                float green = tex.g - gray;
    
                // Saturar el canal verde mientras se preservan los otros canales
                float3 color = lerp(float3(gray), tex.rgb,
                                    saturate(green * _Saturation + gray));
    
                // Establecer el color de salida
                o.Albedo = color;
                o.Alpha = tex.a;
            }
            ENDCG
        }
    
        FallBack "Diffuse"
    }
    

    En este shader, puedes ajustar la saturación del canal verde con la propiedad _Saturation. Utiliza un cálculo en escala de grises para determinar la cantidad de verde en el píxel, luego satura solo el canal verde según el valor de entrada.

    Para utilizar este shader, crea un material con él y asígnalo a la cámara principal. Puedes ajustar el valor de saturación en el inspector del material para lograr el efecto deseado.

    Ten en cuenta que este shader asume que la imagen está en espacio de color gamma. Si tu proyecto utiliza espacio de color lineal, es posible que debas ajustar el cálculo en escala de grises para obtener resultados más precisos.

Comments are closed.