【转载】【小玩意儿】简单实用方便的材质画进贴图

187 阅读4分钟

原文链接:【小玩意儿】简单实用方便的材质画进贴图

分享我一个朋友平时用的一个小玩意儿,不是什么高端的技术,感觉比较实用。朋友把 Draw Material To RenderTarget 巧妙地用了起来,封成了一个小工具,可以加速平时开发的效率。简单点说就是在引擎里把各种东西直接画进贴图,省去打开各种外部图像编辑软件的时间。

制作简易蓝图

最最最快速的方法是直接在某个 Actor 蓝图上连好节点,然后勾上 Call in Editor(编辑器中调用),不需要写什么插件、复杂的代码、Editor Utility Widget 之类的

  • 新建一个简单的 Actor 蓝图,起个名字

  • 新建我们要用到的函数(事件也可以)

  • 选中该函数,勾上 Call in Editor

  • 把蓝图拖进场景就能按按钮直接调用函数了。

  • 快速实现这个蓝图的功能,先创建一个 RT(后面都用 RT 来表示 RenderTarget,直译为可渲染目标),然后 Draw Material To RenderTarget,然后将 RT 保存成一张贴图,对应下图中的三个函数,其中保存成贴图的函数要比较新的引擎才有。函数的各种参数直接暴露到 Detail 面板上

image.png

  • 这里的 PathAndName 就是贴图保存路径。既可以是 /Content 开头也可以是 /Game 开头,后面接文件夹路径,然后是贴图名字,比如 /Game/MyTexture/111 ,也可以是直接用文件夹路径开头,如 MyTexture/111如果直接用贴图名字开头,则贴图会保存在当前关卡的存放路径,具体实现的细节可以自行查看对应源码

  • 这样我们就获得了一个能帮忙画贴图的蓝图了

试着画个圈到贴图上

  • 新建一个材质,ShadingModel 选择 Unlit(无光照),BlendModeTranslucent(半透明)

  • 实现一下画圈材质

  • 把材质拖进我们蓝图的材质槽里,点刚刚弄出来的 Draw and Save 按钮

  • 贴图出现了。记得保存一下。

试着画个噪波到贴图上

  • 实现一下画噪波的材质。这里用的是 Simplex 噪波。代码来自Noise - simplex - 2D。这种 Custom 节点的写法是比较常用的临时实现函数的方法,正式用的话建议直接把 Custom 节点魔改好

  • 拖进蓝图,绘制并保存!

试着把别人的复杂材质画到贴图上

  • 比如有的美术喜欢做复杂的分层材质,虽然效果很好,但计算量也提升了,将结果烘进贴图里可以更省(缺点是丢失了动态效果、精度受分辨率影响等等)。这里拿 Paragon 的材质做示范,挑个简单点的来试试。
  • 注意 Paragon 的材质里有 Fresnel 的计算,这个东西画 RT 的时候是有问题的,需要自行处理一下

  • 将材质复制一份用来画 RT。先将 AORoughnessMetallic 合并成一张贴图看看

image.png

  • 点击按钮绘制

  • 再导个法线贴图出来。注意法线贴图在材质编辑器中采样后数值范围是 -11,需要映射回 0-1 再导出

image.png

  • 压缩设置也要改成 Normalmap。然后绘制保存一下

  • BaseColor 也保存一下。注意,Format 需要选择 RTF_RGB8_sRGB

  • 保存出来的图片需要勾选 sRGB。也可以魔改负责保存静态贴图的蓝图函数,直接支持 sRGB 的设置。

试着在一张贴图上加东西

  • 比如实现一个在贴图上打水印的工具。先将蓝图修改一下,之前是直接用的材质,现在根据这个材质创建材质实例,并设置一下这个动态材质实例的Texture Parameter,一个 Texture 代表底图,一个 Texture 代表画上去的水印,再加个不透明度参数

image.png

  • 贴图对应的变量点开小眼睛,暴露在 Details 面板上

  • 新建一个材质,实现两张贴图的混合。两个贴图槽的名字跟蓝图函数中的 Parameter Name 对上

  • 点一下绘制按钮,贴图就出现了