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

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

СообщениеДобавлено: 13 дек 2012, 14:57
Woolf
Подскажите плиз, как добиться такого эффекта, но только для "светящихся" объектов, в данном случае - только для лампы

Изображение

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

Т.е. иными словами, как сделать bloom/glow материал.

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

СообщениеДобавлено: 13 дек 2012, 15:34
seaman

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

СообщениеДобавлено: 13 дек 2012, 15:59
Woolf
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/


Все это видел, но увы, ни в одном из представленных материалов нет решения. Все не то...
У мысли, что тут надо работать с двумя камерами, но каким образом - не совсем понятно.

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

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

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

СообщениеДобавлено: 13 дек 2012, 20:58
Woolf
Всем спасибо. Ссылки помогли. Решил при помощи Bloom+HDR ну и специальный шейдер для свечения.

Изображение

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

СообщениеДобавлено: 21 авг 2016, 18:00
djon801
Bloom+HDR ну и специальный шейдер для свечения

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

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

СообщениеДобавлено: 21 авг 2016, 19:54
Woolf
djon801 писал(а):
Bloom+HDR ну и специальный шейдер для свечения

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


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

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

СообщениеДобавлено: 21 авг 2016, 21:19
djon801
Woolf писал(а):
djon801 писал(а):
Bloom+HDR ну и специальный шейдер для свечения

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


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

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

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

СообщениеДобавлено: 21 авг 2016, 22:29
djon801
частично победил проблему.
В Скрипте 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 фпс

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

СообщениеДобавлено: 22 авг 2016, 08:18
djon801
Победа)))
Синтаксис:
Используется 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");
            }
               
        }

Может кому пригодится!
Изображение

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

СообщениеДобавлено: 22 авг 2016, 15:13
Woolf
А что пятая светить теперь не разрешает?))))

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

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

СообщениеДобавлено: 22 авг 2016, 20:59
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?
У меня такое ощущение что я где то что то упускаю.Пожалуйста не мучайте)) дайте более продуктивный ответ!!!
В принципе то к чему пришел,меня вполне удовлетворяет.Но если это реально велосипед новый,я хочу ехать на старом!! @-)

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

СообщениеДобавлено: 22 авг 2016, 21:09
Woolf
а на андроида пробовали?

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

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

СообщениеДобавлено: 22 авг 2016, 21:48
djon801
Woolf писал(а):
а на андроида пробовали?

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

HDR работает.Но он в стандартном материале.Что уже не подходит автоматом на андроид.
Скрин выше это,скрин с смартфона.
Только мобильные мотериалы,а маты из MKgloow

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

СообщениеДобавлено: 24 авг 2016, 11:12
kripto289
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
}

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

Поэтому я хз, скорее всего блум в виде постэффектов на мобилках не юзабелен.
Возможным решением вижу рендеринг сцены новой камерой с меньшим разрешением в рендер текстуру, там рассчитывать свечение, и вешать рендер текстуру аддитивным квадом на весь экран.