HPL2/Tutorials/Skyboxes

From Frictional Wiki
< HPL2‎ | Tutorials
Revision as of 23:35, 8 November 2020 by Darkfire (talk | contribs) (→‎Developers! Read!: Rewrite)
Jump to navigation Jump to search

Level Editor - Skyboxes

Fixing the inverted skybox bug

After Amnesia's 1.3.1 release and onwards, skyboxes render incorrectly in the game due to a bug in the DevIL version used. You can fix it for Windows by downloading this version of DevIL.dll and updating the file in the main game directory.

Optionally, include the file when exporting your Custom Story or Full Conversion, however have a readme or note as to why DevIL.dll is included out of courtesy to the user.

A solution for Mac and Linux should also be possible by replacing library versions, however is currently not documented.

What is a Skybox?

A Skybox is a type of cubemap which is seemingly placed at the furthest drawing point accessible within a game's map. It is essentially the sky, horizon and ground which is used to show where the setting is in relation to the surroundings. For example, a skybox which comprises of planets, stars and asteroids will give the illusion of the player in space, even if the map looks like you're in a castle (though it won't look very good…).

Skyboxes are a must have in outdoor or scenic based environments. Not only can it give a sense of light, location and assistance otherwise in developing, it is incredibly useful in immersing the player into the finer details which make up the level.

So let's get started. For this tutorial, I used:

- Adobe Photoshop ( or for a free alternative, you may use [1]], and may make use of this [video tutorial).
- .DDS plugin for your appropriate image editor (nVidia for [2]] or [GIMP)
- A raw collection of images which will make up your skybox .
- The HPL2 Level Editor and either a Steam or Retail copy of Amnesia: The Dark Descent. I was using Retail.

How do I make a Skybox?

I used Adobe Photoshop to make the skybox.

Step 0: Understanding the construction of a Skybox

In order to construct the skybox, you need to know how one is laid out. Here is the layout as read properly by Amnesia 1.3 and below. Top is at an angle because the new orientation of that raw image does not match up to the Left. Once you place Top onto the canvas, rotate it 90 degrees clockwise.

[3]

Please note that this may apply only to the images on the webpage above. If there are issues and you're using the above layout, please shoot me a Personal Message on the forums. I placed a link at the bottom of this wiki page.

Step 1: Setting Up

The Skybox you'll be making if you are using the above website will likely be constructed using five raw images of 512×512 dimensions. This isn't much of a dilemma, since while there are five images, the 'missing' section is Bottom, which you can simply make a 512×512 square of a color (I tend to use Grey, but it is completely optional).

Another option is to double the dimensions of your images (so in this case, 1024×1024, making a 6144×1024 sized skybox). It's completely optional, and won't too greatly affect your end result, because the skybox will be scaled down appropriately to suit the engine's capability.

Download your skybox and extract it if you're using the link above.

If you're using Windows 7, roll over one of your extracted images with your mouse. In most cases, the dimensions of the image will be displayed in the tooltip. In my case, it is 512×512, which I will be using for the rest of the tutorial.

[4]

If such an option is unavailable, open the image in Paint. The dimensions will be on the bottom of the window.

Step 2: New Project

1. Start a new Project in Photoshop (File > New…)
2. Set the Height to the vertical dimensions in which your images are (512 in this case).
3. Set your Width to your Height multiplied by 6. In my case, 512 x 6 = 3072.
4. Make sure both Height and Width are in Pixels, then you're all good to press OK.

[5]

To make this process easier on how you set out the images, and to assist with snapping, we can make use of the grid features in Photoshop.

[6]

1. Navigate to Edit > Preferences > Guides, Grid & Slices.
2. Under the 'Grid' box, set the Gridline to 512 pixels (or the vertical size of your images), and make the subdivision 1, 2 or 4 (any higher is unnecessary).
3. If your grid is not visible, navigate to View > Show > Grid. This will give you six sections of your image. (If the grid, at any point begins to annoy you or need to check if the images are correctly aligned against their 'partner', pressing Ctrl+H will hide/show the grid).

Step 3: Import

Import your images. There are many ways to do this, but for the sake of simplicity, just select the five images and drag them onto the canvas. Then, comparing them to the filenames (if the layers do not have their respective filenames), lay them out within the grid in the correct format. Don't forget to rotate Top 90 degrees clockwise!

[7]

Now create a new layer (the paper icon in the Layers window, which in my case, is the second last option, or second from the right)

[8]

Use the Paint bucket on this layer to make it any color you want, but not one which will be the same as the sides of your Top or Right images.

[9]

If the Gradient tool appears in the tools pane, just click and hold and select the Paint Bucket Tool. To change the color, click on the foreground color in the bottom of your tools pane (mine was black), then select a color using the Color Picker. As stated earlier, I just made mine RGB 128, 128, 128 (or #808080 in Hex).

If your specified color covers the other images, move your layer as low as possible below the other layers, but higher than background, as that will cover your layer.

[10]

Now just hide the text, if you're like me and have it there. I grouped mine, so I can just select the eye on the folder, and that will hide all of them. Each eye can be clicked individually however to hide them all just the same way.

Which gives us our raw six images which will become our skybox.

[11]

Step 4: Saving for use in the Level Editor

First of all, if you didn't download the nVidia tools as I mentioned in the "What is a Skybox?" for .dds saving, then save your skybox as a .psd, close Photoshop, then download and install the nVidia tools.

1. Navigate to File > Save As…
2. Change the save format from .psd to D3D/DDS (.dds)
3. Save the file somewhere. You can put it wherever you want in the Amnesia files (provided resources.cfg can find it) or somewhere and move it there later.
4. Click "Save" and the following dialog box will come up.

[12]

5. Make sure your settings match mine. Chances are, all you'll need to change is 2D Texture to Cubemap (which will be in the smaller drop menu on the left side).
6. Click "Save". You may need to wait a bit, depending on your computer.

Step 5: Importing into the Level Editor

If the Skybox is not already somewhere in your Amnesia folders, move it somewhere there so it can be found in a directory specified by the resources.cfg file. For the sake of custom story exporting, let's assume I placed it here: custom_stories/test/skybox/mountains.dds

Now we just open the Level Editor, load up your map (if necessary), then navigate to Edit > Level Settings. Tick "Active" and set the texture to your skybox directory.

[13]

Done!

What else can I do with a Skybox?

Creating Skyboxes with different Basemaps

Some Skyboxes are great. Instead of requiring construction in Photoshop, they are already set out in a format which looks great to other Skybox building applications. What we made earlier by placing the six images side by side was called a Horizontal strip.

[14]

As you can see, there are many ways to create a Skybox. AMD/ATI's application CubeMapGen is able to load vertical cross images, which you can find on the internet and even assemble yourself with enough practice. CubeMapGen is also able to preview the Skybox, and export .dds images in a similar way the NVidia Tool does in Photoshop.

[15]

There are likely other methods, but I won't go too in-depth with those.

Raising my horizon

As we can see above in CubeMapGen, the horizon, or rather, the moment the grey bottom meets the sides of the cubemap is quite low. As such, it looks unrealistic when viewing from the edge of your walkable map boundary. In Photoshop, raising the horizon is rather simple!

Step 1: Have your Horizontal Strip ready.

The easiest way to do this is to do so with a Horizontal Strip, or the same format as explained by the above tutorial.

[16]

I am using a different skybox to the previous tutorial, since you can use just about any skybox, as most horizons are in the approximate middle of the cubemap.

Step 2: Color

Create a Layer and push it all the way to the bottom and color it something like grey. This will serve as your bottom tile of your basemap, and when you delete parts of your skybox, the grey color will appear and remain the same, allowing the blend from the sides of the map and the bottom to become even lesser noticeable.

[17]

Step 3: Select and Delete

Use the Rectangular Marquee Tool to select the entire bottom half of the image. Be default, that tool is the second from the top of Photoshop's Tools window, and is shaped like a square with a few openings between the outline.

Starting slightly outside the image on the left side, click, hold and drag to the bottom right corner of the image, effectively selecting the whole bottom half. Zoom in if you have to.

[18]

Now, select your Front from the layers window and then press the Delete key. It will remove the bottom half of your front. Now repeat by selecting your Back, Left and Right layers and deleting those.

[19]

Step 4: Export

Now just save as you would by following the earlier tutorial above.

Here's how my Skybox looks.

[20]

Now we have a flat horizon, which hopefully will not be visible to the player. You can adjust the horizon point by lowering the amount of area which you delete. Just remember not to delete any part of the 'Top' image, as then you will have half a top on your skybox!

HELP! SOMETHING WENT WRONG!

First of all...

Are you using an Amnesia version greater than 1.3? If so, the problem is caused by a .dll file titled DevIL.dll which has been included with Amnesia since its release. Between 1.3 and 1.3.1, the source code changed slightly, breaking the skyboxes. Download an older DevIL.dll file here (the same one included with 1.3), and you should not have any issues. Include it with your Custom Story or Full Conversion export if necessary, but notify the user as to why it is included. A readme in the least should suffice.

Otherwise...

Skyboxes can be a real pain sometimes. If your orientation is screwed up, try tweaking it yourself and see if you can get it fixed. But if that is really getting to you, or you encounter other issues, drop me a PM using link], or make a thread about your issue in the [Development Support subforum.