шейдер атмосферы планеты

Для экспериментальных разработок и тем "я нашел чужой исходник, почему он не работает?"

шейдер атмосферы планеты

Сообщение Cyrix 14 апр 2020, 01:16

Здравствуйте! Помогите пожалуйста разобраться.
Создаю планету с атмосферой. Пытаюсь сделать правильное освещение от солнца.
Есть переход из дня сразу же в тёмные сумерки и сразу ночь.
Как добавить переход заря/ночь? Я имею ввиду жёлто-красные цвета перехода.

Изображение

Вот сам шейдер, который это делает, но я в нём никак не могу разобраться :(

Синтаксис:
Используется csharp
Shader "Atmosphere Inverted"
{
        Properties
        {
                _MainColor("_MainColor", Color) = (1,1,1,1)
                _SecondaryColor("_SecondaryColor", Color) = (1,1,1,1)
                _EdgeDensity("_EdgeDensity", Range(0.1,3) ) = 1.725506
                _Ramp("_Ramp", Range(0.1,3) ) = 1
//              _MainTex("_MainTex", 2D) = "white" {}
                _MainTex ("Color (RGB) Alpha (A)", 2D) = "white"

        }
       
        SubShader
        {
                Tags
                {
                        "Queue"="Transparent"
                        "IgnoreProjector"="False"
                        "RenderType"="Transparent"
                }

                Cull Back
                ZWrite Off
                ZTest LEqual
                ColorMask RGBA
                Blend SrcAlpha OneMinusSrcAlpha
                Fog{ Mode Off }


                CGPROGRAM
//              #pragma surface surf BlinnPhongEditor  vertex:vert
            #pragma surface surf BlinnPhongEditor alpha
                #pragma target 3.0

                float4 _MainColor;
                float4 _SecondaryColor;
                float _EdgeDensity;
                float _Ramp;
                sampler2D _MainTex;

                struct EditorSurfaceOutput {
                        half3 Albedo;
                        half3 Normal;
                        half3 Emission;
                        half3 Gloss;
                        half Specular;
                        half Alpha;
                        half4 Custom;
                };
                       
                inline half4 LightingBlinnPhongEditor_PrePass (EditorSurfaceOutput s, half4 light)
                {
                        float4 SmoothStep0= _MainColor * Luminance( light.xyz ) * _Ramp;
                        float4 Multiply0=SmoothStep0 * float4( s.Albedo.x, s.Albedo.y, s.Albedo.z, s.Alpha);
                        return Multiply0;
                }

                inline half4 LightingBlinnPhongEditor (EditorSurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
                {
                        half3 h = normalize (lightDir + viewDir);
                       
                        half diff = max (0, dot ( lightDir, s.Normal ));
                       
                        half nh = max (0, dot (s.Normal, h));
                        half spec = pow (nh, s.Specular*128.0);
                       
                        half4 res;
                        res.rgb = _LightColor0.rgb * diff;
                        res.a = spec * Luminance (_LightColor0.rgb);
                        res *= atten * 2.0;
                        res = half4(1,1,1,1) - res;

                        return LightingBlinnPhongEditor_PrePass( s, res );
                }
               
                struct Input {
                        float2 uv_MainTex;
                        float3 viewDir;
                };

                //void vert (inout appdata_full v, out Input o) {
                //UNITY_INITIALIZE_OUTPUT(Input,o);
                //}
               

                void surf (Input IN, inout EditorSurfaceOutput o) {
                        o.Normal = float3(0.0,0.0,1.0);
                        //o.Alpha = 1.0;
                        //o.Albedo = 0.0;
                        //o.Emission = 0.0;
                        //o.Gloss = 0.0;
                        //o.Specular = 0.0;
                        //o.Custom = 0.0;
                       
                        float4 Tex2D0=tex2D(_MainTex,(IN.uv_MainTex.xyxy).xy);
                        float4 Fresnel0_1_NoInput = float4(0,0,1,1);
                        float4 Fresnel0=(1.0f - dot(normalize( float4( IN.viewDir.x, IN.viewDir.y,IN.viewDir.z,1.0f ).xyz), normalize( Fresnel0_1_NoInput.xyz ) )).xxxx;
                        float4 Invert0= float4(1.0f, 1.0f, 1.0f, 1.0f) - Fresnel0;
                        float4 Pow0=pow(Invert0,_EdgeDensity.xxxx);
                        //float4 Master0_1_NoInput = float4(0,0,1,1);
                        //float4 Master0_2_NoInput = float4(0,0,0,0);
                        //float4 Master0_3_NoInput = float4(0,0,0,0);
                        //float4 Master0_4_NoInput = float4(0,0,0,0);
                        //float4 Master0_7_NoInput = float4(0,0,0,0);
                        //float4 Master0_6_NoInput = float4(1,1,1,1);
                        o.Albedo = Tex2D0;
                        //o.Alpha = tex2D (_MainTex, IN.uv_MainTex).a;
                        o.Alpha = Pow0;
                       

                        //o.Normal = normalize(o.Normal);
                }
                ENDCG
        }
        Fallback "Diffuse"
}
 


Этот шейдер нацеплен на сферу, которая чуть больше, чем планета
Последний раз редактировалось DbIMok 20 апр 2020, 01:14, всего редактировалось 1 раз.
Причина: изменил заголовок темы
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение waruiyume 14 апр 2020, 04:21

Сделать лукап текстуру с градиентом из красново в синий, использовать в качестве координат то, что вы для прозрачности насчитали.
Только мне не понятно чего вы хотите добиться, судя по фотографиям земли, никакого перехода из красного нет.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 5990
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: шейдер

Сообщение Cyrix 14 апр 2020, 12:37

В том то и дело, что нет перехода. Надо чтобы был переход день-закат(жёлто-тёмный), затем тёмно-синий и потом чёрный, а он у меня сразу из белого в тёмно-синий и чёрный (прозрачный)
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cyrix 14 апр 2020, 22:14

Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cyrix 16 апр 2020, 02:44

Как добавить градиент?
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cr0c 16 апр 2020, 11:23

Cyrix писал(а):Как добавить градиент?

Добавляешь текстуру и из неё берешь пиксель из (Pow0, 0) с альфой Pow0
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: шейдер

Сообщение Cyrix 16 апр 2020, 17:58

Не получается :-s
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cyrix 16 апр 2020, 18:07

не понимаю значений строк
Синтаксис:
Используется csharp
float4 Pow0=pow(Invert0,_EdgeDensity.xxxx);
и
o.Alpha = Pow0;
 



текстуру двухцветную подключил, но в районе сумерек красного цвета не видно, он сразу же темнеет вслед за синим и потом чернота :(
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cyrix 17 апр 2020, 22:55

:-t
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cr0c 18 апр 2020, 01:46

Cyrix писал(а)::-t

Не нашел готовый шейдер? Тогда найди 3-4 рефа, чтобы хоть знать что тебе нужно
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: шейдер

Сообщение Cyrix 18 апр 2020, 12:37

Изображение

Я хочу, чтобы было как на скрине. Тут как минимум 4 цвета перехода: голубой, белый (тонкая полоска), жёлтый и красный. При движении солнца, если персонаж стоит на одном месте (на планете), то наблюдает красивый закат и потом расцвет с этими замечательными переходами. А у меня же из голубого темнеет в тёмно-синий и сразу чернота. :(

Ну никак не могу разобраться, как сделать этот переход с цветами заката и расцвета @-)
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cyrix 18 апр 2020, 12:40

Изображение
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cyrix 18 апр 2020, 12:45

Изображение
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cyrix 18 апр 2020, 12:48

Изображение
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cyrix 18 апр 2020, 13:43

Решение то конечно есть https://assetstore.unity.com/packages/t ... ring-87641
но стОит оно, как чугунный мост
Cyrix
UNIт
 
Сообщения: 104
Зарегистрирован: 16 сен 2009, 11:32

След.

Вернуться в Шейдерная кузня

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1