2015-12-12 2 views
1

Я пытаюсь достигнуть этого взгляда в моей игре Unity:Как облегчить цвет в программе шейдеров?

enter image description here

Мне нравится, как цвет горы становится светлее, как с увеличением высоты.

Я все еще новичок в разработке игр, и, хотя я понимаю, что делают шейдеры, у меня возникают проблемы с их использованием на практике.

Я знаю, что нужно сделать что-то подобное в моей поверхности шейдера:

float4 mountainColor = lerp(_BottomColor,_TopColor,IN.vertex.z); 

... к Lerp между темным цветом и более светлого цвета на основе значения г.

Но я не уверен, как прагматично осветлить цвет в шейдере. Я не использую цвета вершин, цвет получается из текстуры. Любые подсказки/указатели будут оценены.

EDIT:

Итак, дух, я понял, что просто нужно умножить значение RGB либо светлее или темнее его.

вопрос, если я просто сделать что-то вроде этого:

o.Albedo = c.rgb * 1.5; 

... да, осветляет ее, но она также слегка меняет оттенок и становится чрезмерно насыщенным.

Как это исправить?

ответ

0

Вот мой код:

Shader "Custom/Altitude Gradient" { 
Properties { 
    _Color ("Color", Color) = (1,1,1,1) 
    _MainTex ("Albedo (RGB)", 2D) = "white" {} 
    _Glossiness ("Smoothness", Range(0,1)) = 0.5 
    _Metallic ("Metallic", Range(0,1)) = 0.0 
} 
SubShader { 
    Tags { "RenderType"="Opaque" } 
    LOD 200 

    CGPROGRAM 
    // Physically based Standard lighting model, and enable shadows on all light types 
    #pragma surface surf Standard fullforwardshadows vertex:vert 

    // Use shader model 3.0 target, to get nicer looking lighting 
    #pragma target 3.0 

    sampler2D _MainTex; 

    struct Input { 
     float2 uv_MainTex; 
     float3 localPos; 
    }; 

    half _Glossiness; 
    half _Metallic; 
    fixed4 _Color; 

    void vert(inout appdata_full v, out Input o) { 
     UNITY_INITIALIZE_OUTPUT(Input, o); 
     o.localPos = v.vertex.xyz; 
    } 

    void surf (Input IN, inout SurfaceOutputStandard o) { 
     // Albedo comes from a texture tinted by color 
     fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; 
     o.Albedo = lerp(c.rgb * 0.5, 1, IN.localPos.y); 
     // Metallic and smoothness come from slider variables 
     o.Metallic = _Metallic; 
     o.Smoothness = _Glossiness; 
     o.Alpha = c.a; 
    } 
    ENDCG 
} 
FallBack "Diffuse" 
} 

Он работает достаточно хорошо для моих потребностей. Я должен буду продолжать играть с ним, чтобы получить точный вид, который я хочу, но база здесь.

+0

Было ли это ответом на ваш собственный вопрос? Если нет, его следует отредактировать вместо этого. – AquaGeneral

+0

@AquaGeneral Да, это мой ответ. –

Смежные вопросы