pseudorandom – the megastructure development blog http://blog.megastructure.org tracking construction of megaprojects Sun, 23 Dec 2018 15:54:33 +0000 en-US hourly 1 https://wordpress.org/?v=5.0.2 Disjoint sets and connectivity (version 1.83) http://blog.megastructure.org/2009/09/disjoint-sets-and-connectivity-version-1-83/ Tue, 01 Sep 2009 19:47:35 +0000 http://blog.megastructure.org/?p=85 This version of the NoiseViewer provides a new layer type: ConnectingBoxes. Connecting boxes build a rudimentary network of paths throughout the visible render window. It does this by taking advantage of a data structure called Disjoint Sets, using the Union and Find algorithms. Cells try to be connected as much as they can, and paths tend to form only when needed. This behavior will surely change in future versions, but it is a nice start.

The XML format has been broken again (that is, will not read XML files generated by older versions), and will probably be broken again soon.

disjoint-connectivity

Note the “Reload defaults” button – it loads the screen you see here.

The new version is available on the download page, in Windows and OS X binaries, and source code distribution.

]]>
NoiseViewer, version 1.75 http://blog.megastructure.org/2009/08/noiseviewer-version-1-75/ Wed, 19 Aug 2009 06:37:19 +0000 http://blog.megastructure.org/?p=45 Overview of version 1.75

Certain breakthroughs have led us to a plethora of new and amazing noise! We have made the leap from continuous noise to discrete noise patterns, which will help us later.

Here is a nice island, which is trivial to make in the latest version:

nice islands

(XML)

And here are some shots of discrete noise:

Squareland

Squareland2

(XML)

Discrete layers (like the squares and circles) are exciting because they represent actual structural entities in the future Megastructure simulation.

And if that wasn’t enough for this version, Wolfgang fixed XML input and output on OS X, as well as a number of annoying visual bugs! Due to a “CTRL” button issue on mac, we also added right-click as an alternative way to zoom in and out of the image.

Features on the way

The upcoming immediate goals are:

  • Easy image output
  • More layer types
  • Beginning 3D layers built on top of discrete layer types

Standard boilerplate

From what I understand of the licenses, I am allowed to use these libraries. Please understand that the code and programs linked to below are provided “as-is”. Also note that running any program found on the internet carries risk, and the responsible user always scans for viruses, etc.

Click and drag to pan the current layer. Right-click-drag or CTRL+click-and-drag adjusts the zoom level. Shift+click-and-drag adjusts the current layer’s selected parameter.

Compiled executable (Windows, ~379KB): NoiseViewer_v1.75.zip

Source code, libraries and projects (Visual Studio 2008/OS X, ~4,277KB): NoiseViewerSource1.75.zip

Feedback would be greatly appreciated!!

]]>
Circles and Squares http://blog.megastructure.org/2009/08/circles-and-squares/ Fri, 14 Aug 2009 12:59:13 +0000 http://blog.megastructure.org/?p=32 Overview of version 1.6

Hello, and welcome to version 1.6 of the famous NoiseViewer. This “release” has a number of new and amazing surprises. For instance: thanks to the TinyXML library, now you can save and load your creative patterns to an XML file (not yet supported on OS X).

Also, new layer types are starting to emerge. Not only can you mix layers of noise, but now infinite planes of circles and squares have stepped into the ring!

Here are some trippy circles, made by using noise as the input for the radii of the circles:

trippy circlesThis will probably change in the near future (ie. it will break). But I like how it pans. You can view this yourself by importing the XML that describes it:

<?xml version="1.0" ?>
<NoiseViewer>
<Layers>
<Layer TypeID="2" x="5.288616" y="-5.674968" zoomx="21.007694" zoomy="21.007694">
<Variables>
<Variable name="Radius" MaxValue="10.000000" MinValue="0.001000" OverrideValue="2.000000">
<Layer TypeID="0" x="0.507875" y="-1.262280" zoomx="3.183013" zoomy="3.183013">
<Variables>
<Variable name="Cutoff" MaxValue="1.000000" MinValue="-1.000000" OverrideValue="0.500000" />
</Variables>
</Layer>
</Variable>
<Variable name="Spacing" MaxValue="10.000000" MinValue="0.001000" OverrideValue="2.000000" />
</Variables>
</Layer>
</Layers>
</NoiseViewer>

Or, you can download the XML here: Trippy circles.xml

Features on the way

The upcoming immediate goals are:

  • More layer types
  • More flexibility in layers
  • More general layer options

Standard boilerplate

From what I understand of the licenses, I am allowed to use these libraries. Please understand that the code and programs linked to below are provided “as-is”. Also note that running any program found on the internet carries risk, and the responsible user always scans for viruses, etc.

Click and drag to pan around the noise. CTRL+click-and-drag up and down adjusts the zoom level. Shift+click-and-drag adjusts the noise cutoff point.

Compiled executable (Windows, ~379KB): NoiseViewer_v1.6.zip

Source code, libraries and projects (Visual Studio 2008/OS X, ~4,376KB): NoiseViewerSource1.6.zip

Feedback would be greatly appreciated!!

]]>
NoiseViewer v1.1 – now with GLUI http://blog.megastructure.org/2009/07/noiseviewer-v1-1-now-with-glui/ Sat, 18 Jul 2009 22:11:42 +0000 http://blog.megastructure.org/?p=19 A whole lot of changes have gone into the new version of the NoiseViewer. It is by no means a truly usable piece of software, but because of the numerous changes made (and to be made), this snapshot is being made public.

The GLUI library has been added, in order to give more interface options. Hope remains that the finished product will be cross-platform. (Except for a few string manipulations, nothing is necessarily Windows about the NoiseViewer.) It was very easy to integrate GLUI into the previous GLUT code. Unfortunately, the GLUI library may turn out to be too simplistic for the NoiseViewer. We shall see.

The source has been bundled with a compiled GLUI library 2.35. You can get the source for that at the official GLUI SourceForge site.

From what I understand of the licenses, I am allowed to use these libraries. Please understand that the code and programs linked to below are provided “as-is”. Also note that running any program found on the internet carries risk, and the responsible user always scans for viruses, etc.

Click and drag to pan around the noise. CTRL+click-and-drag up and down adjusts the zoom level. Shift+click-and-drag adjusts the noise cutoff point.

Compiled executable (Windows, ~336KB): NoiseViewer_v1.1.zip

Source code, libraries and projects (Visual Studio 2008, ~2,288KB): NoiseViewerSource1.1.zip

Feedback would be greatly appreciated!!

]]>
NoiseViewer version 1 http://blog.megastructure.org/2009/07/noiseviewer-version-1/ Fri, 10 Jul 2009 10:38:50 +0000 http://blog.megastructure.org/?p=8 The NoiseViewer is a simple program that lets you explore a two-dimensional noise map generated in real-time. This is a preliminary tool designed to be a starting point for mapping out and viewing procedural content. I hope to make the NoiseViewer more and more sophisticated as layers of noise and objects start stacking up.

NoiseViewer v1.0 screenshot

This is terribly preliminary!

  • Uses Stefan Gustavson’s implementation of Simplex Noise (available here). I’ve made a few changes, so that it works better on Windows. The source download (below) includes the modified Simplex Noise code. For more information on Simplex Noise, see Simplex noise and Perlin noise.
  • Uses FreeGLUT, also included in the source below.
  • Some of the code is based on wonderful examples found on the OpenGL site, numerous snippets found online, and of course NeHe’s excellent tutorials.
  • My code is not elegant. This version focuses on making something work, nothing more.

From what I understand of the licenses, I am allowed to use these libraries. Please understand that the code and programs linked to below are provided “as-is”. Also note that running any program found on the internet carries risk, and the responsible user always scans for viruses, etc.

Click and drag to pan around the noise. CTRL+click-and-drag up and down adjusts the zoom level. Shift+click-and-drag adjusts the noise cutoff point.

Compiled executable (Windows, ~266KB): NoiseViewer_v1.zip

Source code, libraries and projects (Visual Studio 2008, ~1,456KB): NoiseViewer_v1_src.zip

Feedback would be greatly appreciated!!

]]>
thoughts on predictably-autogenerated content http://blog.megastructure.org/2009/07/thoughts-on-predictably-autogenerated-content/ Mon, 06 Jul 2009 01:13:55 +0000 http://blog.megastructure.org/?p=3 I opened this separate WordPress blog on Megastructure.org in order to explore some more technical aspects of the building process. I hope to publish my findings as I go along, with the lofty goal of making a complete Megastructure experience freely available. The stepping-stones along the way consist of modeling separate aspects of the Megastructure, while getting feedback and improving existing models, and eventually weaving it all together into a whole.

This is an ambitious project, one that I started years ago, with still very little progress achieved. However, by opening up the discussion and exposing the material I have gathered, I believe this deeply-founded subconscious realm can be expressed. Especially since now I am committed to blogging about it.

I’d like to begin by mentioning a few words about autogenerative-content, especially in how it differs from pre-generated and randomly-generated schemes.

Pre-generation implies that the objects or scenery was crafted and designed by a human artist, perhaps even down to the last detail. This method gives the artist quite a lot of freedom, but can hamper the potential world-size, because everything must be hand-made. Pre-generation is ideal for large companies with huge artistic and creative budgets.

On the other end of the spectrum, random-generation provides a surprising variety of content, as it relies on random numbers to generate events, characters, and even landscapes and scenery. However, depending on purely random occurences can be difficult to control and tune correctly. This method is widely used across the board, but rarely in creation of environments.

Procedural content bridges these two gaps by defining systems of random values that affect a pre-built framework. There is extensive work in this field, some of which has been aggregated here, at the Procedural Content Generation wiki. These higher-level functions can bring seemingly-natural content into a simulated world, while freeing artists from having to define every little detail.

Another benefit of using procedural methods is the repeatability factor. Given a certain seed, the random functions (actually pseudo-random) will generate the same values every time. If care is taken, an entire world may be predictably autogenerated, like a fractal that always is drawn the same way despite the countless layers of chaos within.

I believe that the Megastructure can be modeled, at least in parts, by using different blends of these techniques. Furthermore, an experience can be built that may span time and space, and link multiple users inside the endless corridors.

]]>