Dissolve

Шейдеры и все-все-все.

Dissolve

Сообщение MiniCat 24 апр 2020, 11:57

День добрый.
Использовал кто Dissolve шейдер юнити, который входил в обновлённую бесплатную библиотеку эффектов?
Он не может работать с албедо? У меня только с однородным цветом работает. Собственно и в тестовой сцене тоже цвет один.
Изображение
Аватара пользователя
MiniCat
UNIт
 
Сообщения: 130
Зарегистрирован: 11 фев 2017, 16:50

Re: Dissolve

Сообщение MiniCat 24 апр 2020, 14:21

в итоге использую такой( правда в нём нет спекулара

Синтаксис:
Используется csharp
Shader "Custom/DissolveSurfaceH" {
    Properties{
      _Color("Color", Color) = (1,1,1,1)
      _MainTex("Albedo (RGB)", 2D) = "white" {}
      _BumpMap("Normal Map", 2D) = "white" {}

      _Glossiness("Smoothness", Range(0,1)) = 0.5
      _Metallic("Metallic", Range(0,1)) = 0.0

      _SliceGuide("Slice Guide", 2D) = "white" {}
      _SliceAmount("Slice Amount", Range(0, 1)) = 0.0
      _BurnRamp("Burn Ramp", 2D) = "white" {}
      _BurnSize("Burn Size", Range(0, 1)) = 0.15
      _EmissionAmount("Emission Amount", float) = 2.0
    }
        SubShader{
            Tags { "RenderType" = "Opaque" }
            LOD 200

            CGPROGRAM
            #pragma surface surf Standard addshadow
            #pragma target 3.0

            sampler2D _MainTex;
            sampler2D _BumpMap;
            sampler2D _SliceGuide;
            sampler2D _BurnRamp;

            struct Input {
                float2 uv_MainTex;
                float2 uv_BumpMap;
            };

            half _Glossiness;
            half _Metallic;
            fixed4 _Color;

            half _SliceAmount;
            half _BurnSize;
            half _EmissionAmount;

            void surf(Input IN, inout SurfaceOutputStandard o) {
                // Albedo comes from a texture tinted by color
                fixed4 c = tex2D(_MainTex, IN.uv_MainTex);

                half test = tex2D(_SliceGuide, IN.uv_MainTex).rgb - _SliceAmount;
                clip(test);

                // I skipped the _BurnColor here 'cause I was getting enough
                // colour from the BurnRamp texture already.
                if (test < _BurnSize && _SliceAmount > 0) {
                    o.Emission = tex2D(_BurnRamp, float2(test * (1 / _BurnSize), 0)) * _EmissionAmount;
                }

                o.Albedo = c.rgb * _Color.rgb;
                // Apply normal mapping.
                o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));

                o.Metallic = _Metallic;

                // My Albedo map has smoothness in its Alpha channel.
                o.Smoothness = _Glossiness * c.a;
                o.Alpha = c.a;
            }
            ENDCG
      }
          FallBack "Diffuse"
}
Аватара пользователя
MiniCat
UNIт
 
Сообщения: 130
Зарегистрирован: 11 фев 2017, 16:50

Re: Dissolve

Сообщение MiniCat 24 апр 2020, 15:29

Но этот шейдер тоже оказался фиговым по функционалу.
Есть ли у кого модификация стандартного шейдера (спекулар сетап) с возможностью диссолва?
Аватара пользователя
MiniCat
UNIт
 
Сообщения: 130
Зарегистрирован: 11 фев 2017, 16:50

Re: Dissolve

Сообщение jetyb 02 май 2020, 17:43

что-то я сомневаюсь что ваш шейдер вообще компилируется.
Синтаксис:
Используется csharp
half test = tex2D(_SliceGuide, IN.uv_MainTex).rgb - _SliceAmount;
 

как тут от трехмерного float мы можем отнимать одномерный?
Синтаксис:
Используется csharp
if (test < _BurnSize && _SliceAmount > 0)
 

по-моему в Cg не работает C# оператор двойного амперсента

там в шейдере точно предупреждений нет?
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21


Вернуться в Shader Lab

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

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