Плавное затухание стен - shader

Шейдерлаб (fixed function pipeline) и cg\glsl шейдеры для OpenGL ES 2.0 для мобилок

Плавное затухание стен - shader

Сообщение Medveckij 19 июн 2013, 02:30

Всем добра, ребята.

Стандартный MobileDiffuse не поддерживает цвет и альфа канал тем более.
Как бы так его хитро переписать чтобы появилось и первое и второе? И еще десерт в качестве сохранения работоспособности сей переделки.)

А нужен он мне для плавного затухания стен на уровне. Пока писал под transparent. Вот, пришло время почистить недочеты.

Возможно я прощелкал и оно тут где то лежит, ждет меня?) Не подскажете?

В шейдерах слаб, есть такая правда.
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Плавное затухание стен - shader

Сообщение waruiyume 19 июн 2013, 03:03

Модифицированный MobileDiffuse:
Синтаксис:
Используется glsl
Shader "Mobile/DiffuseColoredAlpha"
{
Properties
{
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _Color ("Color", Color) = (1, 1, 1, 1)
}
SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 150

CGPROGRAM
#pragma surface surf Lambert alpha noforwardadd

sampler2D _MainTex;
fixed4 _Color;

struct Input
{
        float2 uv_MainTex;
};

void surf (Input IN, inout SurfaceOutput o)
{
        fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
        o.Albedo = c.rgb * _Color.rgb;
        o.Alpha = c.a * _Color.a;
}
ENDCG
}

Fallback "Mobile/VertexLit"
}

 


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

Можно, невозбранно, брать шейдеры:
viewtopic.php?f=11&t=8145
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Плавное затухание стен - shader

Сообщение Medveckij 19 июн 2013, 03:52

waruiyume писал(а):Модифицированный MobileDiffuse:
Синтаксис:
Используется glsl
Shader "Mobile/DiffuseColoredAlpha"
{
Properties
{
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _Color ("Color", Color) = (1, 1, 1, 1)
}
SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 150

CGPROGRAM
#pragma surface surf Lambert alpha noforwardadd

sampler2D _MainTex;
fixed4 _Color;

struct Input
{
        float2 uv_MainTex;
};

void surf (Input IN, inout SurfaceOutput o)
{
        fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
        o.Albedo = c.rgb * _Color.rgb;
        o.Alpha = c.a * _Color.a;
}
ENDCG
}

Fallback "Mobile/VertexLit"
}

 


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

Можно, невозбранно, брать шейдеры:
viewtopic.php?f=11&t=8145


За плюшки спасибо :)

На сколько плохая? Если не сложно поделитесь опытом.

Я написал несколько состояний: с мгновенным исчезновением выключая renderer; с тем же исчезновением, но закидывая и возвращая объект из пула и вот последний вариант - плавное затухание. (на всякий случай)

все нужные объекты записываются в массив и уже по циклу прогоняются по функции.

Первые два работают отлично. FPS 50-55 на galaxy tab. Ну а третий роняет программу как следует.


Да, элементы которые нужно спрятать довольно больших размеров. Иногда это арка, иногда часть статуи, а иногда это стена на пол экрана.
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Плавное затухание стен - shader

Сообщение waruiyume 19 июн 2013, 04:06

Опытом не поделюсь, ибо его нет :D А теорией, везде, в том числе и в статье, на которую я кинул ссылку написано: "альфаблендинг вызывает (полная Ж) на мобильных"
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Плавное затухание стен - shader

Сообщение Medveckij 19 июн 2013, 04:12

waruiyume писал(а):Опытом не поделюсь, ибо его нет :D А теорией, везде, в том числе и в статье, на которую я кинул ссылку написано: "альфаблендинг вызывает (полная Ж) на мобильных"


Но это ведь не хорошо. :) Мгновенное исчезновение стен если даже и смотрится терпимо, то человек со слабыми нервами может и испугаться.

Значит имеет смысл двигаться в другое направление. Возможно что-нибудь со слоями, или второй камерой... надо думать
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Плавное затухание стен - shader

Сообщение waruiyume 19 июн 2013, 04:27

В прошлый раз, забыл изменить теги, исправленный вариант:
Синтаксис:
Используется glsl
Shader "Mobile/DiffuseColoredAlpha"
{
        Properties
        {
                _MainTex ("Base (RGB)", 2D) = "white" {}
                _Color ("Color", Color) = (1, 1, 1, 1)
        }
        SubShader
        {
                Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
                LOD 150

                CGPROGRAM
                #pragma surface surf Lambert alpha noforwardadd

                sampler2D _MainTex;
                fixed4 _Color;

                struct Input
                {
                        float2 uv_MainTex;
                };

                void surf (Input IN, inout SurfaceOutput o)
                {
                        fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
                        o.Albedo = c.rgb * _Color.rgb;
                        o.Alpha = c.a * _Color.a;
                }
                ENDCG
                }

        Fallback "Mobile/VertexLit"
}

 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Плавное затухание стен - shader

Сообщение Medveckij 19 июн 2013, 15:40

Возвращяясь к теме... Возможно уже существует подобный шейдер и если нет, то интересно было бы послушать на сколько идея адекватна.

А что если затухание объекта реализовать не сбросом альфа канала на ноль, а сменой десятка текстур? В каждом кадре равномерно убивать процент видимых пикселей? На выходе должен получиться ефект не затухания, а плавного расщепления объекта.

Вопрос к знатокам... чисто в теории такой способ имеет право на существование? Производительность?
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Плавное затухание стен - shader

Сообщение waruiyume 19 июн 2013, 15:56

А в чём, собственно профит, от десятка текстур? Шейдер, один хрен будет, либо альфабленд( (полная Ж) ), либо альфатест ( (*) ). Насколько сильно, материал с альфатестом сажает FPS, в Вашем случае, он, ведь, вешается на объект, только на время исчезновения?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Плавное затухание стен - shader

Сообщение Medveckij 19 июн 2013, 16:09

waruiyume писал(а):Насколько сильно, материал с альфатестом, сажает FPS в Вашем случае, он ведь вешается на объект только на время исчезновения?


Естественно. :) В случае если объект занимает треть экрана, fps теряет 10-15 единиц. Причем падение резкое
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Плавное затухание стен - shader

Сообщение tarasevih 10 ноя 2014, 22:41

Да тоже хотел бы присоединиться к вопросу вот пример игры https://www.youtube.com/watch?v=EHm_mUryM24
там сбитые объекты пропадают не мгновенно и под андроидом!
tarasevih
UNец
 
Сообщения: 31
Зарегистрирован: 13 апр 2014, 08:26


Вернуться в Mobile shaders

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

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