aboutsummaryrefslogtreecommitdiff
path: root/docs/contrib/creating_landscape_collisions.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/contrib/creating_landscape_collisions.html')
-rw-r--r--docs/contrib/creating_landscape_collisions.html193
1 files changed, 193 insertions, 0 deletions
diff --git a/docs/contrib/creating_landscape_collisions.html b/docs/contrib/creating_landscape_collisions.html
new file mode 100644
index 00000000..4731b944
--- /dev/null
+++ b/docs/contrib/creating_landscape_collisions.html
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+<head>
+ <title>NeL Collisions</title>
+
+</head>
+
+<body>
+
+<h1>How to create collisions in a landscape</h1>
+<h2>License</h2>
+
+<p style="font-size:10px; color:gray;">
+ <!-- style="font-size:9px; font-family: Tahoma, Verdana, sans-serif; color:gray;" -->
+ Copyright (C) 2002, Philippe Lamoureux, phlam@noos.fr<br>
+<br>
+ This program is free software; you can redistribute it and/or modify<br>
+ it under the terms of the GNU General Public License as published by<br>
+ the Free Software Foundation; either version 2 of the License, or<br>
+ (at your option) any later version.<br>
+<br>
+ This program is distributed in the hope that it will be useful,<br>
+ but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>
+ GNU General Public License for more details.<br>
+<br>
+ You should have received a copy of the GNU General Public License<br>
+ along with this program; if not, write to the Free Software<br>
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA<br>
+</p>
+
+<h2>Description</h2>
+<p>During the build-gamedata process, NeL patches automatically generate a collision layer.<br>
+To insert a mesh into your landscape and have your character collide it, you have to manually add collision informations.<br><br>
+
+This document shows how to create this kind of collisions in 3DSMax and export / test them in the Snowballs demo.
+</p>
+
+<h2>Requisites</h2>
+You need the following configuration :
+<ul>
+ <li>3DSMax and NeL plugins</li>
+ <li>A working Snowballs demo</li>
+ <li>Snowballs 3DSMax .max source files</li>
+ <li>The build_gamedata package, and especially :
+ <ul>
+ <li>the /build_gamedata/bin/build_indoor_rbank.exe tool</li>
+ <li>the /build_gamedata/processes/rbank/build_indoor_rbank.cfg configuration file with the following options
+ <ul>
+ <li>Merge = 1;</li>
+ <li>MergePath = "smooth/";</li>
+ <li>MergeInputPrefix = "snowballs";</li>
+ <li>OutputPath = "retrievers/";</li>
+ <li>MergeOutputPrefix = "snowballs";</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+</ul>
+Backup your original Snowballs files : some of them will be changed by this process.<br>
+Copy the original snowball.gr and snowballs.rbank files from /snowballs/data/pacs/ into /build_gamedata/processes/rbank/smooth/<br>
+
+<h2>Overall process</h2>
+<p>
+<ul>
+ <li>In 3DSMax
+ <ul>
+ <li>Load a .max Zone file</li>
+ <li>Create a mesh</li>
+ <li>Export its .shape file in /snowballs/data/shapes</li>
+ <li>Select the whole scenery objects and export the instance group file, replacing the old /snowballs/data/zone/&lt;zone&gt;.ig file</li>
+ <li>Create an interior collision mesh (explained hereafter)</li>
+ <li>Create an exterior collision mesh (explained hereafter)</li>
+ <li>Select all the collision meshes and export the collisions (Utilities / NeL Export / Export collisions), point to the /build_gamedata/processes/rbank/cmb/ directory</li>
+ </ul></li>
+ <li>Launch /build_gamedata/processes/rbank/3_build.bat to build and merge the new collision data to the original Snowballs collision.</li>
+ <li>Replace the files snowballs.gr and snowballs.rbank in /snowballs/data/pacs/ with the new ones from /build_gamedata/processes/rbank/retrievers/</li>
+ <li>Launch Snowballs</li>
+</ul>
+</p>
+<h2>Details on collisions</h2>
+<h3>Pairs</h3>
+<p>
+In a landscape, every collision system is composed of two objects : an interior and an exterior mesh<br>
+<ul>
+ <li>The interior mesh is a mesh on which the user can walk,</li>
+ <li>The exterior mesh acts as a collider in the landscape (visible open edges) and a bridge between the landscape and the interior collision mesh (invisible open edges).<br>
+ (An 'open' edge is an edge that belongs to only one face).
+ </li>
+</ul>
+Even if there is no need for an interior collision mesh, this mesh must be present :
+</p>
+<table width=800 cellspacing=20 align="center">
+<tr>
+ <td><img src="simple_cube_visible.jpg" width="360" height="180" alt="" border="0"></td>
+ <td><img src="simple_cube_coll.jpg" width="360" height="180" alt="" border="0"></td>
+</tr>
+<tr>
+ <td valign="top">Here is a simple box placed on the landscape</td>
+ <td valign="top">
+ The 'exterior' collision mesh prevents the player from crossing the visible mesh<br>
+ The 'interior' collision mesh is of no use, but it has to be present.
+ </td>
+</tr>
+</table>
+<h3>Frontiers</h3>
+<p>
+To have the character walk on a mesh, like a staircase or a ramp, the exterior and interior
+collision meshes must have overlapping invisible open edges.<br>
+Every invisible edge in the exterior mesh must have a corresponding 'snapped' edge in the interior mesh.
+</p>
+<table width=800 cellspacing=20 align="center">
+<tr>
+ <td><img src="ramp_visible.jpg" width="366" height="208" alt="" border="0"></td>
+ <td><img src="ramp_coll.jpg" width="366" height="208" alt="" border="0"></td>
+</tr>
+<tr>
+ <td valign="top">Ramp raising from the ground, the player cannot walk under it.</td>
+ <td valign="top">
+ <ul>
+ <li>The visible edges of the exterior mesh block the user coming from the landscape</li>
+ <li>The visible edges of the interior mesh prevent the user from falling out of the ramp</li>
+ <li>The superposed invisible edges of both the interior and the exterior meshes indicate a connection between the landscape and the ramp</li>
+ </ul>
+ </td>
+</tr>
+</table>
+<h3>Objects informations and constraints</h3>
+<p>
+<ul>
+ <li><strong>Node properties</strong><br>
+ (Utilities / NeL Export / Node Properties / Instances Tab)<br>
+ The two collision meshes have the same non null Instance group name.<br>
+ The interior collision mesh has the 'Collision Mesh' property checked.<br>
+ The exterior collision mesh has both the 'Collision Mesh' and 'Collision Mesh Exterior' properties checked.<br><br>
+
+ </li>
+ <li><strong>Edges</strong><br>
+ Both objects must have the same number of invisible open edges,<br>
+ the vertices of the interior mesh along these edges must be 'snapped' to those of the exterior mesh (same position).<br><br>
+
+ </li>
+ <li><strong>Material ID</strong><br>
+ Exterior collision mesh : <br>
+ The faces must have the MatID 666.<br><br>
+
+ Interior collision mesh : <br>
+ Verify that the faces along the open edges have a unique material ID : Faces that have different
+ matIDs are separated in different meshes at export time, this generates new 'open' edges that can't match a corresponding
+ edge on the exterior collision mesh.<br><br>
+
+ </li>
+</ul>
+</p>
+<h3>Complex collisions</h3>
+<table width=800 cellspacing=20 align="center">
+<tr>
+ <td>The following example is composed of two collision systems</td>
+ <td></td>
+</tr>
+<tr>
+ <td><img src="rampncollumn_0.jpg" width="360" height="219" alt="" border="0"></td>
+ <td></td>
+</tr>
+<tr>
+ <td><img src="rampncollumn_1.jpg" width="360" height="219" alt="" border="0"></td>
+ <td><img src="rampncollumn_2.jpg" width="360" height="219" alt="" border="0"></td>
+</tr>
+<tr>
+ <td valign="top">A connection between the landscape and the ramp, but the exterior mesh only blocks the path around the start :
+ the player can walk under the ramp.</td>
+ <td valign="top">
+ A collision at the base of the ramp.
+ </td>
+</tr>
+</table>
+
+<h3>Remark</h3>
+<p>
+For now this system cannot create bridges.<br>
+You can have a collision that has two or more distinct connections with the landscape, but the exterior mesh cannot be broken into
+multiple meshes, so you couldn't go onto and under a bridge<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+</p>
+
+</body>
+</html>
+