3d 3D Resources and Applications 3Deditortests 3dmodeling 3dmodelling 3dprinting 3dterrain abobe illustrator AC3D academic accessibility Addon adobeillustrator Adoboe aeontimeline Alphabet am amigaOS anamorphic android Android animation annoyances Anxiety ANYmal apple application Application References ApplicationReferences Applications apps AprilUpdate Archie] architecture archivefootage archives art ascii-art assistants astronomy atari Australia AutoRun b3d BBCNews Bipdeal blender Blender Blinded by Science! BlindedbyScience BostonDynamics braille Brave BSD c128 c64 cellPhoneTowers Centric chemistry Chrome chromeOS Clipstudio coding comic ComicNarrative comics commodore Computer Madness ComputerMadess ComputerMadness computers computing ConEmu console Consoles contours Copernicus Daria daylonleveller depopulation design designer diagrams digitalcomics digitalpainting digitaltag discovery_of_pulsars DIY docear doctorwho DOD drawing drawingsoftware drwho dualboot Earth ebooksfree ecosystems Edge Edit editing editors Electromagnetic Electrons emailclient endniote Energy Engineer Engineering excel exegesis exidy exporting facebook facebooksucks fake Fault fileutility firefox Firefox firefox57 Firestorm Flame flash free freeBSD freemium freeplane freesoftware freeware Friendica future Galileo generator Geocentric geos Ghost World ghosttownphotography GIF github Google google+ googleplus googleplussearch googleplustips graphics GRUB gui harddrive HarrissSpiral hashtag hashtags heightfield Heliocentric help HighandLowWeirdness history history_of_science HistoryOfScience homecomputer HomeNetwork import importing infographic inmoov interactivestory Intermittent internet Internet Stuff InternetStuff INternetStuff Ions iOS IOS ipad iphone ironman ISurfSocial java javascript Jenny Everywhere JocelynBellBurnell JudgementDay julesverne Knowhow kodi krita Krita LAS LASOpensimulator LASRandom LASTechnology Laura Ess Laura's Art LauraEss leveller levitation Libraries libreoffice linux Linux LinuxSnap LiveJournal mac macOS MacOS macOSX mangastudio5 mangastudioex5 maps MapSCII Match math mathart mathematics MaxOSX MediaPC memorial mesh MeWe microsoft microsoftexcel Microwave mindmapping mindmaps Mint MintKDE mobile modelrailways Molecules mono Motors mozilla Mozilla msdos MSNFeed msx Music NAS nasa natron NBN ncp NetNeutrality netradio Network NetworkStorage newzealand NikolaTesla nodejs npm NUC nz oldmachinery online onthisday open opensim opensimulator opensimulator terrain OpensimulatorLAS opensource opensourcesoftware openstreetmap Opera opml Orbit os outliner PaintToolSai PanicAttack password pc2 penrosetriangle pets photography photoorganizer photoshop physics Physics Planets plant plants Plasma png Podcast polyhedron Privacy processing programming projectmanagement PSRB1919 publicdomain Push pyromagnetic_electric_generator Q4OS quadrupedrobot quantum_mechanics Radiation radio RandomLAS raspberrypi reallife recovery RecRoomPC RemingtonRand research Retro retrocomputing reversenostalgi robos Robot robotic robotics Safari Sai SAVENETNEUTRALITY scalextric scapple science scienceeveryday ScienceGIF scitech Scooby Do ScoobyDoo screencapture Scrivener search searching SecondLife secondsgrid SecurityBreach SelfRighting server shapes sharing shopping simonastick Singularity sketchup SKYNET smartphone SocialMedia software Solar SolarSystem sorcerer sound sounds space spaceshuttle spectravideo Standing startrek steampunk strawhouse StudioPC subscription sweethome3d Synology tablet tags taskmanagement Technology TechnologyLAS Technomania tedtalks Terminator terrain texteditors TextFormatting textures TheFederation thunderbird todolist Tor trees TripleJ trolley tutorial twt UI UNIVAC universe update updates USA USB3 utility vector-tiles vectoreditor vectors vfx video videoediting videorecording viewer vintagecomputing Vivaldi vocorder Walking web Web webbrowser webcam webdevelopment werner_heisenberg WesternAustralia Widows Win10 Win10Install win7 Win7 windows Windows Windows10 Windows64 windows7 WindowsUpdate Wings3D WomensDay worldmap XnViewMP xport

Monday, February 20, 2017

Leveller for OpenSimulator (part 2)

Exporting from Leveller to Opensim

This tutorial looks at working with Leveller (a powerful 3D terrain editor for windows from Daylon Graphics) and OpenSimulator (Opensim). Part 1 explained how to import terrains from Opensim into Leveller. This part explains how to export heightfields in Leveller back into Opensim.

OpenSimulator Regions used

This part uses the four regions of test00, test01, test10, and test11 to demonstrate exporting terrains from Leveller back into the grid.

The listing for these regions likes a bit like...

...however the positions are only important  when importing the heightfields files using load-tile command.

Exporting single regions

To demonstrate exporting single regions we'll be using the following example from Leveller...

This 256x256 document was created by creating eight shapes, giving each a height (as shown on the map at right and then selecting all shapes followed by executing a Shapes > Heightfield from Selected Points command. Finally the water level was set using Edit > Water Level > Elevation to 20.

Exporting to In-World

You can export the above Leveller document as a RAW file for loading in-world. To do this, select File > Export and pick the Second Life option. After selecting a file to save to (it needs to be an existing RAW file, but you can easily copy the file and rename that copy) you might see something like this:

If the document has any heights less than zero you will get an error and the export will fail. It's best to play around with Original Elevations and Use per-pixel scaling. Once you've exported the file, you can go in-world and load it via your viewer.

You have to be the owner of the region in order to upload the raw file. Go to the Region / Estate dialog box and select the Terrain tab. You'll see something like this:

Select the Upload RAW terrain button, select the file and the terrain will be loaded. It should look something like this:

The submerged area above is roughly at 20m and matches the default water level. However on the original Leveller document that coastline contour is 20.6, and clears the waters. There's some trade off and inaccuracy using the .raw format. Compare this with exporting in .ter format (below). 

Server commands for saving terrains

The following two methods use server commands to save region's terrains. Server commands are made within the Opensim console. These examples are taken using ConEmu, a "Windows console emulator with tabs, which presents multiple consoles and simple GUI applications as one customizable GUI window with various features". ConEmu, rather than the Windows command line was used, as ConEmu behaves more like a Linux terminal, with the user being able scroll back through previous lines and reports, and use the up arrow to see (and then edit) previous commands. Users are also able to copy and paste from and to the console easier that with the standard  DOS prompt, and key shortcuts and colour schemes can be set for convenience.  All this makes using the Opensim console a lot easier for a Windows user. Other OSs may have their own equivalents. ConEmu was used as I predominantly use Windows and Windows apps (and hence Leveller).

For single regions

Leveller can export a heightfield to Opensim  simply by exporting using Terragen format (.ter). To do so, select File > Export and select the Terragen option. After selecting a file to save to, the dialog should look something like this:

To load the terrain for a single region you must first change to that region. You do this by using the "change region" command. For example, to go to the test00 region we'd type...

change region test00 [ENTER]

...and the console prompt should now show...

Region (test00) #

If it doesn't, you may have mistyped the name of the region. Making typos like that can create unexpected errors! Assuming you have now selected the region, You would use the "terrain load" command to save that to a particular file. For example...

terrain load N:\OpenSim\HeightFields\Leveller\Tutorial\in-world\test00.ter

...would load the terrain from the test00.ter file in that directory (you need to put quotes around a file path name if it has spaces in). The format of the file save is determined by the extension used as follows:
Extension File Format
.r32/f3232bit RAW,
see RAW, 8 bit, 16 bit, and 32 bit explained
.terTerragen heightfield,
see Terragen™ Terrain file specification
.rawlinden labs/Second Life RAW,
see Tips for Creating Heightfields and Details on Terrain RAW Files
.jpg/jpegJoint Photographic Experts Group  image format.
.bmpdevice independent BitMaP
.pngPortable Network Graphic
.gif Graphics Interchange Format
.tif/tiffTagged Image File Format
.gsdgeographic survey data file
As you can see above, the example file was loaded in the Terragen format. The reasons for choosing that format are that it is a heightfield format rather that a graphics format, and that Leveller uses a modified Terragen format for its documents. If this is successful the console should look something like this:

  After loading the file in the region it'll look something like this in Opensim:

Here's a comparison between .raw and .ter exports, using the in-world map:

A good work practice is to use the Leveller document as a master file, and to make changes in that, rather than later re-import that region a second time to make modifications. Here's the above region re-imported back into Leveller using a raw file generated in-world...

...not pretty is it? Most of the bumpiness and abstraction is caused by using an image format to save heightfield data. If you own or rent a region but can't access the console for that grid, see if you can get the administrator to use terrain save (see part 1) and terrain load to for you (using .ter format), rather than using a .raw file.

For tilesets

In Opensim you can create regions that are square with dimensions in multiples of 256, for example 256x256, 512x512, 768x768, and so on. However at present you cannot have two regions of different sizes adjacent, without having issues  with one or more of those regions. So, in general you won't see a 256x256 region next to a 512x512 region, but you may see a string of 256x256 or larger regions together. A "tileset" is a collection of adjacent or connected regions of the same size. The following is a 512x512 example we'll be using in Leveller (which will be a 2x2 tileset of 256x256 regions):

You can just see the 256m grid lines on the map. This is also an example of  the MicroDEM colour scheme. Leveller allows you to change display colours for heights. It's also an example of me playing around with different tools!

Export a Leveller document as a PNG

Leveller can export the above as a PNG file. To do so, use the File > Export command and select the PNG option. After choosing a filename, and opening option, you should see something like this:

After OKing that, the following gets created in that directory:

The .wld and .xml  files are created by Leveller in the process of making the PNG. And the PNG looks something like this:

Load-tile command

The single PNG file created above for a tileset, can be loaded into Opensim using the terrain load-tile command in the console. This only works saving to a PNG file. The syntax is:
terrain load-tile <filename> <tile width <tile height> <xstart> <ystart>

...and where: <filename> is the file name of the of the saved file (e.g. 2x2tileset(default).png), and <tile width <tile height> is the width and height of the tileset, and <xstart> <ystart> are the grid's x and y location of the south west corner of the tileset (e.g. 1102 1000 for the sample island is the test00 region). However, you must also select each region in the tileset in sequence, and then repeat the command for that image, in order to load the section of that PNG that corresponds to the region selected.

For example, to load the PNG image above into test00, test01, test10 and test11, you would need to do the following commands:

Unlike the save-tile command (see part 1), you can load images that are not just in the /bin directory! The result of the above commands is...

Now this looks like the heightfield alright, but it seems to be a bit exaggerated, and what's happened with the water level? Comparing the Leveller map with the Opensim map, we can see this more clearly:

The water level hasn't changed in Opensim so it must be something to do with the format of the PNG (16bpp and the map elevations range). You can either go back to Leveller and fiddle around with the export settings (and check the document for silly errors like setting the water level at the wrong height, though in the above example it was set to 20.0008m in Leveller), or you can fiddle around with the height field either in-world, or via the console. If you want to go via the console method, select the region and try playing around with the following commands:
terrain elevate <num>
Raises the current heightmap by the specified amount.
terrain lower <num>
Lowers the current heightmap by the specified amount.
terrain multiply <num>
Multiplies the heightmap by the value specified.
terrain rescale <min> <max>
Rescales the current terrain to fit between the given min and max heights
terrain revert
Loads the revert map terrain into the regions heightmap.
In this instance I was able to fix the height issue buy using terrain lower 11 in each region. The result looks like...

But, the solution won't always be to do that command - it varies depending on the terrain. There is a third alternative, and that's to use the Export tileset feature of Leveller. 

Exporting tilesets from Leveller

Leveller now has an Export Tileset option which will automatically export a Leveller document as a set of Terragen formatted files suitable to be imported using terrain load within Opensim. To create this, use File > Export Tileset. The following dialog will appear:

There are several sets of options on this dialog. Output filename allows you to select both the directory to save the tile files in, and a "base name" to use how those files are named. The directory you use for a tileset export should either be empty, otherwise confusion might result.The base name (e.g. if you enter test.ter, the base name is test) is added to codes generated by Leveller to indicate where in the tileset the file goes. For example test_x0_y2.ter should be loaded into the region in the bottom row (numbering starts with 0) and 3 columns from the left. See below for an efficient way of doing this.

Tiling has two ways to decide split up the document into tiles - by px per tile, and by the number of tiles across and down the tileset. If you always use the same size regions (and they'll always be square in Opensim) then you might just just use that option (e.g. 256), but choosing the second might be easier if you're working with larger sized regions. The Elevation offset is added to the the heightfields of the exported files, and works the opposite way to the same option on Import Tileset. It defaults to 20 which matches the default water level in Opensim, but can be changed.

The water height may be an issue with the current example. Above I mentioned it was set to 20.0008m (some minor rounding errors). If we're using the Export Tileset method, that expects the water level to be at 0m in Leveller. Now we could either go back into Leveller and drop the heightfield by 20m, and then then set the water level to 0m. To drop the whole heightfield we'd either select all (or none) and then do Filter > Elevate and use the following settings:

Setting the water level is as simple as Edit > Water lever > Elevation and entering 0.0 m (works better than just plain 0). Now that might a good thing to do if you're working on several documents and most of them have the Water Level set to 0. However, if we just wanted to export that tileset now and doing that later, we could just enter 0 m for the Elevation offset instead! Assuming that we do, here's what the dialog might now look like:

After you OK that, the files in the Export sub-directory will look like this:

The next step is loading the files into Opensim using the terrain load command as detailed above. You simply change regions and then terrain load for each. The following is how this would look in the console for the example tileset...

...and here's the result in-world:

No adjusting needed!

Part 3 shows how to make terrain using shapes.

No comments:

Post a Comment