当前位置: 首页 > news >正文

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator)

开个新坑详细分析一下虚幻官方发布的《CropOut》,文章会同步发布到我在知乎|CSDN的专栏里

文章目录

  • 概要
  • Create Island
    • 几何体生成部分
      • 随机种子
      • Step 1
      • Step 2
      • Step 3
      • Step 4
      • Step 5
      • Step 6
    • 岛屿材质部分
      • 动态为草地设置颜色
  • 程序设计的小技巧
  • 其它
    • Platform Switch函数

概要

《CropOut》的技术亮点之一就是全部关卡都是随机生成的,本篇文章将重点解析游戏中岛屿的随机生成方式,先列举几个技术关键字:

  • 用Geometry Script构造几何体
  • 为Geometry Script几何体赋材质
  • 依赖倒转

在这里插入图片描述

文件位置:E:/MISC_UE/Cropout示例项目/Plugins/IslandGenerator/Content/BP_IslandGen.uasset

Create Island

岛屿生成的逻辑并不复杂,可以视为Geometry Script应用的一个范例,它包含了几何体的生成和优化,以及针对本项目特点采取的一种巧妙的贴图方式。

几何体生成部分

随机种子

SeedRandom Stream类型并保存在BP_SaveGM中,每一个关卡的随机数都是由同一个Seed通过Random Unit Vector from Stream以及Random Float in Range from Stream等方法获得,这样就能够确保游戏存档再开启以后还原之前的岛屿。

在这里插入图片描述

Step 1

随机生成一些平顶的圆锥体Cone

在这里插入图片描述

在这里插入图片描述

Step 2

在几何体底部添加一个添加Box

在这里插入图片描述

在这里插入图片描述

添加Box主要是为了后面做平滑的时候,让斜面有一定弧度,看起来更自然,下面是未添加Box和添加Box的效果对比

在这里插入图片描述
在这里插入图片描述

Step 3

为几何体整体做平滑处理

在这里插入图片描述

在这里插入图片描述

  • Apply Mesh Solidify :对DynamicMesh所有的子物体进行体素化,然后获得外表网格,实际上相当于对所有子物体进行了布尔并集运算,在本例中针对还性能平台和低性能平台使用了设置了不同的精度即体素颗粒的大小。

在这里插入图片描述

在这里插入图片描述

  • Set Mesh To Per Vertex Normals :平滑法线

  • Apply Iterative Smoothing to Mesh :对DynamicMesh进行整体平滑

  • Apply PNTessellation :对DynamicMesh进行细分,同样针对不同性能的平台使用不同的细分级别

Step 4

用平面切掉底部的没用的部分

在这里插入图片描述

在这里插入图片描述

Step 5

先定义一个平面将山顶切掉,然后再用平面投影的方式设置几何体的UV

在这里插入图片描述

在这里插入图片描述

Step 6

释放Compute Mesh以及向GameMode发出岛屿生成完毕的通知
在这里插入图片描述

岛屿材质部分

材质文件位置:E:/MISC_UE/Cropout示例项目/Plugins/IslandGenerator/Content/Misc/M_Landscape.uasset

岛屿材质的材质实现使用了简单粗暴而又巧妙的方式,直接使用Absolute World Position坐标系来定义材质。岛屿的上方是草地,下方是土地。并且通过RenderTarget实现了表面动态阴影的效果。

草地和土地的材质
在这里插入图片描述

通过RenderTarget实现草地上的动态效果

在这里插入图片描述

动态为草地设置颜色

草的颜色是使用Material Parameter Collection定义的,因为草是绿色的,所以它的随机HSV色相也需要在绿色区间。

在这里插入图片描述

程序设计的小技巧

IslandGenerator在《CropOut》中以插件形式存在,这就意味着它不应该依赖Game中的任何逻辑,但是在IslandGenerator的逻辑中还要调用Game里的方法,这种情况如何来处理呢?方法很简单,在IslandGenerator定义一个蓝图接口BPI_IslandPlugin,在Game中让需要的类实现这个接口。
在这里插入图片描述

这样在IslandGenerator中就只需要调用接口就可以了。

在这里插入图片描述

其它

Platform Switch函数

移动平台使用低精度,PC等平台使用高精度。为后续多平台发布打下基础。
在这里插入图片描述

http://www.lryc.cn/news/133177.html

相关文章:

  • 微服务中间件--微服务保护
  • Excel VBA 复制除指定工作表外所有的工作表的内容到一张工作表中
  • 电脑上安装,多版本node
  • 「网页开发|环境安装」Windows系统下安装node.js
  • 【腾讯云Cloud Studio实战训练营】用Vue+Vite快速构建完成交互式3D小故事
  • MySQL和Java中的货币字段类型选择
  • 第6步---MySQL的控制流语句和窗口函数
  • Android通过OpenCV实现相机标定
  • 我们可能要为ChatGPT的谢幕做好准备
  • 深入浅出Pytorch函数——torch.nn.init.xavier_normal_
  • Abandon_Ubuntu Declaration
  • Java设计模式-抽象工厂模式
  • Rust语法:所有权引用生命周期
  • 办手机卡/流量卡需要问清楚啥?
  • vim基本使用方法
  • 漏洞指北-VulFocus靶场专栏-入门
  • 管理类联考——逻辑——真题篇——按知识分类——汇总篇——二、论证逻辑——推论——第二节——数字推理题
  • git基础教程(24) git reflog查看引用日志
  • 成都爱尔谭娇主任提醒孩子不停揉眼睛是因为什么
  • 医疗设备管理软件哪家好?医院设备全生命周期管理要怎么做?
  • 基于PaddlePaddle实现的声纹识别系统
  • 使用GDB工具分析core文件的方法
  • Maven - 统一构建规范:Maven 插件管理最佳实践
  • 对接海康明眸门禁设备-删除人员信息
  • LEADTOOLS Imaging SDK Crack
  • 2023并发之八股文——面试题
  • 操作记录日志保存设计实现
  • PL 侧驱动和fpga 重加载的方法
  • 【2023最新爬虫】用python爬取知乎任意问题下的全部回答
  • Bingchat和ChatGPT主要区别