Unigine 2.10新的地形系统发布

Unigine宣布发布了2.10版,该版本为实时引擎带来了多项重要的新功能,其中包括一个全新的地形系统,​​该系统的极限为10000 x 10000km,如果您不需要模拟地球的曲率,则不受限制。

其他新功能包括改进的C ++和C#API,高级汽车物理系统,改进的体积云,更新的粒子系统,用于组装独立项目的新Build工具,用于资产优化的Texture Profiler工具等等。

有关内容,详见下面的描述

关键变化

  • 新的地形系统:更详细,更快,无损的协作编辑,双筒望远镜支持,运行时修改API。
  • 改进的C ++和C#API:简化的对象管理,改进的线程安全性和稳定性,更好的代码可读性。
  • UnigineEditor扩展:公共API,插件系统。
  • 高级汽车物理系统:轮式车辆仿真。
  • 改进的云:更多类型,更好的视觉效果。
  • IG更新:自适应质量管理,更好的同步,更轻松的配置,API改进。
  • 用于组装独立项目构建的新构建工具。
  • 用于资源优化的Texture Profiler工具。

新地形系统

经过近2年的开发,我们已经可以生产新的Terrain系统(API中的ObjectLandscapeTerrain + LandscapeLayerMap类)!让我们来看看有什么特别之处。

专有核心技术

新的地形系统基于稀疏虚拟纹理(MegaTexture)方法,并进行了许多改进和引擎特定的调整,例如智能详细信息缓存,优化的剔除技术等。该地形系统与Engine的高级流子系统紧密集成,使其具有VRAM效率,并且从头开始就设计了多线程方法,从而使其能够利用多核系统的优势并有效处理高达PB的数据。

该技术可用于DirectX和OpenGL API,甚至可以在Windows 7上使用(尽管Windows 7已被Microsoft逐步淘汰,但仍在企业中广泛使用)。尽管即使对于VRAM容量有限的计算机也可以配置地形渲染,但我们强烈建议使用内存至少为4 GB的GPU以获得最佳性能。

规模大

对于新地形的实际限制为10000 x 10000 km。如果您的用例不需要可视化地球的曲率(地面操作或直升机模拟),则地形的大小实际上并不重要(这意味着实际上是无限的)。

游戏引擎尝试使用由单独的地形对象表示的补丁来模仿大型景观,这导致它们之间出现明显的接缝,并使缩放变得非常成问题。 UNIGINE中没有这样的问题。

x2-10更快

新地形的渲染确实非常快,这使得它甚至适用于以毫秒为单位的VR应用程序。根据设置,在缓慢的摄像机移动时,ObjectLandscapeTerrain的速度是ObjectTerrainGlobal的5-10倍,而在快速移动摄像机(密集的数据流)时,其速度是2-3倍。

双筒望远镜/瞄准镜支持

新的地形无论尺寸大小,均可确保完美的缩放和无缝体验,并支持双筒望远镜/望远镜(最大x20 /最低1度FOV),确保平滑地放大和缩小,使其甚至适用于无人机模拟的摄像机,狭窄的视野。

极致的细节水平

地形的虚拟纹理的反照率,法线和高度分量的最大细节级别不取决于原始数据源的分辨率。它由虚拟纹理的纹理像素大小定义,每个像素最大可达1毫米,从而提供了前所未有的细节。地形已针对厘米范围的分辨率数据(例如,每个像素10 cm)进行了优化,较粗的数据源(例如,每个像素30 m)可能需要进行一些过程上的改进才能获得最佳结果。

使用自适应硬件细分将地形的几何体细分为多个细节级别,使您能够动态生成高度详细的几何体。通过位移贴图可以添加更多几何细节,从而使您的景观看起来更加自然。地理变形支持使两个镶嵌级别之间的过渡无缝,而不会突然出现或消失山丘或山脉。

ObjectLandscapeTerrain为您提供了前所未有的变体,以创建几乎任何程度的多样性的景观。那怎么可能?您有20个多用途蒙版,可用于定义石头,沙子,泥浆等的区域,最多可使用1024个细节来添加颜色,大小,位移变化(例如,使石头的大小,颜色和遮罩所定义区域的粗糙度)。不够?此外,还可以使用地形的反照率颜色作为蒙版(给您加上2400万个变化),并可以通过高度进行其他蒙版,以限制可以看到细节的蒙版内的高度范围(例如,下雪时)山峰)。

动态流

考虑到遮挡,相机设置等因素的自适应提取算法,将地形数据异步流传输到虚拟纹理,可确保稳定的性能,仅以完整的细节级别渲染必要的数据,而与支持多台相机的相机视场无关。灵活的流设置使您甚至可以为VRAM容量有限的计算机配置地形渲染。微调渲染和流设置,以匹配您的内存量,所需的摄像机数量和质量平衡,以实现所需的性能并满足您的项目要求。

顺便说一下,我们还改善了所有纹理的流传输,减少了加载一小部分数据时的延迟。

快速交叉测试

交叉测试快速(比ObjectTerrainGlobal快几倍)且准确,并进行了许多优化,从而使您能够通过忽略某些仅用于添加次要细节的图层,而与基本图层的高度图相差很小,从而避免了过多的检查。您还可以选择在需要立即响应时以强制模式处理请求,或者选择异步处理以平衡负载并保持稳定的性能。

基于非破坏性层的流程

地形数据(高度,反照率和遮罩)由图层存储,表示为单独的对象-景观图层地图,可以具有不同的密度,方向和几乎不受限制的大小。它们可以安排在场景中,并且可以通过多种选项(加法,乘法等)提供的各种组合相互融合。因此,您可以混合使用不同密度的图层以在任何位置创建高分辨率插图,或者通过在基础图层的顶部添加新的“修改”图层来对地形表面进行非破坏性修改(例如,创建车轮轨迹) 。您可以根据需要添加任意多个图层。

初始风景带拼合插图的风景

使用“景观图层地图”通过API进行运行时修改很容易-只需生成一个新图层即可在任何位置修改地形外观。如果不再需要修改-只需禁用或删除恢复先前状态的图层即可。

一层两层混合

团队合作编辑

每个图层的数据都独立存储在一个单独的文件中,这一事实使Terrain系统对VCS友好并且适合于协作编辑。一组3D艺术家可以同时设计单独的图层或图层集(例如,其中一位艺术家使用第三方软件以程序方式生成地形数据,另一位艺术家在其队友雕刻山峰时在地形上创建平坦区域)。因此,他们可以一起创建一个大的景观,同时迭代手动编辑和程序生成的数据,而不会发生任何冲突

支撑孔

可以使用基于贴花的技术从地形表面切出任意形状的孔。您可以使用孔来替换任意网格物体的地形几何形状(例如,创建洞穴或隧道),以确保准确无缝的融合以及每个像素的细节。这些选项对于在挖掘机模拟中挖孔和挖沟特别有用。

多功能遮罩

有20个多功能遮罩,可用于向地形表面添加细节(例如石头,沙子,泥土等),结合多达1024个细节和基于颜色的遮罩,可提供大量变化(往上看)。另一个用例是定义草,树和其他对象的区域,建立可在引擎的所有相关子系统中使用的统一工作流,从而减少所需的掩码数量并优化内存消耗,因为可以使用相同的掩码有多种用途。

最重要的是,这些遮罩可用于创建土地覆盖分类图,定义各种物理参数(例如表面摩擦以模拟各种路面状况),甚至用于传感器数据分类(例如温度,磁场以及传感器的数据)其他非视觉渠道。

运行时修改API

上述所有内容均可通过API获得。您希望自己的车辆在行驶时离开轨道,或者在一系列爆炸后创建弹坑,想要让挖掘机挖沟或推土机使地面平整-没问题!通过API实时基于CPU或GPU进行地形修改的过程非常简单,例如1、2、3:

  • 设置所需的区域,引擎将将该区域的部分地形数据复制到缓冲区。
  • 根据需要修改缓冲区(高度,颜色,蒙版或一次全部修改)。
  • 完成后,引擎应将缓冲区粘贴回地形,以替换旧数据。

为自己的地形编辑器实现自定义画笔的过程也不会花费很多时间,只需修改现有的画笔材料或创建自己的画笔即可,甚至可以使用自己的着色器代码。新的Unigine语言对象符号(ULON)使您能够做到这一点。支持撤消/重做操作堆栈。

修改地形外观的另一种简单方法是生成具有自己的高度,反照率和蒙版数据的自定义图层,并将其添加到现有图层之上。每个图层都是一个单独的节点,因此您可以分别控制每个修改。对于这种方法,撤消也很简单-禁用或删除恢复先前状态的修改层。

上面看到的流动站轨迹演示了地形表面的实时修改。有关配置和使用新地形系统的更多详细信息,请参阅《景观地形》一文。

 

您可以从Art Samples套件(SDK浏览器-> Samples->演示-> Art Samples)中检出新的Landscape样本,以及说明运行时API修改并获取任意点的地形数据的C ++ Samples:(SDK Browser- >样本->演示-> C ++样本->横向)。

地形太多,请帮我选择!

为了避免混淆,在2.10中有2种地形系统可用:

  • ObjectTerrainGlobal-适用于大规模的多插入地形,支持弯曲模式,可与地理坐标一起使用,可以使用Landscape Tool从原始GIS数据生成,实际限制为10000×10000 km。
  • ObjectLandscapeTerrain + LandscapeLayerMap(新版本)-适用于非常详细的地形,目前不支持地理坐标,可以由UnigineEditor从使用第三方软件制作的图块直接创建,支持协作编辑,支持运行时修改,速度更快双筒望远镜友好型交叉路口测试,实际极限不超过10000×10000 km。

此版本最终删除了旧版ObjectTerrain(从2.7开始就被弃用)。 WorldOccluderTerrain也是如此。迁移后,它们中的每个都应转换为NodeDummy。

在进一步的版本中,新地形还将获得对地理坐标的支持以及从GIS数据生成的功能,以及“景观工具”集成(也将进行重大升级)。至于ObjectTerrainGlobal的未来,它还会存在一段时间(只有在当前开发的ObjectPlanet完全可以投入生产时才会逐步淘汰)。

综上所述,我们建议在地理参考场景中继续使用ObjectTerrainGlobal进行大规模飞行模拟(尤其是固定机翼),而将ObjectLandscapeTerrain进行地面操作(尤其是需要使用望远镜/双筒望远镜或必须修改运行时)或项目需要极端细节的地方(包括直升机模拟)。

改进的体积云,更多类型

UNIGINE的体积云系统是可扩展的,使您能够创建各种类型的云。但这需要调整多个设置以及创建自定义纹理。为了使艺术家的生活更轻松,我们为以下云类型添加了许多新的随时可用的预设:高积云,积云,平流积云,层云,雨云层。

我们添加了将3D细节失真纹理用于云渲染的选项,而不是以前使用的2D纹理,从而消除了在某些细节尺寸设置下可能发生的垂直云拉伸。可以通过“设置”窗口的“渲染”->“云”部分或通过render_clouds_distortion_texture控制台命令来设置新模式。默认情况下,使用旧模式。

2D细节失真纹理3D细节失真纹理

为了使云调整更加灵活,我们增加了控制移动云动态的功能,即随着移动云的形状变化了多少。可通过clouds_base材质的“风变形”滑块使用此选项。

粒子系统更新

重构粒子系统具有更多的确定性行为,从而大大改善了多通道渲染用例的图像一致性。因此,当粒子在一个IG / PC上生成时,它可以无缝地传播到另一个屏幕(来自另一个IG / PC的视图),这对于多通道图像生成器非常重要。

更多渲染改进

  • 现在应分别为浮点精度和双精度生成生成着色器缓存,因为它们每个都使用自己的着色器缓存(即,为浮点精度生成的缓存不适合于双精度生成)。如果发布的应用程序同时具有float和double版本,则必须两次生成着色器缓存。
  • 修复了Windows 7的着色器编译问题。
  • 改进的可视化工具,减少了线框闪烁,默认情况下启用了新选项,可以通过visualizer_fix_flicker控制台命令进行控制。
  • 统一UNIGINE着色器语言(UUSL)进行了许多更改,有关更多信息,请参阅《 API迁移指南》。
  • 素材文件格式也进行了许多更改,有关更多信息,请参阅内容迁移指南。
  • 修复了在NVIDIA和Intel GPU上渲染Mesh Decals时出现的噪声伪影。
  • 现在,Voxel探针的“使用太阳颜色”选项考虑了环境的“环境”和“反射”设置。
  • 删除了在启用SSRTGI和“弯曲法线”时有时出现的伪影。
  • 为分配了启用了“抖动透明度”选项的grass_impostor_base材料的冒名顶替者,消除了照相机移动过程中阴影闪烁的伪影。褪色也得到了改善,变得更加平滑。
  • 修复了草的阴影级联伪影
  • 修复了在使用具有单个阴影级联(OpenGL)的世界光源的情况下,启用了阴影蒙版的对象出现的阴影渲染伪影和控制台错误。
  • 固定渲染节点参考内光源的镜头光晕。
  • 修复了OpenGL + Nvidia上的屏幕空间次表面散射问题。

改进的C ++和C#API

用户或多或少经常抱怨我们的API(以及内存管理)有点复杂,需要付出一些努力才能安全地使用它。在此版本中,我们对API进行了重大重构,以使其更简单,更安全,因此您可以专注于应用程序逻辑。

对UNIGINE的智能指针进行了重大重构,以避免悬空的指针,意外的对象删除(例如,超出范围时)以及两次删除(如果一个对象有多个所有者)而导致崩溃。加上清晰的生命周期管理,具有清晰语义(无歧义,更多的C ++风格)的便捷向下转换和自动向上转换,以及减少包装接口的数量,从而减少了内存消耗,并由于原子引用计数器而提高了线程安全性。

作为一个小例子,请看下面的代码如何从2.8更改为2.10,线程安全性和稳定性方面的改进在这里并不明显,但是它确实看起来更加简单明了。

其他更改的列表包括以下内容:

  • 引擎的单例,具有改进的线程安全性并简化了对其功能的访问。
  • 一组新的类和函数,用于改善多线程应用程序中的同步。
  • 改进了对节点和小部件的层次结构管理,确保按预期方式自动删除所有子级以及根级。
  • 使用枚举和布尔值替换int值更强的键入。
  • 节点管理功能(即查找,添加,删除节点等)。

代码迁移将需要一些人工,但是这非常简单,可以查找和替换操作,也可以丢弃冗余代码。不幸的是,这是我们必须为稳定(减少崩溃和内存泄漏),便利性,线程安全性,代码可读性以及将来的整体开发生产力而付出的代价。我们已竭尽全力在此版本中集中所有必需的主要API修改,以避免在UNIGINE 3之前进一步破坏API更改。

有关API更改的更多详细信息,请参阅《 API迁移指南》。

C#API

C ++ API的更改使改进C#API成为可能。因此,除了列出的改进以外,这是特定于C#的改进的列表:

  • 改进的C#内存管理,为每个对象实施了Dispose模式,从而为Engine(native)资源执行内存清理。
  • 带有可调整的收集器行为的改进的C#垃圾收集。
  • C#组件系统具有安全性改进,并且在运行时可提供有关当前系统状态的统计信息。
  • 扩展的C#API,现在具有所有插件以及许多方法,这些方法以前仅可用于C ++。

Unigine语言对象表示法

Unigine语言对象符号(ULON)成为UNIGINE中用于描述类似于面向对象编程中的类的复杂结构的通用格式的基础。它使您能够根据定义的逻辑条件动态构建层次结构,甚至嵌入源代码(例如,着色器或脚本)。

目前,新格式用于描述“景观地形”材质和画笔。基础画笔材料可用于实现您自己的自定义地形画笔。

将来,我们计划将所有UNIGINE内置材料转换为这种格式。

有关更多信息,请参阅Unigine语言对象符号文章。

文件系统与资源管理

  • 现在无需运行编辑器即可在运行时即时更新资源。当您更改任何资源并希望引擎使用更新的版本时,可以调用FileSystem :: changeVirtualFile()方法来通知引擎文件已被修改并且需要更新。这使您可以编写自己的自定义文件观察器,以确保自动更新必要的资源。
  • 已修复UnigineScript中与UGUID相关的功能的问题。
  • 现在可以忽略项目根数据文件夹的过滤器(即应忽略的文件夹列表)。在创建项目时,将在数据文件夹中创建root_mount.umount文件。有关更多信息,请参阅文件系统文章。
  • 改进了所有纹理的流传输,减少了加载一小部分数据的延迟。
  • 现在可以生成纹理缓存,并将其保存到数据文件夹之外的位置,该位置由-cache_path启动命令行选项定义。
  • 修复了为某些类型的纹理生成缓存的问题。
  • 提高了文件系统,材质,纹理和控制台的初始化速度。

高级车辆物理系统(实验性)

现在,使用UNIGINE创建逼真的轮式车辆仿真变得更加简单。引入了一个新的高级系统,该系统由一组C ++组件实现,从而最大程度地减少了制造几乎任何轮式车辆(无论是4WD SUV,探险漫游车还是复杂的多轴运输车)所需的工作。

提供以下功能:

  • 设置发动机的功率和阻力曲线,以及怠速(RPM)。
  • 变速箱仿真(手动和自动)使您能够调整换档的油门和速度值以及过渡时间,以及设置档数和配置传动比。
  • 数学车轮模型可实现更逼真的转向,从而能够模拟影响旋转车轮的力,并能够调节悬架行程,弹簧和阻尼值。
  • 轻松设置转向轴和驱动轴,并能够打开和关闭差速锁。
  • 在不同的视图(驾驶员视图,外部摄像机等)之间切换。
  • 模拟各种表面状况(例如干燥,潮湿,积雪或结冰的道路,泥泞等)。
  • 一组调试窗口实时显示所有车辆参数的信息。

考虑了许多参数的物理模拟可确保栩栩如生的车辆动力学。因此,在驾驶虚拟车辆时,请记住,如果过快地踩下离合器,发动机将失速!

该SDK包中的C ++样本包中的车辆样本中提供了C ++组件集(SDK浏览器->样本->演示-> C ++样本->车辆样本)。

有关使用新的高级系统创建自己的轮式车辆的更多信息,请参考本文。

GUI改进

  • 为以下小部件的各种元素(边框,背景,选择,按钮等)添加了颜色倍增器:GroupBox,ScrollBox,Button,CheckBox,ComboBox,MenuBar,ListBox,Scroll,EditLine,EditText,TabBox,TreeBox,Slider,tSpinBox ,窗口。
  • 修复了ObjectGUI的模具缓冲区,将所有UI元素限制为界面窗口和对象的区域。
  • 修复了WPF应用程序中与剪贴板相关的操作。

Teslasuit支持

我们将继续与领先的硬件解决方案添加更多集成,从而在虚拟环境中实现新的沉浸式体验。现在该是触觉了。

UNIGINE现在支持Teslasuit,这是一种带有运动捕捉和气候控制功能的全身触觉套装,使用户可以感受到虚拟现实中的感觉,传递身体运动并提供冷热感觉。新的TeslaSuit插件提供了与西服的集成,并允许控制Teslasuit服务传递以下数据:

  • 用户动作
  • 触觉反馈
  • 生物特征

使用该套装,用户可以感觉到压力,热量,寒冷,而应用程序可以从用户那里读取运动和脉搏率数据。这样可以在企业人员培训中大量应用。

可通过C ++和C#API获得插件的功能。有关更多信息,请参见TeslaSuit插件文章。

碰撞检测优化(重要)

为了优化性能并避免不必要的计算,默认情况下,ObjectMesh *对象所有表面的碰撞标志都应取消设置。

因此,您必须为需要它的所有曲面手动设置Collision标志。如果通过代码创建对象,请不要忘记在必要时通过setCollision()方法设置标志。我们还强烈建议您使用物理形状来检测动态对象的碰撞,因为它们的工作速度要快得多!

GPU调试信息

为引擎的“调试和开发”版本添加了GPU调试信息,这在使用第三方图形调试器(例如RenderDoc或NVIDIA Nsight)时可能会有所帮助。新功能与Microprofile工具集成在一起,使您可以将OpenGL或DirectX命令组合到GPU调试组中,并在定义分析范围时自动创建它们。现在,从外部文件(例如纹理,着色器,静态或蒙皮网格物体)加载的所有图形资源以及Engine的内部资源都具有自己的调试名称,以简化识别。

其他引擎改进

  • 添加了对EXR文件的支持(当前仅Windows)。这样的图像可以具有任意数量的通道,每个通道每个像素每个像素真正的32位浮点数,以存储其他数据。有许多EXR格式的HDR纹理可用,因此不再需要手动转换。
  • 添加了对RGBA32F Tiff图像的支持。
  • 解决了在启用放置在节点层次结构中的世界图层时性能下降的问题。
  • 修复了MeshClutter元素的碰撞检测。
  • 修复了将其他材质应用于其克隆时更改原始广告牌大小的问题。
  • 修复了在为具有非零数组大小的属性中的结构数组调用size()函数时崩溃的问题。
  • 修复了错误捕获具有枢轴偏移的冒名顶替者的问题。
  • 现在,可以正确应用投影反射来缩放环境探测器。
  • 改进的可视化器,减少了细线的闪烁。
  • 修复了在WaterGlobal对象的体积内创建FieldHeight时,控制台中出现的图像解压缩错误。
  • World :: getNodeByName()方法现在可以过滤出孤立的节点层次结构和缓存节点,因此它不会从其缓存中的前任节点或返回节点中返回具有拥有者的节点(NodeReference / Clutter / Cluster)。
  • 修复了将Grass对象附加/分离到父级Geodetic Pivot时崩溃的问题。
  • 对于错误使用手动属性的情况,改进了错误报告。
  • 如果节点层包含破碎的“水网格”对象(缺少网格),则不再从世界上删除。现在,它们通常会按其所有层次结构进行加载,只删除了破碎的“水网格”。
  • 修复了图块文件问题,该问题导致在缺少高细节LOD数据的区域中,带有插图的TerrainGlobal对象的高度图的不正确编辑和损坏。
  • 使用Impostors Creator改进了MeshClutter对象与为其生成的冒名顶替者的对齐方式,有时会导致某些混乱元素缺少冒名顶替者。
  • 修复了与动态环境探测器使用的大型纹理的内存分配有关的崩溃。
  • 修复了将新的未命名曲面添加到对象(或将网格划分到网格群集)导致为它们取消设置“启用”标志的问题。
  • 修复了替换为ObjectMeshSkinned的网格时崩溃的问题,该网格将子WorldWorldformformBone节点分配给了特定的骨骼,而网格中的骨骼数量较少。
  • 当“ upU向量与方向向量共线,导致着色器缓存生成崩溃时”的情况,Node :: setDirection()方法的固定行为。
  • 修复了MeshDynamic :: addTriangleFan()中的整数溢出。
  • 修复了“水网格”对象中与网格相关的错误操作。
  • 修复了插件的执行顺序,从而消除了在某些情况下发生的双重初始化问题。
  • AppEasyBlend插件现在支持可扩展SDK 2.96。
  • 固定生成XML警告。如果控制台中有许多错误,请注意,大多数错误可能会表明先前的内容迁移期间发生的错误。如果出现此类错误,应手动修复。
  • 现在默认情况下在C ++组件系统中禁用了Microprofile。
  • 仅在调用所有初始化方法之后,才调用C ++组件的shutdown()方法。
  • 即使引擎已安装在系统(system32)中,引擎也会始终从bin目录中加载正确的openal.dll库。
  • 用于多普勒频移计算的固定速度校正因子。
  • 现在,所有打开的套接字在删除之前都会自动关闭,从而消除了关闭时相关的引擎崩溃。

UnigineEditor

在以前的版本中,我们付出了很多努力来使UnigineEditor成为完整的独立应用程序,丰富其功能并提高其稳定性和性能。这次,我们专注于为您提供扩展功能。

插件和公共API(实验性)

此功能是实验性功能,不建议用于生产环境,因为在将来的版本中API可能会发生重大变化。但是,您的反馈对于推动该功能的进一步开发非常有价值。

引入了期待已久的UnigineEditor插件系统和公共API,使用户能够创建自己的插件来定制编辑器以满足其项目特定的需求,例如,添加新菜单,窗口,工具栏命令,子模式,定义属性的方式显示等

插件是代码和数据的集合,开发人员可以根据项目在UnigineEditor中轻松启用或禁用这些代码和数据。每个插件都被编译到一个单独提供的动态库中,UnigineEditor会在运行时检测并加载它。插件可以具有各种版本,并且可以依赖于其他插件,因此插件系统实现了依赖项解析机制。

您可以通过帮助->插件在UnigineEditor中查看所有当前加载的插件的列表。

如果在加载插件时发生错误,则应在描述窗口中显示一条详细消息。

UnigineEditor是一个完全用C ++编写的应用程序,它非常依赖Qt5框架基础结构。因此,为了扩展其功能,不仅需要C ++编程技能,而且您还应该熟悉Qt5框架和CMake构建系统。

有关扩展编辑器功能的更多信息,请参考以下文章:

  • 扩展编辑器功能。
  • 创建您的第一个编辑器插件。
  • 编辑器API参考。

项目建设

我们添加了一个新工具来处理项目的最终构建程序集。因此,您现在可以通过File-> Create Build在UnigineEditor中为您的项目创建最终版本。

请注意,类似的功能(Assemble Project)已从SDK浏览器中删除。

还有一个用于构建的新项目启动器(您可以根据需要修改UI):

新的构建系统具有以下优点:

  • 直接在编辑器中构建项目,可以在一处微调所有设置。
  • 最大程度简化了基于C#组件系统的项目构建过程。
  • 基于GUI的启动器现在可与横幅图像和默认设置一起使用。可以在视觉上对其进行定制以满足您的需求。
  • 可以设置要在启动时加载的默认世界。
  • 默认情况下,来自安装点和数据文件夹的文件将复制到输出文件夹。可以手动指定要复制的其他必要数据的列表。

有关更多信息,请参阅“构建项目”文章。

纹理轮廓仪

纹理是最常用的资产,并且可能是最消耗内存的资产。适当的优化可以确保更快的流传输,减少视频内存消耗以及加载时产生的峰值。

引入新的Texture Profiler,为您提供有关项目中所有纹理的详细信息,以清楚地了解可以优化或删除其中的哪个纹理。您可以按大小或分辨率对纹理进行排序,以快速找到对内存消耗有重大影响的纹理,并花费大量时间进行加载。您也可以专注于仅检查当前显示在视口中的纹理!

如果项目中使用了大量纹理,强烈建议您使用此工具来确保所有纹理均已正确配置和使用。此工具可节省美术人员大量时间和精力进行优化,有关更多信息,请参阅Texture Profiler文章。

资产依赖跟踪

有时很难找到确切使用某项资产的位置。想象一下,在资源浏览器中,您发现一个具有奇怪位置的纹理。您想知道使用哪种材料才能将纹理移动到项目中更合适的位置。或者,也许根本不使用此纹理,因此您可以删除它并节省一些磁盘空间。因此,我们为您提供了一个新工具,因此您可以检查任何资产,无论它是材质,纹理,FBX,网格,属性还是其他任何东西。

您可以通过在资产浏览器的快捷菜单中选择“使用此资产显示资产”或“使用资产显示”来检查资产是用作更复杂资产的一部分还是由一组资产本身组成。

其他编辑器改进

  • UnigineEditor不再自动监视通过绝对路径引用的数据文件夹外部资源的修改,因此建议使用安装点。
  • 在选择分配了许多复杂结构属性的节点时,改进了“参数”窗口的UI生成,从而提高了4倍,并最大程度地减少了显示参数时出现的滞后。
  • 更改了相对于GeodeticPivot弯曲节点的方式:单击“使曲线弯曲”可创建初始节点的弯曲克隆,而只是禁用了后者(使用非弯曲网格),因此在需要返回到上一个节点时可以使用它(未弯曲)状态,不需要时取下“平整”按钮。
  • 改进了生成的Vector和Point对象与Global Terrain曲面的对齐方式。现在,对齐不准确的唯一原因是使用低分辨率的高度图。
  • 源节点参数(最小/最大淡入淡出和可见距离)现在已正确传输到生成的Cluster对象,从而确保了适当的LOD管理。
  • 修复了在资产浏览器中删除C#组件时删除关联的属性文件的问题。
  • 修复了用于更改分配给节点的属性的撤消操作。
  • 修复了分配通过“选择资产”窗口的“创建”菜单创建的属性时发生崩溃的问题。
  • 通过从资产浏览器中拖动属性资产,将属性资产固定分配给属性字段。
  • 修复了显示用于基于C#组件启动项目的Play预设的其他命令行参数的问题。
  • 现在可以正确保存“场高”的混合模式更改。
  • 修复了更改单个Worldluster对象的Generator设置会影响场景中其他Worldluster对象时的问题。
  • 修复了当其中一个轴的尺寸接近0时,“编辑尺寸”操纵器不可用的问题。当摄像机位于体素探针的体积内时,该操纵器现在也可以正常工作。
  • 修复了比例尺操纵器控制框显示不正确的问题。
  • 现在,在调整大小并重新打开它们之后,可以正确重置工具窗口的大小(“设置”,“世界层次”,“材料层次”等)。
  • 修复了其他场景视口中第一个关闭或隐藏时控件无响应的问题。
  • 在“设置”窗口中将各种类型的预设重命名为模糊的“保存”按钮,以明确指示相应的类型。
  • 修复了导入启用了“按材质合并曲面”选项的模型后,第二个UV通道信息丢失的问题。
  • 改进了对具有16K +分辨率的纹理资产的处理,现在可以按原样正确导入它们,而无需转换为DDS(DDS不支持16K +分辨率)。
  • 修复了重新导入时RGB8,RGBA8,RG16,RGB16和RGBA16图像的G通道反转的问题。
  • 重新加载世界后,作为子级添加到大地测量轴的MeshStatic对象的位置正确。
  • 修复了在编辑器外部热重新加载对* .prop文件所做的修改的问题。
  • 修复了烘烤网状杂物的Impostors崩溃的问题。
  • 修复了通过在资源浏览器中双击自动打开景观文件的问题。
  • 在“资产浏览器”中显示资产命令将自动将焦点设置到资产浏览器。
  • 修复了包含NodeDummy节点的层次结构的中心枢轴点计算。
  • 现在将高度图归一化保存到景观资产。
  • Video Grabber现在考虑了存储在* .track文件中的node.enabled值。
  • 修复了“跟踪器”工具中按钮的行为。
  • 删除了重新生成的静态光源阴影的问题,其中在节点引用中存储了禁用的阴影。
  • 修复了尝试将通过同一静态网格物体在安装点内部创建的多个节点引用之一放置时崩溃的问题。
  • 修复了为环境探针启用“编辑大小”操纵器以创建新世界时发生的崩溃。
  • 修复了当世界包含NodeReference时在Tracker工具中添加新的节点参数的问题。

IG更新

IG(图像生成器)应用程序模板是我们用于专业分布式仿真系统的即插即用组件,具有大量更新。

自适应质量管理

仿真通常使用大量由复杂的层次结构表示的各种实体进行操作。要保持较高的性能,需要进行适当的优化,因为转换和渲染几乎不可见的实体的整个层次结构会浪费大量计算资源。新的Simplifier组件可以帮助优化实体的呈现。通过将此组件分配给实体,您可以定义从某个距离级别开始可以忽略其模型的哪些部分(例如,1 km处的皮瓣,副翼和方向舵,5 km处的引擎等)以及哪些替代项可以用于表示远距离的实体(例如,当平面只是屏幕上的一个点时,频闪灯闪烁)。

除了简化模型之外,还引入了实验性自适应质量系统,该系统根据当前性能自动提供详细级别的实时调整(当前仅可使用降级模式)。该系统与上述实体模型简化机制一起工作,并随着性能降低而自动删除细节。

统一IG配置

大部分IG配置设置存储在ig_config.xml文件中,而其中一些则分散在属性文件中。我们将所有这些文件集中在一起(ig_config.xml文件),并添加了一个新的IGConfig类,以使您可以通过API管理IG配置。

集成同步

IG与Syncker交互的原理已经改变。 IG现在拥有自己的同步系统,并且Syncker插件会自动初始化-无需IP地址或端口号!只需使用以下命令行选项:

  • 主机(ig_count-IG主机总数,包括主机):-ig_master 1 -ig_count 2
  • 从站:-ig_master 0

默认情况下,IG使用UDP端口25000,但是您可以在需要时(例如,如果此端口被另一个系统阻止或使用)更改它,方法是指定ig_port键。如果需要,您还可以使用ig_address键为从站设置特定主站的ip地址。当不需要Syncker时,只需跳过-ig_master键,或指定-ig_master -1。

完整的更新集包括以下内容:

  • 现在可以使用IGManager类发送用户消息:
  • 无效sendUserMessage(const Unigine :: BlobPtr&send_message)
  • setOnUserMessageReceivedCallback(Unigine :: CallbackBase *回调);
  • 现在,您可以通过getEntities(Unigine :: Vector <IEntity *>&Entitys_ret)方法获取所有现有实体的列表。
  • 为DISConnector添加了新的on_connect和on_disconnect回调(请参见setConnectionThreadCallbacks()方法)。在建立用于访问和修改的连接(KDIS :: NETWORK :: Connection)时会触发这些回调。
  • 可以通过API更改用于发送UDP消息的广播地址和端口,而无需重新启动Syncker,只需使用Master :: setBroadcast(const char * address,int port)方法设置新参数即可。
  • 修复了加载Syncker插件时,与其余附加的小部件相关联的应用程序关闭过程中发生的崩溃。
  • 修复了Syncker在重新加载和关闭世界时崩溃的问题。
  • 改进日志记录,提供更多信息。
  • 现在,可通过WeatherControl数据包的Coverage参数控制CIGI中的降水强度。
  • 现在可以通过ID而不是索引来引用天气区域。
  • 修复了许多与风向有关的问题。

样品和演示

炼油厂演示现在还在炼油厂区域中使用了具有高分辨率插图的新型“景观地形”,这也演示了地形表面的平坦化。景观地形蒙版用于定义草皮甚至沥青的区域,现在已将其实现为高质量的地形细节。

石油平台和士兵演示也移植到了新的景观地形。

Samples演示包已重命名为Art Samples,并添加并更新了以下内容:

  • 一组景观样本展示了新的景观地形的功能:

-使用景观图层贴图和混合模式的高分辨率地形插图。

-使用景观地形细节的蒙版:使用各种对比度值按高度图进行融合,以在细节,附加蒙版和三面贴图之间进行过渡

-使用基于贴花的孔创建一条贯穿景观的隧道。

  • 在以下示例中,Object Terrain Global被新的Landscape Terrain代替:Shoreline,Clutter Terrain,Grass Terrain,Impostors和Forest。

C ++示例

为了通过C ++ API展示引擎功能在各种用例中的使用,我们向SDK添加了一个新的演示(SDK浏览器->示例->演示-> C ++示例)。我们计划在每个发行版中使用适合您的新简单示例来更新此演示包。同时,2.10带给您以下内容:

  • 车辆样本展示了新的高级汽车物理系统。
  • 一组“地形地形”样本演示了如何通过API进行运行时修改以及获取特定点的地形信息(高度,反照率,遮罩)。

SDK浏览器

现在,SDK浏览器将为所有新用户首次登录时自动下载最新的可用SDK版本。请注意,只有安装了至少一个SDK后,“我的项目”选项卡才可用。因此,如果选项卡处于非活动状态并且您无法创建项目,请切换到“ SDK”选项卡,并确保已安装的SDK列表不为空。

文献资料

始终专注于客户的需求,我们希望我们的文档有用。因此,除了一系列提高生活质量的功能外,我们还增加了一个新的反馈渠道-现在您可以为文章评分,向我们发送错误报告以及您对任何页面中不正确或缺失信息的要求。

  • 更新了IG文档。
  • 添加了新的扩展编辑器功能部分。
  • 添加了新的Editor API Reference部分。 IDE中也提供了相关的就地文档。
  • 在新的“地形地形”上添加了一组文章。
  • 添加了有关Unigine语言对象表示法的新文章。
  • 《 API迁移指南》中提供了API更改的完整列表。
  • 《控制台迁移指南》中提供了控制台命令更改的完整列表。

粒子系统改进方面的进展(预览,不在2.10中)

底纹(WIP)

我们目前正在努力改善粒子的阴影效果:更逼真的半透明效果,能够设置半透明半径以模仿不同的烟雾密度,由粒子投射的半透明阴影以及法线贴图,以提供更多的体积并添加细节。它们一起使粒子照明更加生动,并与场景一致,使您能够创建令人信服的立体效果。

模拟(WIP)

设置在粒子生命周期内保持恒定的粒子系统参数值是没有意思的。对于许多这些参数,您将能够使用“曲线编辑器”来定义它们应如何随时间变化。这将使您在设置每个粒子生命周期的行为时具有很大的灵活性。

还有许多其他很酷的功能几乎准备在2020年初发布,敬请期待!

注意:UNIGINE 2.10 SDK需要SDK浏览器1.9.20或更高版本。

来源:unigine

PHP Code Snippets Powered By : XYZScripts.com