UE4中实现刮刮乐效果(刮彩票)RenderTarget(一)
前言
游戏开发中有些时候需要使用到刮彩效果(彩票刮奖),效果如图
简单来讲,动态调整目标贴图的材质混合模式,将一张新的材质与原有材质进行融合,实现刮彩效果。其中新的材质就是刮奖轨迹!
分析
01.如何进行采样图混合?
在材质中,如果我们想要把两张贴图混合并且根据需要的阀值进行调整,则需要使用材质运算中的Lerp节点(材质编辑窗口中按住L点击左键),此节点有3个输入针脚
- A.主混合内容
- B.目标混合内容
- C.混合阀值
此节点特点,当阀值为0则取A,当阀值为1则取B,0-1之间,则进行比例混合,公式A+(B-A)*阀值百分比
根据此节点特点,我们考虑,当A输入贴图时,B输入贴图时,阀值为1则输出B贴图,0则输出A体贴。
我们是否可以考虑将输出阀值提供一张贴图,贴图为纯黑(黑色RGB均为0),则输出A贴图。
如果贴图换成纯白色(白色RGB均为1),则输出B贴图。
那么我们在纯黑色的贴图上,绘制一些白色,然后当作阀值贴图进行连接,会有什么效果呢?
效果就是白色的地方,显式B贴图,黑色的地方显式A贴图,和刮彩的效果是不是很像了?
02.如何生成黑白混合贴图呢?
当然,这可以让美术同学去绘制,一般采样图是需要绘制的。但是我们在程序中是否可以动态生成呢?
是可以的,我们需要借助RenderTarget,那么什么是RenderTarget呢?
本意就是可以将你想要绘制的内容,先绘制到RenderTarget上,然后将RenderTarget当作一张采样图用作材质输出,例如这里就是使用了RenderTarget,他将摄相机拍到的内容,投射到RenderTarget上,然后再将RenderTarget应用到材质上,最后提供给UI进行输出。
我们的本意就是,我们要绘制一些东西(白色的)到RenderTarget上,然后将RenderTarget当作是阀值贴图,输入给第一步中使用。
以上就是处理这个问题的所有关键思路,那么下面阐述下步骤。
实现
01.准备贴图
准备一张底图纹理,用来展示内容
02.构建渲染材质
说明:
- 材质中A节点输入纯色,或是一张纯色纹理(用于遮盖B节点贴图)
- B节点输入图案纹理
- Alpha节点输入2D参数纹理(参数纹理用于设置动态绘制的RenderTarget2D使用
如果Alpha2D纹理是纯黑色,则Lerp输出A节点纹理,如果纯白色,输出B节点纹理,如Alpha2D纹理是黑白混合(纯黑,纯白)则输出AB混合贴图
03.构建刮彩盖章的材质,用于绘制到RenderTarget上
说明:
- 借助UV数据我们构建了一张从中心向边缘从0到1均匀过度的纹理,用于做绘制画笔(UV与Distance进行计算,输出内容为一张圆形渐变阶梯图)
- 通过传入的Postion参数,用来调整UV偏移,Postion就是画笔在材质应用的Mesh上的位置信息,需要转换为UV位置
- 设置材质混合模式为叠加,以便用来将材质绘制到RenderTarget2D上不刷新之前绘制的内容
前期工作完成后,后面就是处理逻辑,在下篇文章中介绍~
引擎版本
4.18.3