《Unity Shader入门精要》读书笔记第八章——bloom效果

本来想写一下伽马空间,hdr应用的

最近时间似乎抓不住了

挖的坑越来越多

还是先写简单的Bloom

光辉效果几乎是每个游戏都要用到的

大概就是阳光明媚的中午,太阳穿过树叶,你此时抬头看,树叶跟光的那种效果

有一种实现思路是把高斯模糊跟原色做一个简单的加法

当然可能会觉得太亮了

可以直接乘个系数,或者修改原色的亮度

亮度公式0.2125 * color.r + 0.7154 * color.g + 0.0721 * color.b

using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class BloomTest : MonoBehaviour
{
    public Shader shader;

    private Material _mat;

    void OnEnable()
    {
        _mat = new Material(shader);
    }

    void OnRenderImage(RenderTexture src, RenderTexture dest)
    {
        if (_mat == null)
            return;
        RenderTexture rt0 = RenderTexture.GetTemporary(src.width / 2, src.height / 2);
        RenderTexture rt1 = RenderTexture.GetTemporary(src.width / 2, src.height / 2);
        Graphics.Blit(src, rt0);
        for (int i=0;i<3;i++)
        {
            Graphics.Blit(rt0,rt1, _mat, 0);
            Graphics.Blit(rt1,rt0, _mat, 1);
        }
        _mat.SetTexture("_BlurTex", rt0);
        Graphics.Blit(rt0, dest, _mat, 2);
        RenderTexture.ReleaseTemporary(rt0);
        RenderTexture.ReleaseTemporary(rt1);
    }
}

Shader "Test/Unity Shaders Book/Chapter 12/BloomTest" 
{
    Properties
    {
        _MainTex("MainTex",2D)="white"{}
        _BlurTex("BlurTex",2D)="white"{}
    }

    SubShader
    {
        CGINCLUDE

        #include "UnityCG.cginc"

        sampler2D _MainTex;
        sampler2D _BlurTex;

        struct a2vBloom
        {
            float4 pos:POSITION;
            half2 uv:TEXCOORD0;
        };

        struct v2fBloom
        {
            float4 pos:SV_POSITION;
            half2 uv:TEXCOORD0;
        };

        v2fBloom vertBloom(a2vBloom v)
        {
            v2fBloom o;
            o.pos = UnityObjectToClipPos(v.pos);
            o.uv = v.uv;
            return o;
        }

        fixed4 fragBloom(v2fBloom f):SV_TARGET
        {
            fixed4 o;
            o = tex2D(_MainTex,f.uv)+tex2D(_BlurTex,f.uv);
            return o;
        }

        ENDCG

        //unity可以直接引用在其他文件里的pass代码
        UsePass "Unity Shaders Book/Chapter 12/Gaussian Blur/GAUSSIAN_BLUR_VERTICAL"
        
        UsePass "Unity Shaders Book/Chapter 12/Gaussian Blur/GAUSSIAN_BLUR_HORIZONTAL"

        Pass 
        {  
            CGPROGRAM  
            #pragma vertex vertBloom  
            #pragma fragment fragBloom  
            ENDCG  
        }
    }

}

 

这个系列主要是通过阅读《Unity Shader入门精要》之后的一些感想,给读者一些启发。
联系邮箱:glasirius@gmail.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值