Bloom для одного объекта

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

Bloom для одного объекта

Сообщение Woolf 13 дек 2012, 14:57

Подскажите плиз, как добиться такого эффекта, но только для "светящихся" объектов, в данном случае - только для лампы

Изображение

Это я сделал запилением фуллскринового блума аж на 16 единиц, но мне не надо фуллскрин, надо только лампа ((

Т.е. иными словами, как сделать bloom/glow материал.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59


Re: Bloom для одного объекта

Сообщение Woolf 13 дек 2012, 15:59

seaman писал(а):http://answers.unity3d.com/questions/18588/glow-shader-on-selective-objects.html
http://www.youtube.com/watch?v=jbYnT9tp-3Y
http://www.danielkiedrowski.com/2012/07 ... ut-issues/


Все это видел, но увы, ни в одном из представленных материалов нет решения. Все не то...
У мысли, что тут надо работать с двумя камерами, но каким образом - не совсем понятно.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Bloom для одного объекта

Сообщение waruiyume 13 дек 2012, 18:25

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

Re: Bloom для одного объекта

Сообщение Woolf 13 дек 2012, 20:58

Всем спасибо. Ссылки помогли. Решил при помощи Bloom+HDR ну и специальный шейдер для свечения.

Изображение
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Bloom для одного объекта

Сообщение djon801 21 авг 2016, 18:00

Bloom+HDR ну и специальный шейдер для свечения

Можно по подробнее? что это за шейдер такой
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: Bloom для одного объекта

Сообщение Woolf 21 авг 2016, 19:54

djon801 писал(а):
Bloom+HDR ну и специальный шейдер для свечения

Можно по подробнее? что это за шейдер такой


Вы на дату смотрели? Думаете, я помню? )) Да и вообще, с выходом 5й [unity 3D] , тема не актуальна.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Bloom для одного объекта

Сообщение djon801 21 авг 2016, 21:19

Woolf писал(а):
djon801 писал(а):
Bloom+HDR ну и специальный шейдер для свечения

Можно по подробнее? что это за шейдер такой


Вы на дату смотрели? Думаете, я помню? )) Да и вообще, с выходом 5й [unity 3D] , тема не актуальна.

А что пятая светить теперь не разрешает?)))) я уже неделю бьюсь головой об монитор,все решения которые по находил фпс прожорливые,мне надо на андроиде светить.
Из найденного больше всего приглянулся ассет MKGlow но на андроиде показывает 18 фпс,подправить шейдера не имею опыта.
Для мобильных платформ есть вот такой Glow Effect (Mobile Friendly).Но с ним не получается видеть бамп да и сому текстуру.короче он какой то вообще не понятный,однако фпс 30 -35 держит.Уже интереснее так сказать.Они там как то в один проход освещают.ВОт есле бы как то подлечить MKGlow то цены бы ему не было.Есть ещё glow 11 но он весь в dll ках,да и производительностью не блещет.В общем не могу решить поставленную задачу.
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: Bloom для одного объекта

Сообщение djon801 21 авг 2016, 22:29

частично победил проблему.
В Скрипте MKGlow закоментировал,получил отличное свечение без рассеянности
Синтаксис:
Используется csharp
 private void SetupShaders()
        {
            if (!blurShader)
            {
                //blurShader = Shader.Find("Hidden/MKGlowBlur");
               
            }


            if (!compositeShader)
                {
                    compositeShader = Shader.Find("Hidden/MKGlowCompose");
                }
               

            if (!glowRenderShader)
            {
               glowRenderShader = Shader.Find("Hidden/MKGlowRender");
            }
               
        }


пытался подсунуть блур для мобил эффект не поменялся.короче в итоге 32 фпс
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: Bloom для одного объекта

Сообщение djon801 22 авг 2016, 08:18

Победа)))
Синтаксис:
Используется csharp
Shader "Hidden/MKGlowBlurVHP"
{
        Properties{_Color ("", Color) = (1,1,1,1)}

        Subshader
        {
                /*ZTest Off
                Fog{ Mode Off }
                Cull Off
                Lighting Off
                ZWrite Off*/


                Pass
                {
                        Blend One Zero
                        Name "HB"
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                        #pragma fragmentoption ARB_precision_hint_fastest

                        uniform sampler2D _MainTex;
                        uniform fixed4 _Color;
                        uniform half _Shift;
                        uniform fixed4 _MainTex_TexelSize;

                        struct Input
                        {
                                float4 texcoord : TEXCOORD0;
                                float4 vertex : POSITION;
                        };

                        struct Output
                        {
                                float4 pos : SV_POSITION;
                                half4 uv : TEXCOORD0;
                                half off : TEXCOORD1;
                        };

                        Output vert(Input i)
                        {
                                Output o;

                                o.pos = mul(UNITY_MATRIX_MVP, i.vertex);
                                o.uv = i.texcoord;
                                o.off = _MainTex_TexelSize.x * _Shift;
                                return o;
                        }

                        fixed4 frag(Output i) : SV_TARGET
                        {
                                fixed4 c = fixed4(0,0,0,0);

                                /*for (int r = 0; r < 4; r++)
                                {
                                        half2 offUv = half2(i.off, 0);
                                        c += tex2D(_MainTex, i.uv + offUv * r);
                                        c += tex2D(_MainTex, i.uv - offUv * r);
                                }*/

                                half2 offUv = half2(i.off, 0);
                                c += tex2D(_MainTex, i.uv + offUv * 0);
                                c += tex2D(_MainTex, i.uv - offUv * 0);

                                c += tex2D(_MainTex, i.uv + offUv * 1);
                                c += tex2D(_MainTex, i.uv - offUv * 1);
                                                                                                       
                                c += tex2D(_MainTex, i.uv + offUv * 2);
                                c += tex2D(_MainTex, i.uv - offUv * 2);
                                                                                                       
                                c += tex2D(_MainTex, i.uv + offUv * 3);
                                c += tex2D(_MainTex, i.uv - offUv * 3);
                                                                                                       
                                c += tex2D(_MainTex, i.uv + offUv * 4);
                                c += tex2D(_MainTex, i.uv - offUv * 4);
                                                                                                       
                               
                                c /= 8;
                                c.rgb = c.rgb * _Color.rgb;

                                return c * _Color.a;
                        }

                ENDCG
                }

                Pass
                {
                        Blend One One
                        //Name "VB"
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                        #pragma fragmentoption ARB_precision_hint_fastest

                        uniform sampler2D _MainTex;
                        uniform fixed4 _Color;
                        uniform half _Shift;
                        uniform fixed4 _MainTex_TexelSize;

                        struct Input
                        {
                                float4 texcoord : TEXCOORD0;
                                float4 vertex : POSITION;
                        };

                        struct Output
                        {
                                float4 pos : SV_POSITION;
                                half4 uv : TEXCOORD0;
                                half off : TEXCOORD1;
                        };

                        Output vert(Input i)
                        {
                                Output o;

                                o.pos = mul(UNITY_MATRIX_MVP, i.vertex);
                                o.uv = i.texcoord;
                                o.off = _MainTex_TexelSize.y * _Shift;
                                return o;
                        }

                        fixed4 frag(Output i) : SV_TARGET
                        {
                                fixed4 c = fixed4(0,0,0,0);
                               
                                /*for (int r = 0; r < 4; r++)
                                {
                                        half2 offUv = half2(0, i.off);
                                        c += tex2D(_MainTex, i.uv + offUv * r);
                                        c += tex2D(_MainTex, i.uv - offUv * r);
                                }*/

                                half2 offUv = half2(0, i.off);
                                c += tex2D(_MainTex, i.uv + offUv * 0);
                                c += tex2D(_MainTex, i.uv - offUv * 0);

                                c += tex2D(_MainTex, i.uv + offUv * 1);
                                c += tex2D(_MainTex, i.uv - offUv * 1);

                                c += tex2D(_MainTex, i.uv + offUv * 2);
                                c += tex2D(_MainTex, i.uv - offUv * 2);

                                c += tex2D(_MainTex, i.uv + offUv * 3);
                                c += tex2D(_MainTex, i.uv - offUv * 3);

                                c += tex2D(_MainTex, i.uv + offUv * 4);
                                c += tex2D(_MainTex, i.uv - offUv * 4);
                               
                                                                                                                                       
                                c /= 8;                                                        
                                c.rgb = c.rgb * _Color.rgb;

                                return c * _Color.a;
                        }

                        ENDCG
                }
        }
        Fallback off
}


вытащил тело цикла наружу,цикл закоментеривал.получилось без динамического сияния,но оно то что надо.
и указал напрямую этот шейдер в MKGlow
Синтаксис:
Используется csharp
private void SetupShaders()
        {
            if (!blurShader)
            {
               //blurShader = Shader.Find("Hidden/MKGlowBlur");
               blurShader = Shader.Find("Hidden/MKGlowBlurVHP");

            }

            //Hidden/MotionBlur
            if (!compositeShader)
                {
                    compositeShader = Shader.Find("Hidden/MKGlowCompose");
                }
               

            if (!glowRenderShader)
            {
               glowRenderShader = Shader.Find("Hidden/MKGlowRender");
            }
               
        }

Может кому пригодится!
Изображение
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: Bloom для одного объекта

Сообщение Woolf 22 авг 2016, 15:13

А что пятая светить теперь не разрешает?))))

разрешает. в стандартном материале emission +HDR +фильтр glow
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Bloom для одного объекта

Сообщение djon801 22 авг 2016, 20:59

Woolf писал(а):
А что пятая светить теперь не разрешает?))))

разрешает. в стандартном материале emission +HDR +фильтр glow

а на андроида пробовали?
Или я что то не понимаю,опять танец на бубне,на новом изобретенном велосипеде танцевал?

Начнем со стондартного материала,используя только его без нормалей,фпс 24-26.
mobile/diffuse фпс 56 - 60,
mobile bumped specular с картой нормали,без изменений 56-60 ))Очень обрадовало
Добавил контроллер управления DualTouchControls 44-48.Тоже гавнишко редкостное ,надо напильником работать

Добавил bloom 14-18.Поменял на mobile/bloom 26-30.во первых мало,и ещё не то что надо
с _MKGlow 15-18.То что бабушка прописала,рисуй альфу свети сколько влезет!,но не на андроид
_MKGlow обточенный немного рашпелем,дал тот же самый результат на экране но уже с 32-40

А это что emission +HDR +фильтр glow.как оно работает? что это за фильтр glow?
У меня такое ощущение что я где то что то упускаю.Пожалуйста не мучайте)) дайте более продуктивный ответ!!!
В принципе то к чему пришел,меня вполне удовлетворяет.Но если это реально велосипед новый,я хочу ехать на старом!! @-)
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: Bloom для одного объекта

Сообщение Woolf 22 авг 2016, 21:09

а на андроида пробовали?

А на андроиды умеет HDR? Не, не пробовал. Я вообще десктопщик, на андроиды не пилю.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Bloom для одного объекта

Сообщение djon801 22 авг 2016, 21:48

Woolf писал(а):
а на андроида пробовали?

А на андроиды умеет HDR? Не, не пробовал. Я вообще десктопщик, на андроиды не пилю.

HDR работает.Но он в стандартном материале.Что уже не подходит автоматом на андроид.
Скрин выше это,скрин с смартфона.
Только мобильные мотериалы,а маты из MKgloow
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: Bloom для одного объекта

Сообщение kripto289 24 авг 2016, 11:12

djon801 писал(а):
Woolf писал(а):
А что пятая светить теперь не разрешает?))))

разрешает. в стандартном материале emission +HDR +фильтр glow

а на андроида пробовали?
Или я что то не понимаю,опять танец на бубне,на новом изобретенном велосипеде танцевал?

Начнем со стондартного материала,используя только его без нормалей,фпс 24-26.
mobile/diffuse фпс 56 - 60,
mobile bumped specular с картой нормали,без изменений 56-60 ))Очень обрадовало
Добавил контроллер управления DualTouchControls 44-48.Тоже гавнишко редкостное ,надо напильником работать

Добавил bloom 14-18.Поменял на mobile/bloom 26-30.во первых мало,и ещё не то что надо
с _MKGlow 15-18.То что бабушка прописала,рисуй альфу свети сколько влезет!,но не на андроид
_MKGlow обточенный немного рашпелем,дал тот же самый результат на экране но уже с 32-40

А это что emission +HDR +фильтр glow.как оно работает? что это за фильтр glow?
У меня такое ощущение что я где то что то упускаю.Пожалуйста не мучайте)) дайте более продуктивный ответ!!!
В принципе то к чему пришел,меня вполне удовлетворяет.Но если это реально велосипед новый,я хочу ехать на старом!! @-)

Весь блум так или иначе делается с помощью постэффектов и использования graphics.Blit.
Просто пустая функция уже режет фпс в разы.
OnRenderImage(...)
{
graphics.Blit
}

Сам постэффект блума на фоне этой функции почти ничего не меняет.

Поэтому я хз, скорее всего блум в виде постэффектов на мобилках не юзабелен.
Возможным решением вижу рендеринг сцены новой камерой с меньшим разрешением в рендер текстуру, там рассчитывать свечение, и вешать рендер текстуру аддитивным квадом на весь экран.
Аватара пользователя
kripto289
UNIверсал
 
Сообщения: 476
Зарегистрирован: 30 сен 2013, 03:30
Откуда: Екатеринбург
  • Сайт

След.

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

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

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