шейдер который сводил бы край модели в альфу

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

Re: шейдер который сводил бы край модели в альфу

Сообщение gnoblin 05 ноя 2010, 00:28

В общем нужный шейдер у нас давно есть :).

Я попробовал radial fade от Battle Angel Alita, в тройку он импортится нормально,
но вот этот сурфейс шейдер (типа порт, надеюсь корректный) работает лучше (сводит края в альфу, глюков нет):
radial fade.jpg

сурфейс шейдер вот:
Синтаксис:
Используется glsl
Shader "RadialFade" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
                _Range ("Range", Range (1.0, 8.0)) = 4.0
        }
        SubShader {
                Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
                LOD 200
               
                CGPROGRAM
                #pragma surface surf Lambert alpha

                sampler2D _MainTex;
                float _Range;
               
                struct Input {
                        float2 uv_MainTex;
                        float3 viewDir;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                          float4 albedo = tex2D(_MainTex, IN.uv_MainTex);
     
                          float3 normal = normalize(o.Normal);
                          float3 viewDir = normalize(IN.viewDir);
                          float fade = dot(normal, viewDir);
                     
                          fade = fade * _Range;
                          fade = min(fade, 1.0);
                         
                          o.Albedo.rgb = albedo.rgb;
                          o.Alpha = fade;
                }
                ENDCG
        }
        FallBack "Diffuse"
}
 


оригинал вот:
(не работает на фоне скайбокса в тройке)
Синтаксис:
Используется glsl
Shader "_radial_fade"
{

   Properties
   {
      _MainTex ("Base (RGB)", 2D) = "white" {}
      _Range ("Range", Range (1.0, 8.0)) = 4.0
   }
   
   SubShader
   {
        Pass
      {
         Blend SrcAlpha OneMinusSrcAlpha
         Tags {"Queue" = "Transparent"}

CGPROGRAM
   #pragma vertex vert
   #pragma fragment frag

   #include "UnityCG.cginc"
   
   struct v2f
   {
      V2F_POS_FOG;
      float2 uv;
      float3 normal;
      float3 viewDir;
   };

   uniform float4 _MainTex_ST;
   v2f vert(appdata_tan v)
   {
      v2f o;
      PositionFog(v.vertex, o.pos, o.fog);
      o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
     
      o.normal = v.normal;
      o.viewDir = ObjSpaceViewDir(v.vertex);
     
      return o;
   }
   
   uniform sampler2D _MainTex;
   uniform float _Range;
   float4 frag(v2f i) : COLOR
   {
      float4 albedo = tex2D(_MainTex, i.uv);
     
      float3 normal = normalize(i.normal);
      float3 viewDir = normalize(i.viewDir);
      float fade = dot(normal, viewDir);
     
      fade = fade * _Range;
      fade = min(fade, 1.0);
           
      float4 c;
      c.rgb = albedo;
      c.a = fade;
      return c;
   }
ENDCG

      }
   }
}
У вас нет доступа для просмотра вложений в этом сообщении.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: шейдер который сводил бы край модели в альфу

Сообщение Phoenics 06 ноя 2010, 13:08

Я себе пару дней назад вот такой простенький написал, с анимацией параметров очень неплохо для эффектов огня, плазменных выстрелов, реактивного пламени и т.п.
Синтаксис:
Используется glsl
Shader "FireGlowObject"
{
    Properties
        {
        _Color ("Tint (RGB)", Color) = (1,1,1,1)
                _MinVal("Min", Range (0, 1))  = 0
                _MaxVal("Max", Range (0, 1))  = 1
                _Muliplifer("Mult", Range(0.1, 1)) = 1
    }
    SubShader
        {
        ZWrite Off
        Tags { "Queue" = "Transparent" }
        Blend SrcAlpha OneMinusSrcAlpha

        Pass
                {  
                        //Lighting On
                       
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
 
            struct v2f
                        {
                float4 pos : SV_POSITION;
                float3 normal : TEXCOORD1;
                                float3 viewDir : TEXCOORD2;
            };
           
            v2f vert (appdata_base v)
                        {
                v2f o;
                o.pos = mul (UNITY_MATRIX_MVP, v.vertex);                
                o.viewDir = ObjSpaceViewDir(v.vertex);
                o.normal = v.normal;
                return o;
            }
           
            uniform float4 _Color;
            uniform half _MinVal;
                        uniform half _MaxVal;
                        uniform half _Muliplifer;
               
            half4 frag (v2f f) : COLOR
            {
                float3 normal = normalize(f.normal);
                                float3 ViewDir = normalize(f.viewDir);
                                float fade = dot(normal, ViewDir);
                                half4 ResultColor = _Color;
                                ResultColor.a = saturate(smoothstep(_MinVal, _MaxVal, fade)*_Muliplifer);
                                return saturate(ResultColor);
            }
           
            ENDCG
        }
    }
    Fallback "Transparent/VertexLit"
}
 


fires.png

Эффект довольно простой но бывает необходим, особенно с анимацией.
С например ним можно довольно быстро и легко сбацать какой-нить честный 3d эффектик стерльбы в таком духе:
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось Phoenics 07 ноя 2010, 00:12, всего редактировалось 1 раз.
Аватара пользователя
Phoenics
UNIт
 
Сообщения: 60
Зарегистрирован: 31 окт 2010, 22:29

Re: шейдер который сводил бы край модели в альфу

Сообщение gnoblin 06 ноя 2010, 18:23

Спасибо, интересно!
Единственная просьба по возможности прикладывать скриншоты, чтобы другим членам сообщества было проще проникнуться крутостью эффекта :)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: шейдер который сводил бы край модели в альфу

Сообщение Phoenics 07 ноя 2010, 00:13

Исправил предыдущий пост.
Аватара пользователя
Phoenics
UNIт
 
Сообщения: 60
Зарегистрирован: 31 окт 2010, 22:29

Пред.

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

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

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


cron