<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>SN-Engine, Geometric Modelling Environment for Virtual World Design and Perception</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Plekhanov Russian University of Economics</institution>
          ,
          <addr-line>36 Stremyanny lane, Moscow, 115998</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2037</year>
      </pub-date>
      <fpage>0000</fpage>
      <lpage>0002</lpage>
      <abstract>
        <p>We present a new scale-free geometric modelling environment designed by the author of the paper. It allows one to consistently treat geometric objects of arbitrary size and offers extensive analytic and computational support for visualization of both real and artificial sceneries.</p>
      </abstract>
      <kwd-group>
        <kwd>Geometric modelling</kwd>
        <kwd>Virtual reality</kwd>
        <kwd>Game engine</kwd>
        <kwd>3d visualization</kwd>
        <kwd>Procedural generation</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        Geometric modelling of real-world and imaginary objects is an important task that
is ubiquitous in modern computer science. Today, geometric modelling environments
(GME) are widely used in cartography [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], architecture [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ], geology [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ],
hydrology [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ], and astronomy [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ]. Apart from being used for modelling, importing and
storing real-world data, GMEs are crucially important in computer games industry
[
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
      </p>
      <p>
        Creating a detailed model of a real-world or imaginary environment is a task of
great computational complexity. Modelling various physical phenomena like gravity,
atmospheric light scattering, terrain weathering, and erosion processes requires full
use of modern computer algebra algorithms as well as their efficient implementation.
Finding exact and numeric solutions to differential, difference, and algebraic
equations by means of computer algebra methods (see [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] and the references therein) is at
the core of the crucial algorithms of modern geometric modelling environments.
      </p>
      <p>There exist a wide variety of geometric modelling environments, both universal
and highly specialized. They include three-dimensional planetariums like
SpaceEngine or Celestia, virtual Earth engine Outerra, procedural scenery generator
Terragen, 3D computer graphics editors Autodesk 3ds Max, Blender, Houdini, and
3D game engines like Unreal Engine 4, CryEngine 3, and Unity.</p>
      <p>The present paper describes a new geometric modelling environment, SN-Engine,
designed and implemented by the author of the paper. The main advantage of this
GME is its capacity to consistently and in a computationally efficient way treat
geometric objects of arbitrary size, from extragalactic and down to the microscopic scale.</p>
      <p>This geometric modelling environment is a freeware implemented in C#
programming language. Scripts, sample video files and high resolution images created with
SN-Engine are publicly available at snengine.tumblr.com.
2</p>
    </sec>
    <sec id="sec-2">
      <title>State-of-the-art in geometric modelling: capabilities and limitations</title>
      <p>The geometric modelling environment presented in the paper shares many properties
and functions with other GMEs. These include procedural generation, instruments and
algorithms of 3D rendering, internal elements of system architecture, file and
inmemory data formats, etc. In the Tables 1, 2, 3 we compare SN-Engine with other
existing systems.</p>
      <p>Despite the extensive capabilities of modern geometric modelling systems all of
them have limitations in terms of world structure, engine modification, userworld
interaction, and licensing. The presented modelling system SN-Engine is a freeware
which, unlike any other software listed above, is endowed with tools for procedural
generation of objects of arbitrary scale.
SN-Engine
no public release
yet
3D computer graphics,
mixed
3D computer graphics,
mixed
computer-aided design
and drafting
3D animation, mixed
urban environments
generation
procedural landscape
generation and
visualization
scripted
scripted
partial, scripted
integrated, scripted
integrated
integrated
procedural world creation</p>
      <p>integrated, scripted</p>
      <p>The presented geometric modelling system unifies procedural approach to content
generation and game engine technologies to create a fully flexible multiclient,
arbitrary scale world creation and experience platform. The system can be used for
solving various tasks like demonstration, design, recreation, and education. Its functions
include generation of new content, transformation of existing content, and
visualization. By organizational structure the presented geometric modelling system can be
used in autonomous, local-networked or global-networked mode.</p>
      <p>
        The engine provides flexibility in terms of world and entity modification, creation
and generation. The list of main features is as follows:
– Support of arbitrary scale worlds, from super galactic to microscopic level;
– Client-server world and logic synchronization;
– Scriptable game logic;
– Procedural generation [
        <xref ref-type="bibr" rid="ref17 ref18 ref21 ref25">17, 18, 21, 25</xref>
        ] of any world content ranging from textures
and models, to full world generation;
      </p>
      <p>
        – External data import: e.g. height maps [
        <xref ref-type="bibr" rid="ref2 ref23">2, 23</xref>
        ], OpenStreetMap [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] data, textures,
models, etc.;
– Integrated computational physics module;
– World state system for saving world data including any runtime changes;
– Script system controlling every world related function of the engine;
– Fully extendable and modifiable library of objects including galaxies, planets,
lights, static and dynamic objects, items and, others;
– Support of player controlled or computer controlled characters
      </p>
      <p>The base engine realization contains a procedurally generated universe with
standard node hierarchy (Fig. 1) ranging from galaxies to planet surfaces and their objects.
Hierarchy is displayed in columns from left to right and from top to bottom: galaxies
(a), spiral galaxy stars and dust (b), a star system, planets and their orbits (enabled for
clarity) (c), an earth-like planet (d), planet surface seen from a low orbit (e), planet
surface from ground level (f). In addition, other nodal hierarchies can be created with
custom nodes by means of procedural generation algorithms.</p>
      <p>A planet has a touchable surface endowed with physical properties which satisfy
the laws of the physics of solids. Players can walk on a planet’s surface and interact
with other objects.</p>
      <p>(a) A spiral supergalactic system
(b) A single galactic
(c) A planetary system
(d) An earth-like planet from the orbit
(e) A planet seen from the stratosphere (f) The terrain of a planet</p>
      <p>Fig. 1. The default world hierarchy in SN-Engine environment</p>
    </sec>
    <sec id="sec-3">
      <title>Implementation of the geometric modelling engine</title>
      <p>
        The engine is implemented in C# on .NET Framework and uses Lua [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] as the main
scripting language. The engine consists of core systems and modules.
The core systems are as follows:
– Task system managing task creation, processing, linking and balance;
– IO system or virtual file system, providing synchronous and asynchronous asset
loading, reloading, and dependency management;
      </p>
      <p>– Object system or global object management system, base for Assets, Nodes,
Components, Events, and others;
– Event system that manages subscription and invocation of functions;
– Physics system handles physical interactions of nodes with instances of physics
entities;
– Sound system supports playback of sound effects and ambience in 3D space;
– Horizon system providing frame of reference update and loading of nodes;
– Input system or user input engine interface;
– Net system that enables client-server event relay;
– Rendering system which does visualization of nodes with attached cDrawable
component;</p>
      <p>– Scripting system providing safe and real-time game logic programming in Lua.
The list of modules comprises the following:
– Profile which stores user data, settings, saves, etc.;
– Add-on or user data package manager;
– GUI that renders user interface objects and their rendering;
– ModelBuilder providing classes and functions for dynamic model construction;
– ProcGen or operation based procedural generation system;
– sGenerator or script based procedural generation system;
– Flow, the node based visual programming language;
– Forms, the dynamic index database of user defined data assets;
– VR, the virtual reality Oculus HMD interface;
– Web module that provides Awesomium browser interface, rendering to texture
and control functions.</p>
      <p>
        Data modules include primary asset modules which contain methods for asset
manipulation in JSON format [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], Material, StaticModel, Particles, Sprite font,
SurfaceDataStorage, Package, Texture, Sound, and secondary format modules that are
used in data import stage: SMD, FBX, BSP, OSM, MCV
3.1
      </p>
      <sec id="sec-3-1">
        <title>Hierarchical Nodal System of the Geometric Modelling Engine</title>
        <p>The core component of the engine world structure is a node. Every node follows the
set of rules:
– A node can have space bounds with box, sphere or compound shape;
– A node can contain any finite number of other nodes and one parent node,
forming a tree graph structure;</p>
        <p>– A node has absolute size variable measured in meters per node unit, so in case of
node with spherical bounds its radius is equal to the absolute size of the node;
– A node has position, rotation and scale variables which define its location and
scale in its parent node;
– A node has seed variable used for procedural generation;
– Nodes can have components, custom variables and event listeners;
– A node without parent node is the world node.</p>
        <p>A possible node type hierarchy of a client camera flying two meters above the
planet surface is as follows: 0) world sol; 1) spacecluster; 2) galaxy; 3) starsystem; 4)
star; 5) planet; 6) planet surface; 7) planet surface node; 8) camera. All types in this
hierarchy, with the exception for the camera type, are defined in script files.</p>
        <p>The location variables and node hierarchy allows one to build relative
transformation matrices and their inverse matrices for each parent node in its hierarchy. This
in turn allows one to obtain relative transformations for any node within the same
world.</p>
        <p>The precision of 32 bit floating point numbers which are widely used in computer
graphics is limited while the corresponding precision distribution is not linear. Any
number with 7 or more significant decimal digits is subject to data loss during
mathematical operations. There are several workaround methods to overcome this
limitation and each method needs to calculate object positions in relation to camera at
runtime. These methods include the following:</p>
        <p>– Storing object positions as 64bit floats, which raises overall precision to 15
decimal digits but still has the same precision distribution limitations;</p>
        <p>– Storing object positions as 32bit or 64bit integers, since integers have linear
precision distribution;</p>
        <p>– Storing object positions in relation to specialized group object. This method is
used in most geometric modelling systems;</p>
        <p>– Storing relative local object positions with respect to their parent object. This
method requires hierarchical organization of objects.</p>
        <p>We use the last method to solve this problem. This is done in three steps. The first
two steps are performed when creating or updating a node while the third is
performed at the rendering stage.</p>
        <p>The first step is to compute the node world matrix, which consists of the node
scale, rotation and position:
that is, W = scale (S) · rotation (R) · translation(P). Here W is the node world matrix,
is the node scaling vector, is the node rotation
quaternion, and is the node position vector. The second step is to
compute hierarchical matrices using world matrices obtained at the previous step and
parent nodes:
Here
– is the identity matrix of size 4;
– i is the node level in parent hierarchy, where 0 = node, 1 = parent, 2 = parent of
parent, ... , n = world node;
– is the i-th level node world transformation matrix;
– is the i-th level parent node absolute node size in meters;
– is the i-th level parent node world matrix.</p>
        <p>Finally, the third step is the local world matrix computation (Fig. 2, where (a) is the
current node, (b) is the target node, (c) is local world matrix and (d) is the closest
common ancestor for the current and the target nodes). This matrix is computed as
follows:
Here LW is the local world matrix of node N at node C, T (the top node) is the nearest
node in hierarchy to both current and target nodes, C is the current node, N is the
target node, level is the node hierarchy level starting from the world node.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>System of the Components</title>
        <p>
          The engine nodes use partial implementation of Entity component system [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] pattern
with the difference that components can have their own methods. The nodes are
entities in this pattern. Components define how a node interacts with other nodes, how it
is rendered and how it functions.
        </p>
        <p>Core engine components (sComponent) include the following: Drawable object
components (cDrawable): cModel for model instances, cParticleSystem for particle
system instances, cSkybox for skybox instances, cSurface for planet surface (terrain
and water) instances, cSpriteText for text sprites in 3D space, cAtmosphere for
atmospheric fog, cVolume for volumetric texture renderer instances.</p>
        <p>Update phase components (cUpdater): cOrbit which sets node position using
orbital parameters and current time, cConstantRotation that sets node rotation from
current time.</p>
        <p>
          Physics components (include interfaces for physics engine [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]): cStaticCollision or
collision mesh with infinite mass, cPhysicsSpace for physical space which contain
physics objects, cPhysicsObject for physics objects with finite mass and volume,
cPhysicsMesh or concave triangulated physics mesh, cPhysicsCompound or
compound physics object, cPhysicsActorHull or physical controller for actors.
        </p>
        <p>
          Content generation components: cRenderer components that perform render to
texture operations, cCamera which renders from camera node, cCubemap that renders
6sided cubemap texture, cHeightmap draws to planetary height map texture, cInterface
renders hierarchy of panel objects to GUI texture, cShadow draws scene to cascading
shadow map [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ] texture, cProcedural or procedural node generation component.
        </p>
        <p>Other component types: cLightSource point light which is used for illumination,
cNavigation which generates and contains navigational map for AI actors, cPartition
is hierarchical space partitioning (part of HorisonSystem), cPartition2D or quad tree
partitioning (4 subspaces on 2 axes), cPartition3D or octree partitioning (8 subspaces
on 3 axes), cSurfaceMod is surface data (height, temperature, etc.) modifier
(cSurface), cWebInterface is web interface data container.</p>
        <sec id="sec-3-2-1">
          <title>Orbital component uses Keplerian orbits to setup its node position. When an orbit is created, we calculate the average orbital speed in terms of of masses and semi-major axis length using the formula</title>
          <p>Here G is the gravitational constant, a is the semi-major axis, is the orbiting
node mass, is the parent node mass. Subsequently in the update event we use
Algorithm 1 to calculate the vector position along the shifted ellipse and then rotates
it around 0 with the argument of periapsis along the Y axis, inclination along the X
axis and ascending longitude along the Y axis.</p>
          <p>Algorithm 1 orbital position update step
function</p>
          <p>return
end function
function GetCorrectedT(</p>
          <p>)
while</p>
          <p>do
end while
return E
end function
Here a is the semi-major axis, b is the semi-minor axis, e is the eccentricity, p is the
argument of periapsis, i is the inclination, l is the ascending longitude, t is time, is
the orbital position. The value = 0.001 in parent node units is used as a precision
limiter.
3.3</p>
        </sec>
      </sec>
      <sec id="sec-3-3">
        <title>The Horizon System</title>
        <p>The horizon system provides dynamic recalculation of coordinate systems, space to
space node transfer and the space partition update. The system checks all nodes with
enabled space transfer flag against the bounds of their parent node and every other
node in it. When a node is outside of its parent bounds or inside of any other node
bounds, the system recalculates its position, rotation, velocity, and angular velocity
and then changes its parent node.</p>
        <p>The partition component generates dynamic tree structure from partition nodes and
calls events to its host node. This allows one to create procedural generators for
threedimensional (Octree) objects like galaxy generation, galactic cluster generation and
two-dimensional (Quad tree) objects like planet surfaces. It can also be used for any
other type of generation with scripting.
3.4</p>
      </sec>
      <sec id="sec-3-4">
        <title>Procedural Generation</title>
        <p>Procedural generation is the crucial part of the engine. It allows real-time content
generation from pre-defined patterns and scripts. There are different methods of
procedural content generation that are implemented in the engine including:
– Node generation with scripted procedural generators in Lua or C# , e.g. cluster
and galaxy generation (C#), star system generation (Lua);</p>
        <p>
          – Model and node generation with operation based generation system, e.g. models
of objects, buildings; generated building interior world nodes and others;
– Texture generation from Lua scripts or JSON files;
– Texture generation from cCamera and cCubemap node components;
– Surface data generation [
          <xref ref-type="bibr" rid="ref16 ref20 ref21 ref22">16, 20, 21, 22</xref>
          ] from cHeightmap node component, noise
functions [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] and JSON parameters.
        </p>
        <p>Operation Based Procedural Generation System.</p>
        <p>This system allows one to define dynamic model structures and to build complex 3D
models with several levels. Models are defined in JSON-like files or Lua structures by
lists of consecutive operations. These operations use named groups of 3D primitives
along with parameters as input data. Fig. 3 illustrates the use of procedural generation
in building interiors.</p>
        <p>The primitive types comprise the following: point as a basic structure which
contains position in the local space, path as a set of points with a loop flag, and surface or
polygon which contains edge (path) and other surface properties such as material and
uv-matrix.</p>
        <p>Fig. 3. Procedurally generated interiors</p>
        <p>The procedural generation system includes a total of 56 different operation types.
The operation types are divided into groups as follows: ”Create” operations which
create sets of primitives from data, ”Extend” operations which create new primitives
from existing, ”Modify” operations that alter existing primitives, ”Select” operations
which filter existing primitives or return their data, and ”Utility” operations which
provide branching in generation algorithm.</p>
        <p>An example of the use of operation is given by { type : ”inset”, from:”bt base”, out
: [”bt base”, ”bt sides”], extrude : 0.4, amount: 0.5 }. It applies ”inset” operation
(insets a polygon edge by the ”amount” value and shifts it by the ”extrude” value) for
each primitive in the group ”bt base”. It outputs the central polygon to the ”bt base”
group and the edge polygons to the ”bt sides” group.
3.5</p>
      </sec>
      <sec id="sec-3-5">
        <title>The Rendering System</title>
        <p>
          Rendering system uses SharpDX [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] library which is an open-source managed .NET
wrapper of the DirectX API. The engine works on DX10 API and DX11 API.
        </p>
        <p>
          The system uses a combination of forward and deferred rendering techniques [
          <xref ref-type="bibr" rid="ref13 ref8">8,
13</xref>
          ] to draw objects and effects. The rendering process is the most difficult one in
terms of computational complexity and consists of several different stages. The
preprocessing stage is when all texture generation is performed. The rendering system
processes the incoming draw requests from cRenderer components and fires their
respective events. Then in the main stage, the system performs successive render calls
to cDrawable components, which are divided by the render groups and layers. Finally,
at the post-processing stage the system combines the results of the previous draw calls
into a single texture and applies screen effects including screen space local reflections
[
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] and screen space ambient occlusion [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ].
        </p>
        <sec id="sec-3-5-1">
          <title>Atmosphere rendering shader. The atmospheric shader is a program for GPU which manages the rendering of a ”fog” layer. This shader is a work in progress. One of the key algorithms implemented in this program is as follows</title>
          <p>Algorithm 2 Atmosphere glow and fog shader
function
// 1. The horizon line and gradient density calculation</p>
          <p>// 2. Atmosphere density from view distance calculation</p>
          <p>// 3. Light colour and sun glare calculation
for do
end for
// 4. Atmosphere parts colour calculation
// 5. Atmosphere parts density calculation
// 6. Final atmosphere colour calculation
return
end function
Here is the atmosphere colour, is the i-th star colour, is the star
colour, is the star direction, M is the node scale, N is the surface normal, is the
ith star direction, is the direction to the planet centre, H is the camera distance
to the planet surface towards the centre of the planet, is the distance to the
horizon, is the distance to the planet centre, is the depth of the current
pixel, is the atmosphere width, n is the star count, is the pixel
colour, lerp(a, b, d) is the linear interpolation of two vectors a and b based on the weight
d.</p>
          <p>The resulting image is blended with the current view. The numerical coefficients in
the above formulas have been selected on the basis of visual perception.</p>
        </sec>
      </sec>
      <sec id="sec-3-6">
        <title>The Scripting System</title>
        <p>
          Script system uses Lua [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] as the scripting language. Scripts in Lua describe most of
game logic. Types of scripts include entity definitions, player controller definitions
(free camera controller, actor controller, etc.), GUI widget definitions, auto run scripts
and Lua modules (definitions for user class types, structure types and libraries),
procedural generator definitions and others. At the time of writing, there were 251 Lua
script files in the base engine content directory with total size of 904 KB.
        </p>
      </sec>
      <sec id="sec-3-7">
        <title>The Networking System</title>
        <p>The engine network system is based on client-server model and uses packets to
transfer data. The packets are being sent and received asynchronously and incoming
packets placed into a queue which is then processed from the main thread in both server
and clients.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Limitations of the presented geometric modelling environment</title>
      <p>There exist certain limitations for each of the main systems of SN-Engine. They are
summarized in the Table 4.</p>
      <p>Hardware requirements: Processor: Dual Core CPU @ 3.0 GHz, Memory: 4GB
RAM, Hard Drive: 2 GB, Graphics: Nvidia GeForce GTX 1070, 2048MB.
Software requirements: OS: Windows 7, 8, 10, .NET Framework 4.0.</p>
      <p>System
Hierarchical
nodal system</p>
      <sec id="sec-4-1">
        <title>Operation</title>
        <p>based
procedural
generation system
Rendering</p>
        <p>system</p>
      </sec>
      <sec id="sec-4-2">
        <title>Task system</title>
      </sec>
      <sec id="sec-4-3">
        <title>Physics system</title>
      </sec>
      <sec id="sec-4-4">
        <title>Networking system</title>
      </sec>
      <sec id="sec-4-5">
        <title>IO System</title>
      </sec>
      <sec id="sec-4-6">
        <title>Lua scripting</title>
        <p>system</p>
        <p>Limitations
maximum node nesting
level
maximum loaded node
count
maximum absolute node
size
maximum simultaneous
nodes in node
polygon count
complex topology
maximum visible
objects
maximum drawable
objects
maximum concurrent
threads
maximum tasks in</p>
        <p>thread queue
maximum concurrent
updatable objects
maximum active objects
in simulation island
maximum static
collision triangles per
physics space
maximum client
connections
maximum active
networked nodes
maximum add-on count
maximum file count
maximum loaded assets
processing speed(from</p>
        <p>C#)
single threaded.</p>
      </sec>
      <sec id="sec-4-7">
        <title>Approximate value 64 tens of thousands thousands</title>
        <p>tens of millions</p>
        <p>N/A
thousands/ millions
instances
tens of thousands</p>
      </sec>
      <sec id="sec-4-8">
        <title>1 main thread, up to 4 background per CPU core thousands</title>
        <p>fast physics: 100
slow-motion
physics: thousands
millions</p>
        <p>tens
hundreds
hundreds
tens of thousands
varies from asset
filesize 10000 −
100
Divided by 10-1000
N/A</p>
      </sec>
      <sec id="sec-4-9">
        <title>Limited by</title>
        <p>memory
memory
double type precision
memory, CPU,
HDD/SSD read speed
CPU, int32 maximum
value
procedural operations
functionality
GPU memory, GPU
processing power</p>
        <p>CPU, memory</p>
      </sec>
      <sec id="sec-4-10">
        <title>CPU, memory</title>
        <p>CPU
CPU</p>
        <p>CPU
memory, CPU
CPU, network
bandwidth, memory
network bandwidth
memory, HDD/SSD
read speed
memory
memory</p>
        <p>CPU
CPU</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Discussion</title>
      <p>The new geometric modelling system SN-Engine combines procedural generation
algorithms, arbitrary scale nodal system, and extensive Lua scripting system to
construct and visualize complex sceneries.</p>
      <p>High resolution screenshots and video are available on the system website at
http://snengine.tumblr.com/</p>
    </sec>
    <sec id="sec-6">
      <title>Acknowledgements</title>
      <p>This research was performed in the framework of the state task in the field of
scientific activity of the Ministry of Science and Higher Education of the Russian
Federation, project ”Development of the methodology and a software platform for the
construction of digital twins, intellectual analysis and forecast of complex economic
systems”, grant no. FSSW-2020-0008.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. Bepuphysics: free, open source,
          <source>3d physics library</source>
          . https://www.bepuphysics.com
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <article-title>Earth digital elevation map: earth heightmap data source</article-title>
          . http://viewfinderpano ramas. org
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. Ecma-
          <article-title>404 json data interchange format, ecma int'l</article-title>
          . http://www.ecmainternational. org/publications/files/ECMA-ST/ECMA-404.pdf
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Lua</surname>
          </string-name>
          <article-title>: lightweight, multi-paradigm programming language</article-title>
          . https://www.lua.org
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Openstreetmap</surname>
          </string-name>
          <article-title>: vector geographic data source</article-title>
          . https://www.openstreetmap.org
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <article-title>Screeen-space reflections</article-title>
          . http://www.cse.chalmers.se/edu/course/TDA361/Adv anced%20Computer%20Graphics/Screen-space%20reflections.pdf
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Sharpdx</surname>
          </string-name>
          :
          <article-title>An open-source managed .net wrapper of the directx api</article-title>
          . http://sharpdx.org/
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Abbey</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <string-name>
            <surname>Real-Time</surname>
            <given-names>Rendering</given-names>
          </string-name>
          , 4th edn. New York: A K Peters/CRC Press (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Bennett</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Frequency spectra filtering for perlin noise</article-title>
          . The Computer Games Journal pp.
          <fpage>1</fpage>
          -
          <lpage>12</lpage>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Bilas</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>A data-driven game object system</article-title>
          . https://www.bepuphysics.com
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Borrmann</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kolbe</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Donaubauer</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Steuer</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jubierre</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Flurl</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>Multi-scale geometric-semantic modelling of shield tunnels for gis and bim applications</article-title>
          .
          <source>ComputerAided Civil and Infrastructure Engineering</source>
          <volume>30</volume>
          (
          <issue>4</issue>
          ),
          <fpage>263</fpage>
          -
          <lpage>281</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Caumon</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Collon</surname>
          </string-name>
          , P.,
          <string-name>
            <surname>de Veslud</surname>
            , L.
            <given-names>C.</given-names>
            , C.
          </string-name>
          <string-name>
            <surname>Viseur</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sausse</surname>
          </string-name>
          , J.:
          <article-title>Surfacebased 3d modeling of geological structures</article-title>
          .
          <source>Mathematical geosciences</source>
          <volume>41</volume>
          (
          <issue>8</issue>
          ),
          <fpage>927</fpage>
          -
          <lpage>945</lpage>
          (
          <year>2009</year>
          ).
          <source>DOI 10.1007/s11004-009-9244-2</source>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Debevec</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Rendering synthetic objects into real scenes: Bridging traditional and image based graphics with global illumination and high dynamic range photography</article-title>
          .
          <source>In: Proceedings of the 25th Annual Conference on Computer Graphics and Interactive Techniques, SIGGRAPH '98</source>
          , p.
          <fpage>189</fpage>
          -
          <lpage>198</lpage>
          . Association for Computing Machinery, New York, NY, USA (
          <year>1998</year>
          ).
          <source>DOI 10</source>
          .1145/280814.280864. URL https://doi.org/10.1145/280814.280864
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Dickenstein</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sadykov</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Bases in the solution space of the mellin system</article-title>
          .
          <source>Sbornik Mathematics</source>
          <volume>198</volume>
          (
          <issue>9</issue>
          ),
          <fpage>1277</fpage>
          -
          <lpage>1298</lpage>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Dimitrov</surname>
          </string-name>
          , R.:
          <article-title>Cascaded shadow maps</article-title>
          . http://developer.download.nvidia.com/SDK/10. 5/opengl/src/cascaded_shadow_maps/doc/cascaded_shadow_maps.pdf
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Gagnon</surname>
            ,
            <given-names>J.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lovejoy</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schertzer</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Multifractal earth topography</article-title>
          .
          <source>Nonlinear Processes in Geophysics</source>
          <volume>13</volume>
          (
          <issue>5</issue>
          ),
          <fpage>541</fpage>
          -
          <lpage>570</lpage>
          (
          <year>2006</year>
          ).
          <source>DOI 10</source>
          .5194/npg-13-
          <fpage>541</fpage>
          -
          <lpage>2006</lpage>
          . URL https://npg.copernicus.org/articles/13/541/2006/
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Kruse</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sosa</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Connor</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Procedural urban environments for fps games</article-title>
          .
          <source>In: Proceedings of the Australasian computer science week multiconference. Australia: ACM</source>
          ,
          <string-name>
            <surname>Canberra</surname>
          </string-name>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Mark</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Berechet</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Procedural 3d cave generation</article-title>
          .
          <source>Master's thesis</source>
          , IT University of Copenhagen (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Martin</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Finding Next Gen - CryEngine 2</article-title>
          .
          <string-name>
            <surname>Crytek</surname>
            <given-names>GmbH</given-names>
          </string-name>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Musgrave</surname>
            ,
            <given-names>F.K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kolb</surname>
            ,
            <given-names>C.E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mace</surname>
            ,
            <given-names>R.S.:</given-names>
          </string-name>
          <article-title>The synthesis and rendering of eroded fractal terrains</article-title>
          .
          <source>Computer Graphics</source>
          <volume>23</volume>
          (
          <issue>3</issue>
          ),
          <fpage>41</fpage>
          -
          <lpage>50</lpage>
          (
          <year>1989</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Olsen</surname>
          </string-name>
          , J.:
          <article-title>Realtime procedural terrain generation</article-title>
          .
          <source>Tech. rep.</source>
          , University of Southern Denmark (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22. van Lawick van Pabst,
          <string-name>
            <surname>Jense</surname>
          </string-name>
          , H.:
          <article-title>Dynamic terrain generation based on multifractal techniques</article-title>
          . In: T.P.
          <string-name>
            <surname>Chen</surname>
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>J.A.</surname>
          </string-name>
          <article-title>Vince (eds.) High Performance Computing for Computer Graphics</article-title>
          and Visualisation, pp.
          <fpage>186</fpage>
          -
          <lpage>203</lpage>
          . Springer London, London (
          <year>1996</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Parberry</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>Designer worlds: Procedural generation of infinite terrain from real-world elevation data</article-title>
          .
          <source>Journal of Computer Graphics Techniques</source>
          <volume>3</volume>
          (
          <issue>1</issue>
          ),
          <fpage>74</fpage>
          -
          <lpage>85</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Sanzana</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gironas</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Braud</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Branger</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>A gis-based urban and periurban landscape representation toolbox for hydrological distributed modelling</article-title>
          .
          <source>Modelling &amp; Software</source>
          <volume>91</volume>
          ,
          <fpage>168</fpage>
          -
          <lpage>185</lpage>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25.
          <string-name>
            <surname>Smelik</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tutenel</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>De Kraker</surname>
            ,
            <given-names>K.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bidarra</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          :
          <article-title>Integrating procedural generation and manual editing of virtual worlds</article-title>
          .
          <source>In: Proceedings of the 2010 workshop on procedural content generation in games. ACM</source>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26.
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Qin</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          :
          <article-title>Application of the virtual landscape architecture geometric</article-title>
          modeling pp.
          <fpage>2803</fpage>
          -
          <lpage>2805</lpage>
          (
          <year>2010</year>
          ).
          <source>DOI 10</source>
          .1109/BMEI.
          <year>2010</year>
          .5640566
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          27.
          <string-name>
            <surname>Zakhozhay</surname>
            ,
            <given-names>O.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>del Burgo</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zakhozhay</surname>
            ,
            <given-names>V.A.</given-names>
          </string-name>
          :
          <article-title>Geometry of highly inclined protoplanetary disks</article-title>
          .
          <source>Advances in Astronomy and Space Physics</source>
          <volume>5</volume>
          (
          <issue>1</issue>
          ),
          <fpage>33</fpage>
          -
          <lpage>38</lpage>
          (
          <year>2015</year>
          ).
          <source>DOI 10</source>
          .17721/
          <fpage>2227</fpage>
          -
          <lpage>1481</lpage>
          .5.
          <fpage>33</fpage>
          -
          <lpage>38</lpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>