Unity游戏图形渲染效果系列之Bloom&高斯模糊篇

一.效果介绍

原图:

高斯模糊图:

Bloom效果图:

        从上面三张图可以直观的看出模糊效果和bloom效果带来的视觉差异,模糊效果可以理解为打了马赛克,至于马赛克的精细程度根据参数可以调节,Bloom效果就是当光线比较亮的地方看起来有亮光模糊效果。

二.基本原理和实现方法介绍

 高斯公式:,高斯分布也称正态分布。高斯模糊的基本含义为通过该公式描述了周围各点对当前点的影响程度呈正态分布。比如当前点受周围第一圈的点影响度为30%,第二圈为23% 第三圈点影响改点8%,然后越来越少。这些受影响程度的值就是由高斯公式计算出来的,但是通常在计算过程中,我们就直接套用计算好的值了,而不是全计算高斯公式。

比如:

static const half curve[7] = { 0.0205, 0.0855, 0.232, 0.324, 0.232, 0.0855, 0.0205 }

static const half4 curve4[7] = { half4(0.0205,0.0205,0.0205,0), half4(0.0855,0.0855,0.0855,0), half4(0.232,0.232,0.232,0),

half4(0.324,0.324,0.324,1), half4(0.232,0.232,0.232,0), half4(0.0855,0.0855,0.0855,0), half4(0.0205,0.0205,0.0205,0) };

可以直接将上面的权重数据放在采样点的计算过程中,通常情况下严格的高斯公式指的肯定是计算周围的全部点,那样就会导致采样次数过高导致GPU无法负担,所以通常情况下我们只是象征性的采样水平和竖直方向的点进行采样,可以一次性进行上下左右点的采样进行高斯权重计算,但是二维核进行采样消耗过多,所以通常采用分别进行水平和竖直方向的一维计算,和二维计算效果一样,但是效率会高很多。模糊说到底其实是计算周围点像素读该点的影响程度如下:

Shader:shader比较简单:

[html]  view plain  copy
  1.                     v2f vert(appdata v)  
  2.             {  
  3.                 v2f o;  
  4.                 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);  
  5.                 float2 uv = TRANSFORM_TEX(v.uv, _MainTex);  
  6.                 o.uv = uv;  
  7.                 return o;  
  8.             }  
  9.     fixed4 fragVertical(v2f i) : SV_Target  
  10.             {  
  11.                 float gaussweight[3] = { 0.4026,0.2442 ,0.0545 };  
  12.                 float3 maskcol = tex2D(_MaskTex, i.uv);  
  13.                 float3 col = tex2D(_MainTex, i.uv).rgb;  
  14.                 //if ((maskcol.r + maskcol.g + maskcol.b) < 0.1f)  
  15.                 //  return float4(col, 1);  
  16.                 //这个过滤会大幅降低模糊周围的效果  
  17.                 //if (Luminance(col)<0.01f)  
  18.                 //  return float4(col, 1);  
  19.                 col = col.rgb*gaussweight[0];  
  20.                 col += tex2D(_MainTex, i.uv + _BlurSize*float2(0, _MainTex_TexelSize.y)).rgb*gaussweight[1];  
  21.                 col += tex2D(_MainTex, i.uv - _BlurSize*float2(0, _MainTex_TexelSize.y)).rgb*gaussweight[1];  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity HDRP(High Definition Render Pipeline)是Unity引擎的一个高级渲染管线,用于实现高质量的图形渲染效果高斯模糊是一种常用的图像处理技术,用于创建柔和、模糊效果。在Unity HDRP中,可以使用Compute Shader来实现高斯模糊效果高斯模糊的基本原理是对图像中的每个像素进行加权平均,使得周围像素的颜色对当前像素的影响逐渐减小。这种加权平均的过程可以通过多次迭代来实现更加模糊效果。 在Unity HDRP中,可以通过以下步骤来实现高斯模糊: 1. 创建一个Compute Shader:Compute Shader是一种在GPU上执行计算任务的程序。可以使用Compute Shader来实现高斯模糊算法。 2. 在Compute Shader中定义高斯模糊算法:在Compute Shader中,可以定义高斯模糊算法的具体实现。通常使用两个Pass来实现水平和垂直方向的模糊。 3. 创建一个Render Texture:Render Texture是一种特殊的纹理,可以用于在渲染过程中存储图像数据。创建一个Render Texture来存储模糊后的图像。 4. 在Compute Shader中使用Render Texture进行计算:在Compute Shader中,使用Render Texture作为输入和输出,对图像进行高斯模糊计算。 5. 在渲染过程中使用模糊后的图像:将模糊后的图像应用到需要模糊效果的对象上,可以通过将Render Texture作为材质的贴图来实现。 需要注意的是,高斯模糊是一种计算密集型的操作,对性能要求较高。在实际使用中,可以根据需求调整模糊的迭代次数和模糊半径,以平衡图像质量和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值