虚幻官方项目《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.hqwc.cn/news/76516.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf格式文件下载不预览,云存储的跨域解决

需求背景 后端接口中返回的是pdf文件路径比如&#xff1a; pdf文件路径 &#xff08;https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf&#xff09; 前端适配是这样的 <ahref"https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf&…

记录首次面试2023-08-18

人生第一次面试&#xff0c;大概一个小时左右。没有问我C的&#xff0c;上来一个数据库事务&#xff0c;虽然没有复习&#xff0c;但是还是能够记住一些&#xff0c;主要问的一些事务的隔离级别&#xff0c;以及都有什么作用&#xff0c;我是举例回答的&#xff0c;客户端A和客…

PHP加密与安全的最佳实践

PHP加密与安全的最佳实践 概述 在当今信息时代&#xff0c;数据安全是非常重要的。对于开发人员而言&#xff0c;掌握加密和安全的最佳实践是必不可少的。PHP作为一种常用的后端开发语言&#xff0c;提供了许多功能强大且易于使用的加密和安全性相关函数和类。本文将介绍一些P…

网络编程面试笔试题

一、OSI 7层模型&#xff0c;TCP/IP 4层模型 5层模型。 以及每一层的功能&#xff08;重点&#xff1a;第三层 第四层&#xff09; 答&#xff1a; 7层模型&#xff08;①物理层&#xff1a;二进制比特流传输&#xff0c;②数据链路层&#xff1a;相邻结点的可靠传输&#xf…

Django的模型

定义模型 from django.db import models class User(models.Model):# 类属性是表示表的字段username models.CharField(max_length50,uniqueTrue)password models.CharField(max_length200)create_time models.DateTimeField(auto_now_addTrue) # auto_now_add新增数据时间…

如何提升城市空气质量?一招教会你

空气质量监控&#xff0c;作为保障人类健康和维护环境可持续的关键手段&#xff0c;在现代社会发挥着重要作用。通过实时监测、数据采集和分析&#xff0c;我们能够深入了解空气中各种污染物的浓度以及气象参数的变化&#xff0c;从而评估空气质量的状况。 空气质量监控通过科学…

大数据及软件教学与实验专业实训室建设方案

一 、系统概述 大数据及软件教学与实验大数据及软件教学与实验在现代教育中扮演重要角色&#xff0c;这方面的教学内容涵盖了大数据处理、数据分析、数据可视化和大数据应用等多个方面。以下是大数据及软件教学与实验的一般内容&#xff1a;1. 数据基础知识&#xff1a;教授学生…

无涯教程-PHP - 静态变量函数

静态变量 静态变量在函数退出时值不会丢失,您只需将关键字STATIC放在变量名称的前面,即可将变量声明为静态变量。 <?phpfunction keep_track() {STATIC $count0;$count;print $count;print "<br />";}keep_track();keep_track();keep_track(); ?> 这…

基于docker搭建owncloud Harbor 构建镜像

环境介绍&#xff1a;ContenOS7.9 docker17.12.1-ce 使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 docker pull owncloud #拉取镜像 docker pull mysql5.6 创建容器 docker run --name owncloud-mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORDroot …

linux部署clickhouse(单机)

一、下载安装 1.1、下载地址 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区阿里巴巴开源镜像站&#xff0c;免费提供Linux镜像下载服务&#xff0c;拥有Ubuntu、CentOS、Deepin、MongoDB、Apache、Maven、Composer等多种开源软件镜像源&#xff0c;此外还提供域名解析DNS、…

开放网关架构演进

作者&#xff1a;庄文弘&#xff08;弘智&#xff09; 淘宝开放平台是阿里与外部生态互联互通的重要开放途径&#xff0c;通过开放的产品技术把阿里经济体一系列基础服务&#xff0c;像水、电、煤一样输送给我们的商家、开发者、社区媒体以及其他合作伙伴&#xff0c;推动行业的…