CommonSurfaceShader in view3dscene and Castle Game Engine implemented:)

Posted on

CommonSurfaceShader with bump mapping
CommonSurfaceShader with steep parallax bump mapping and self-shadowing
CommonSurfaceShader defining a mirror for ray-tracer

I’m proud to announce an initial implementation of CommonSurfaceShader in Castle Game Engine and view3dscene! CommonSurfaceShader acts as a powerful “material on steroids” X3D node, in particular with support for normal maps (bump mapping).

1. The documentation

2. The demos

3. To try this *now*, you can use view3dscene from our “nightly builds”. Or you can compile any of the engine tools (like examples/3d_rendering_processing/view_3d_model_basic ) using the engine code from GitHub.

This is happening thanks to the support on Patreon ( Robert Daniel Murphy sponsored improving the Blender exporter to be able to export normalmaps (and specular maps and similar) from Blender to Castle Game Engine easily. I took the idea a little further, and implemented it by adding the CommonSurfaceShader node to the engine, and then the Blender exporter will export an X3D file with the CommonSurfaceShader.

This way the Blender exporter will be improved for everyone, e.g. Instant Reality / X3DOM users will also benefit by having an exporter that can write CommonSurfaceShader.

More work is yet ahead (the Blender exporter, and the specular maps are not done yet). But the CommonSurfaceShader, with many basic fields, and normal maps, is supported now!

The CommonSurfaceShader works both for interactive rendering, and for our toy raytracer. It is also understood when editing materials in view3dscene (Edit->Edit Material->… menu items).

P.S. If you like view3dscene, or you’d like to request more view3dscene features like that, please support me on Patreon !:)

Comment on this post ➤

fpcupdeluxe and Castle Game Engine

Posted on


Recently I’ve been playing with fpcupdeluxe, a great tool to install FPC/Lazarus (stable, unstable…), with cross-compilers. I’m very impressed by it, and I wrote a wiki page documenting how to use it (in the context of Castle Game Engine, although contains some general notes too):

In another news: Ten Square Games is helping us by lending Apple hardware with the latest Mac OS X! This is a great help towards the upcoming improvents of iOS in the Castle Game Engine (integrating it with the build tool better). Thousand thanks!

Comment on this post ➤

Support for the STL format for 3D models (commonly used for 3D printing)

Posted on

Knocker in STL format, by Shira,
Robot woman in the STL format, by Shira, see
Moonkin Bust in the STL format, by bardiir, see

Castle Game Engine and view3dscene support now the STL format for 3D models, commonly used for 3D printing. This means that you can open these models using view3dscene, or the engine API (TCastleScene.Load), and you can convert STL files to X3D.

It’s a really simple 3D format (just vertexes with normals), and I think that the current loader (in file x3dloadinternalstl.pas) nicely serves as an example 3D file loader in our engine. It shows how to read binary and text files from a TStream instance using some helpers in our engine.

More information about the STL format is available in Wikipedia. We support both the text (ASCII) and binary formats.

Blender includes an exporter to this format.

Many sample models in the STL format, ready for 3D printing, can be downloaded e.g. from Thingiverse.

If you’d like to try it NOW in Castle Game Engine, you can download the view3dscene from snapshots. Or you can grab the source code of the engine and view3dscene from GitHub: ,

Comment on this post ➤

Castle Game Engine 6.0.2 release!

Posted on

Test local (international) characters

We’re happy to announce Castle Game Engine 6.0.2 release!

Download it from our webpage.

This is a small, mostly-bugfix release. So we only have 6 new features:)

New features:

  1. sprite-sheet-to-x3d tool: The animations duration is now calculated looking at the number of animation frames and the FramesPerSecond value. FramesPerSecond is by default 4, but it can be changed by the –fps= command-line option.
  2. New test_local_characters testcase (inside examples/fonts/test_local_characters/), testing reading and rendering of international characters (Chinese, Russian, Greek…).
  3. LoadAnimatedGifs, see an example GIF player🙂 It requires having ffmpeg installed, though, for now.
  4. Better API around TextureProperties X3D node.
  5. Automatic gzip extension recognition for URLReadXML / URLWriteXML (by Eugene Loza, thanks!).
  6. Unix manpages for utilities can be generated (see doc/man/man1/ in sources). All utilities support now –help and –version options.


  1. OpenGLES (mobile) fixes for Color and ColorRGBA nodes handling.
  2. Removed the proprietary Chartboost and Heyzap jar files from the distribution. They were packaged by accident in our zip and tar.gz archives. Users should download them on their own, following links from Android components page.
  3. Fix reading X3D files with IMPORT.
  4. Fix UI in examples/fonts/html_text.lpr.
  5. Various fixes for switching font at runtime. The test_local_characters demo shows that now everything works.
  6. Remove the warnings from FPC 3.x around WideString convertions when dealing with XML units (by Eugene Loza).

Please check the downloaded file correctness!

Downloading the files from SourceForge may be unreliable now, in my tests. After downloading, please double-check the correctness of the downloaded file:

  • the size should be precisely 126164527 ,
  • the md5sum should be 7f6ccd3f4d6a2547299ea4dc9ef0ad15 .

I’m talking with SourceForge to have it fixed. Eventually, we may move our downloads to another server.

Comment on this post ➤

view3dscene 3.16.1 release

Posted on


We have just released view3dscene 3.16.1. This is a bugfix release for an important bug that slipped in view3dscene 3.16.0 (most files using the IMPORT keyword failed to load with “Invalid type cast” message).

view3dscene is our open-source cross-platform X3D and VRML browser (and a viewer for other 3D formats). It is quite powerful tool on it’s own, to inspect 3D models in various formats — it can play animations, you can work in 3D worlds with collisions and gravity, it can play X3D scripts and more:)

All the comments are welcome, as always!

Comment on this post (2 comments now) ➤

API Reference improvements

Posted on

API Reference search

I improved our API reference. It now has a search box, and a navigation toolbar, making it look more like a normal part of the Castle Game Engine website.

Hint: I’m the maintainer of both Castle Game Engine, and PasDoc — an open-source documentation tool for Pascal 🙂 I actually enhanced PasDoc to make it possible. PasDoc has now three new command-line options and produces nice HTML5 output. If you use PasDoc in your own projects, you benefit too — you can now style the PasDoc output to fit your webpage! If you’d like to try PasDoc, go to .

Comment on this post ➤

Plans, thank yous, and improvements to “Getting Started”

Posted on

castle_base package: Compile

A week ago we have launched our Patreon campaign, and we already reached 25% of our first goal! I wanted to thank everyone who decided to support the engine, and please keep it coming! This really matters a lot to the engine future — it essentially allows me to focus all my (computer) life on the engine, and I think that I can do some amazing things with this:)

Plans for the next releases:

  • Release 6.2: Easy iOS recompilation
  • Release 6.4: Delphi compatibility (after many encouraging comments I got from the Delphi community on FB and G+)
  • Release 6.6: Physics, or Visual designing (like GLScene) (depending on YOUR feedback!)

More details about the above features, and more plans, are here. I plan to maintain this “Planned features” page forever, adding there stuff (and removing stuff, too, as it gets implemented:). So be sure to check it often.

Getting started improvements:

Our “Getting started” page was much improved, with screenshots showing the Lazarus installation process. See also a movie (thanks to Eugene Loza!)

Comment on this post ➤

New engine logo

Posted on

New engine icon

We have a new engine logo! You’re welcome to use it in your own games, with a title like “Made using Castle Game Engine”, to help promote our engine! It is available in doc/pasdoc/logo subdirectory of the release:

The logo is made by Paweł Wojciechowicz. Just like some other pretty stuff you see in the engine demos (black & white dragon on our banner).

Once we reach our first goal on Patreon (please support us!), Paweł promised to make a set of cool engine-themed wallpapers for patrons. So, more pretty stuff is coming:)

Comment on this post ➤

view3dscene and glViewImage for Mac OS X

Posted on

view3dscene on Mac OS X, with native UI (menu, open dialog...)

Remember to check out the latest Castle Game Engine 6.0 release ! And check our page on Patreon — it has a cool movie showcasing the engine possibilities:)

Since the release this weekend, we already did more stuff:

  • view3dscene and glViewImage released also for Mac OS X (initially were only for Windows and Linux). Highly advised to check your game assets and images.
  • Workaround in engine on GitHub for a small FPC 3.1.1 bug.
  • And improvements to our news pages.
Comment on this post ➤

Castle Game Engine 6.0 release!

Posted on

View3dscene "Lights Editor" at work setting shadow maps
HTML text
Savegames in the cloud using Google Play Games
Dragon Squash title screen and it's game balance equation designed in CastleScript
Curve drawn as enemy "swarm" trajectory
Tiled Sample Map rendered using our engine
Normalmaps - lizardman front in Blender
Normalmaps - lizardman front in our engine (view3dscene)
Normalmaps - lizardman back in Blender
Normalmaps - lizardman back in our engine (view3dscene)

We’re proud to release Castle Game Engine 6.0, a major upgrade to our open-source 3D and 2D game engine for Object Pascal!

Download it from our main page.

This release is the result of more than a year of intensive engine development. The main feature is that almost every part of the engine got significant improvement:) Throughout 2016 I was using the engine intensively to make some cool games, and it resulted in numerous major improvements.

The most important new features are:

User interface and 2D

  1. All UI classes now support automatic UI scaling, parents and anchors. The new manual page about user interface documents these features.

  2. New components: TCastleTimer (demo in examples/2d_standard_ui/timer_test), TCastleScrollView (demo in examples/fonts/html_text), TCastleFlashEffect, TCastleInspectorControl.

  3. TCastleLabel supports now basic HTML (rich text) (demo in examples/fonts/html_text).

  4. Render animation from a sprite sheet in 2D using TSprite (by Tomasz Wojtyś).

Build tool

See the build tool documentation and CastleEngineManifest.xml examples for more details about these features.

  1. Automatic generation of GPU-compressed and downscaled textures. They can also be automatically used by loading the same material_properties.xml in game, so you have a single place where you control which textures are compressed / downscaled.

  2. Valgrind compilation mode (--mode=valgrind), new subcommands "run" and "simple-compile".


  1. A large number of Android package components that provide an instant integration with various 3rd party Android libraries: Google Play Games, in-app purchases, sound, ads, analytics, vibrations and more.

  2. Savegames in the cloud. See ShowSaveGames, SaveGameSave, SaveGameLoad.

  3. UserConfig supported for easy persistent data (local savegames).

Game assets – new formats, extensions, conversions

  1. New castle-anim-frames format, with a Blender exporter. This can export any animations from Blender to our engine (armature, shape keys, physics simulations, particles….), and it can be loaded to TCastleScene, and played by our simple PlayAnimation method.

  2. New X3D extensions: Shape.shading = “WIREFRAME”, fields “slices”, “stacks”, “divisions”, using normal maps from a MovieTexture, Shape.render, many shadow maps and shadow volumes improvements.

  3. Tiled maps support (by Tomasz Wojtyś).

  4. sprite-sheet-to-x3d utility, to convert Starling and Cocos2D spritesheets to X3D (by Trung Le).

More stuff!

  1. CastleRandom unit – fast, wrapped in a class random generator. Use when the speed of random generation is paramount, or you want to use a couple of the generators in parallel (by Eugene Loza).

  2. Design a 2D curve using the “castle-curves” tool, and use it in your programs.

  3. Not integrated with the engine yet, but do check it out: 2D particle system for our engine! (by Trung Le).

  4. Demo models 3.7.0: many new demos, e.g. for castle-anim-frames, bump_mapping, more path tracer demos in lights_materials/raytracer.

  5. Alpha bleeding option in glViewImage 1.6.0.

  6. view3dscene 3.16.0: easily set gravity “up” vector to +Y or +Z, numerous “Lights Editor” improvements.

  7. The engine development has moved to GitHub. The Castle Game Engine repository is here, and a lot of related projects and examples are part of our organization. One of the practical advantages of this is that anyone can submit improvements more comfortably through GitHub: you can fork the engine, commit stuff, and then submit a pull request. This is a cool advantage of Git and GitHub.

  8. Somewhere in the middle of it all, Michalis also wrote a small book about the modern Object Pascal language.

Last but not least, I wanted to mention our new Patreon page. You can support the engine development, help me add great features to the engine, and get some real rewards — I’m devoting a weekend per month exclusively to the features requested by Patrons, you can get access to the cloud build server (continuous integration) for your game projects, and I will have a 24h gamejam every month making a demo game requested by Patrons. Please check out our Patreon page:

Suppport the engine on Patreon

At the end, I wanted to thank many people who helped in this release. In particular, my warmest thanks go to Trung Le, Eugene Loza and Tomasz Wojtyś for contributing a lot of engine improvements. There’s nothing more rewarding than to see other people actually using your engine to do cool stuff, so you really made a difference in my happiness!:) Please continue to contribute!

And a special thanks go to Paweł Wojciechowicz for relentlessly designing fantastic graphic stuff for a color-blind, stubborn programmer!

Thank you!

Comment on this post ➤