Спекулар по текстуре - Форум Игроделов
Вс, 05 Май 2024, 19:22 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » ШЕЙДЕРЫ, МАТЕРИАЛЫ И МОДИФИКАТОРЫ » Спекулар по текстуре
Спекулар по текстуре
seamanДата: Вс, 31 Май 2015, 14:43 | Сообщение # 1
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Привет.
кто-нибудь разбирался с шейдерами в пятерке?
В чем вопрос.
Есть три текстуры - RGBA - диффуз + прозрачность, RGB - нормал и RGB - спекуляр. Т.е. спекуляр не просто значение, и даже не просто ч/б изображение, а полноцветная текстура.
Какой шейдер сюда подойдет?
1. Legacy. У них у всех спекулар задается одним цветом для всей модели. Не подходит.
2. Новые шедеры в пятой версии.
Тут есть Standart (Specular Setup) При установке Rendering Mode в Cutout вроде бы то что надо. Однако тут нет регулировки силы спекуляра. Я немного покопался в коде шейдеров. Там сила спекуляра рассчитывается внутри так, чтобы общая "энергия" диффуза и спекуляра не изменялась. Вроде для физически верного отражения.
Однако при этом получается лажа:

Нос - металлический, на нем отражается небо как в зеркале.
Уменьшил яркость текстуры спекуляра, Вроде нос нормальный. Однако все-равно идет засвет. В каких-то неожиданных местах. Там вроде текстура спекуляра темная.

3. Писать свою шейдер.
Мне это думаю не под силу. Тем более, если делать нормальный, реагирующий на освещение и т.п.

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

PS^ возможно это вообще не проблема, но я увы в шейдерах ни бум бум...
 
СообщениеПривет.
кто-нибудь разбирался с шейдерами в пятерке?
В чем вопрос.
Есть три текстуры - RGBA - диффуз + прозрачность, RGB - нормал и RGB - спекуляр. Т.е. спекуляр не просто значение, и даже не просто ч/б изображение, а полноцветная текстура.
Какой шейдер сюда подойдет?
1. Legacy. У них у всех спекулар задается одним цветом для всей модели. Не подходит.
2. Новые шедеры в пятой версии.
Тут есть Standart (Specular Setup) При установке Rendering Mode в Cutout вроде бы то что надо. Однако тут нет регулировки силы спекуляра. Я немного покопался в коде шейдеров. Там сила спекуляра рассчитывается внутри так, чтобы общая "энергия" диффуза и спекуляра не изменялась. Вроде для физически верного отражения.
Однако при этом получается лажа:

Нос - металлический, на нем отражается небо как в зеркале.
Уменьшил яркость текстуры спекуляра, Вроде нос нормальный. Однако все-равно идет засвет. В каких-то неожиданных местах. Там вроде текстура спекуляра темная.

3. Писать свою шейдер.
Мне это думаю не под силу. Тем более, если делать нормальный, реагирующий на освещение и т.п.

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

PS^ возможно это вообще не проблема, но я увы в шейдерах ни бум бум...

Автор - seaman
Дата добавления - 31 Май 2015 в 14:43
seamanДата: Вс, 31 Май 2015, 18:38 | Сообщение # 2
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
UPDT.
Нашел шейдер с хорошим спекуляром. Не могу прикрутить к нему прозрачность sad
 
СообщениеUPDT.
Нашел шейдер с хорошим спекуляром. Не могу прикрутить к нему прозрачность sad

Автор - seaman
Дата добавления - 31 Май 2015 в 18:38
seamanДата: Вс, 31 Май 2015, 18:48 | Сообщение # 3
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Йес! Заработало!

Вдруг кому понадобится. Шейдер:
Код
    Shader "My/Specular Colored" {
         Properties {
             _Color ("Main Color", Color) = (1,1,1,1)
             _MainTex ("Base (RGB) TransGloss (A)", 2D) = "white" {}
             _GlossTex ("Specular (RGB) Shininess (A)", 2D) = "gray" {}
             _BumpMap ("Normalmap", 2D) = "bump" {}
             _Shininess ("Shininess", Range (0, 10)) = 1
    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
         }
         SubShader {
    Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
    LOD 400
             CGPROGRAM
                 //use custom lighting functions
                 #pragma surface surf BlinnPhongColor alphatest:_Cutoff
                 
                 
                 //custom surface output structure
                 struct SurfaceOutputSpecColor {
                     half3 Albedo;
                     half3 Normal;
                     half3 Emission;
                     half Specular;
                     half3 GlossColor; //Gloss is now three-channel
                     half Alpha;
                 };
                 
                 //forward lighting function
                 inline half4 LightingBlinnPhongColor (SurfaceOutputSpecColor s, half3 lightDir, half3 viewDir, half atten) {
                     #ifndef USING_DIRECTIONAL_LIGHT
                     lightDir = normalize(lightDir);
                     #endif
                     viewDir = normalize(viewDir);
                     half3 h = normalize (lightDir + viewDir);
                     
                     half diff = max (0, dot (s.Normal, lightDir));
                     
                     float nh = max (0, dot (s.Normal, h));
                     float spec = pow (nh, s.Specular*128.0);
                     
                     half4 c;
                     //Use gloss colour instead of gloss
                     c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * s.GlossColor * spec) * (atten * 2);
                     //We use gloss luminance to determine its overbright contribution
                     c.a = s.Alpha + _LightColor0.a * Luminance(s.GlossColor) * spec * atten;
                     return c;
                 }
                 
                 //deferred lighting function
                 inline half4 LightingBlinnPhongColor_PrePass (SurfaceOutputSpecColor s, half4 light) {
                     //Use gloss colour instead of gloss
                     half3 spec = light.a * s.GlossColor;
                     
                     half4 c;
                     c.rgb = (s.Albedo * light.rgb + light.rgb * spec.rgb);
                     //We use gloss luminance to determine its overbright contribution
                     c.a = s.Alpha + Luminance(spec);
                     return c;
                 }
                 
                 sampler2D _MainTex;
                 sampler2D _GlossTex;
                 sampler2D _BumpMap;
                 float4 _Color;
                 float _Shininess;
                 
                 struct Input {
                     float2 uv_MainTex;
                     float2 uv_GlossTex;
                     float2 uv_BumpMap;
       
                 };
                 
                 void surf (Input IN, inout SurfaceOutputSpecColor o) {
                     half4 tex = tex2D(_MainTex, IN.uv_MainTex);
                     half4 gloss = tex2D(_GlossTex, IN.uv_GlossTex);
                     o.Albedo = tex.rgb * _Color.rgb;
                     //Gloss colour come from RGB
                     o.GlossColor = _Shininess * gloss.rgb;
                     o.Alpha = tex.a;
                     //Specular is mapped
                     o.Specular = gloss.a;
                     o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
                 }
             ENDCG
         }
         Fallback "Diffuse"
     }
 
СообщениеЙес! Заработало!

Вдруг кому понадобится. Шейдер:
Код
    Shader "My/Specular Colored" {
         Properties {
             _Color ("Main Color", Color) = (1,1,1,1)
             _MainTex ("Base (RGB) TransGloss (A)", 2D) = "white" {}
             _GlossTex ("Specular (RGB) Shininess (A)", 2D) = "gray" {}
             _BumpMap ("Normalmap", 2D) = "bump" {}
             _Shininess ("Shininess", Range (0, 10)) = 1
    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
         }
         SubShader {
    Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
    LOD 400
             CGPROGRAM
                 //use custom lighting functions
                 #pragma surface surf BlinnPhongColor alphatest:_Cutoff
                 
                 
                 //custom surface output structure
                 struct SurfaceOutputSpecColor {
                     half3 Albedo;
                     half3 Normal;
                     half3 Emission;
                     half Specular;
                     half3 GlossColor; //Gloss is now three-channel
                     half Alpha;
                 };
                 
                 //forward lighting function
                 inline half4 LightingBlinnPhongColor (SurfaceOutputSpecColor s, half3 lightDir, half3 viewDir, half atten) {
                     #ifndef USING_DIRECTIONAL_LIGHT
                     lightDir = normalize(lightDir);
                     #endif
                     viewDir = normalize(viewDir);
                     half3 h = normalize (lightDir + viewDir);
                     
                     half diff = max (0, dot (s.Normal, lightDir));
                     
                     float nh = max (0, dot (s.Normal, h));
                     float spec = pow (nh, s.Specular*128.0);
                     
                     half4 c;
                     //Use gloss colour instead of gloss
                     c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * s.GlossColor * spec) * (atten * 2);
                     //We use gloss luminance to determine its overbright contribution
                     c.a = s.Alpha + _LightColor0.a * Luminance(s.GlossColor) * spec * atten;
                     return c;
                 }
                 
                 //deferred lighting function
                 inline half4 LightingBlinnPhongColor_PrePass (SurfaceOutputSpecColor s, half4 light) {
                     //Use gloss colour instead of gloss
                     half3 spec = light.a * s.GlossColor;
                     
                     half4 c;
                     c.rgb = (s.Albedo * light.rgb + light.rgb * spec.rgb);
                     //We use gloss luminance to determine its overbright contribution
                     c.a = s.Alpha + Luminance(spec);
                     return c;
                 }
                 
                 sampler2D _MainTex;
                 sampler2D _GlossTex;
                 sampler2D _BumpMap;
                 float4 _Color;
                 float _Shininess;
                 
                 struct Input {
                     float2 uv_MainTex;
                     float2 uv_GlossTex;
                     float2 uv_BumpMap;
       
                 };
                 
                 void surf (Input IN, inout SurfaceOutputSpecColor o) {
                     half4 tex = tex2D(_MainTex, IN.uv_MainTex);
                     half4 gloss = tex2D(_GlossTex, IN.uv_GlossTex);
                     o.Albedo = tex.rgb * _Color.rgb;
                     //Gloss colour come from RGB
                     o.GlossColor = _Shininess * gloss.rgb;
                     o.Alpha = tex.a;
                     //Specular is mapped
                     o.Specular = gloss.a;
                     o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
                 }
             ENDCG
         }
         Fallback "Diffuse"
     }

Автор - seaman
Дата добавления - 31 Май 2015 в 18:48
seamanДата: Вс, 31 Май 2015, 19:32 | Сообщение # 4
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Все. Я нифига не понимаю. Перезагрузил Юнити. В вышеприведенном шейдере появились артефакты. Зато стандартный шейдер со спекуляром стал нормально работать (ну более-менее).
Что ж такое!?!
 
СообщениеВсе. Я нифига не понимаю. Перезагрузил Юнити. В вышеприведенном шейдере появились артефакты. Зато стандартный шейдер со спекуляром стал нормально работать (ну более-менее).
Что ж такое!?!

Автор - seaman
Дата добавления - 31 Май 2015 в 19:32
seamanДата: Вс, 31 Май 2015, 19:40 | Сообщение # 5
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Хороший диалог biggrin Похоже тут любителей шейдеров нет.
Понял почему стандартный шейдер со спекуляром заработал. Для него как и для вышеприведенного шейдера нужно в альфаканале текстуры спекуляра Shiness. Я когда делал текстуры для своего шейдера добавил альфа-канал. Вот стандартный и заработал.
Возможно в мануале где-то это и написано, но все же лучше бы юнитекам как в легаси шейдерах в инспекторе это явно написать. Тогда не заглядывая в мануал это было бы ясно!
А вот почему мой шейдер стал давать артефакты - непонятно....
 
СообщениеХороший диалог biggrin Похоже тут любителей шейдеров нет.
Понял почему стандартный шейдер со спекуляром заработал. Для него как и для вышеприведенного шейдера нужно в альфаканале текстуры спекуляра Shiness. Я когда делал текстуры для своего шейдера добавил альфа-канал. Вот стандартный и заработал.
Возможно в мануале где-то это и написано, но все же лучше бы юнитекам как в легаси шейдерах в инспекторе это явно написать. Тогда не заглядывая в мануал это было бы ясно!
А вот почему мой шейдер стал давать артефакты - непонятно....

Автор - seaman
Дата добавления - 31 Май 2015 в 19:40
HanzoДата: Вт, 02 Июн 2015, 18:43 | Сообщение # 6
 
Сообщений: 1070
Награды: 8
Репутация: 296
Статус: Offline
Вот шейдер (совместим с энлайтен и рефлексами)

https://yadi.sk/d/J9SVPd7bh3GF3

делался в Форже - оттого и сильно захламлен

слоты:

1 - диффуз RGB + спекулар A ( + он же - маска отражений + он же АО)
2 - нормаль
3 - детальный нормал
4 - текстура детализации
и всякие настройки цвета и интенсивности


Сообщение отредактировал Hanzo - Вт, 02 Июн 2015, 18:53
 
СообщениеВот шейдер (совместим с энлайтен и рефлексами)

https://yadi.sk/d/J9SVPd7bh3GF3

делался в Форже - оттого и сильно захламлен

слоты:

1 - диффуз RGB + спекулар A ( + он же - маска отражений + он же АО)
2 - нормаль
3 - детальный нормал
4 - текстура детализации
и всякие настройки цвета и интенсивности

Автор - Hanzo
Дата добавления - 02 Июн 2015 в 18:43
seamanДата: Вт, 02 Июн 2015, 20:39 | Сообщение # 7
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Спасибо, но это не то.
Вот покажу какие есть карты.
1. диффуз + прозрачность (либо отдельно, либо в альфа канале)

2. нормал

3. сзекуляр (полноцветная!)

стандартный со спекуляром в пятой версии юнити подходит почти на 100%. Он только более сложный чем надо. У него еще в спекуляре в альфа канале карта shiness, что мне в конкретном случае не нужно.
____
Кстати. Какой форж последний можно найти (бесплатно)?
 
СообщениеСпасибо, но это не то.
Вот покажу какие есть карты.
1. диффуз + прозрачность (либо отдельно, либо в альфа канале)

2. нормал

3. сзекуляр (полноцветная!)

стандартный со спекуляром в пятой версии юнити подходит почти на 100%. Он только более сложный чем надо. У него еще в спекуляре в альфа канале карта shiness, что мне в конкретном случае не нужно.
____
Кстати. Какой форж последний можно найти (бесплатно)?

Автор - seaman
Дата добавления - 02 Июн 2015 в 20:39
HanzoДата: Ср, 03 Июн 2015, 09:25 | Сообщение # 8
 
Сообщений: 1070
Награды: 8
Репутация: 296
Статус: Offline
бесплатно на CGPersia biggrin версия 1.13 если надо могу сцылку
катаут подключить не проблема - это чуть переделать шейдер. Тут еще нужно Transculence прикрутить для того чтобы выглядело как кожа, а не как вазелиновая корочка....

Цитата seaman ()
1. диффуз + прозрачность (либо отдельно, либо в альфа канале)

много отдельных текстур не есть хорошо - можно так например
1 - диффуз RGB + прозрачность A
2 - спекулар (RGB - светоприем ) + маска отражений в А - чтобы была корректная реакция на источники света, а там уже отражения можно размылить как душе угодно. Если не нужна маска отражений можно запихнуть карту АО
3 - нормал мапа RGBA
4 - карта Transculence - что-то типа SSS субдермиса для кожи

тут скорее нужно смотреть в сторону Marmoset Skin IBL

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


Сообщение отредактировал Hanzo - Ср, 03 Июн 2015, 09:41
 
Сообщениебесплатно на CGPersia biggrin версия 1.13 если надо могу сцылку
катаут подключить не проблема - это чуть переделать шейдер. Тут еще нужно Transculence прикрутить для того чтобы выглядело как кожа, а не как вазелиновая корочка....

Цитата seaman ()
1. диффуз + прозрачность (либо отдельно, либо в альфа канале)

много отдельных текстур не есть хорошо - можно так например
1 - диффуз RGB + прозрачность A
2 - спекулар (RGB - светоприем ) + маска отражений в А - чтобы была корректная реакция на источники света, а там уже отражения можно размылить как душе угодно. Если не нужна маска отражений можно запихнуть карту АО
3 - нормал мапа RGBA
4 - карта Transculence - что-то типа SSS субдермиса для кожи

тут скорее нужно смотреть в сторону Marmoset Skin IBL

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

Автор - Hanzo
Дата добавления - 03 Июн 2015 в 09:25
seamanДата: Ср, 03 Июн 2015, 15:06 | Сообщение # 9
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
ОК. Спасибо. Сделал что хотел в Форге.
 
СообщениеОК. Спасибо. Сделал что хотел в Форге.

Автор - seaman
Дата добавления - 03 Июн 2015 в 15:06
Форум Игроделов » UNITY3D » ШЕЙДЕРЫ, МАТЕРИАЛЫ И МОДИФИКАТОРЫ » Спекулар по текстуре
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024