Страница 2 из 3

Re: шейдер

СообщениеДобавлено: 19 апр 2020, 00:43
Cr0c
Я хз какая там физика.
Синтаксис:
Используется 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"
}
 

Текстура: слева направо ==> ночь -> день (альфа учитывается)

Re: шейдер

СообщениеДобавлено: 19 апр 2020, 00:45
Cr0c
Главное, чтобы нормали были правильно выставлены на меше атмосферы. Куллинг потыкай разный.
И это далеко не физикал бейзед ))

Re: шейдер

СообщениеДобавлено: 19 апр 2020, 01:16
Cr0c
Освещение от directional ligth идёт

Re: шейдер

СообщениеДобавлено: 19 апр 2020, 01:19
Cyrix
Изображение

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

это какая-то (полная Ж) честное слово

Re: шейдер

СообщениеДобавлено: 19 апр 2020, 11:21
Cr0c
Скинь мне пэкеджем сцену с мешами и текстурами на sms0.mail.ru@gmail.com

Re: шейдер

СообщениеДобавлено: 19 апр 2020, 12:54
Cyrix
выслал

Re: шейдер

СообщениеДобавлено: 19 апр 2020, 14:16
Cr0c
Синтаксис:
Используется 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
        }
    }
}
 

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

СообщениеДобавлено: 20 апр 2020, 08:53
Cyrix
Изображение
Изображение

вид из космоса и вид с планеты

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

СообщениеДобавлено: 20 апр 2020, 10:39
Cr0c
А что без текстуры?

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

СообщениеДобавлено: 20 апр 2020, 11:03
Cyrix
А с текстурой так же, только в виде разводов, как будто начало координат не совпадают.

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

СообщениеДобавлено: 20 апр 2020, 12:03
Cr0c
Слева - твои модели, справа - штатные юнити сферы
https://yadi.sk/i/WgLjlMEoKdbMOg
Ощущение, будто Нормали наизнанку, потому что на штатной сфере всё норм. Проверил переключением куллинга.

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

СообщениеДобавлено: 20 апр 2020, 12:26
Jarico
Чувак ты видимо плохо искал!
https://wiki.unity3d.com/index.php/Planet

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

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

СообщениеДобавлено: 20 апр 2020, 19:25
Cyrix
Изображение
Изображение

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

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

СообщениеДобавлено: 20 апр 2020, 20:08
Cyrix
Jarico писал(а):Чувак ты видимо плохо искал!
https://wiki.unity3d.com/index.php/Planet

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


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

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

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


Так вместо того чтобы писать что шейдер бяка добавь простой lerp в него и не парься