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

Blend-shader для 2D освешения

СообщениеДобавлено: 10 янв 2011, 12:38
Nuprahtor
Здравствуйте
Возникли проблемы с реализацией шейдера для освещения в 2d
Суть такова: имеется плейн, полностью черный, который закрывает весь экран. Его должен как бы "прорезать" другой плейн, с текстурой кругового света, то есть прорезать именно в тех местах, где текстура имеет белый цвет.
С шейдерами я не знаком, все, что я нашел, это только шейдер, который смешивает две текстуры в одном материале, но это не то, что мне надо (во-первых, он не отрезает один участок текстуры от другого, а во-вторых, хотелось бы, чтобы плейн со светом и плейн с темнотой были разными объектами-материалами)

Синтаксис:
Используется glsl
Shader "2 Texture Blend" {
        Properties {
                _Blend ("Blend", Range (0, 1)) = 0.5
                _MainTex ("Base (RGB)", 2D) = "white"
                _BlendTex ("Blend (RGB)", 2D) = "black"
               
        }
        SubShader {
        Blend SrcAlpha OneMinusSrcAlpha  
        Blend DstColor Zero
                Pass {
                        SetTexture [_MainTex]
                       
                        SetTexture [_BlendTex] {
                                constantColor (0, 0, 0, [_Blend])
                                combine texture lerp (constant) previous
                        }
                }
        }
}

Re: Blend-shader для 2D освешения

СообщениеДобавлено: 10 янв 2011, 14:29
Battle Angel Alita
Прочитала пять раз, ничего не поняла.

Re: Blend-shader для 2D освешения

СообщениеДобавлено: 10 янв 2011, 14:59
Paul Siberdt
Угу, а объясните-ка на пальцах, чего хотите добиться, а в чем реализуется задумка :)

Re: Blend-shader для 2D освешения

СообщениеДобавлено: 10 янв 2011, 15:51
Nuprahtor
Ок, постараюсь объяснить как можно понятнее.
Вот скриншоты игры, где реализован такой тип освещения:
http://gamin.ru/sites/all/files/screenshots/beacon-2322.png
http://gamin.ru/sites/all/files/screenshots/beacon-2352.png
Как видно, персонаж находится в круге света, а вокруг него - темнота. Свет является спрайтом-маской, белые участки спрайта смешиваются с черной текстурой, и через них видно то, что находится за текстурой.
Мне нужен такой шейдер для текстуры, который будет прорезаться через заданную текстуру
Вот как-то так:)

Re: Blend-shader для 2D освешения

СообщениеДобавлено: 10 янв 2011, 16:07
Battle Angel Alita
Nuprahtor писал(а):Свет является спрайтом-маской, белые участки спрайта смешиваются с черной текстурой, и через них видно то, что находится за текстурой.

Делается это так - берётся такая текстура
lit.png

устанавливается Wrap mode в Clamp, и ложится на плашку перед камерой с блендингом Multiply

Re: Blend-shader для 2D освешения

СообщениеДобавлено: 10 янв 2011, 16:26
Nuprahtor
Спасибо за ответ
Для multiply блендинга поставил текстуре шейдер из системы партиклов
Получилась такая картинка (без темной текстуры, так как темная текстура все равно закрывает экран и кроме нее ничего не видно, буду разбираться в шейдерах)
http://www.foul-invasion.ucoz.ru/wip/FireflyNocturne/NocturneProblemWithLighting.jpg

Re: Blend-shader для 2D освешения

СообщениеДобавлено: 10 янв 2011, 16:30
Paul Siberdt
Если разделить рендер на две камеры, можно во вторую рисовать белые маски видимости (дополнительные черно-белые плашки) для каждого освещенного предмета, брать полученную картинку белых клякс на черном поле и бросать модулейтом на картинку основной камеры. Но неа энто нужна Pro-версия.

Re: Blend-shader для 2D освешения

СообщениеДобавлено: 10 янв 2011, 16:31
Nuprahtor
Paul Siberdt писал(а):Если разделить рендер на две камеры, можно во вторую рисовать белые маски видимости (дополнительные черно-белые плашки) для каждого освещенного предмета, брать полученную картинку белых клякс на черном поле и бросать модулейтом на картинку основной камеры. Но неа энто нужна Pro-версия.

Про-версией не обладаю, к сожалению:(

Re: Blend-shader для 2D освешения

СообщениеДобавлено: 10 янв 2011, 18:23
Battle Angel Alita
Синтаксис:
Используется glsl
Shader "Lit"
{
        Properties
        {
                _LitTex ("Lit", 2D) = "white"
        }
        SubShader
        {
                Tags {"Queue"="Transparent" "RenderType"="Transparent"}
               
                Fog {Mode off}
                ZWrite Off
                ColorMask RGB
                Blend DstColor Zero
               
                Pass
                {
                        SetTexture [_LitTex]
                        {
                                Combine texture
                        }
                }
        }
}