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

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

Re: шейдер

Сообщение Cr0c 19 апр 2020, 00:43

Я хз какая там физика.
Синтаксис:
Используется glsl
Shader "Custom/Atmo1"
{
    Properties
    {
        _Color("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        [PowerSlider(4)] _Fading("Fading texture", Range(0.1, 5)) = 1.0
        [PowerSlider(4)] _AtmoWidth("Atmosphere density", Range(0.1, 5)) = 1.0
       
        [Header(Culling)]
        [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back"
        [Enum(Off,0,On,1)]_ZWrite ("ZWrite", Float) = 1.0
    }
    SubShader
    {
        Tags { "Queue"="Transparent" "RenderType"="Transparent" }
        Blend SrcAlpha OneMinusSrcAlpha
        Cull [_Cull]
        ZWrite [_ZWrite]
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows alpha:fade
        #pragma target 3.0

        sampler2D _MainTex;
        fixed4 _Color;
        float _Fading;
        float _FadingAlpha;
        fixed _AtmoWidth;

        struct Input
        {
            float2 uv_MainTex;
            float3 viewDir;
        };
        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed a = dot(_WorldSpaceLightPos0, o.Normal);
            fixed a2 = 1 - pow(1 - clamp(a, 0, 1), _Fading);
            fixed a3 = dot(o.Normal, IN.viewDir);
            float2 uv = float2(a2, 0.0);
            fixed4 c = tex2D (_MainTex, uv) * _Color * _LightColor0;
            o.Albedo = c.rgb;
            o.Alpha = pow(1 - clamp(abs(a3), 0, 1), 5.0 - _AtmoWidth) * c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}
 

Текстура: слева направо ==> ночь -> день (альфа учитывается)
Последний раз редактировалось Cr0c 19 апр 2020, 01:14, всего редактировалось 1 раз.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: шейдер

Сообщение Cr0c 19 апр 2020, 00:45

Главное, чтобы нормали были правильно выставлены на меше атмосферы. Куллинг потыкай разный.
И это далеко не физикал бейзед ))
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: шейдер

Сообщение Cr0c 19 апр 2020, 01:16

Освещение от directional ligth идёт
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: шейдер

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

Изображение

пробовал и back и front и off и текстуры разные, но ничего не получается :-\

это какая-то (полная Ж) честное слово
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

Re: шейдер

Сообщение Cr0c 19 апр 2020, 11:21

Скинь мне пэкеджем сцену с мешами и текстурами на sms0.mail.ru@gmail.com
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: шейдер

Сообщение Cyrix 19 апр 2020, 12:54

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

Re: шейдер

Сообщение Cr0c 19 апр 2020, 14:16

Синтаксис:
Используется glsl
Shader "Custom/Unlit/Atmosphere"
{
    Properties
    {
        _Color("Color", Color) = (1,1,1,1)
        _MainTex ("Texture", 2D) = "white" {}
        _TextureShift("Texture shift", Range(0, 1)) = 0
        [PowerSlider(4)] _Fading("Fading texture", Range(0.1, 5)) = 1.0
        [PowerSlider(4)] _AtmoWidth("Atmosphere density", Range(0.1, 5)) = 1.0
       
        [Header(Culling)]
        [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back"
        [Enum(Off,0,On,1)]_ZWrite ("ZWrite", Float) = 1.0

        [Header(Stencil)]
                _Stencil ("Stencil ID [0;255]", Float) = 0
                _ReadMask ("ReadMask [0;255]", Int) = 255
                _WriteMask ("WriteMask [0;255]", Int) = 255
                [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp ("Stencil Comparison", Int) = 3
                [Enum(UnityEngine.Rendering.StencilOp)] _StencilOp ("Stencil Operation", Int) = 0
                [Enum(UnityEngine.Rendering.StencilOp)] _StencilFail ("Stencil Fail", Int) = 0
                [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFail ("Stencil ZFail", Int) = 0

    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100
        Blend SrcAlpha OneMinusSrcAlpha
        Cull [_Cull]
        ZWrite [_ZWrite]
                Stencil
                {
                        Ref [_Stencil]
                        ReadMask [_ReadMask]
                        WriteMask [_WriteMask]
                        Comp [_StencilComp]
                        Pass [_StencilOp]
                        Fail [_StencilFail]
                        ZFail [_StencilZFail]
                }

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            #include "UnityLightingCommon.cginc"

            struct v2f
            {
                float4 vertex : SV_POSITION;
                float3 normal : NORMAL;
                float3 viewD : TEXCOORD2;
            };

            fixed4 _Color;
            sampler2D _MainTex;
            float _TextureShift;
            float _Fading;
            float _AtmoWidth;

            v2f vert (appdata_full v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.normal = UnityObjectToWorldNormal(v.normal);                
                o.viewD = normalize(WorldSpaceViewDir(v.vertex));
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed a = dot(_WorldSpaceLightPos0, -i.normal);
                fixed a2 = a * step(a, 1);
                a2 = pow(a2, _Fading);
                fixed a3 = dot(-i.normal, i.viewD);
                float2 uv = float2(a2, _TextureShift);
                fixed4 c = tex2D (_MainTex, uv) * _Color * _LightColor0;
                c.a = pow(1 - clamp(abs(a3), 0, 1), 5.0 - _AtmoWidth) * c.a;
                return c;
            }
            ENDCG
        }
    }
}
 
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

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

Сообщение Cyrix 20 апр 2020, 08:53

Изображение
Изображение

вид из космоса и вид с планеты
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

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

Сообщение Cr0c 20 апр 2020, 10:39

А что без текстуры?
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

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

Сообщение Cyrix 20 апр 2020, 11:03

А с текстурой так же, только в виде разводов, как будто начало координат не совпадают.
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

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

Сообщение Cr0c 20 апр 2020, 12:03

Слева - твои модели, справа - штатные юнити сферы
https://yadi.sk/i/WgLjlMEoKdbMOg
Ощущение, будто Нормали наизнанку, потому что на штатной сфере всё норм. Проверил переключением куллинга.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

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

Сообщение Jarico 20 апр 2020, 12:26

Чувак ты видимо плохо искал!
https://wiki.unity3d.com/index.php/Planet

Скрины шейдера
Изображение
Изображение
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

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

Сообщение Cyrix 20 апр 2020, 19:25

Изображение
Изображение

Заменил на штатную сферу, свою отключил.
Не цепляется текстура, не в первом варианте шейдера, не во втором :(
из кулингов мне подходит только "Front"
это я уже в юнити 2018 пробую
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

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

Сообщение Cyrix 20 апр 2020, 20:08

Jarico писал(а):Чувак ты видимо плохо искал!
https://wiki.unity3d.com/index.php/Planet

Скрины шейдера
Изображение
Изображение


тоже всё в одном цвете, да ещё и для внешнего наблюдения из космоса, а с поверхности планеты - вообще бяка
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

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

Сообщение Jarico 20 апр 2020, 20:47

Cyrix писал(а):тоже всё в одном цвете, да ещё и для внешнего наблюдения из космоса, а с поверхности планеты - вообще бяка


Так вместо того чтобы писать что шейдер бяка добавь простой lerp в него и не парься
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Пред.След.

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

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

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