Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

1. December 2015


Autodesk just announced the release of Extension 2 for 3ds Max 2016.  Extensions are interim updates between major releases.  Extensions 2 adds the follow functionality:

  • With fundamental improvements in the Max Creation Graph (MCG), users can now animate accurate simulation data like Computational Fluid Dynamic (CFD) data or other data inside their 3ds Max scenes. 
  • With the new built-in “Send To” Autodesk Print Studio button, users can quickly export and 3D print any of their 3ds Max creations. 
  • The new Texture Object Mask modifier allows users to position and animate textures on an object using other objects in the scene. 
  • The new TextPlus feature, introduced in Extension 1, now has the ability to use text strings and shapes to be used as a material map, creating material decals in your scene.  

They have created a video showcasing the new capabilities:

Read more at the official announcement.

GameDev News ,

20. November 2015


Recently I just finished a tutorial covering creating isometric maps using the Tiled map editor.  One commonly occurring question was “where can I get tiled-friendly isometric tile sets?” for free.  The answer unfortunately is there aren’t a ton of options.  There are a few good isometric tile sets out there (I may coverisometrictitle this in a different post), but not a ton of choices.  So instead I’ve decided to look at the process of making isometric tiles in Blender and thankfully it’s not that difficult.  The process follows.  There is also an HD video version of this tutorial available here.


First load up blender.  We are going to start by just making a 64x64 pixel tile of the default Blender cube.  For this exercise we are going to have our object centered about the origin.  Precision is of critical importance to this entire process, so we are going to be working numerically in the properties panel(N key).




Now let’s delete all of the faces except the base:



The majority of the work is actually in setting up the camera.  With the camera selected we need to position it.  Since our object is at the origin, we need to offset away from it.  As the isometric style is from above and at an angle we offset 60 degrees on the X axis and 45 degrees around the Z axis.  If you are using a more skewed perspective ( not 2:1 ratio ), you will choose a different  rotation.  We also move the camera back along the Y axis and up the Z, we will be moving the location slightly later.



Next we set the dimensions of our camera in the Camera tab, we are going to start of with 64x32 at 100%, like so:



Now in the Properties editor, select the camera icon and we need to set the camera to Orthographic.  We then adjust our Orthographic scale until the camera extents capture the cube.



In 3D view switch to camera view (0) then adjust the Orthographic Scale and Z axis of the camera until your image is framed, like so:



Now change the camera dimensions from 64x32 to 64x64 and adjust the z value of the camera until the base tile is aligned to the bottom of the camera frame, like so:



Now render it out to texture.  We already set up the render dimensions, now we simply need to set the renderer to render transparency:



In Shading in the Rendering tab set alpha mode to Transparent.  Now render your tile and TADA:



Now let’s extrude our tile to the extents of our camera frame, like so:



Then render it out:



Now you can test our two isometric tiles out in tiled:



Now you will notice the tiles look remarkably, um, tiled.  This is due to the shading.  In the materials for your tile, set Shadeless on, then the results look cleaner.



Creating a Reference Cube

It’s possible you want a framework to model non-cube shaped entities in an isometric style.  Thankfully it’s incredibly easy to create such a thing. 

First take your reference cube, then apply a Wireframe modifier to it:



This now gives you a nice shape to use for reference, like so:



Now chances are if you are going to model within the reference you are going to want to make it unselectable and mark it so it doesn’t show up in the renders, like so:



Now of course you will probably want bigger than 64x64 tiles.  One option is to simply duplicate our cube, then move it by 2 units (as our cube is 2x2 in size) along the X axis, like so:



We can then render each tile by moving the camera by 2 along the X axis, setting all other tiles to not render, although this could easily be scripted.


Chances are we are going to want to make several tiles at once too and this would also be extremely easy.  Simply take your reference tile and apply an array modifier then another array modifier, like so:



The only difference between the two modifiers is the axis of the relative offset.  This now gives up a 6x6 grid of tiles to work with:



Only problem is, now we have one big tile instead of 36 separate tiles, but no matter, this is easily resolved!  Make sure both Array modifiers have been applied.


Now enter Edit mode and press P –> Separate by loose parts.

Next select them all in Object mode and select Set Origin->Origin to Center of Mass.


And TADA, 36 tiles ready for editing!



Of course if you wanted to edit the tiles as a whole (for example, connected terrain) you would do this before performing the separation. 


Next we have to render each tile.  Basically grab a tile, translate it to the origin, hide the other 35 tiles, render it.  Now repeat that process 35 times.  Sounds fun, eh?

Yeah, not to me either, good thing I’m a programmer. Let’s take a look at automating this using Python in Blender’s built in API.   Please keep in mind, I rarely program in Python and have never scripted in Blender, so don’t expect brilliance!

import bpy

objs = []
for obj in

# loop true all the meshes, hide all but active, and copy active to 0,0,0 and render        
for curObj in objs:
    prevLoc = curObj.location.copy()
    curObj.hide_render = False
    for otherObj in objs:
        if curObj != otherObj:
            otherObj.hide_render = True
    curObj.location = (0,0,0)['Scene'].render.filepath = "c:\\temp\\" + + ".png"
    bpy.ops.render.render(write_still = True)
    curObj.hide_render = True
    curObj.location = prevLoc


Now if you run that script it will render all of the tiles to your C:\temp directory.


Of course the key to making tiles look good is going to be the texture mapping…  but you’ve got all the tools you need to succeed and quickly at that.


The Video

Art, Programming, Design , , ,

19. November 2015


The Leadwerks Game Engine game launcher now works with SteamOS with a few caveats.  From the Leadwerks blog:

Leadwerks Game Launcher now works with SteamOS, with some caveats.

First, you must set the application to use the "Official Bindings" controller configuration by Leadwerks Software.

When you start Leadwerks Game Launcher on SteamOS, a page of available games will be shown.  Click on the game you want to play.  The game will be shown on a new page, and a blue button will appear on the bottom left of the screen.  You can press the B button on your controller to go back to the main page, or mouse the cursor over the blue button and click (right trigger).
The application will pause while the game is downloaded.  At this time no progress indicator is shown while downloading, but most games only take a few seconds.  The game will then launch.  Most games can be exited by pressing the right arrow button just to the right of the Steam button on your controller. Some games will presently not work correctly.
To exit the game launcher, press the right arrow button just to the right of the Steam button.
Attached Image

GameDev News ,

11. November 2015


Urho3d, an open source 3D engine we took a closer look at last year, just released version 1.5. 

link to



From the release notes:

  • Database subsystem with either SQLite or ODBC support.
  • Localization subsystem.
  • Improved the navigation / crowd navigation API and examples.
  • SSE and animation performance optimizations.
  • Enable BT_USE_SSE on Linux and MinGW platforms, enable BT_USE_NEON on Android and Raspberry-Pi platforms.
  • Urho3D macros such as OBJECT, EVENT, HANDLER renamed to have URHO3D_ prefix to prevent ambiguity with other libraries.
  • Double support to Variant, Deserializer, Serializer & JSONValue. Store Lua object attributes accurately as doubles.
  • Support for moving nodes & components between scenes, or creating components “sceneless” and moving into a scene later.
  • Cubemap loading from DDS files.
  • Refactored the object class registration mechanism to store the object’s base class for “Is this class derived from this” queries.
  • Optional “raw” Lua file loading through direct filesystem access for easier debugging.
  • Configurable blend mode in renderpath quad commands.
  • UV coordinates added to raycast results.
  • Allow submitting bare function names instead of full signature to Execute() & DelayedExecute() in AngelScript, similar to specifying event handler functions.
  • Allow negative scale for nodes.
  • Culling camera optimization for viewports, to allow rendering multiple viewports with the same culling data set.
  • Refactor Urho2D animation playback. Add optional Spine support (user must supply Spine runtime.)
  • Refactor Urho2D sprite atlas handling.
  • CollisionShape acquires model resource from StaticModel in same node automatically if collision model undefined.
  • Request the high-power GPU on AMD multi-GPU setups.
  • API for programmatic animation track & keyframe creation.
  • Added AnimationController IsAtEnd() function.
  • Added “remove on completion” mechanism to AnimationController.
  • Added function to remove all components of type to Node.
  • Added GetParentComponent() function to Node.
  • Added resource memory usage stats to DebugHud.
  • Support for ScanDir() on Android.
  • Improve Variant / VariantMap bindings on Lua.
  • Improve internal mechanisms for Lua bindings, e.g. store Urho3D context inside Lua state global table.
  • Improve API for kNet connection stats.
  • Improve AngelScript GetChildrenWithClassName() to return also derived classes.
  • Improve UI tab behavior
  • Improved navigation debug geometry
  • Improve ConvexCast by taking into account CollisionShape’s offset position & rotation.
  • Spline class cleanup & improvements, including linear interpolation mode, and looping Catmull-Rom mode.
  • Refactored JSONValue class to be more JSON-like.
  • Material render order support within a pass.
  • MM_FREE mouse mode, which disassociates cursor visibility from being confined inside the window.
  • Allow doubleclick event in UI over emptiness
  • Make Octree::Raycast() threadsafe.
  • GetGLContext() added to GraphicsImpl on OpenGL to allow the application to perform manual context switching.
  • Fixes for vertex texture fetch on D3D11.
  • Allow optional forced creation of CPU-only vertex & index buffers also in non-headless operation.
  • Unified texture upload behavior: half-float formats need to be provided as such on both D3D & OpenGL. Added float/half-float conversion functions.
  • Automatic generation of intermediate directories in FileSystem::CreateDir().
  • Warn if attempting infinite distance physics raycast. Remove erroneous infinity default value from AngelScript physics raycast bindings.
  • Allow non-strict numeric type to be returned from Variant, e.g. GetFloat() succeeds for an int.
  • Allow to disable PhysicsWorld or PhysicsWorld2D automatic simulation stepping during scene update. When disabled, the physics world can still be stepped manually.
  • Support for manual advancing of value animations.
  • globalVars VariantMap for AngelScript to allow easy cross-ScriptFile parameter passing.
  • Improve ConvexCast() to return distance using the hit fraction.
  • Ensure normalized vertex weights in AssetImporter, and clamp to 4 weights maximum instead of error, by dropping the smallest weights.
  • Configurable layer count in DynamicNavigationMesh to control memory usage.
  • Emscripten ETC1 & PVRTC extension support detection.
  • Emscripten hardware instancing support.
  • emscripten_get_now() for better timer precision and less CPU use.
  • Disable frame limiter Sleep() on Emscripten.
  • Disable audio output in C++ samples where it isn’t necessary.
  • Remove redundant glEnable() / glDisable() calls related to OpenGL texture types.
  • Removed defined_ member variable from BoundingBox, Sphere & Rect in favor of determining the definedness from the bounds being valid.
  • Invalid order checking for Lua binding overloads.
  • Dangerous math class constructors marked explicit.
  • Properly enabled multithreading in GCC/Clang builds.
  • Emscripten toolchain & build related fixes and improvements.
  • Clang tools support in the build.
  • Annotator & script binding extractor skeleton tools in preparation for generated script bindings.
  • Build improvements for CLion IDE.
  • Support Android NDK r10e.
  • Support non-PCH build.
  • Support spaces in path for build.
  • Install d3dcompiler DLL to bin directory for Windows / D3D builds.
  • Improved Urho3D DLL installation logic.
  • More user-friendly operation for missing HTML help compiler or dot.
  • Symlink assets to the build binary directory.
  • Allow installed sample executables to run out-of-the-box on Windows.
  • Reformatting of source code to get rid of indents on empty lines.
  • Script subdirectory in the engine source renamed to AngelScript.
  • Option to build Urho3D without threading (URHO3D_THREADING). Normally disabled on Emscripten but can be enabled for experimental development on browsers with included support.
  • Improved documentation on contributing and 3rd party library policy.
  • Update AngelScript to 2.30.2.
  • Update Assimp to September 2015 revision.
  • Update Bullet to 2.83.6.
  • Editor: setting for new node position preference.
  • Editor: particle editor improvements.
  • Editor: function to assign child nodes into a spline path.
  • Editor: center camera on object with HOME key.
  • Editor: selectable MMB functionality.
  • Editor: language selector and localizations.
  • Editor: Blender hotkeys mode.
  • Editor: HSV color wheel.
  • Editor: event handling refactoring.
  • Editor: 3D debug icons.
  • Editor: make showing IDs optional.
  • Editor: cubemap generation support.
  • Editor: export scene to .obj.
  • Editor: accelerator keys for reset pos/rot/scale.
  • Editor: quickmenu select topmost option with Enter key.
  • Editor: local offset added to spawn editor.
  • Fix missing bindings in navigation / crowd navigation script API.
  • Fix missing Lua bindings for Component class.
  • Fix SplinePath AngelScript bindings.
  • Fix failure to add / remove obstacles due to DetourTileCache queue being full.
  • Fix UI element debug draw.
  • Fix quantized AABB bug with large collision meshes.
  • Fix incorrect viewport size when rendering to both backbuffer & textures.
  • Fix flashing of 2D sprite animations due to misreported animation length.
  • Fix AssetImporter single keyframe animations.
  • Fix GetData() from rendertarget textures on D3D9.
  • Fix handling of lightmap textures in AssetImporter.
  • Fix debug geometry rendering if backbuffer resolve was used.
  • Fix blend mode of Urho2D material getting overwritten.
  • Fix terrain shader quality on mobile devices.
  • Fix partial rendertarget clear on D3D11.
  • Fix URHO3D_PACKAGING build option on Windows shared lib build.
  • Fix PackageFile::GetEntryNames() to return filenames with original case.
  • Fix FXAA3 shader on OpenGL.
  • Fix Depth shader on D3D11.
  • Fix Blur shader.
  • Fix shader code which attempts to use 3D textures on GLES.
  • Fix objects getting removed from physics simulation due to zero Node scale on some axis.
  • Fix line height of included SDF fonts. Fix corrupt rendering if Text3D changes font from SDF to non-SDF or vice versa.
  • Fix inaccurate terrain occlusion.
  • Fix ValueAnimation resource not loading properly.
  • Fix RigidBody2D body type enum.
  • Fix RigidBody2D & CollisionShape2D to be resilient of the add order.
  • Fix Drawable2D’s not using viewmask in rendering & raycast.
  • Fix Quaternion::FromLookRotation() zero cross product case.
  • Fix RigidBody2D custom mass handling.
  • Fix multiple value children created into XMLElement.
  • Fix TmxFile2D loading according to the updated Tiled spec.
  • Fix integer overflow in Random() functions.
  • Fix potentially unreleased Lua function references.
  • Fix UIElement functions that may crash at UI deletion time.
  • Fix mistaken commenting out of GLSL source code.
  • Fix animation “freezing” due to model being invisible while the animation finishes.
  • Fix Graphics::ResolveToTexture() on D3D11, especially for less-than-fullscreen viewports.
  • Fix potential crash or error during animation event processing, if animations are added/removed.
  • Fix potential null pointer access at navmesh destruction time.
  • Fix not allowing collision geometry from multiple CustomGeometries in the same node.
  • Fix space glyph not getting loaded in some fonts.
  • Fix missing resource dependencies tracking when resource autoloading is switched on during runtime.
  • Fix crash on MinGW build with SSE optimizations.
  • Fix windowed / fullscreen switching on Emscripten.
  • Fix missing URHO3D_API specifiers from some classes / structs.
  • Fix improper rounding during TrueType loading, which would displace some glyphs.
  • Fix incorrect bounding box of StaticSprite2D.
  • Fix lost font texture (OpenGL only) not being handled for Text3D.
  • Fix crash with CollisionChain2D with not enough vertices. Allow to create CollisionChain2D in the editor.
  • Fix crash caused by querying HashMap or HashSet while it’s being cleared.
  • Fix erroneous hardware keyboard input on Android.
  • Fix Android MIPS build.
  • Fix UI element layouting changing the user-defined minimum size.
  • Fix crash in 64bit build when opening the console window.
  • Fix potential edge artifacts in dynamically created spritesheets.
  • Fix Spine animation playback thread safety.
  • Fix mouse button release while cursor hidden not releasing drag elements.
  • Fix too heavy-handed skybox shader Z adjustment on GLES, which caused objects to be obscured by the skybox.
  • Fix protected AngelScript class variables showing up as serializable/editable.
  • Fix ResourceRefList serialization bug caused by String::Split() not returning empty strings.

GameDev News , ,

4. November 2015


Although I’ve done a couple previous tutorials covering texturing in Blender, including this text one and this video one, I’ve never really shown the entire process.   This video simply illustrates a quick UV Unwrap/Texture job in Blender.


The high def video is available here.

Art ,

Month List

Popular Comments

Spriter 2D Animation System RElease Version R9
Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

30. August 2016


BrashMonkey’s Spriter, an IK based 2D bone animation application, just release version r9.  This package enables you to use traditional 3D style animation workflow to animate 2D sprites.  Fixes and improvements from the release notes:


Additions and Enhancements

  • Windows version now has access to an additional gig of RAM. Solves black image issue for very large projects.
  • Added the ability to set a bounding box for animations using an automatic bounding box calculation
  • Crash detection now extends until the program is successfully closed (rather than just after successful program startup)
  • You can now nudge a pivot point one approximate pixel at a time using the arrow keys in the pivot point widget
  • Canvas now updates changes from the pivot point widget in real time when character maps are active

Bug Fixes

  • Fixed a bug that could cause certain projects to fail to save a spritesheeted version if the project used nested subdirectories
  • Fixed a bug where changes made by editing a subentity's properties through the object widget would revert after unfocusing the object widget
  • Fixed bug that resulted in scrubbing playing a split-second of the start of an audio clip when doing slow pixel by pixel audio scrubbing or scrubbing with snapping on
  • Fixed a bug where exporting pngs/gifs would export any active onion skins
  • Fixed a bug where it was possible for pixel art mode to sometimes save unrounded values. Now also attempts to repair unrounded values from previous version upon loading as well.
  • Fixed a bug where children of IK locked parent bones would inherit properties even if that property's inheritance was disabled
  • Fixed a bug where metadata (variables and tags) keys would disappear if moved when if the metadata timelines were collapsed
  • Fixed a bug where the resize (drag arrow) controls for changing animation bounding boxes would zoom along with the canvas
  • Fixed a bug where resizing a project would round all image sizes down. Now rounds image sizes to the nearest integer.
  • Fixed a bug where resizing a project would save the original image sizes in the 'file' section of the scml/scon file
  • Fixed bug where holding shift to use proportional scaling while resizing objects in canvas would cause erratic behavior or crashes if the pivot points were too close to the edge of the bounding box being dragged
  • Fixed a bug where object properties widget cut off text on Windows machines with high DPI displays
  • Fixed a bug where points which were children of parent bones with negative width or height would display their angles incorrectly

GameDev News

blog comments powered by Disqus

Month List

Popular Comments