| News / News archive |
| Guestbook |
| About |
| History |
| Wiki |
| FPS Magazine |
| Forums |
| Community Portal |
| Old forum archive |
|
Latest themes on the forum: |
If you're having problems, before bothering people on the forum, take a look here. Your problem might already be solved.
Q: Is Xtreme3D still relevant today?
A: For serious industrial use (creating commercial game projects), probably not. Xtreme3D is based on outdated graphics technologies (OpenGL 1.x/2.x) and certainly can't compete with modern engines like Unity and Unreal Engine. However, amateur game projects typically don't try to match the graphics of AAA titles, so Xtreme3D is perfectly suitable for creating simple indie games. The engine is interesting and appealing in its own way, and, theoretically, you could use it to create a game no worse than Doom 3 or Half-Life 2.
Q: Which engine is better, Xtreme3D, Ultimate3D, or GMOgre?
A: It all depends on your requirements regarding ease of learning, functionality, flexibility, and usability. Ultimate3D is very easy to learn, but technologically it is significantly inferior to the others. GMOgre is a fairly complex engine with a very unique API, but it is very powerful; you can do, if not everything, then a lot with it. Xtreme3D in its latest versions (3.0 and higher) has become closer to GMOgre in functionality and now can do almost everything it can. However, Xtreme3D has a simpler architecture, inherited from GLScene, and an intuitive API.
If you're just starting out in 3D graphics, we recommend Ultimate3D. If you already have sufficient experience with GM's integrated 3D graphics and aren't intimidated by the complexities and lack of documentation, you might want to consider GMOgre. If you simply need a lightweight, yet powerful and well-documented 3D engine that's easy to learn and easy to use, then go with Xtreme3D. Keep in mind that Xtreme3D is currently the only actively developed external 3D engine for current GM versions.
Q: What game genres can be made using Xtreme3D?
A: The engine has no genre restrictions, but is best suited for first- and third-person action games. Projects to create platformers, strategy games, top-down shooters, puzzle games, and racing games using X3D are also known.
Q: What rendering techniques does Xtreme3D support?
A: Xtreme3D is based on a classic forward rendering (fixed pipeline with vertex lighting). However, thanks to support for GLSL shaders in Xtreme3D 3.x, you can implement virtually any special effect or graphics pipeline, from simple per-pixel lighting to complex deferred effects like SSAO. Xtreme3D allows to implement per-pixel lighting models (Blinn-Phong, Cook-Torrance), image-based lighting (IBL), shadow maps (including cascaded), and a variety of post-processing effects.
Q: Why won't the engine start or is it running too slowly?
A: As of 2026, the engine should work fine. Some issues may be related to the video driver. Xtreme3D requires a driver with OpenGL 1.3 support (plus several extensions for specific features). If Xtreme3D doesn't start or is running slowly, we recommend updating your video driver.
Q: Why does the engine crash with an error?
A: Most often, the unknown error message ("Unexpected error occurred while running the game") occurs due to passing invalid parameters to Xtreme3D functions. For example, the engine doesn't check object IDs (pointers) for validity, as such checking is impossible to effectively implement. The engine assumes that you won't pass it invalid pointers.
An error also occurs if you try to load a non-existent texture or model. If your model contains texture data, ensure the engine can find it by specifying the texture folder using MaterialLibrarySetTexturePaths.
Finally, an error can occur if you try to delete an object that has children. Always detach children first or destroy them with ObjectDestroyChildren.
Q: Does Xtreme3D support shaders?
A: Yes, Xtreme3D 3.x fully supports shaders in GLSL 1.1 and 1.2. The engine also has many built-in shaders that implement various popular effects.
Q: Does Xtreme3D support dynamic shadows?
A: Yes, Xtreme3D 3.x supports three types of shadows (shadow plane, shadow volume, and shadow map). We recommend using shadow maps (ShadowMap objects), as they are the most modern and efficient. You can use them to create cascaded shadow maps to cover large areas with shadows—look for a demo in the SDK.
Q: Why does my game's FPS gradually drop?
A: There may be various reasons, but in Game Maker and Xtreme3D, disabling vertical sync at the engine level usually helps: ViewerEnableVSync(vsmNoSync). GM has a fixed step rate, so if you call ViewerRender in the Step event, vertical sync is not required; it will only degrade performance. Some users have also reported that ViewerResetPerformanceMonitor(viewer) helps.
Q: How can I improve game performance?
A: It depends on the game mechanics, but here are a few common methods:
Q: Why are the models in the game rotated incorrectly?
A: The reason lies in the differences between the coordinate systems of Xtreme3D and modeling packages. Xtreme3D uses a coordinate system where the Z-axis points forward relative to the screen (Z-forward) and the Y-axis points up (Y-up). You can easily fix this by
a) rotating the model in the 3D editor so that it is rotated correctly when loaded into Xtreme3D;
b) making the model a child of a Dummycube and rotating the model using ObjectRotate (in this case, the Dummycube is used for all other actions);
c) rotating the model using MeshRotate (for Freeform models only). In Xtreme3D 3.x, this function is called FreeformMeshRotate.
Q: Why aren't textures loading when loading models?
A: Xtreme3D material libraries load all textures from the game's working directory by default. If a model is located in a folder (for example, data/models), you must specify it as the texture path using MaterialLibrarySetTexturePaths. If you load models from different folders simultaneously, you should create multiple material libraries and switch between them using MaterialLibraryActivate when loading. For each library, you must specify the texture path for the corresponding model. In Xtreme3D 3.x, libraries are specified individually when creating a model, so switching using MaterialLibraryActivate is not necessary.
Q: What are dummycubes and what are they used for?
A: A dummycube is a very important object type. They are invisible and used to create hierarchical structures. By making a dummycube the parent of one or more objects, you can manipulate them all at once by manipulating the dummycube. For example, if you hide a dummycube, all its child objects will also be hidden. This is very convenient for representing a group of objects of the same type. A second main purpose is to create pivot structures, where the secondary states of an object depend on the primary ones. If, for example, you need to get or set an object's rotation independently of its direction vector, it's easier to make the object a child of a dummycube and use the dummycube for direction and the object for rotation. A similar structure is used in skeletal animation.
Q: Why aren't mouse events working in Xtreme3D?
A: Mouse events only check the GM window, while Xtreme3D creates a new active form on top of the old one, so regular mouse events don't work there. Mouse presses can only be checked using the keyboard_check_direct(mb_left) or keyboard_check_direct(mb_right) functions—in these cases, presses are checked directly at the system level, regardless of the specific active window. In Game Maker 8, you can also use the mouse_check_button_pressed function.
Q: How do I make the game window fill the entire screen? The Start in full-screen mode option doesn't work!
A: In the Global Game Settings, on the Resolution tab, check the "Set the resolution of the screen" box. In the Resolution list, select the desired resolution (usually the one specified in the ViewerCreate function). In the Graphics tab, select Start in full-screen mode, as without full-screen mode, the window borders will be visible.
Q: How do I check for collisions?
A: Xtreme3D has several built-in methods for this.
You can also include an external library with a collision checking implementation.
Q: How do I get a realistic camera perspective?
A: Sometimes, achieving a realistic perspective requires correcting the "optical" characteristics of the game camera. The following example of such correction minimizes perspective distortion:
CameraSetFocal(camera, 120);
CameraSetSceneScale(camera, 0.5);
Q: How do I get the names of the materials that are loaded automatically with a model?
A: Materials are loaded into the currently active library under the names specified in the 3D editor. You can use these names to change the model's material parameters.
Q: Why does the terrain look jagged?
A: If the terrain looks jagged, it means the original heightmap is encoded at 24 bits per pixel, not 8 as it should be. The image needs to be converted to black and white (256 colors). For example, in GIMP, this is done like this: Image -> Mode -> Grayscale.
Q: How do I indicate a line break in text objects?
A: In Xtreme3D text objects, the '#' character does NOT indicate a line break. This is achieved by using the 13th ASCII character (carriage return) - chr(13), for example:
TextSetText(text, 'Line1' + chr(13) + 'Line2');
Q: How do I display non-Latin characters in text objects?
A: Use the TTFont font and pass UTF-8 encoded strings to text objects. In older versions of Xtreme3D, you can use a raster font (Bmpfont), where Latin letters are replaced with non-Latin ones, and then display the corresponding text in Latin characters.
Q: Does Xtreme3D support video playback?
A: Limited video support (via MCI) has been available since version 4.1.
Q: Why aren't forces applied to ODE bodies?
A: That's because Xtreme3D 2.0.2.0 introduced the ability to automatically disable bodies if they're idle for a certain amount of time, and forces can't be applied to disabled bodies. Auto-disabling is enabled by default; you should simply turn it off:
OdeWorldSetAutoDisableFlag(false);
Q: Does ODE support ragdolls?
A: Yes, ODE in Xtreme3D 3.1 supports ragdolls for Actors.
Q: Why doesn't the material take the texture's alpha channel into account?
A: You need to set the bmTransparency blending mode using the MaterialSetBlendingMode function.