在UnrealEngine中用Custom节点实现高斯模糊
3x3高斯模糊
//input sW 分辨率宽
//input sH 分辨率高
//input NotUse 为了开启SceneTextureLookup函数而连接的节点,但是不参与逻辑
//input UV 屏幕缓存的坐标
//14是原始颜色
int tIndex=14;
float4 x1y1=0.0625*SceneTextureLookup(UV+float2(-1.0f/sW,-1.0/sH),tIndex,false);
float4 x2y1=0.125*SceneTextureLookup(UV+float2(0.0f,-1.0/sH),tIndex,false);
float4 x3y1=0.0625*SceneTextureLookup(UV+float2(1.0f/sW,-1.0/sH),tIndex,false);
float4 x1y2=0.125*SceneTextureLookup(UV+float2(-1.0f/sW,0.0f),tIndex,false);
float4 x2y2=0.25*SceneTextureLookup(UV+float2(0.0f,0.0f),tIndex,false);
float4 x3y2=0.125*SceneTextureLookup(UV+float2(1.0f/sW,0.0f),tIndex,false);
float4 x1y3=0.0625*SceneTextureLookup(UV+float2(-1.0f/sW,1.0/sH),tIndex,false);
float4 x2y3=0.125*SceneTextureLookup(UV+float2(0.0f,1.0/sH),tIndex,false);
float4 x3y3=0.0625*SceneTextureLookup(UV+float2(1.0f/sW,1.0/sH),tIndex,false);
return x1y1+x2y1+x3y1+x1y2+x2y2+x3y2+x1y3+x2y3+x3y3;
3X3均值模糊
//input sW 分辨率宽
//input sH 分辨率高
//input NotUse 为了开启SceneTextureLookup函数而连接的节点,但是不参与逻辑
//input UV 屏幕缓存的坐标
//14是原始颜色
int tIndex=14;
float4 x1y1=SceneTextureLookup(UV+float2(-1.0f/sW,-1.0/sH),tIndex,false);
float4 x2y1=SceneTextureLookup(UV+float2(0.0f,-1.0/sH),tIndex,false);
float4 x3y1=SceneTextureLookup(UV+float2(1.0f/sW,-1.0/sH),tIndex,false);
float4 x1y2=SceneTextureLookup(UV+float2(-1.0f/sW,0.0f),tIndex,false);
float4 x2y2=SceneTextureLookup(UV+float2(0.0f,0.0f),tIndex,false);
float4 x3y2=SceneTextureLookup(UV+float2(1.0f/sW,0.0f),tIndex,false);
float4 x1y3=SceneTextureLookup(UV+float2(-1.0f/sW,1.0/sH),tIndex,false);
float4 x2y3=SceneTextureLookup(UV+float2(0.0f,1.0/sH),tIndex,false);
float4 x3y3=SceneTextureLookup(UV+float2(1.0f/sW,1.0/sH),tIndex,false);
return (x1y1+x2y1+x3y1+x1y2+x2y2+x3y2+x1y3+x2y3+x3y3)/9;
看了官方论坛的帖子,法线Custom里面可以写for循环,于是……
//5x5高斯模糊
//input sW 分辨率宽
//input sH 分辨率高
//input NotUse 为了开启SceneTextureLookup函数而连接的节点,但是不参与逻辑
//input UV 屏幕缓存的坐标
//14是原始颜色
int tIndex=14;
int UVOfferset[]={-2,-1,0,1,2};
float Weights[]=
{
0.0036,0.0146,0.0256,0.0146,0.0036,
0.0146,0.0586,0.0952,0.0586,0.0146,
0.0256,0.0952,0.1501,0.0952,0.0256,
0.0146,0.0586,0.0952,0.0586,0.0146,
0.0036,0.0146,0.0256,0.0146,0.0036
};
float3 OutColor={0.0,0.0,0.0};
for(int i=0;i<=4;i++)
{
for(int j=0;j<=4;j++)
{
OutColor+=Weights[i*5+j]*SceneTextureLookup(UV+float2(UVOfferset[j]/sW,UVOfferset[i]/sH),tIndex,false).xyz;
}
}
return float4(OutColor,1.0f);
参考了一下网上的文章写了个可以动态调整的高斯模糊
//动态高斯模糊
//input sW 分辨率宽
//input sH 分辨率高
//input NotUse 为了开启SceneTextureLookup函数而连接的节点,但是不参与逻辑
//input Radius 模糊半径
//input UV 屏幕缓存的坐标
//14是原始颜色
int tIndex=14;
if(Radius<1.0)
return SceneTextureLookup(UV,tIndex,false);
float3 OutColor={0.0,0.0,0.0};
Radius=floor(Radius);
float Sigma=Radius/3;
float Sigma2=2*Sigma*Sigma;
int Number=Radius;
float WeightsSum;
for(int i=-Number;i<=Number;i++)
{
for(int j=-Number;j<=Number;j++)
{
float Weights=(1/(Sigma2*3.1415))*exp(-(j*j+i*i)/Sigma2);
WeightsSum+=Weights;
OutColor+=Weights*SceneTextureLookup(UV+float2(j/sW,i/sH),tIndex,false).xyz;
}
}
OutColor/=WeightsSum;
return float4(OutColor,1.0f);

群里朋友需要一个模糊贴图的于是又写了个
//5x5高斯模糊
//input UV 贴图UV
//input Texture 传入TextureObject
//input TexSize 图片大小,比如float2(512,512)
int UVOfferset[]={-2,-1,0,1,2};
float Weights[]=
{
0.0036,0.0146,0.0256,0.0146,0.0036,
0.0146,0.0586,0.0952,0.0586,0.0146,
0.0256,0.0952,0.1501,0.0952,0.0256,
0.0146,0.0586,0.0952,0.0586,0.0146,
0.0036,0.0146,0.0256,0.0146,0.0036
};
float3 OutColor={0.0,0.0,0.0};
for(int i=0;i<=4;i++)
{
for(int j=0;j<=4;j++)
{
OutColor+=Weights[i*5+j]*Texture2DSample(Texture, TextureSampler, UV+float2(UVOfferset[j]/TexSize.x,UVOfferset[i]/TexSize.y));
}
}
return float4(OutColor,1.0f);

//7x7均值模糊
//input UV 贴图UV
//input Texture 传入TextureObject
//input TexSize 图片大小,比如float2(512,512)
int UVOfferset[]={-3,-2,-1,0,1,2,3};
float Weights[]=
{
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1
};
float3 OutColor={0.0,0.0,0.0};
for(int i=0;i<=6;i++)
{
for(int j=0;j<=6;j++)
{
OutColor+=Weights[i*7+j]*Texture2DSample(Texture, TextureSampler, UV+float2(UVOfferset[j]/TexSize.x,UVOfferset[i]/TexSize.y));
}
}
return float4(OutColor,1.0f)/49;
在UnrealEngine中用Custom节点实现高斯模糊的更多相关文章
- 在UnrealEngine中用Custom节点实现描边效果
在<Real Time Rendering, third edition>一书中,作者把描边算法分成了5种类型.1.基于观察角度与表面法线的轮廓渲染.缺点很明显.2.过程式几何轮廓渲染.即 ...
- 在UnrealEngine中用Custom节点实现毛玻璃的效果
本人在论坛上找到了一篇实现毛玻璃效果的文章:https://forums.unrealengine.com/showthread.php?70143-So-Blurred-glass-material ...
- 在UnrealEngine中用Custom节点实现径向模糊
//input NotUse 为了开启SceneTextureLookup函数而连接的节点,但是不参与逻辑 //input UV 屏幕缓存的坐标坐标 //input Strength 力度 //inp ...
- 在UnrealEngine中用Custom节点实现马赛克效果
参考这位大神的Shaderhttp://blog.csdn.net/noahzuo/article/details/51316015 //input BaseUV 屏幕UV //intput Tili ...
- 有关UnrealEngine材质编辑器中的Custom节点的一些小贴士
PS:本文写于2017.2.1日,使用版本为4.13.第二次更新时间为2017.3.15增加了四.一些材质编辑器中的奇怪的技巧: 一.前言在Unreal中材质编辑器提供了Custom节点,作为HLSL ...
- Rocket - debug - TLDebugModuleInner - Drive Custom Access
https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw 简单介绍TLDebugModuleInner中的针对Custom的访问. 1. customNode ...
- 剖析Unreal Engine超真实人类的渲染技术Part 2 - 眼球渲染
目录 三.眼球渲染 3.1 眼球的构造及理论 3.1.1 眼球的构造 3.1.2 眼球的渲染理论 3.2 眼球的渲染技术 3.2.1 角膜的半透和光泽反射 3.2.2 瞳孔的次表面散射 3.2.3 瞳 ...
- 遗传算法在JobShop中的应用研究(part 5:解码)
解码操作是整个遗传算法最重要的一步,在这步里面我们利用配置文件中的信息将染色体解码成一个有向无环图. 在介绍解码操作之前我们先来看一下配置文件,在part1绪论中我们已经介绍了一个车间调度问题的基本信 ...
- hbm.xml 详解总结
转自 http://blog.csdn.net/tuke_tuke/article/details/49717991 一.hibernate映射文件的作用: Hibernate映射文件是Hiberna ...
随机推荐
- eclipse maven .jar中没有主清单属性
报错环境: windows系统eclipse maven 打包jar包后, 运行 java -jar 报错 E:\My_java\mysql\target>java -jar original- ...
- jenkins持续集成:定时构建语法
构建位置:选择或创建工程_设置_构建触发器 1. 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月 ...
- jQuery 选择器demo练习
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...
- MyBatis - 2.全局文件配置
1.properties 属性 <!--properties 引入外部配置文件 properties 的内容 resource: 引入类路径资源 url: 引入网络资源 --> <p ...
- ***小程序wx.getUserInfo不能弹出授权窗口后的解决方案
微信更新api后,wx.getUserInfo在开发和体验版本都不能弹出授权窗口.微信文档说明: 注意:此接口有调整,使用该接口将不再出现授权弹窗,请使用 <button open-type=& ...
- 小程序报错:request:fail错误(含https解决方案)(真机预览问题)
问题描述:域名已经备案,我全部都有,也在后台配置了,但是手机预览,还是请求失败, PC端是可以请求数据出来的 新版开发者工具增加了https检查功能:可使用此功能直接本地避开ssl协议版本检查,但是此 ...
- C# 之 数字格式化
格式规范的完整形式:{index [,width][:formatstring]} index是此格式程序引用的格式字符串之后的参数,从零开始计数:width(可选) 是要设置格式的字段的宽度,wid ...
- 【转】 诡异的ORA-02289: sequence does not exist
原文地址:http://blog.itpub.net/20801486/viewspace-695651/ 今天被开发人员告知在应用用户下无法查询自己创建的sequence的nextval值.当执行s ...
- LVM管理之减少LV的大小
LVM管理之减少LV的大小 规定动作 1.umount filesystem 2.e2fsck filesystem 3.resize2fs filesystem 4.lvredure 实例演示——— ...
- PHP生成二维码,PHPQRCode
声明一个方法,直接调用即可 <?php /** * 功能:生成二维码 * @param string $qr_data 手机扫描后要跳转的网址 * @param string $qr_level ...