在UnrealEngine中用Custom节点实现高斯模糊

时间:2022-09-12 20:25:29
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);

  

在UnrealEngine中用Custom节点实现高斯模糊

群里朋友需要一个模糊贴图的于是又写了个

//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);

  在UnrealEngine中用Custom节点实现高斯模糊

//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节点实现高斯模糊的更多相关文章

  1. 在UnrealEngine中用Custom节点实现描边效果

    在<Real Time Rendering, third edition>一书中,作者把描边算法分成了5种类型.1.基于观察角度与表面法线的轮廓渲染.缺点很明显.2.过程式几何轮廓渲染.即 ...

  2. 在UnrealEngine中用Custom节点实现毛玻璃的效果

    本人在论坛上找到了一篇实现毛玻璃效果的文章:https://forums.unrealengine.com/showthread.php?70143-So-Blurred-glass-material ...

  3. 在UnrealEngine中用Custom节点实现径向模糊

    //input NotUse 为了开启SceneTextureLookup函数而连接的节点,但是不参与逻辑 //input UV 屏幕缓存的坐标坐标 //input Strength 力度 //inp ...

  4. 在UnrealEngine中用Custom节点实现马赛克效果

    参考这位大神的Shaderhttp://blog.csdn.net/noahzuo/article/details/51316015 //input BaseUV 屏幕UV //intput Tili ...

  5. 有关UnrealEngine材质编辑器中的Custom节点的一些小贴士

    PS:本文写于2017.2.1日,使用版本为4.13.第二次更新时间为2017.3.15增加了四.一些材质编辑器中的奇怪的技巧: 一.前言在Unreal中材质编辑器提供了Custom节点,作为HLSL ...

  6. Rocket - debug - TLDebugModuleInner - Drive Custom Access

    https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw 简单介绍TLDebugModuleInner中的针对Custom的访问. 1. customNode ...

  7. 剖析Unreal Engine超真实人类的渲染技术Part 2 - 眼球渲染

    目录 三.眼球渲染 3.1 眼球的构造及理论 3.1.1 眼球的构造 3.1.2 眼球的渲染理论 3.2 眼球的渲染技术 3.2.1 角膜的半透和光泽反射 3.2.2 瞳孔的次表面散射 3.2.3 瞳 ...

  8. 遗传算法在JobShop中的应用研究(part 5:解码)

    解码操作是整个遗传算法最重要的一步,在这步里面我们利用配置文件中的信息将染色体解码成一个有向无环图. 在介绍解码操作之前我们先来看一下配置文件,在part1绪论中我们已经介绍了一个车间调度问题的基本信 ...

  9. hbm&period;xml 详解总结

    转自 http://blog.csdn.net/tuke_tuke/article/details/49717991 一.hibernate映射文件的作用: Hibernate映射文件是Hiberna ...

随机推荐

  1. HTML5 视频(一)

    HTML5 提供了展示视频的标准 今天,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定了一种通过 video 元素来包含视频的标准方法. 一 ...

  2. apparmor介绍

    AppArmor AppArmor 类似于selinux ,主要的作用是设置某个可执行程序的访问控制权限,主要区别就在于apparmor是以路径(path)为基础,而selinux以i节点(inode ...

  3. javascript数组集锦

    设计数组的函数方法 toString, toLocaleString, valueOf, concat, splice, slice indexOf,lastIndexOf, push, pop, s ...

  4. Azure Powershell获取指定订阅下的虚拟机信息(ASM)

    为方便Azure用户导出已创建虚拟机的相关信息,特编写如下脚本: 详情脚本: # 登陆Azure Account Add-AzureAccount -Environment AzureChinaClo ...

  5. HTML入门13

    构建表格 使用colspan和rowspan添加无单位的数字值作为属性来实现行合并和列合并: <col>来定义列的样式,每一个<col>都会制定每列的样式,对于不需要指定列的样 ...

  6. 11&lowbar; for 练习 &lowbar; Math&period;sqrt

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. Ubuntu安装守护进程supervisor

    Supervisor安装与配置(Linux/Unix进程管理工具) asp.net core 负载均衡集群搭建(centos7+nginx+supervisor+kestrel) 为了保证服务能够稳定 ...

  8. EasyUI:获取某个dategrid的所有行数据

    EasyUI:获取某个dategrid的所有行数据 var rows = $("#grid").datagrid("getRows"); for(var i=0 ...

  9. oracle 单实例DG&lpar;闪回技术四&rpar;

    一,flashback Oracle Flashback技术是一组数据库特性,它可以让你查看数据库对象的过去状态,或者将数据库对象返回到以前的状态,而无需使用基于时间点的介质恢复.根据数据库的变化,闪 ...

  10. 【题解】洛谷P1066 &lbrack;NOIP2006TG&rsqb; 2&Hat;k进制数&lpar;复杂高精&plus;组合推导&rpar;

    洛谷P1066:https://www.luogu.org/problemnew/show/P1066 思路 挺难的一道题 也很复杂 满足题目要求的种数是两类组合数之和 r的最多位数m为 w/k(当w ...