UE4材质大师课程笔记(二)---RenderTarget

RenderTarget

UE4的RenderTarget感觉和Unity的差不多,都是获得一个摄像机的渲染结果,然后存在RenderTarget里面进行读取使用。

在UE4中要使用RenderTarget,首先要添加SceneCapture2D组件或者SceneCapture Cube组件,前者获取2D,后者获取Cube立方体贴图。

RenderTarget的使用

渲染材质

在UE4中过程化生成噪点纹理是比较昂贵的,所以通常的做法是将材质绘制到RenderTarget中。

可以看出以上这个需要529条指令

将材质绘制到RenderTarget

得到左边的RenderTarget噪点图了,然后右键创建静态纹理则可以得到可以用的Texture纹理了。

指令就变为了34,效率得到了提升。

高级应用

高度图

效果如下,随着鼠标左键的按下,在平面生成不同的高度。

1.首先我们要创建MAT_HeightfieldPainter材质,设置如下,注意要把shading Model改为Unlit无光照模式。这个材质主要用于控制物体在Z轴的世界偏移。

2.创建MAT_ForceSplat材质,设置如下,主要用于处理鼠标点击平面所产生的uv坐标,通过下面的计算获得一个关于这个uv坐标为圆心的渐变圆形贴图

3.新建一个HeightFieldPainter的Actor蓝图,设置如下

然后在构造函数里面进行动态材质的设置,这里主要针对我们上面的材质创建动态材质。

新建TraceFromCamera函数,函数用于从摄像头方向射出射线,进行射线检测,如果检测到碰撞物体,就进行伤害传递。

Begin函数,首先我们要为新建一个RenderTexture并保存,同时将RT传递给Z轴偏移的MAT_HeightfieldPainter材质。

最后处理伤害函数,传递参数给MAT_ForceSplat材质,例如点击的uv坐标,力度,大小,最后要用Draw Material to Render Target函数将材质绘制到RT里面,这样HeighfieldPainter材质才会根据RT图进行Z轴的偏移。

这里注意,这种方法只适用于平面,计算点击位置的uv坐标也比较简单,首先获取点击位置的世界坐标,然后获取静态网格的worldTransform,然后通过Invert Transform获得从世界坐标到静态网格本地坐标的变换矩阵,将点击位置从世界空间转换为静态网格的本地空间,当然我们也要将得到的本地坐标转为uv坐标,就要除于网格的长宽,映射到【0,1】,这样就得到了正确的uv坐标。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2021 Opda
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信