Normal blend [РЕШЕНО]

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

Normal blend [РЕШЕНО]

Сообщение echo 10 авг 2012, 23:54

Подскажите пожалуйста, можно ли блендить нормаль мапы (то есть плавный переход с одной нормаль текстуры на другую) и если можно, то как?
Последний раз редактировалось echo 26 авг 2012, 12:02, всего редактировалось 1 раз.
_ttp://zero0.16mb.com/Core/
_ttp://www.indiedb.com/games/zer0
Аватара пользователя
echo
UNIт
 
Сообщения: 140
Зарегистрирован: 30 окт 2011, 17:27
Откуда: От верблюда
  • Сайт

Re: Normal blend

Сообщение Woolf 11 авг 2012, 02:50

Ответ: можно. Пишите свой шейдер и блендите хоть нормалы, хоть диффузки, хоть что придумаете.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Normal blend

Сообщение echo 11 авг 2012, 09:48

Ответ "пишите свой шейдер" для меня равносилен "Так, а теперь берём гаечный ключ и строим андронный коллайдер" [nuklear]
_ttp://zero0.16mb.com/Core/
_ttp://www.indiedb.com/games/zer0
Аватара пользователя
echo
UNIт
 
Сообщения: 140
Зарегистрирован: 30 окт 2011, 17:27
Откуда: От верблюда
  • Сайт

Re: Normal blend

Сообщение magoga 12 авг 2012, 23:21

ну на самом деле, оптимальных способов, кроме как действительно написать свой шейдер я не вижу.
Аватара пользователя
magoga
UNIт
 
Сообщения: 98
Зарегистрирован: 22 мар 2010, 21:08

Re: Normal blend

Сообщение magoga 13 авг 2012, 10:25

там вообще работы на 3 минуты, опиши что именно тебе надо? я тебе сделаю время есть сейчас
чтоб ползунком ты мог сам изменять смешивание на всей модели?
или тебе нужно смешивать нормали по маске или чему-то еще?
в общем чего именно хочешь добиться ?
Аватара пользователя
magoga
UNIт
 
Сообщения: 98
Зарегистрирован: 22 мар 2010, 21:08

Re: Normal blend

Сообщение echo 13 авг 2012, 16:48

Конкретно это надо для мимики, то есть на персонаже например лежит шейдер спекуляр бумп, или скин шейдер (я скин использую) и вот персонаж к примеру хмурится и дожен смениться нормаль (плавно) на другой. В целом должно быть несколько нормалей - штуки три. Вот такая замута :)
_ttp://zero0.16mb.com/Core/
_ttp://www.indiedb.com/games/zer0
Аватара пользователя
echo
UNIт
 
Сообщения: 140
Зарегистрирован: 30 окт 2011, 17:27
Откуда: От верблюда
  • Сайт

Re: Normal blend

Сообщение magoga 14 авг 2012, 17:49

модифицировал скин шейдер, теперь в нем есть возможность смешивать 2 нормала.
предварительно модели нужно задать цвета точек.
Изображение
как-то так примерно должна быть окрашена модель.
в материале есть соответствующие ползунки которые вы можете анимировать и которыми вы можете регулировать степень смешивания в той или иной зоне.



Синтаксис:
Используется glsl

Shader "Skin2NormalsBlend"
{
Properties
{
        //_Color ("Main Color", Color) = (1,1,1,1)
        _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
        _Shininess ("Shininess", Range (0.01, 10)) = 0.078125
        _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
        _BumpMap ("Bump (RGB)", 2D) = "bump" {}
        _BumpMap2 ("Bump2 (RGB)", 2D) = "bump" {}
        _Blend1 ("Red Blend", Range (0.0, 1)) = 0.0
        _Blend2 ("Green Blend", Range (0.0, 1)) = 0.0
        _Blend3 ("Blue Blend", Range (0.0, 1)) = 0.0
        _RimTex ("Rim ramp (RGB) Fresnel ramp (A)", 2D) = " grey" {}
        _WrapTex ("Wrap ramp (RGBA)", 2D) = "black" {}

}
 
SubShader {
        Tags { "RenderType" = "Opaque" }
    LOD 400
   
CGPROGRAM
#pragma surface surf BumpSpecSkin vertex:vert

        fixed _Shininess,_Blend1,_Blend2,_Blend3;
        //fixed4 _Color;
        sampler2D _MainTex,_WrapTex,_RimTex,_BumpMap,_BumpMap2;

    fixed4 LightingBumpSpecSkin (SurfaceOutput s, fixed3 lightDir, fixed3 viewDir, fixed atten)
    {
                fixed rimf = dot(s.Normal, viewDir);
                fixed4 rim = tex2D (_RimTex, rimf.xx);
               
                fixed3 h = normalize( lightDir + viewDir );
               
                fixed diffusePos = dot(s.Normal, lightDir) * 0.5 + 0.5;
                fixed4 diffuse = tex2D (_WrapTex, diffusePos.xx);
                diffuse.rgb *= rim.rgb * 4;
               
                fixed nh = saturate( dot( h, s.Normal ) );
                fixed spec = pow( nh, s.Specular  * 128) * s.Gloss;
                fixed4 c;
                c.rgb = (s.Albedo + _SpecColor.rgb  * spec * rim.a) * diffuse * (atten * 2) * _LightColor0.rgb;
                c.a =  _LightColor0.a * _SpecColor.a * spec * atten;
                return c;
        }
       
        fixed4 LightingBumpSpecSkin_PrePass (SurfaceOutput s, fixed4 light)
        {
                fixed spec = light.a * s.Gloss;
               
                fixed4 c;
                c.rgb = (s.Albedo * light.rgb + light.rgb * _SpecColor.rgb * spec);
                c.a = s.Alpha + spec * _SpecColor.a;
                return c;
        }
               

struct Input
{
        fixed2 uv_MainTex;
        fixed3 vColor;
};


  void vert (inout appdata_full v, out Input o)
  {
     o.vColor = v.color.rgb * fixed3(_Blend1,_Blend2,_Blend3);
  }

void surf (Input IN, inout SurfaceOutput o)
{
        fixed4 texcol = tex2D( _MainTex, IN.uv_MainTex);       
        o.Albedo = texcol.rgb;// * _Color;
        o.Gloss = texcol.a;
        o.Specular = _Shininess;
       
        fixed3 n1 = UnpackNormal (tex2D (_BumpMap, IN.uv_MainTex));
        fixed3 n2 = UnpackNormal (tex2D (_BumpMap2, IN.uv_MainTex));
       
        fixed lerpmask = IN.vColor.r + IN.vColor.g + IN.vColor.b;

        o.Normal = lerp(n1,n2,lerpmask);
}

ENDCG

}

Fallback "Diffuse"

}

 
Последний раз редактировалось magoga 27 авг 2012, 14:38, всего редактировалось 1 раз.
Аватара пользователя
magoga
UNIт
 
Сообщения: 98
Зарегистрирован: 22 мар 2010, 21:08

Re: Normal blend

Сообщение echo 26 авг 2012, 12:01

Спасибо большое!
_ttp://zero0.16mb.com/Core/
_ttp://www.indiedb.com/games/zer0
Аватара пользователя
echo
UNIт
 
Сообщения: 140
Зарегистрирован: 30 окт 2011, 17:27
Откуда: От верблюда
  • Сайт


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

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

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