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

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

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

Сообщение gnoblin 10 янв 2010, 21:35

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

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

Сообщение Neodrop 10 янв 2010, 21:37

Чисто теоритически - конечно реально. НО я валенок в шейдерах, ты знаешь ;0)
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение Battle Angel Alita 11 янв 2010, 14:03

Это sort of Rim Light, только надо не подсвечивать контур, а уменьшать его альфу.

Код: Выделить всё
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

      }
   }
}
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

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

Сообщение Neodrop 11 янв 2010, 21:51

Battle Angel Alita, я всё больше радуюсь такому камраду в Сообществе. :ymapplause:

(3A4OT)
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение Paul Siberdt 11 янв 2010, 23:05

А без шейдеров делов - пробить по вертексам границы нулевую альфу :p ... если вертексов некрасиво мало - создать полигональную кайму - всяко сэкономим на расчетах и текстурной памяти.

А Алита - не тот ли самый ангел, о котором Кэмерон собирается драму снимать? :ymsmug:
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

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

Сообщение gnoblin 12 янв 2010, 01:19

А без шейдеров делов - пробить по вертексам границы нулевую альфу :p ... если вертексов некрасиво мало - создать полигональную кайму - всяко сэкономим на расчетах и текстурной памяти.


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

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

Сообщение Paul Siberdt 12 янв 2010, 02:30

Мы получаем alpha-маску и вся крутость в том, что прозрачность отдается на откуп вертексному цвету и у нас развязаны руки для манипуляции с UV-setом.
Не нужно создавать текстуру с альфой, не нужно создавать отдельную маску, не нужно создавать дополнительный Ювисет, не нужно, наконец, писать шейдер, всем перечисленным напрягая филлрейт.

Для меня, как труженика на платформе апляфонов, это серьезная оптимизация.

Где подобное удобно применять вообще? В элементах со скроллингом текстуры, например, плывущие за горизонт облака, набегающие на берег волны + в гигантском числе разнообразных аддитивных (и не только) спецэффектов, в которых пользовать шейдер - неоправданная роскошь.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

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

Сообщение Neodrop 12 янв 2010, 02:48

Хорошо бы примером подкрепить эти замечательные выкладки. :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение Paul Siberdt 12 янв 2010, 10:34

эээ.. а как вы добавляете в пост окошко веб-плеера? ... а, понятно, сцылка на внешний ресурс... нету такова.
Во вложении пример с прогрессбаром.

У верхнего барчика вертекс-альфа очищена и потому видна неприятная граница по правому и левому краям.
У нижнего последние вертексы краев по альфе нулевые, что убирает каку.
Создавать же для подобного HUD-эффекта шейдер с альфа-маской я считаю забиванием гвоздей микроскопом :)
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

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

Сообщение Paul Siberdt 12 янв 2010, 12:12

Блин... сорри... чета я сильно тупанул насчет края модели. Ведь изначально подразумевался не край геометрии, а контур модели во вьюпорте?... то бишь, вопрос стоял о модификации картун-шейдера. Тут вертексная альфа не поможет :(

Но, в любом случае, пользу повертексной альфы это не уменьшает :D
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

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

Сообщение gnoblin 12 янв 2010, 17:17

Battle Angel Alita, здоровенное спасибо :ymsmug: .

А поможете прикрутить этот эффект с альфой по краям к другому моему шейдеру ( "XRay end VertexLit") :- ?

Мне б хотелось иметь все параметры из этого шейдера + альфаОбводку... И если можно - чтобы шейдер по-прежнему работал с DX 7 ("_radial_fade" требует sm 2.0, a "XRay end VertexLit" работает на седьмом).

Я использую вот такой шейдер:

Код: Выделить всё
Shader "XRay end VertexLit" {

    Properties {
        _ColorX ("Tint (RGB)", Color) = (1,1,1,1)
       
        _Min("Min",Range(-1,1))  = 0.5
        _Exp("Exp",Range(0,5))  = 0.5
        _Power("Power", Range (0,5)) = 0.5
   
        _Color ("Main Color", Color) = (1,1,1,0)
        _SpecColor ("Spec Color", Color) = (1,1,1,1)
        _Emission ("Emmisive Color", Color) = (0,0,0,0)
        _Shininess ("Shininess", Range (0.01, 1)) = 0.7
        _MainTex ("Base (RGB)", 2D) = "white" {}

    }
    SubShader {
   
            Pass {
            Material {
                Diffuse [_Color]
                Ambient [_Color]
                Shininess [_Shininess]
                Specular [_SpecColor]
                Emission [_Emission]
            }
            Lighting On
            SeperateSpecular On
            SetTexture [_MainTex] {
                Combine texture * primary DOUBLE, texture * primary
             }
            }
       
        Pass {
       
            Blend One One
           
            CGPROGRAM
            #pragma vertex vert
            #include "UnityCG.cginc"

            uniform float4 _ColorX;
           uniform float _Min;
            uniform float _Exp;
            uniform float _Power;

            struct appdata {
              float4 vertex : POSITION;
              float4 normal : NORMAL;
              float4 color : COLOR;
               };

            struct v2f {
               float4 pos   : POSITION;
               float4 color : COLOR;
            };
           
            v2f vert (appdata v) {
                v2f o;
                o.pos = mul( glstate.matrix.mvp, v.vertex);
                float3 viewDir = normalize(ObjSpaceViewDir(v.vertex));
               
                float KrMin = (_Power* _Min);
                float InvExp = (1.0/_Exp);
                float XBorder = lerp(_Power,KrMin,pow(abs(dot(v.normal,viewDir)),InvExp));
   
                //float XBorder = dot(viewDir,v.normal);
                float4 Xcol = float4((XBorder)*_ColorX);
                o.color = Xcol;
    return o;
            }
           
            ENDCG
        }
       
    }
    Fallback Off
}
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

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

Сообщение gnoblin 12 янв 2010, 17:31

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

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

Сообщение Neodrop 12 янв 2010, 17:39

Гноб, потом покажи тута, что вышло.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение Paul Siberdt 12 янв 2010, 19:21

Ээээ... да у меня нет никакого шейдера. Есть текстурка с прогрессбаром, текстурка с градиентом, есть плашка с вертексной альфой по краям и есть скриптик хэлсбара. Сорри.. тестовую сцену на работе собрал, дома просто выдираю из контекста
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

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

Сообщение gnoblin 13 янв 2010, 00:54

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

След.

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

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

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