Transparent/Bumped Specular (Separated Textures)

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

Transparent/Bumped Specular (Separated Textures)

Сообщение Ursus 18 апр 2011, 16:05

Стандартный материал Transparent/Bumped Specular использует для трансперенси и спекуляра один и тот же канал текстуры диффуз (альфаканал), что на практике очень не удобно. До версии 3.0 существовали шейдера, использующие альфаканал текстуры нормал-мап. Но сейчас, из-за особого способа компрессии нормал-мапа этот путь сомнителен. Хотелось бы найти решение (или готовый шейдер) для выполнения условия Transparent/Bumped Specular с различными текстурами для спекуляра и трансперенси.
Аватара пользователя
Ursus
UNец
 
Сообщения: 12
Зарегистрирован: 29 авг 2010, 18:29
Откуда: Минск, Беларусь
  • ICQ

Re: Transparent/Bumped Specular (Separated Textures)

Сообщение MysTer92 18 апр 2011, 18:12

Допилил стандартный шейдер. Сделал отдельный слот для глосси-текстуры, юзает альфа канал.
Синтаксис:
Используется csharp
Shader "Transparent/Bumped Specular Separated Gloss" {
Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)
        _Shininess ("Shininess", Range (0.01, 1)) = 0.078125
        _MainTex ("Base (RGB) Transparent (A)", 2D) = "white" {}
        _BumpMap ("Normalmap", 2D) = "bump" {}
        _GlossTex ("Gloss (A)", 2D) = "white" {}
}

SubShader {
        Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
        LOD 400
       
CGPROGRAM
#pragma surface surf BlinnPhong alpha

sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _GlossTex;
fixed4 _Color;
half _Shininess;

struct Input {
        float2 uv_MainTex;
        float2 uv_BumpMap;
};

void surf (Input IN, inout SurfaceOutput o) {
        fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
        fixed gloss = tex2D(_GlossTex, IN.uv_MainTex).a;
        o.Albedo = tex.rgb * _Color.rgb;
        o.Gloss = gloss;
        o.Alpha = tex.a * _Color.a;
        o.Specular = _Shininess;
        o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}

FallBack "Transparent/VertexLit"
}
Последний раз редактировалось MysTer92 18 апр 2011, 18:43, всего редактировалось 1 раз.
Asset Store: Graphic Power-Up
about me
MysTer92
UNIт
 
Сообщения: 97
Зарегистрирован: 03 дек 2009, 09:08
Откуда: Кемерово
  • Сайт
  • ICQ

Re: Transparent/Bumped Specular (Separated Textures)

Сообщение gnoblin 18 апр 2011, 18:19

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

Re: Transparent/Bumped Specular (Separated Textures)

Сообщение Ursus 18 апр 2011, 22:25

Невероятно! Спасибо!
Сожалею, что всё ещё нет времени засесть за шейдера.
Но последние опыты показали, что также имеется необходимость использовать колорную текстуру с глоссом из её альфаканала, а трансперенси из отдельной текстуры. В идеале, конечно, брать чёрно-белую инфу из последней текстуры непосредственно из чёрно-белого Tex, экономя в памяти за счёт убирания её Alpha...
Аватара пользователя
Ursus
UNец
 
Сообщения: 12
Зарегистрирован: 29 авг 2010, 18:29
Откуда: Минск, Беларусь
  • ICQ

Re: Transparent/Bumped Specular (Separated Textures)

Сообщение MysTer92 18 апр 2011, 22:40

Тогда так
Синтаксис:
Используется csharp
Shader "Transparent/Bumped Specular Separated Alpha" {
 Properties {
         _Color ("Main Color", Color) = (1,1,1,1)
         _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)
         _Shininess ("Shininess", Range (0.01, 1)) = 0.078125
         _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
         _BumpMap ("Normalmap", 2D) = "bump" {}
         _AlphaTex ("Transparent (RGB)", 2D) = "white" {}
}

 SubShader {
         Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
         LOD 400
         
 CGPROGRAM
#pragma surface surf BlinnPhong alpha

 sampler2D _MainTex;
 sampler2D _BumpMap;
 sampler2D _AlphaTex;
 fixed4 _Color;
 half _Shininess;

struct Input {
         float2 uv_MainTex;
         float2 uv_BumpMap;
};

void surf (Input IN, inout SurfaceOutput o) {
         fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
         fixed3 alpha = tex2D(_AlphaTex, IN.uv_MainTex).rgb;
         o.Albedo = tex.rgb * _Color.rgb;
         o.Gloss = tex.a;
         o.Alpha = alpha * _Color.a;
         o.Specular = _Shininess;
         o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
 ENDCG
}

 FallBack "Transparent/VertexLit"
}
Asset Store: Graphic Power-Up
about me
MysTer92
UNIт
 
Сообщения: 97
Зарегистрирован: 03 дек 2009, 09:08
Откуда: Кемерово
  • Сайт
  • ICQ

Re: Transparent/Bumped Specular (Separated Textures)

Сообщение Ursus 19 апр 2011, 01:38

Огромное спасибо! В итоге на всех частях модели теперь всё работает, как и задумывалось.
Аватара пользователя
Ursus
UNец
 
Сообщения: 12
Зарегистрирован: 29 авг 2010, 18:29
Откуда: Минск, Беларусь
  • ICQ


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

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

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