HLSL在UnrealEngine4的材质节点中的应用(马赛克效果案例)

先来看下最终效果,如下图


1、百度一个Shader算法,搜索关键字HLSL 滤镜,会有很多相关的文章介绍,我这里就找一个马赛克滤镜来做个示范。

我这里找到一个网友用HLSL写的http://www.cnblogs.com/lancidie/archive/2012/01/19/2326759.html,他的代码是这样的,下面我用两种方式把他的算法使用的UE4材质节点上。


2、根据HLSL翻译成UE4的材质节点

这是一段像素着色器的代码,定义了三个提供外部调节的参数,一个2d纹理(Texture0)和两个二维向量(TexSize和mosaicSize),我们可以在UE4材质而编辑器里创建三个

节点如图


首先Main函数,Main函数有一个float2的参数,这个是纹理坐标,对应于UE4的TexCoord节点,如图


进入Main函数第一句是两个float2的乘法运算,UE4乘法运算是Multiply节点,运算结果生成一个新的float2名称是intXY,这个HLSL代码是用float2的分量分别相乘,然后用分量相乘的两个结果组合成一个新的float2,如果直接按照这个代码连节点的话是这样连接(Mask的作用是分别得到分量),如图


但是这是不必要的,使用Multiply可以根据输入值,它底层就会根据每一个分量相乘输出一个新的值,所以可以这样连接,如图


这两种连接是相同的效果。

Main函数第二行,两个float2相除值取整形,再乘以一个float2,这里就不演示用分量做运算,UE4除法运算使用Divide节点,注意强制转换成整形在HLSL里使用floor函数(它的作用是返回小于等于输入值的最大整数。),在UE4材质中也有这个节点,如图


第三行是float2的除法运算,如图


最后是返回一个2D纹理,使用前面计算出来的纹理坐标(UVMosaic),在TextureSample上设置一张图片,设置TexSize的值为(512,512)这个值和纹理尺寸有关,如图


这样就大功告成了,读者可以尝试一下其他滤镜算法,网络上可以找到很多Photoshop滤镜的算法。

3、根据HLSL编写UE4的自定义节点

原理和就是上面解释的,只是把节点写成代码,这里我提供一个截图,鼓励愿意学习的人一定要亲手敲一遍这个代码,这是学习代码最基本的方法


这里只是展示了一个简单案例,掌握了这个可以使用很多Shader语言(HLSL/GLSL/CG,包括Unity的shaderLab等)算法翻译成UE4的材质节点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值