Stencil Shadows in TGE
by Brett Fattori · 03/29/2004 (11:04 am) · 75 comments
Download Code File
I haven't updated this code in over a year. This isn't guaranteed to work with the latest version of HEAD. Sorry.
Examples:
Buggy with shadows
Orc with shadows
More buggy with shadows
Orc close-up
From the read me file:
I'll warn you right now... this is going to be rough. There were a lot of modifications to the engine to get stencil shadows working. It's not going to be a simple drop in, compile and run. There's a ton of code that is added and/or modified in the engine. Additionally, this has only been implemented and tested on the Windows platform.
Included in this archive, you'll find:
+ stencil_032804.patch
+ shadowVolume.cc
+ shadowVolume.h
+ stencil_shadows.txt
+ optionsDlg.gui
+ readMe.txt (This file)
Going the patch route
========================
You can install the patch against the HEAD revision of the TGE. This method should be used by people familiar with using patches. You'll have to troll through the code and fix any problems from conflicts and such. Just run the patch against a fresh HEAD
revision. For example:
cd c:\torque
patch -p0 < stencil_032804.patch
Manual Route
=========================
Inside the file "stencil_shadows.txt" you'll find step-by-step modifications to the engine to add volume stencil shadows. I've attempted to give enough information to know where to put the bits of code. You only need to add/modify the code that is enclosed in the DK_911 tokens. It's going to take a while to go this route...
shadowVolume.cc and shadowVolume.h
==================================
You'll need to extract these files into your "/engine/game/" directory. Make sure you add them to the project file, under the "game" folder of the Torque.
Notes
===============
Z-fail shadows are not working. I tried -- there's some code in there that is the beginnings of Z-fail, but it's incomplete. Z-pass is working, however, quite nicely. You're going to see a framerate drop, unless you have some fast hardware. It's inevitable... I've done some optimizations to the code to try to minimize this. Plus, there are numerous extensions that were implemented to try to combat this. Interior lights do not cause shadows. I didn't get around to implementing these... I wasn't sure where to begin looking for the code that managed interior light sources.
Things to know
===================
There are some script commands for toggling stencil shadows, and setting detail levels. I have included a replacement for the "optionsDlg.gui" file that implements some of these settings.
Console Commands:
-----------------
toggleStencilShadows() - Toggles stencil shadows on/off
toggleStencilZFail() - Toggles use of Z-Fail code
toggleStencilExtTri() - Toggles use of "External Triangle" rendering method
setSilhouetteDelta(F32) - Set a value to determine detail level of object used for silhouette generation
toggleFastStencils() - [NOT IMPLEMENTED ANY MORE]
Associated Prefs:
-----------------
$pref::StencilShadow::renderZFailShadows
$pref::StencilShadow::externalTris
$pref::StencilShadow::infiniteProjection
$pref::StencilShadow::enableStencilShadows
$pref::StencilShadow::detailDelta
$pref::StencilShadow::gFastStencilRendering
Changes to the code
===========================
Please contribute any changes back to the community! This should be an ongoing project so that everyone can enjoy volume shadows in the TGE. For the moment, submit any changes to me at:
brettf AT renderengine DOT com
This is, by no means, a complete implementation (or even correct) of volume stencil shadows. There were numerous changes made during the development of this code that influenced design decisions.
Originally, the shadows we being rendered in a two-pass manner, but a faster one-pass system was chosen to keep speeds up. I expect that there are further optimizations that can be made to this code, and I hope that you'll share what you find and change!
Using the shadows
==========================
People have been asking me what the settings are for the datablock. Plus, it would be helpful to know what they do. These can be added to any object that derives from shapeBase or tsStatic. Here is a short breakdown of the items:
enableStencilShadows = true/false
Enable stencil shadows for this object.
sunShadowsOnly = true/false
If set to true, shadows will only be cast for the sun light (light zero in the light manager) The shadow generator will ignore the next two settings if this is set to true.
pointShadows = true/false
Set this to true to enable shadow casting for point light sources. The point light must be set to cast stencil shadows as well.
vectorShadows = true/false
If this is true, vector lights (other than the sun) will cause this object to cast shadows. Like point lights, the light must be set to cast stencil shadows as well.
alphaDistance true/false
Setting this to true will make the shadow vary in alpha based on distance from the light source.
shadowBaseAlpha = float
This is the amount of alpha the shadow will use. A value of 0.5 is pretty good.
updateEveryFrame = true/false
For shapes that do not animate, there isn't any real need to regen the silhouette for every single frame. Only when the object moves or the light moves. When this is true, the following occurs: if the object has changed position (not rotated, must change X,Y, or Z) or the light has changed position (both by some fixed epsilon) the shadow will update. Otherwise, the shadow's silhouette and volume don't get regenerated. For animated shapes (ones with ambient animations especially) set this to true. The shadow will regen each frame.
highDetail = true/false
Setting this to true will cause shadows to always generate at the highest distance detail for the object. In other words, based on the current LOD for the object. Setting this to false will cause the object's shadow to be generated from the distance detail that is n detail levels less than the current LOD. This means less polys in the shape will be used to generate the silhouette and shadow volume. Check the value in $pref::StencilShadow::detailDelta to see the delta between the highest current LOD and what will be used to generate the shadow. The value in the pref is between 0 and 10. The actual value used is subtracted from 10 to get how many LODs "down" it should use. ie: Setting it to 10 will use the highest (10 - 10 = 0 LODs down) Setting it to 5 will use 5 levels down (if available) (10 - 5 = 5 LODs down).
debugVolumes = true/false
If you want to look at the actual volume cast by your shape (not just the shadow) set this to true.
debugLightLines = true/false
To see which lights are effecting this object, set this to true. A line will be drawn (in the light's color, no less) from the light to the object.
I haven't updated this code in over a year. This isn't guaranteed to work with the latest version of HEAD. Sorry.
Examples:
Buggy with shadows
Orc with shadows
More buggy with shadows
Orc close-up
From the read me file:
I'll warn you right now... this is going to be rough. There were a lot of modifications to the engine to get stencil shadows working. It's not going to be a simple drop in, compile and run. There's a ton of code that is added and/or modified in the engine. Additionally, this has only been implemented and tested on the Windows platform.
Included in this archive, you'll find:
+ stencil_032804.patch
+ shadowVolume.cc
+ shadowVolume.h
+ stencil_shadows.txt
+ optionsDlg.gui
+ readMe.txt (This file)
Going the patch route
========================
You can install the patch against the HEAD revision of the TGE. This method should be used by people familiar with using patches. You'll have to troll through the code and fix any problems from conflicts and such. Just run the patch against a fresh HEAD
revision. For example:
cd c:\torque
patch -p0 < stencil_032804.patch
Manual Route
=========================
Inside the file "stencil_shadows.txt" you'll find step-by-step modifications to the engine to add volume stencil shadows. I've attempted to give enough information to know where to put the bits of code. You only need to add/modify the code that is enclosed in the DK_911 tokens. It's going to take a while to go this route...
shadowVolume.cc and shadowVolume.h
==================================
You'll need to extract these files into your "/engine/game/" directory. Make sure you add them to the project file, under the "game" folder of the Torque.
Notes
===============
Z-fail shadows are not working. I tried -- there's some code in there that is the beginnings of Z-fail, but it's incomplete. Z-pass is working, however, quite nicely. You're going to see a framerate drop, unless you have some fast hardware. It's inevitable... I've done some optimizations to the code to try to minimize this. Plus, there are numerous extensions that were implemented to try to combat this. Interior lights do not cause shadows. I didn't get around to implementing these... I wasn't sure where to begin looking for the code that managed interior light sources.
Things to know
===================
There are some script commands for toggling stencil shadows, and setting detail levels. I have included a replacement for the "optionsDlg.gui" file that implements some of these settings.
Console Commands:
-----------------
toggleStencilShadows() - Toggles stencil shadows on/off
toggleStencilZFail() - Toggles use of Z-Fail code
toggleStencilExtTri() - Toggles use of "External Triangle" rendering method
setSilhouetteDelta(F32) - Set a value to determine detail level of object used for silhouette generation
toggleFastStencils() - [NOT IMPLEMENTED ANY MORE]
Associated Prefs:
-----------------
$pref::StencilShadow::renderZFailShadows
$pref::StencilShadow::externalTris
$pref::StencilShadow::infiniteProjection
$pref::StencilShadow::enableStencilShadows
$pref::StencilShadow::detailDelta
$pref::StencilShadow::gFastStencilRendering
Changes to the code
===========================
Please contribute any changes back to the community! This should be an ongoing project so that everyone can enjoy volume shadows in the TGE. For the moment, submit any changes to me at:
brettf AT renderengine DOT com
This is, by no means, a complete implementation (or even correct) of volume stencil shadows. There were numerous changes made during the development of this code that influenced design decisions.
Originally, the shadows we being rendered in a two-pass manner, but a faster one-pass system was chosen to keep speeds up. I expect that there are further optimizations that can be made to this code, and I hope that you'll share what you find and change!
Using the shadows
==========================
People have been asking me what the settings are for the datablock. Plus, it would be helpful to know what they do. These can be added to any object that derives from shapeBase or tsStatic. Here is a short breakdown of the items:
enableStencilShadows = true/false
Enable stencil shadows for this object.
sunShadowsOnly = true/false
If set to true, shadows will only be cast for the sun light (light zero in the light manager) The shadow generator will ignore the next two settings if this is set to true.
pointShadows = true/false
Set this to true to enable shadow casting for point light sources. The point light must be set to cast stencil shadows as well.
vectorShadows = true/false
If this is true, vector lights (other than the sun) will cause this object to cast shadows. Like point lights, the light must be set to cast stencil shadows as well.
alphaDistance true/false
Setting this to true will make the shadow vary in alpha based on distance from the light source.
shadowBaseAlpha = float
This is the amount of alpha the shadow will use. A value of 0.5 is pretty good.
updateEveryFrame = true/false
For shapes that do not animate, there isn't any real need to regen the silhouette for every single frame. Only when the object moves or the light moves. When this is true, the following occurs: if the object has changed position (not rotated, must change X,Y, or Z) or the light has changed position (both by some fixed epsilon) the shadow will update. Otherwise, the shadow's silhouette and volume don't get regenerated. For animated shapes (ones with ambient animations especially) set this to true. The shadow will regen each frame.
highDetail = true/false
Setting this to true will cause shadows to always generate at the highest distance detail for the object. In other words, based on the current LOD for the object. Setting this to false will cause the object's shadow to be generated from the distance detail that is n detail levels less than the current LOD. This means less polys in the shape will be used to generate the silhouette and shadow volume. Check the value in $pref::StencilShadow::detailDelta to see the delta between the highest current LOD and what will be used to generate the shadow. The value in the pref is between 0 and 10. The actual value used is subtracted from 10 to get how many LODs "down" it should use. ie: Setting it to 10 will use the highest (10 - 10 = 0 LODs down) Setting it to 5 will use 5 levels down (if available) (10 - 5 = 5 LODs down).
debugVolumes = true/false
If you want to look at the actual volume cast by your shape (not just the shadow) set this to true.
debugLightLines = true/false
To see which lights are effecting this object, set this to true. A line will be drawn (in the light's color, no less) from the light to the object.
About the author
Recent Blogs
• A small hello• Recent Stuph
• So long and so out of touch...
• Plan for Brett Fattori
• Plan for Brett Fattori
#22
-For static meshes, the lod of the actual shape changes with the lod of the shadow. So unless you have high detail checked off, you will never see the highest lod on the shape. Maybe I'm doing something wrong?
-If you fly under the ground, you can see that the 3 guys standing around the campfire are leaving huge shadows on the skybox. Surely this is inefficient?
-The stencil shadows do not scale with the mesh.
The z-fail problem, is that what carmack's reverse is supposed to deal with? I remember reading this article http://www.gamedev.net/columns/hardcore/shadowvolume/ and not understanding anything.
04/01/2004 (6:45 am)
I got this to work with no problem just by patching the latest head. It's quite nice. Here are some bugs I have noticed:-For static meshes, the lod of the actual shape changes with the lod of the shadow. So unless you have high detail checked off, you will never see the highest lod on the shape. Maybe I'm doing something wrong?
-If you fly under the ground, you can see that the 3 guys standing around the campfire are leaving huge shadows on the skybox. Surely this is inefficient?
-The stencil shadows do not scale with the mesh.
The z-fail problem, is that what carmack's reverse is supposed to deal with? I remember reading this article http://www.gamedev.net/columns/hardcore/shadowvolume/ and not understanding anything.
#23
- Brett
04/01/2004 (12:00 pm)
I didn't realize this was affecting the LOD of static meshes. That surely isn't what's supposed to happen! The three guys standing around the campfire are leaving huge shadows on the skybox, hoewever, scissor testing should keep this from happening to the sides and if you have depth clamping, this will fix it even more. I know the stencil shadows don't scale with the mesh... Alas, I didn't fix everything. :-P BUT!! The wonderful thing is, now people can get their hands dirty and provide fixes for these problems. I provided the groundwork, you can run with it!- Brett
#24
04/01/2004 (10:16 pm)
Not quite on-topic but I've heard some engine devs say that they will be using stencils to do terrain modification effects, like bomb craters and stuff. Does anyone know how this would be done, in a general sense--if not specifically?
#25
Compatibility:
To make it work on Geforce2 and older cards I needed to change
following in StencilShadowRenderer::endRenderShadows():
old:
glStencilFunc(GL_EQUAL, 0, ~0);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
new:
glStencilFunc(GL_NOTEQUAL, 0, ~0);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
I have not tested yet if this still works on geforce>=3/ati
Things that should be fixed:
- When 'updateEveryFrame' is not true, then there are often shadows hanging
in the air - the detection for when the shadow needs to be recalculated is not
exact enough. Currently it only checks for movements, but it should also check
for rotations or if the object is animated
- StencilShadow::mValid needs to be initialized to 'false' in the initializer
- self-shadowing of the player should be turned off in first-person view
- the sun should only do a shadow if it's day, the vector going down
04/02/2004 (10:47 am)
The stencil shadow is quite impressive. Here some comments from me:Compatibility:
To make it work on Geforce2 and older cards I needed to change
following in StencilShadowRenderer::endRenderShadows():
old:
glStencilFunc(GL_EQUAL, 0, ~0);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
new:
glStencilFunc(GL_NOTEQUAL, 0, ~0);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
I have not tested yet if this still works on geforce>=3/ati
Things that should be fixed:
- When 'updateEveryFrame' is not true, then there are often shadows hanging
in the air - the detection for when the shadow needs to be recalculated is not
exact enough. Currently it only checks for movements, but it should also check
for rotations or if the object is animated
- StencilShadow::mValid needs to be initialized to 'false' in the initializer
- self-shadowing of the player should be turned off in first-person view
- the sun should only do a shadow if it's day, the vector going down
#26
engine/platformX86UNIX/gl_func.h:
At the end:
engine/platformX86UNIX/gl_types.h:
engine/platformX86UNIX/platformGL.h:
in struct GLState:
engine/platformX86UNIX/x86UNIXGL.cc:
in QGL_EXT_Init():
engine/platformX86UNIX/x86UNIXGL.cc:
in QGL_EXT_Init():
engine/platformX86UNIX/x86UNIXGL.cc:
in QGL_EXT_Init():
04/02/2004 (10:48 am)
Linux port:engine/platformX86UNIX/gl_func.h:
At the end:
/* EXT_stencil_two_side */ GL_FUNCTION(void, glActiveStencilFaceEXT, ( GLenum face ), return; ) /* EXT_depth_bounds_test */ GL_FUNCTION(void, glDepthBoundsEXT, ( GLclampd zmin, GLclampd zmax), return; ) /* ARB_vertex_blend */ GL_FUNCTION(void, glWeightPointerARB, (GLint size, GLenum type, GLsizei stride,void *pointer), return; ) GL_FUNCTION(void, glVertexBlendARB, (GLint count), return; )
engine/platformX86UNIX/gl_types.h:
#define GL_V12FMTVFMT_EXT 0x8705 ///STENCIL START /* Stencil Extensions */ #define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 #define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 #define GL_INCR_WRAP_EXT 0x8507 #define GL_DECR_WRAP_EXT 0x8508 /* Depth Clamping */ #define GL_DEPTH_CLAMP_NV 0x864F /* Depth Bounds */ #define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 #define GL_DEPTH_BOUNDS_EXT 0x8891 /* Vertex Blending */ #define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 #define GL_VERTEX_BLEND_ARB 0x86A7 //(0 == alias to MODELVIEW :: up to 31 supported) #define MODELVIEW0_ARB 0x1700 #define MODELVIEW1_ARB 0x850a #define MODELVIEW2_ARB 0x8722 #define MODELVIEW3_ARB 0x8723 #define MODELVIEW4_ARB 0x8724 #define MODELVIEW5_ARB 0x8725 #define CURRENT_WEIGHT_ARB 0x86A8 #define WEIGHT_ARRAY_TYPE_ARB 0x86A9 #define WEIGHT_ARRAY_STRIDE_ARB 0x86AA #define WEIGHT_ARRAY_SIZE_ARB 0x86AB #define WEIGHT_ARRAY_POINTER_ARB 0x86AC #define WEIGHT_ARRAY_ARB 0x86AD ///STENCIL END #ifndef GL_EXT_texture_env_combine
engine/platformX86UNIX/platformGL.h:
in struct GLState:
bool suppSwapInterval; ///STENCIL START // Support for stencil shadows bool suppTwoSidedStencil; bool suppStencilWrap; bool suppDepthBounds; bool suppDepthClamp; bool suppVertexBlend; ///STENCIL END #if ENABLE_NPATCH
engine/platformX86UNIX/x86UNIXGL.cc:
in QGL_EXT_Init():
gGLState.suppS3TC = false;
///STENCIL START
// Added for stencil shadows
// EXT_stencil_wrap
if (pExtString && dStrstr(pExtString, (const char*)"GL_EXT_stencil_wrap") != NULL)
gGLState.suppStencilWrap = true;
else
gGLState.suppStencilWrap = false;
// EXT_stencil_two_side
if (pExtString && dStrstr(pExtString, (const char*)"GL_EXT_stencil_two_side") != NULL)
gGLState.suppTwoSidedStencil = true;
else
gGLState.suppTwoSidedStencil = false;
// EXT_depth_bounds_test
if (pExtString && dStrstr(pExtString, (const char*)"GL_EXT_depth_bounds_test") != NULL)
gGLState.suppDepthBounds = true;
else
gGLState.suppDepthBounds = false;
// NV_depth_clamp
if (pExtString && dStrstr(pExtString, (const char*)"GL_NV_depth_clamp") != NULL)
gGLState.suppDepthClamp = true;
else
gGLState.suppDepthClamp = false;
// ARB_vertex_blend
if (pExtString && dStrstr(pExtString, (const char*)"GL_ARB_vertex_blend") != NULL)
gGLState.suppVertexBlend = true;
else
gGLState.suppVertexBlend = false;
///STENCIL END
// JMQ: skipped WGL_3DFX_gamma_controlengine/platformX86UNIX/x86UNIXGL.cc:
in QGL_EXT_Init():
if (gGLState.suppSwapInterval) Con::printf(" WGL_EXT_swap_control");
///STENCIL START
if (gGLState.suppTwoSidedStencil) Con::printf(" EXT_stencil_two_side");
if (gGLState.suppDepthClamp) Con::printf(" NV_depth_clamp");
if (gGLState.suppDepthBounds) Con::printf(" EXT_depth_bounds_test");
if (gGLState.suppStencilWrap) Con::printf(" EXT_stencil_wrap");
if (gGLState.suppVertexBlend) Con::printf(" ARB_vertex_blend");
///STENCIL END
#if ENABLE_NPATCHengine/platformX86UNIX/x86UNIXGL.cc:
in QGL_EXT_Init():
if (!gGLState.suppSwapInterval) Con::warnf(" WGL_EXT_swap_control");
///STENCIL START
if (!gGLState.suppTwoSidedStencil) Con::warnf(" EXT_stencil_two_side");
if (!gGLState.suppDepthClamp) Con::warnf(" NV_depth_clamp");
if (!gGLState.suppDepthBounds) Con::warnf(" EXT_depth_bounds_test");
if (!gGLState.suppStencilWrap) Con::warnf(" EXT_stencil_wrap");
if (!gGLState.suppVertexBlend) Con::warnf(" ARB_vertex_blend");
///STENCIL END
#if ENABLE_NPATCH
#27
04/03/2004 (9:31 am)
@Stephane- I've found that self shadowing in first person view actually works if you turn on the zfail code. It still breaks when the camera is in the shadow though- but that happens in 3rd person too. and it can look really cool http://www.filebox.vt.edu/users/ehartman/boobieshadow.jpg
#28
Thank you Brett.
Now the interesting thing will be to see how this integrates with shaders ;)
04/04/2004 (11:04 pm)
This resource should be rated 6, for *beyond* extremely useful.Thank you Brett.
Now the interesting thing will be to see how this integrates with shaders ;)
#29
04/05/2004 (2:58 am)
Hi I patched this today. Works really good with starter.fps, however when I mod it to my project folder ther terrain and water block dont appear.. Any suggestions would be most helpful. Thanks.
#30
There seems to be standard shadows on terrain from players..
no shadows at all from statics..
Any ideas?
04/05/2004 (11:11 am)
No stencil shadows :(There seems to be standard shadows on terrain from players..
no shadows at all from statics..
Any ideas?
#31
For the player (datablock LightMaleHumanArmor) you need to add
enableStencilShadows = 1;
highDetail = 1;
updateEveryFrame = 1;
For static shapes you need to add
enable = 1;
highDetail = 1;
(the variable "enable" should be changed to "enableStencilShadows" in tsStatic.cc may be?).
For compatibility with older gfx cards (Riva TNT-Geforce 2 etc.) you need to go into true color mode and also add the patch that I have posted some lines before.
04/06/2004 (10:36 am)
To enable the stencil shadows you need to add the options panel extension and enable it there (or edit prefs.cs manually), and also patch the scripts for the player datablock and objects in the mission file. For the player (datablock LightMaleHumanArmor) you need to add
enableStencilShadows = 1;
highDetail = 1;
updateEveryFrame = 1;
For static shapes you need to add
enable = 1;
highDetail = 1;
(the variable "enable" should be changed to "enableStencilShadows" in tsStatic.cc may be?).
For compatibility with older gfx cards (Riva TNT-Geforce 2 etc.) you need to go into true color mode and also add the patch that I have posted some lines before.
#32
- Brett
04/06/2004 (12:17 pm)
It's cool to see people getting some use out of this. Really hoping that it will continually evolve and eventually be something that could be possibly rolled into the standard TGE codebase.- Brett
#33
Update.
starter.fps works fine but still have problems when I mod my own project. Terrain and waterblock is not loaded, but all other objects bot interior and static load fine.
04/06/2004 (6:10 pm)
@Stephane. Will try that. So this will mean any new mod outside of the starter.fps will have to be manually changed?Update.
starter.fps works fine but still have problems when I mod my own project. Terrain and waterblock is not loaded, but all other objects bot interior and static load fine.
#34
04/07/2004 (5:46 am)
After implementing this I noticed that while a moving object such as a vehicle will properly cast a shadow onto a static shape like a building, it doesn't seem to work the other way around. The building's shadow will not cast onto the vehicle if I drive it into the shadowed area. It looks really bad like that.
#35
04/07/2004 (6:51 am)
Hmm all of a sudden what I stated above is wrong. Its working all of a sudden. *shrug*
#36
04/07/2004 (8:27 am)
Is there any way to make the shadows "softer"? I tried using the alpha settings but it doesn't seem to make any difference.
#37
04/07/2004 (2:28 pm)
Well after digging around I found that the alpha settings don't seem to even be used.// Shadow alpha varies with distance from light source // glColor4f(0.0, 0.0, 0.0, mShadows[idx].mShadow->shadowAlpha()); glColor4f(1.0, 0.0, 0.0, 0.4);
#38
04/07/2004 (5:35 pm)
Dont want to sound like a broken record but is there a fix to getting the stencils to work with a modded project?
#39
We had no problems making this work with Mayhem, and we use a heavily modified engine, and almost no scripts from the Torque demo.
04/07/2004 (5:45 pm)
Not sure what you mean Bob. Obviously if you're not working with a base torque you may have to manually apply the changes. You can't expect to just drop it in and go with a modified Torque. That isn't broken, its just the nature of the beast.We had no problems making this work with Mayhem, and we use a heavily modified engine, and almost no scripts from the Torque demo.
#40
All I have done is copy the starter.fps folder, renamed it and used the -mod mynewfolder command. I haven't stripped any of the starter pack out, and normally start the project using the above command.
I have also tried copying all my data files into the starter.fps folder and I get the same result when I choose my level.
At the moment I'm using an older pre stencil torque_demo.exe to run my project.
Thanks
04/09/2004 (12:18 am)
Hi John.All I have done is copy the starter.fps folder, renamed it and used the -mod mynewfolder command. I haven't stripped any of the starter pack out, and normally start the project using the above command.
I have also tried copying all my data files into the starter.fps folder and I get the same result when I choose my level.
At the moment I'm using an older pre stencil torque_demo.exe to run my project.
Thanks

Torque Owner Britton LaRoche