【UE技术案例】场景交互雪

发布时间 2023-03-22 21:08:49作者: 哟吼--小文文公主

 

 一. “画笔”与“画板”

1.1 RT的使用

  • Render Target 可以当Texture使用,相当于一张画布,通过蓝图节点或函数在上面绘制图案
  • Render Target 的两种使用方式:
    • 直接使用 Draw Material to Render Target,直接绘制材质
    • Begin Draw Canvas to Render Target 与 End Draw Canvas to Render Target 的配合使用,适用于需要在RT上绘制多个元素的情况

 

  •  常用的绘制节点
    • Draw Material
      • 需要特别注意的是:从世界坐标变换到画布的位置Screen Position,还需要减去尺寸Screen Size的一半
      • Rotation 是绕 Pivot Point 旋转

 

    • UV

 

  •  Render Target 的一些细节

 

  • 通过 RT,将虚幻场景类比为一块画板
    • 1. 创建BP(Actor)画板蓝图、Material 材质、Render Target渲染目标(蓝图也可以动态创建RT,但通过蓝图动态创建过多RT,则容易出问题)

 

    • 2. 框定画板范围大小(2000*2000),材质为我们刚刚创建的RT

 

    • 3. 在蓝图中写绘制的逻辑:将角色位置转换为UV坐标位置,并绘制材质 


    • 效果如下:

 

    • 优化一下

 

 1.2 映射范围位置

 

 

 

 

 

 

 

 

 

 

 

 

 

  •  将世界位置映射成 RT 的 UV
    • 1. 使用两个 Vector2D 定义画板的位置和尺寸

 

    • 2. 通过变量Position、Size,同步设置材质的两种方法

      • 动态材质实例:在蓝图中创建动态材质实例 Create Dynamic Material Instance,拿到地面引用,并设置材质中的参数 Set Vector Parameter Value;但通过蓝图动态的设置地形比较复杂,不建议使用

      • 材质参数集:相当于一个全局变量,更适合做全局的统一控制(如四季变换)

 

    • 3. 创建材质函数、材质参数集

 

    • 4. 材质参数集:将2个二维向量合并

 

    • 5. 材质函数中写位置映射的逻辑

 

    • 6. 在材质中调用材质函数,位置映射

       

    • 7. 在蓝图中计算绘制的位置 

       

       

    • 效果如下:

       

 

 

 

 

 

 1.3 走向无限

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1. 让画板始终跟随人物移动:
    • 创建更新位置的函数(更新材质参数集中的参数,设置 debug 的 plane 位置)
    • 将 Position 设置为玩家位置,每帧更新

    • 将画板之前的图案随人物移动更新:
      • 创建材质函数
      • 使用材质平移 Render Target 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 二. 多种绘制方式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

技术参考:

[1] [UOD2022]大地画板:大世界的可交互雪地 | 孙博恒(聆枫LingFeng)_哔哩哔哩_bilibili

[2]

 

 

 

未完待续...