Страница 1 из 1

Маска через ограниченный диапазон значений?

СообщениеДобавлено: 04 дек 2014, 18:11
Razor_V
Всем доброго времени суток! Как выдрать из канала только необходимый диапазон значений? К примеру: Есть монохромная одно канальная текстура(канал от ргб/ргба текстуры). На ней нарисовано несколько пятен(одним цветом без градиента): Белое - значение 1.0(по юнькиным меркам, а по фотошоповским 255); Серо-белое 0.75; серое 0.5 и тд до черного(0). Как получить на выход только определенный диапазон цвета(например только 0.75)?

Пытался сделать так:
Синтаксис:
Используется csharp
// вырезка из фрагментного шейдера
// nm- основная карата нормалей
// nmAd- дополнительная карта нормалей
// addh- нерабочий алгоритм вырезания цвета из альфаканала карты- m

      fixed addh = clamp(m.a, m.a - 0.24, m.a - 0.26)  *  _height;
      fixed3 addH = fixed3(nmAd.x  *  addh, nmAd.y  *  addh, nmAd.z);
      fixed3 normals = nm + addH;
 

Re: Маска через ограниченный диапазон значений?

СообщениеДобавлено: 04 дек 2014, 19:50
waruiyume
А кламп, разве, не то, что вам нужно?

Re: Маска через ограниченный диапазон значений?

СообщениеДобавлено: 05 дек 2014, 11:48
Razor_V
waruiyume писал(а):А кламп, разве, не то, что вам нужно?
Кламп выдает немного не тот результат. Вырезать конкретный цвет можно, но не любой, который нужен.
Не могу найти слов чтоб описать работу Клампа, проще показать в шейдере.
Шейдер работает с РГБ, это для удобства. Поканально результат почти тот же. При желании можно в Клампе к "с" докрутить любой канал.
Синтаксис:
Используется csharp
Shader "Custom/test1" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
                _CL ("Clamp lo",Range (0,1)) = 1
                _CH ("Clamp hi",Range (0,1)) = 1
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
                LOD 200
               
                CGPROGRAM
                #pragma surface surf Lambert

                sampler2D _MainTex;
                fixed _CL;
                fixed _CH;

                struct Input {
                        fixed2 uv_MainTex;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                        half4 c = tex2D (_MainTex, IN.uv_MainTex);
                        o.Albedo = clamp(c, _CL,_CH);
                        o.Alpha = c.a;
                }
                ENDCG
        }
        FallBack "Diffuse"
}
 

Re: Маска через ограниченный диапазон значений?

СообщениеДобавлено: 05 дек 2014, 11:54
waruiyume
Моя твоя не понимай :-?? Ну, умножьте флот на 255 и сравнивайте, приводя к int, в if.