Blur при прицеливании

Эффекты постобработки

Blur при прицеливании

Сообщение WebWolf 08 фев 2010, 21:16

Как сделать Blur при прицеливании что бы он размывал только то что по вокруг)) а то что в центре т.е прицел был четким... или просто размывать тупо оружие..
WTF? _WolfGames3D.com / Все в Tanks Heroes Вконтакте!
Аватара пользователя
WebWolf
Старожил
 
Сообщения: 532
Зарегистрирован: 19 дек 2009, 15:49
Откуда: Russian Federation
  • Сайт
  • ICQ

Re: Blur при прицеливании

Сообщение gnoblin 08 фев 2010, 23:02

На оф.форуме вроде бы где-то лежал пост-эффект radial blur.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Blur при прицеливании

Сообщение romeo_ftv 09 фев 2010, 10:30

Смотри шейдер тут - http://forum.unity3d.com/viewtopic.php?t=39780, в нем много всего намешано, но есть и опция включающая радиальный блюр
romeo_ftv
UNIт
 
Сообщения: 88
Зарегистрирован: 12 апр 2009, 12:33

Re: Blur при прицеливании

Сообщение warr11r 10 фев 2010, 16:42

Нет, есть шейдер нормальный, только радиальный блур делает.
Но я под него скрипт подправлял, чтобы он от скорости камеры зависел.
То есть некоторые строки в скрипте нужно убрать.
Если не забуду, часиков через восемь у меня будет возможность, то загружу.
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ

Re: Blur при прицеливании

Сообщение warr11r 11 фев 2010, 02:14

radialBlur.shader

Код: Выделить всё
Shader "Hidden/radialBlur" {
Properties {
   _MainTex ("Input", RECT) = "white" {}
   _BlurStrength ("", Float) = 0.5
   _BlurWidth ("", Float) = 0.5
}
   SubShader {
      Pass {
         ZTest Always Cull Off ZWrite Off
         Fog { Mode off }
       
   CGPROGRAM
   
   #pragma vertex vert_img
   #pragma fragment frag
   #pragma fragmentoption ARB_precision_hint_fastest

   #include "UnityCG.cginc"

   uniform samplerRECT _MainTex;
   uniform half _BlurStrength;
   uniform half _BlurWidth;
   uniform half _iWidth;
   uniform half _iHeight;

   half4 frag (v2f_img i) : COLOR {
      half4 color = texRECT(_MainTex, i.uv);
       
      // some sample positions
      half samples[10] = half[](-0.08,-0.05,-0.03,-0.02,-0.01,0.01,0.02,0.03,0.05,0.08);
       
      //vector to the middle of the screen
      half2 dir = 0.5 * half2(_iHeight,_iWidth) - i.uv;
       
      //distance to center
      half dist = sqrt(dir.x*dir.x + dir.y*dir.y);
       
      //normalize direction
      dir = dir/dist;
       
      //additional samples towards center of screen
      half4 sum = color;
      for(int n = 0; n < 10; n++)
      {
         sum += texRECT(_MainTex, i.uv + dir * samples[n] * _BlurWidth * _iWidth);
      }
       
      //eleven samples...
      sum *= 1.0/11.0;
       
      //weighten blur depending on distance to screen center
      half t = dist * _BlurStrength / _iWidth;
      t = clamp(t, 0.0, 1.0);
       
      //blend original with blur
      return mix(color, sum, t);
   }
   ENDCG
      }
   }
}


RadialBlur.cs (c#)

Код: Выделить всё
using UnityEngine;

[ExecuteInEditMode]
public class RadialBlur : MonoBehaviour
{
    public Shader rbShader;
   
    public float blurStrength = 0.0f;
    public float blurWidth = 0.7f;

    private Material rbMaterial = null;
    private bool isOpenGL;

    private Material GetMaterial()
    {
        if (rbMaterial == null)
        {
            rbMaterial = new Material(rbShader);
            rbMaterial.hideFlags = HideFlags.HideAndDontSave;
        }
        return rbMaterial;
    }

    void Start()
    {
        if (rbShader == null)
        {
            Debug.LogError("shader missing!", this);
        }
        isOpenGL = SystemInfo.graphicsDeviceVersion.StartsWith("OpenGL");
    }
   
       void LateUpdate()
    {
   blurStrength = camera.velocity.magnitude * 0.03f;
   }
   

    void OnRenderImage(RenderTexture source, RenderTexture dest)
    {
        //If we run in OpenGL mode, our UV coords are
        //not in 0-1 range, because of the texRECT sampler
        float ImageWidth = 1;
        float ImageHeight = 1;
        if (isOpenGL)
        {
            ImageWidth = source.width;
            ImageHeight = source.height;
        }

        GetMaterial().SetFloat("_BlurStrength", blurStrength);
        GetMaterial().SetFloat("_BlurWidth", blurWidth);
        GetMaterial().SetFloat("_iHeight",ImageWidth);
        GetMaterial().SetFloat("_iWidth", ImageHeight);
        ImageEffects.BlitWithMaterial(GetMaterial(), source, dest);
    }
}


Пожалуйста.
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ

Re: Blur при прицеливании

Сообщение WebWolf 11 фев 2010, 13:18

Сделал спасибо)) но это конечно не то что надо)) хотя подходит... в общем щас демку скину посмотрите)
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://newssoftware.pnz.ru/Zombies.unity3d&w=800&h=600&t=true&preview=1' height='"+(600+30)+"' width='800' frameborder='0' scrolling='no'></iframe>"); </script>


Он больше подходит для гонок, как в NFS размытие. Тут надо просто заблюрить и все))) как в Crysis что бы было понятнее..
Вот скрины смотри по краям экрана и на оружии))
Скрытый текст:
Изображение
Изображение
WTF? _WolfGames3D.com / Все в Tanks Heroes Вконтакте!
Аватара пользователя
WebWolf
Старожил
 
Сообщения: 532
Зарегистрирован: 19 дек 2009, 15:49
Откуда: Russian Federation
  • Сайт
  • ICQ

Re: Blur при прицеливании

Сообщение Neodrop 11 фев 2010, 14:08

А чего автомат влево куда то лупит?
Приятненько так с блюром. :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Blur при прицеливании

Сообщение WebWolf 11 фев 2010, 14:15

Neodrop писал(а):А чего автомат влево куда то лупит?
Приятненько так с блюром. :-?

Да есть немного)) И ещё можно самого себя застрелить))) если рядом с чем нибудь стоишь... да надо избавлятся от этого
if (hit.rigidbody){hit.rigidbody.AddForceAtPosition(force * direction, hit.point);}

хрень полная.. надо просто пульки из центра выпускать и делать что бы что нибудь летело сверкающее)) а то код что выше, рандомит неподетски... может есть что нибудь нормально написанное? )) Или подходящее?
Да и решения как избавится от того что бы оружие не проваливалось тоже не найдено(((
WTF? _WolfGames3D.com / Все в Tanks Heroes Вконтакте!
Аватара пользователя
WebWolf
Старожил
 
Сообщения: 532
Зарегистрирован: 19 дек 2009, 15:49
Откуда: Russian Federation
  • Сайт
  • ICQ

Re: Blur при прицеливании

Сообщение artk 05 окт 2011, 00:44

А для Free версии подойдет?
Аватара пользователя
artk
Старожил
 
Сообщения: 749
Зарегистрирован: 22 май 2011, 12:22

Re: Blur при прицеливании

Сообщение Avatarchik 06 окт 2011, 20:22

Нет,так как используется рендер в текстуру. :-B
Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ

Re: Blur при прицеливании

Сообщение JIeo_NEED 08 янв 2013, 10:26

Скрытый текст:
warr11r писал(а):radialBlur.shader

Код: Выделить всё
Shader "Hidden/radialBlur" {
Properties {
   _MainTex ("Input", RECT) = "white" {}
   _BlurStrength ("", Float) = 0.5
   _BlurWidth ("", Float) = 0.5
}
   SubShader {
      Pass {
         ZTest Always Cull Off ZWrite Off
         Fog { Mode off }
       
   CGPROGRAM
   
   #pragma vertex vert_img
   #pragma fragment frag
   #pragma fragmentoption ARB_precision_hint_fastest

   #include "UnityCG.cginc"

   uniform samplerRECT _MainTex;
   uniform half _BlurStrength;
   uniform half _BlurWidth;
   uniform half _iWidth;
   uniform half _iHeight;

   half4 frag (v2f_img i) : COLOR {
      half4 color = texRECT(_MainTex, i.uv);
       
      // some sample positions
      half samples[10] = half[](-0.08,-0.05,-0.03,-0.02,-0.01,0.01,0.02,0.03,0.05,0.08);
       
      //vector to the middle of the screen
      half2 dir = 0.5 * half2(_iHeight,_iWidth) - i.uv;
       
      //distance to center
      half dist = sqrt(dir.x*dir.x + dir.y*dir.y);
       
      //normalize direction
      dir = dir/dist;
       
      //additional samples towards center of screen
      half4 sum = color;
      for(int n = 0; n < 10; n++)
      {
         sum += texRECT(_MainTex, i.uv + dir * samples[n] * _BlurWidth * _iWidth);
      }
       
      //eleven samples...
      sum *= 1.0/11.0;
       
      //weighten blur depending on distance to screen center
      half t = dist * _BlurStrength / _iWidth;
      t = clamp(t, 0.0, 1.0);
       
      //blend original with blur
      return mix(color, sum, t);
   }
   ENDCG
      }
   }
}


RadialBlur.cs (c#)

Код: Выделить всё
using UnityEngine;

[ExecuteInEditMode]
public class RadialBlur : MonoBehaviour
{
    public Shader rbShader;
   
    public float blurStrength = 0.0f;
    public float blurWidth = 0.7f;

    private Material rbMaterial = null;
    private bool isOpenGL;

    private Material GetMaterial()
    {
        if (rbMaterial == null)
        {
            rbMaterial = new Material(rbShader);
            rbMaterial.hideFlags = HideFlags.HideAndDontSave;
        }
        return rbMaterial;
    }

    void Start()
    {
        if (rbShader == null)
        {
            Debug.LogError("shader missing!", this);
        }
        isOpenGL = SystemInfo.graphicsDeviceVersion.StartsWith("OpenGL");
    }
   
       void LateUpdate()
    {
   blurStrength = camera.velocity.magnitude * 0.03f;
   }
   

    void OnRenderImage(RenderTexture source, RenderTexture dest)
    {
        //If we run in OpenGL mode, our UV coords are
        //not in 0-1 range, because of the texRECT sampler
        float ImageWidth = 1;
        float ImageHeight = 1;
        if (isOpenGL)
        {
            ImageWidth = source.width;
            ImageHeight = source.height;
        }

        GetMaterial().SetFloat("_BlurStrength", blurStrength);
        GetMaterial().SetFloat("_BlurWidth", blurWidth);
        GetMaterial().SetFloat("_iHeight",ImageWidth);
        GetMaterial().SetFloat("_iWidth", ImageHeight);
        ImageEffects.BlitWithMaterial(GetMaterial(), source, dest);
    }
}




Ребят, уже не работает...
Не могу понять, в чем причина, т.к. с шейдерами раньше не общался.

Помогите, пожалуйста!

Две ошибки:
Синтаксис:
  1. Shader error in 'Hidden/radialBlur': Shader program had errors at line 16 
  2.  
  3. Shader error in 'Hidden/radialBlur': Program 'frag', ambiguous overloaded function reference "mix(half4, half4, half)" at line 61 
  4. Keywords:  
Аватара пользователя
JIeo_NEED
UNITрон
 
Сообщения: 228
Зарегистрирован: 01 мар 2012, 14:37
Откуда: Владивосток, Приморский край, Россия.
Skype: Develeone
  • Сайт

Re: Blur при прицеливании

Сообщение seaman 08 янв 2013, 14:16

Замените mix на lerp
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Blur при прицеливании

Сообщение Zaic 22 окт 2014, 15:12

а он подойдет ко второй шейдерной модели?
кто здесь, как здесь, почему здесь. ниче не знаю, это не я
http://unity3d.ru/distribution/viewtopic.php?f=17&t=18987
Аватара пользователя
Zaic
Старожил
 
Сообщения: 758
Зарегистрирован: 18 июл 2013, 23:13
Откуда: Отсюда
Skype: У меня нет скайпа
  • Сайт

Re: Blur при прицеливании

Сообщение Zaic 22 окт 2014, 19:58

return mix(color, sum, t);

почему ругается на эту функцию
пишет ambigupus overloaded function reference " mix(color, sum, t)
кто здесь, как здесь, почему здесь. ниче не знаю, это не я
http://unity3d.ru/distribution/viewtopic.php?f=17&t=18987
Аватара пользователя
Zaic
Старожил
 
Сообщения: 758
Зарегистрирован: 18 июл 2013, 23:13
Откуда: Отсюда
Skype: У меня нет скайпа
  • Сайт


Вернуться в Post-effects

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

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