141 lines
4.9 KiB
HTML
141 lines
4.9 KiB
HTML
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||
|
|
||
|
<HTML>
|
||
|
<HEAD>
|
||
|
<META name="generator" content="HTML Tidy, see www.w3.org">
|
||
|
|
||
|
<TITLE>Environment Mapping Tips</TITLE>
|
||
|
<LINK type="text/css" rel="stylesheet" href="../webdocs.css">
|
||
|
</HEAD>
|
||
|
|
||
|
<BODY>
|
||
|
<P><A href="intro.html">[Back to Intro]</A></P>
|
||
|
|
||
|
<H1>Tips for Successful Environment Map Generation</H1>
|
||
|
|
||
|
<P>Environment maps don't necessarily need to come from
|
||
|
Anachronox environments. If you want to create your own
|
||
|
environment map, some of these ramblings may come in handy.</P>
|
||
|
|
||
|
<P>As you know, the parabolic environment map method uses two
|
||
|
sources textures. It draws the entity in two passes, first with
|
||
|
the front environment map, and then with the back environment
|
||
|
map with a special alpha channel applied to it. The images
|
||
|
below are a sample environment map, showing the alpha channel
|
||
|
that Anachronox uses for the back image.</P>
|
||
|
|
||
|
<TABLE summary="Parabolic Environment Textures with captions">
|
||
|
<TR>
|
||
|
<TH>front</TH>
|
||
|
|
||
|
<TH>back</TH>
|
||
|
</TR>
|
||
|
|
||
|
<TR>
|
||
|
<TD><IMG src="tips_map_ft.jpg" alt="Front Texture"></TD>
|
||
|
|
||
|
<TD><IMG src="tips_map_bk.jpg" alt=
|
||
|
"Back Texture with alpha"></TD>
|
||
|
</TR>
|
||
|
</TABLE>
|
||
|
|
||
|
<P>Because it draws in two passes, and because we are only
|
||
|
using per-vertex, not per-pixel, parabolic environment mapping,
|
||
|
there is a seam visible around the circle of the back image. To
|
||
|
better illustrate the seam, here are two example
|
||
|
screenshots:</P>
|
||
|
|
||
|
<TABLE summary="Normal Reflection Image with caption">
|
||
|
<TR>
|
||
|
<TH>normal</TH>
|
||
|
</TR>
|
||
|
|
||
|
<TR>
|
||
|
<TD><IMG src="tips_reflect_1.jpg" alt="Normal Reflection">
|
||
|
</TD>
|
||
|
</TR>
|
||
|
</TABLE>
|
||
|
|
||
|
<P>And here is the same image with the back image colored
|
||
|
green:</P>
|
||
|
|
||
|
<TABLE summary="Seam Enhanced Reflection Image with caption">
|
||
|
<TR>
|
||
|
<TH>seam-enhanced</TH>
|
||
|
</TR>
|
||
|
|
||
|
<TR>
|
||
|
<TD><IMG src="tips_reflect_2.jpg" alt=
|
||
|
"Enhanced-seam Reflection"></TD>
|
||
|
</TR>
|
||
|
</TABLE>
|
||
|
|
||
|
<P>As you can see, there is a seam that occurs along the edge
|
||
|
of the circle of the alpha map of the back image (the seam also
|
||
|
occurs in the same place in the front image), and it makes the
|
||
|
horizon in our example look disjointed. Most of the time, this
|
||
|
seam is not noticeable, especially on animating or rotating
|
||
|
entities, but occasionally it can be a problem, especially on
|
||
|
sharp and higher-resolution environment maps. An easy
|
||
|
workaround is to use lower resolution environment maps and/or
|
||
|
blur the image. However, it is the responsibility of the
|
||
|
environment map artist to try and make sure that very sharp
|
||
|
contrast elements do not occur across the seam, such as the
|
||
|
sunlit horizon in this example. So far, we've been using an
|
||
|
environment cube I generated from <B>map tensil</B>, here is
|
||
|
the cube map laid out:</P>
|
||
|
|
||
|
<TABLE summary="Tensil Cube Map Layout with caption">
|
||
|
<TR>
|
||
|
<TH>Tensil Cube Map Layout</TH>
|
||
|
</TR>
|
||
|
|
||
|
<TR>
|
||
|
<TD><IMG src="cubemap-tensil.gif" alt="Tensil Cube Map">
|
||
|
</TD>
|
||
|
</TR>
|
||
|
</TABLE>
|
||
|
|
||
|
<P>And here is a visualization of how the seam results from
|
||
|
dual parabolic mapping (click on the image to view the
|
||
|
movie):</P>
|
||
|
|
||
|
<TABLE summary=
|
||
|
"Parabolic Seam Visualization with caption and link">
|
||
|
<TR>
|
||
|
<TH>Parabolic Seam Visualization</TH>
|
||
|
</TR>
|
||
|
|
||
|
<TR>
|
||
|
<TD><A href="joeyparab2.m1v"><IMG src="tips_seam.jpg" alt=
|
||
|
"Parabolic Seam Visualization"></A></TD>
|
||
|
</TR>
|
||
|
</TABLE>
|
||
|
|
||
|
<P>The x axis is red, the y axis is green, the z axis is blue,
|
||
|
and the pink dividing square shows the plane along which the
|
||
|
seam occurs. When you are creating environment maps from
|
||
|
scratch, it is best to avoid details that cross the seam which
|
||
|
is along the Y-Z plane as shown above. One technique is to
|
||
|
rotate the base camera position for the cube map generation in
|
||
|
your 3D package.</P>
|
||
|
|
||
|
<P>Unfortunately, this technique cannot apply to screenshots
|
||
|
taken within Anachronox. When Anachronox takes a set of
|
||
|
cube-environment screenshots, it will always position the 6
|
||
|
textures in the manner shown above. The first image is out on
|
||
|
the positive x axis, the second image is on the positive y
|
||
|
axis, and so forth. Initial camera rotation has no bearing on
|
||
|
the output, only camera position. The workarounds including
|
||
|
trying to position the camera for the screenshots to minimize
|
||
|
the seam problem, or to heavily blur and use lower resolution
|
||
|
textures so details are not apparent along the seam.</P>
|
||
|
|
||
|
<P>Please send any comments, suggestions, or more tips to
|
||
|
Joey.</P>
|
||
|
|
||
|
<P><A href="intro.html">[Back to Intro]</A></P>
|
||
|
</BODY>
|
||
|
</HTML>
|
||
|
|