UnityShader基础案例(四)——模糊效果

这篇具有很好参考价值的文章主要介绍了UnityShader基础案例(四)——模糊效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、全屏的模糊。        

        1、高斯模糊 

                这个很常见,在后处理一章中有实现,这里不再赘述。还有基于整体的局部模糊,就是屏幕上某一块地方不受模糊处理。                                            

        2、径向模糊,含模糊半径

                沿纹理采样坐标和模糊中心点的方向采样,每隔几个采样点采一次样,最后取个平均值

                脚本:                

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class RenderImage : MonoBehaviour
{
    public Shader shader;
    [Header("径向模糊迭代次数")] [Range(1, 10)]public int _BlurIteration = 1;
    [Header("径向模糊强度")] [Range(0, 1)] public float _BlurStrength = 0.2f;

    [Header("径向模糊半径")] [Range(0,0.2f)]public float _BlurArea = 0.1f;

    private Material _material;

    // Start is called before the first frame update
    void Awake()
    {
        if (shader == null)
        {
            Debug.Log("Shader为空");
        }

        _material = new Material(shader);
    }

    private void OnRenderImage(RenderTexture src, RenderTexture dest)
    {
        if (_material != null)
        {
            _material.SetFloat("_BlurIteration", _BlurIteration);
            _material.SetFloat("_BlurStrength", _BlurStrength);
            _material.SetFloat("_BlurArea", _BlurArea);
            Graphics.Blit(src, dest, _material);
        }
        else
        {
            Graphics.Blit(src, dest, _material);
        }
    }
}

                Shader:      

Shader "Custom/Test0"
{
    Properties
    {
        _MainTex("渲染纹理",2D)="white"{}
        _BlurCenter("径向模糊中心",Vector)=(0.5,0.5,0,0)
        _BlurIteration("径向模糊迭代次数",Float)=1.0
        _BlurStrength("径向模糊强度",Float)=1.0
        _BlurArea("径向模糊半径",Float)=0.2
    }
    SubShader
    {
        Pass
        {
            Tags
            {
                "LightMode"="ForwardBase"
            }
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
     
            sampler2D _MainTex;
            float4 _BlurCenter;
            float _BlurIteration;
            float _BlurStrength;
            float _BlurArea;

            struct a2v
            {
                float4 vertex:POSITION;
                float2 texcoord:TEXCOORD0;
            };

            struct v2f
            {
                float4 pos:SV_POSITION;
                float2 uv:TEXCOORD0;
            };

            v2f vert(a2v v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv=v.texcoord;
                return o;
            }

            fixed4 frag(v2f i):SV_Target
            {
                float2 dir=_BlurCenter.xy-i.uv.xy;
                
                float area=saturate(distance(_BlurCenter.xy,i.uv.xy)-_BlurArea);
                
                fixed3 color=0;
                
                for (int j = 0; j < _BlurIteration; ++j)
                {
                    float2 uv=i.uv+dir*_BlurStrength*j*area*0.2;
                    color+=tex2D(_MainTex,uv);                    
                }
                color/=_BlurIteration;
                return  fixed4(color,1);
            }
            ENDCG
        }
    }
}

             

UnityShader基础案例(四)——模糊效果

         结果还行只能说,毕竟这也不是啥大场景,效果具体怎么样也看不出

        3. 不同模糊用到了不同的公式,模糊效果也各不相同,看需求,网上大佬有文章写的很全。

二、单个物体的模糊。     

       针对于某些物体的模糊,虽然上面已经提到了基于模糊半径的模糊,但是那种仍然属于整体上的范畴,要做的针对某一物体要用到分层模糊。

        在物体描边一章中有应用。效果在文章末尾,描边效果是使用高斯模糊叠加出来的。         (65条消息) UnityShader基础案例(五)——物体描边_implosion98的博客-CSDN博客_unity 描边        文章来源地址https://www.toymoban.com/news/detail-453435.html

到了这里,关于UnityShader基础案例(四)——模糊效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity的 Built-in 渲染管线下实现好用的GUI模糊效果_Blur_案例分享(内附源码)】

    其他的模糊效果,在这一篇。 效果如图: 新建一个C#文件,命名为\\\"CommandBlur\\\",打开C#,删除内容,复制粘贴下面的代码:

    2024年02月07日
    浏览(38)
  • UnityShader实现液体倾倒效果

    先看一下效果图  实现思路:在烧杯倾倒液体时,烧杯内的液体始终不会超过烧杯口的高度,所以我们计算得到这个高度值,然后截取掉超过该高度的像素 首先准备烧杯内液体的模型,挂载一下shader对应的材质球                                              shader部分

    2024年02月13日
    浏览(39)
  • UnityShader——流光效果

    声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改。 Unity2019.3.6 AmplifyShaderEditor 效果描述: 1.边缘光(菲尼尔), 2.从上到下扫描光. 效果图如下: AmplifyShaderEditor节点图如下: 参数设置如下: 代码如下: (i.pos_world.xy -

    2024年02月16日
    浏览(41)
  • 【游戏开发小技】Unity通过UI全屏图来模糊场景画面(Shader | 模糊 | 滤镜 | Blur)

    一、前言 嗨,大家好,我是新发。 以前我写文章都是很长很长,接下来我会尝试用新的方式来写博客,尽量简短,以实用为主。同时也是作为自己零碎的一些记录,方便查阅。 本文我要说的是在 Unity 中通过 UI 全屏图来模糊场景画面的效果。 二、效果演示 这是没用模糊效果

    2024年02月05日
    浏览(41)
  • UnityShader(三)数学基础

    目录 前言 一、笛卡尔坐标系(Cartesian Coordinate System) 1.二维笛卡尔坐标系 2.三维笛卡尔坐标系 2.1.左手坐标系(left-handed coordinate space) 判断左手坐标系的方法: 判断左手坐标系的正向旋转(左手法则【left-hand rule】) 2.2.右手坐标系(right-handed coordinate space) 判断右手坐标

    2024年02月03日
    浏览(47)
  • 网页全屏html视频动画效果

    全屏HTML视频动画效果通常使用HTML5的 video 标签和CSS样式来实现。PHP主要用于服务器端处理,如生成动态内容或与数据库交互,而不是直接用于创建全屏视频动画效果。 以下是一个简单的示例,演示如何使用HTML和CSS创建一个全屏视频动画效果: html复制代码 !DOCTYPE html html he

    2024年01月20日
    浏览(58)
  • iOS 实现图片高斯模糊效果

    效果图 用到了 UIVisualEffectView 实现代码 将 bgEffectView 盖到imageview上面即可

    2024年02月13日
    浏览(34)
  • css增加高斯模糊的效果

    backdrop-filter 当你创造一个元素加上这个属性后,会使得这个元素后面的区域添加效果(如模糊或颜色偏移)

    2024年02月11日
    浏览(49)
  • CSS鼠标悬浮图片模糊切换效果

    当我们想设置在鼠标移入前,图片是半透明(模糊)的,在我们鼠标移入后,图片就变得清晰,这里我们可以设置css的伪类:hover来实现: 首先我们在body中写一个div模块,这个div包裹了两个部分,一个部分就是我们要用的img,第二部分就是文字,文字部分也用一个div包裹。

    2024年02月10日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包