Черно-белый шейдер

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

Черно-белый шейдер

Сообщение gnoblin 22 окт 2010, 06:17

Шейдер, который переводит цвет объекта в серые тона.

Синтаксис:
Используется glsl
Shader "ImageProc Grayscale" {
 Properties {
      _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader {
      Tags { "RenderType" = "Opaque" }

      CGPROGRAM
      #pragma surface surf Lambert

      struct Input {
          float2 uv_MainTex;
      };
     
      sampler2D _MainTex;

      void surf (Input IN, inout SurfaceOutput o) {
          o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
          o.Albedo = 0.299*o.Albedo.r + 0.587*o.Albedo.g + 0.184*o.Albedo.b;
      }
      ENDCG
    }
    Fallback "Diffuse"
  }
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Черно-белый шейдер

Сообщение JugadorGL 12 янв 2012, 09:22

А можно такой же шейдер, но чтобы ещё и альфа канал поддерживал? А то применил его к PNG-шке и вместо прозрачности получил белый фон.
JugadorGL
UNец
 
Сообщения: 35
Зарегистрирован: 27 июн 2010, 00:00

Re: Черно-белый шейдер

Сообщение AndreyMust19 12 янв 2012, 10:12

А нет ли такого же, чтобы "работал на камеру"?
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Черно-белый шейдер

Сообщение DDDENISSS 28 янв 2012, 15:04

Я черно белый цвет делал по формуле (r+g+b)/3, а тут почему-то по другому.
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: Черно-белый шейдер

Сообщение dorto 28 янв 2012, 17:19

(r+g+b)/3 это что такое? сумму цветов разделил на их количество??? интересны результат) и в какой программе такой фокус проходит?
dorto
UNIт
 
Сообщения: 102
Зарегистрирован: 13 окт 2011, 13:16

Re: Черно-белый шейдер

Сообщение gnoblin 28 янв 2012, 17:28

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

Re: Черно-белый шейдер

Сообщение seaman 28 янв 2012, 18:40

Когда работаешь в какой-то области (в данном случае - работа с цветом), надо знать хотя бы основы.
http://ru.wikipedia.org/wiki/RGB
Использованная формула - для белого 6500 кельвинов, что примерно соответствует дневному свету.
PS^ это я DDDENISSS пишу
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Черно-белый шейдер

Сообщение JugadorGL 29 янв 2012, 08:50

Так никто не подскажет, как его с альфой заставить работать, а то что-то у меня с шейдерами никак вообще не получается :( либо не пашет, либо ошибки сыплет...
JugadorGL
UNец
 
Сообщения: 35
Зарегистрирован: 27 июн 2010, 00:00

Re: Черно-белый шейдер

Сообщение gnoblin 29 янв 2012, 16:42

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

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

Re: Черно-белый шейдер

Сообщение RefractoR 30 янв 2012, 22:19

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

Синтаксис:
Используется glsl
Shader "Grayscale_alpha" {
  Properties {
       _MainTex ("Texture", 2D) = "white" {}
     }
     SubShader {
       Tags { "RenderType" = "Opaque" }

       CGPROGRAM
       #pragma surface surf Lambert alpha

       struct Input {
           float2 uv_MainTex;
       };
     
       sampler2D _MainTex;

       void surf (Input IN, inout SurfaceOutput o) {

           half4 tex = tex2D(_MainTex, IN.uv_MainTex);
           
           o.Albedo = 0.299 * tex.r + 0.587 * tex.g + 0.184 * tex.b;
           o.Alpha = tex.a;
                   
       }
           
       ENDCG
           
     }
         
     Fallback "Diffuse"
         
   }
 
RefractoR
UNIт
 
Сообщения: 50
Зарегистрирован: 05 ноя 2009, 16:31
Откуда: Краснодар
  • ICQ


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

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

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