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

这篇具有很好参考价值的文章主要介绍了虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

概要

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

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

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

文件位置: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等方法获得,这样就能够确保游戏存档再开启以后还原之前的岛屿。

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

Step 1

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

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

Step 2

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

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

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

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例
虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

Step 3

为几何体整体做平滑处理

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

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

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

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

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

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

Step 4

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

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

Step 5

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

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

Step 6

释放Compute Mesh以及向GameMode发出岛屿生成完毕的通知
虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

岛屿材质部分

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

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

草地和土地的材质
虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

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

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

动态为草地设置颜色

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

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

程序设计的小技巧

IslandGenerator在《CropOut》中以插件形式存在,这就意味着它不应该依赖Game中的任何逻辑,但是在IslandGenerator的逻辑中还要调用Game里的方法,这种情况如何来处理呢?方法很简单,在IslandGenerator定义一个蓝图接口BPI_IslandPlugin,在Game中让需要的类实现这个接口。
虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

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

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例

其它

Platform Switch函数

移动平台使用低精度,PC等平台使用高精度。为后续多平台发布打下基础。
虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator),虚幻引擎官方案例详解合集,虚幻引擎图文笔记,虚幻,ue5,虚幻5,游戏引擎,游戏开发,官方案例文章来源地址https://www.toymoban.com/news/detail-659558.html

到了这里,关于虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【程序员必备】UE4 C++ 虚幻引擎:详解JSON文件读、写、解析,打造高效开发!

    🙋‍♂️ 作者:海码007 📜 专栏:UE虚幻引擎专栏 💥 标题:【程序员必备】UE4 C++ 虚幻引擎:详解JSON文件读、写、解析,打造高效开发! ❣️ 寄语:人生的意义或许可以发挥自己全部的潜力,所以加油吧! 🎈 最后: 文章作者技术和水平有限,如果文中出现错误,希望大

    2024年02月03日
    浏览(57)
  • 什么是程序化交易

    大到量化、程序化、高频交易、套利交易、主观投资这些基本的概念,小到网格交易、条件单、T+0、ETF套利、期现套利、算法拆单交易、打板策略等具体的投资方式。如果没有接触过这些,很容易混淆。 程序化交易: 指通过既定程序或特定软件,自动生成或执行交易指令的

    2024年02月06日
    浏览(50)
  • 【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----程序化生成地形算法设计

    Input: Output: 程序化生成地形算法是一种在计算机中生成地形的方法,通常用于游戏开发和虚拟现实应用。下面是几种常见的程序化生成地形算法: Diamond-Square Algorithm(钻石-正方形算法) 该算法通过随机值填充网格的四个角落,然后计算中间点的高度值,不断重复直到整个网

    2024年02月01日
    浏览(50)
  • 基于URP的程序化天空盒

    参考来源:   天空盒教程第 1 部分 |开尔文·范·霍恩 (kelvinvanhoorn.com) 【程序化天空盒】过程记录02:云扰动 边缘光 消散效果_九九345的博客-CSDN博客 程序化天空盒实现昼夜变换 - 知乎 (zhihu.com) 一、太阳          目标:改变光的方向,使天空球旋转(日夜交替);光的正方

    2024年02月15日
    浏览(62)
  • Unity 使用柏林噪声程序化生成地形

    参考教程链接 项目链接 👇对噪声和柏林噪声不了解的可以看下面这个讲解。 柏林函数简介   简单来说柏林噪声是一种连续的、渐变的噪声,不理解原理也无所谓,unity自带有Mathf.PerlinNoise(X-coordinate,Y-coordinate);我们可以根据这个来制作更有层次性的柏林噪声。你可以把这个

    2024年02月15日
    浏览(41)
  • CityGML程序化建模开源引擎及数据集

    在攻读博士学位期间,我在 3D GIS 研究中遇到了以下缺点: 包含多个细节级别的 CityGML 数据集很少。 不存在程序化生成的 CityGML 格式的数据。 没有免费的程序化建模引擎。 公开可用的 CityGML 模型通常包含大量(拓扑)错误。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 为了解

    2024年02月13日
    浏览(38)
  • 分享股票量化交易程序化模型的设计思路

    一个股票量化交易程序化模型的入市设计往往伴随着设计者的偏好和交易时间框架等。主要分为震荡交易、套利交易以及趋势跟踪等。当然在近些年的发展中,也出现了类似遗传算法、人工智能神经网络等许多种类的系统模型。 但是对于大多数投资者来说,趋势跟踪系统可以

    2024年02月03日
    浏览(59)
  • 程序化交易接口策略过滤器–九宫格

    不同的程序化交易接口策略适用于不同的市场情况,有些交易策略使用于均值回归,有些则试用于方向明显的时候,有些试用于方向不明显的时候,因此,我们需要根据不同的市场情况,综合考虑方向和波动率,市场成交量来选择合适的交易策略。 本文介绍了一种选择程序化

    2023年04月09日
    浏览(47)
  • Three.js程序化3D城市建模【OpenStreetMap】

    对于我在 Howest 的研究项目,我决定构建一个 3D 版本的 Lucas Bebber 的“交互式讲故事的动画地图路径”项目。 我将使用 OSM 中的矢量轮廓来挤出建筑物的形状并将它们添加到 3js 场景中,随后我将对其进行动画处理 推荐:用 NSDT编辑器 快速搭建可编程3D场景 为了使用 Node 和

    2024年02月11日
    浏览(45)
  • 用java去实现程序化广告应该有哪些步骤?

    1. 需求分析和规划 在这一阶段,我们需要详细分析和理解项目需求,并制定相应的规划和计划。这包括以下几个步骤: 项目背景和目标: 理解项目的背景和目标,确定开发的目的和意义。 功能需求分析: 分析用户需求,明确项目需要实现的功能和特性。 技术可行性评估:

    2024年04月10日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包