Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

28. August 2017

Somewhat belatedly announced (by me), Urho 3D 1.7 was released last week.  Urho is an open source 3D game engine available here.  I coveredlogo a previous version of the Urho game engine as part of the closer look game engine series if you wish to learn more.  Urho is also the underlying technology behind the Atomic Game Engine as well as Xamarin’s C# port, UrhoSharp.

Urho 1.7 brings several new features including inverse kinematic (IK), Apple TV platform support, WebAssembly compilation and much more.  Details from the release notes:

  • Inverse kinematics support.
  • Bullet RaycastVehicle support.
  • AppleTV platform support.
  • WebAssembly support on the Web platform.
  • IME support on Linux platform.
  • Several font rendering improvements and TypoGraphy sample.
  • WebP image loading support.
  • Sparse navigation meshes and navmesh streaming support.
  • AutoRemove bool removed. Replaced with more general AutoRemoveMode mechanism.
  • Free functions supported in attribute accessors.
  • IntVector3 class.
  • EnumAttributeAccessorImpl is now compatible with enum classes.
  • Use default continuous physics & substepping values for Box2D world.
  • Node-specific 2D physics collision events.
  • Improved Box2D joint handling.
  • Use GetDerivedComponent() when getting PhysicsWorld2D to allow subclassing it. PhysicsWorld2D members no longer private also for this reason.
  • ApplyLinearImpulseToCenter() function in RigidBody2D.
  • Additional info exposed in 2D physics events.
  • CollisionShape2D scale allowed to be signed.
  • Refactor PhysicsWorld2D contact info.
  • ParticleEmitter2D can be made to stop / restart emitting.
  • CSV and base64 encoding options when loading TMX files.
  • Several tilemap / TMX file improvements.
  • Improved convex hull debug draw.
  • Bool & int shader parameters on D3D11 / OpenGL.
  • Maximum extrusion distance for directional light shadows.
  • Shader compilation defines added to materials.
  • Shader compilation defines added to renderpath commands.
  • Shader compilation define exclusion mechanism in Pass.
  • Multisampled rendertargets.
  • Mipmapped rendertargets.
  • Alpha-to-coverage can be enabled in pass or material. Requires D3D11 or OpenGL.
  • Line antialiasing support.
  • Optional soft particles support.
  • Improve VSM shadows by moving z/w divide to pixel shader.
  • Anisotropic-nearest filtering mode, when supported.
  • Optional per-texture max anisotropy setting.
  • Physical light values support.
  • Area light support.
  • Multisample option for VSM shadows.
  • Shader cache location is configurable, and defaults to a user-writable directory.
  • Renderer events for screen buffer allocation & global shader parameters having been set.
  • Renderer event for all views having been rendered.
  • DecalSet optionally sizes vertex & index buffer only based on use.
  • New face camera mode in BillboardSet & Text3D.
  • Support defining neighbor terrains to avoid LOD discontinuities.
  • AnimationController internal control structures can be accessed as part of its public API.
  • AnimationController can be queried if any animation is playing on a layer.
  • Allow to get animation tracks by index.
  • Custom projection matrix support.
  • Implement GetMultiSampleLevels() on OpenGL.
  • Monitor and refresh rate options for Graphics::SetMode().
  • Allow unclamped morph weights.
  • Static helper function for calculating VertexBuffer element offsets.
  • Model metadata support.
  • PBR improvements.
  • Clean up PBR shaders & techniques; do not require tangents in PBR shaders unless using normal mappings.
  • Possibility to set mouse mode or visibility before Input class initialization.
  • Mouse centering / position setting moved to Input public API.
  • Seek method for audio streams.
  • Anchors and pivots can optionally be specified for UI elements.
  • ProgressBar UI element added.
  • UI root element custom size support.
  • UIElement child XML loading returns created child instead of success bool.
  • Add delta parameter to UI element resize event.
  • SDF font supersampling.
  • FontType enum exposed to public API.
  • NavArea solid debug geometry.
  • To/from string conversions in JSONValueType / JSONNumberType.
  • Add function to test for Rect / Rect intersection.
  • Resize overloads in Vector / PODVector.
  • Remove ineffective static TypeInfo checking functions.
  • Node & UIElement child query function overloads that return a collection.
  • Node IsChildOf() function.
  • Temporary parameter added to Node CreateChild() function.
  • Sprite2D can define its draw & texture rectangles.
  • UniquePtr class.
  • Several math API functions added.
  • Stable random generator added.
  • Add FloatToRawIntBits function.
  • Variant can hold Rect objects.
  • Variant can hold 64-bit integers.
  • Mipmap manipulation support in Image.
  • Image class SaveDDS() function.
  • Text3D GetHeight() function.
  • Console auto-completion.
  • Console text highlighting according to message type.
  • XMLFile GetOrCreateRoot() function, and XMLElement GetOrCreateChild() function.
  • Urho3DPlayer attempts to read CommandLine.txt from resource system on all platforms, if cannot read from filesystem.
  • Improve use of SDL_Init() so that Context keeps track of initialized SDL subsystems.
  • IES cookie generation in RampGenerator.
  • AbstractFile as a parent class for those that implement both Serializer & Deserializer.
  • Allow specifying child node by name in attribute animation paths.
  • Functions to get rotation axis & angle in Quaternion.
  • Improved AngelScript API dump.
  • Consts exposed to AngelScript API.
  • OS query functions added to ProcessUtils.
  • Add resource to cache before sending background load event.
  • Prevent sending event to subscribers added during event handling.
  • Prevent rendering of unnecessary shadow maps.
  • Prevent rendering of deferred light volumes which would be masked out due to lightmask being only 8-bit in deferred rendering.
  • Move “cold” parts of Node into NodeImpl class to improve performance.
  • Populate rapidjson value before adding to parent.
  • Update to AngelScript 2.31.2.
  • Update to FreeType 2.7.1.
  • Update to SQLite 3.18.0.
  • Update to LibCpuId 0.4.0.
  • Update to Box2D 2.3.2.
  • Update to Assimp 3.2.
  • Update to LZ4 1.7.5.
  • Update to Bullet 2.86.1.
  • Build system: ensure empty CMAKE_OSX_DEPLOYMENT_TARGET on iOS build.
  • Build system: auto-disable PCH on Android Clang build.
  • Build system: prefer CMake’s regex instead of grep.
  • Build system: turn off PCH on bad ccache version.
  • Build system: Bash on Ubuntu on Windows -support.
  • Build system: work around MinGW 6.1.0 linking issue.
  • Build system: MinGW 6.1.0+ fix (narrowing conversion / internal compiler error.)
  • Build system: consider MinGW as multilib compiler.
  • Build system: make URHO3D_64BIT option applicable on MinGW.
  • Build system: use absolute output path for MinGW sysroot auto-detection.
  • Build system: fix Wayland build.
  • Build system: autodetect availability of clock_gettime() on Apple platforms.
  • Build system: fix package metadata for RPI & ARM platforms.
  • Build system: fix Urho3DAll.h generation in non out-of-source build.
  • Build system: avoid special chars in paths in MRI script passed to ar utility (Web build.)
  • Build system: Always use export header for auto-discovering build options.
  • Build system: use -O2 option for MinGW release build
  • Build system: add option to control how to share resources on web platform.
  • Build system: check availability of native compiler toolchain.
  • Build system: remove older CMake constructs that are no longer necessary.
  • Build system: new Android toolchain.
  • Build system: several Web build related improvements.
  • Build system: MODULE library type support option for Web build.
  • Build system: disable exception handling codegen for Web DEBUG build.
  • Build system: remove unused options from define_source_files() macro.
  • Build system: Prevent resource symlink creation during resource packaging.
  • Build system: Skip try_compile test when not appropriate (iOS debug build.)
  • Build system: use no_weak_imports linker flag.
  • Build system: workaround struct redefinition on newer MinGW.
  • Build system: search for DirectX path both rooted & non-rooted.
  • Build system: make clean for MinGW / Android / Web platforms.
  • Build system: enable multi-threaded compilation in Visual Studio.
  • Build system: fix mklink test when current path is not sources dir.
  • Build system: fix symlinked batch files not being launchable from Windows Explorer.
  • Build system: generate PCH files using naming convention expected by Clion.
  • Build system: generate dummy PCH only in out-of-source build tree.
  • Editor: do not attempt to parse extensionless files as XML.
  • Editor: draw navigation debug geometry.
  • Editor: prevent unnecessary attribute inspector refresh on resource reload.
  • Editor: allow drag-drop of generic XML files into attribute edit fields.
  • Editor: improved handling of structure attributes.
  • Editor: optimization to avoid updating temporary objects when they are not shown in hierarchy.
  • Editor: optimize update during object spawn.
  • Editor: paint selection.
  • Editor: show origins option.
  • Editor: fix UI element internal var indexing so that editing user-defined variables works right.
  • Editor: restore window positions on viewport mode switch.
  • Editor: terrain editor.
  • Editor: color wheel for Text3D.
  • Editor: double size on high DPI display.
  • Editor: fix resource browser node add/removal shown in hierarchy window.
  • Editor: fix resource browser preview camera position.
  • AssetImporter: possibility to export animation without skinned mesh.
  • AssetImporter: $fbx node suppression.
  • AssetImporter: fix animation start/end times when saving multiple animations.
  • AssetImporter: fix incorrect applying of model’s root node transform.
  • Documentation: explain how to setup Windows MKLINK privilege.
  • Documentation: add section on scene graph events.
  • Documentation: explain EMSCRIPTEN_WASM build option.
  • Documentation: note on simultaneous network server & client usage.
  • Documentation: update on the define_resource_dirs() macro.
  • Documentation: do not include RapidJSON classes.
  • Documentation: inverse kinematics page.
  • Sample content: Kachujin model, used in SkeletalAnimation sample.
  • Sample content: new Urho3D logo.
  • Sample content: mutant model added to the CharacterDemo.
  • Sample content: Vertex colors in the standard primitive models.
  • Sample content: fix normals / lighting on the cylinder.
  • Sample content: Line primitive models.
  • Sample content: material preview model.
  • Fix broken off-mesh movement for CrowdAgent.
  • Fix Bullet assert / crash when collision shape was changed from compound to non-compound.
  • Fix unintended update of wordwrapping text’s width.
  • Fix uninitialized fields in FontFaceBitmap.
  • Fix recreation of CollisionChain2D shape.
  • Fix positioning of borderless window (if not filling the whole monitor.)
  • Fix RigidBody2D not returning to original transform.
  • Fix copypaste error in SpriteSheet2D load code.
  • Fix out-of-bounds text buffer access when compiling an AngelScript module.
  • Fix VariantMap to JSONValue and back conversion.
  • Fix handling /./ in executable path in SanitateResourceName().
  • Fix crash if script object constructor throws.
  • Fix incorrect optimization in UIElement::GetElementAt().
  • Fix potential crash when erasing sibling nodes during component destructor.
  • Fix blend modes for 2D particles.
  • Fix use of asGetActiveContext() in template code, as it could leak undesirably to user application and cause undefined symbol.
  • Fix jumping Slider knob.
  • Fix AngelScript temp variable corruption and problem with handle-reference argument.
  • Fix Constraint2D body connection serialization (other body nodeID.)
  • Fix instancing in vegetation shader.
  • Fix SDL keyboard input on RPI platform.
  • Fix fixed size billboard not properly realculating size in all cases.
  • Fix multisample quality handling on D3D11.
  • Fix Text3D batches beyond the first not showing correctly.
  • Fix input scaling for high DPI displays.
  • Fix differentiation of alpha & RGBA textures in text shader.
  • Fix crash in usedGlyphs mode.
  • Fix zero sized UI root element causing divide by zero.
  • Fix various missing script API functions.
  • Fix terrain UV coordinates generation.
  • Fix shader define update when Text3D changes its rendering between SDF / non-SDF.
  • Fix erroneous fadeout of other AnimationController animations, if playback of new animation failed.
  • Fix nearest filter mode not using mipmaps on OpenGOL.
  • Fix skinning matrix pointers changing erroneously after late creation of bones.
  • Fix BillboardSet 16 bit indices limitation.
  • Fix CrowdAgents getting erroneously included in navmesh geometry.
  • Fix calculation of UI element combined screen rect.
  • Fix world space tangent for billboards.
  • Fix ValueAnimation’s time range not getting expanded by adding event frames.
  • Fix ValueAnimation removal during event handling causing crash.
  • Fix word wrap text char positions.
  • Fix WorkQueue item insertion; insert last if no other option possible.
  • Fix unnecessary mouse centering in screen mode change handling.
  • Fix unsafe removal of event receivers.
  • Fix string corruption in SQLite queries.
  • Fix error in skybox HLSL shader when instancing is forced on.
  • Fix erroneous reuse of backbuffer depth buffer when multisampling.
  • Fix uninitialized memory in Material.
  • Fix out of bounds array access when material quality is higher than high.
  • Fix shadow-related shader function signatures on GLES.
  • Fix shaky water shader on GLES.
  • Fix memory leak in AngelScript Dictionary.
  • Fix weight fade erroneously affecting animation after weight was set manually.
  • Fix LookAt mixed rotation mode.
  • Fix skydome GLSL shader.
  • Fix depth bias not getting cloned in Material::Clone().
  • Fix CrowdAgent removal to be safe during reposition event.
  • Fix keeping track of RigidBody2D constraints.
  • Fix double shader parameters passed from e.g. Lua, convert to float.
  • Fix navigation system obstacles not observing their scene node movement and updating themselves.
  • Fix self-insertion in Vector.
  • Fix slowed down navigation agent when scene node dirtied during reposition event.
  • Fix slope-scale bias adjustment on OpenGL.
  • Fix incorrect hashing of rasterizer states on D3D11.
  • Fix AnimationController animation search differentiating slash and backslash when it shouldn’t.
  • Fix LineEdit text & cursor not being centered by default.
  • Fix potential flipped normals in physics collisions (double manifold issue.)
  • Fix undefined __cpu_model symbol in shared lib on GCC.
  • Fix cache datatype for URHO3D_LIB_TYPE
  • Fix Android black screenshot (use RGBA format.)
  • Fix missing network update if node is added to the scene late.
  • Fix crash when setting model resource to drawable component that is not attached to a scene node.

GameDev News

23. August 2017

Wave Engine 2.4.0 “WhiteShark” was just released.  This cross platform C# powered 3D game engine was previously covered in the Closer Look game engine series if you are WEinterested in learning more.  The WhiteShark release brings several new features including OpenVR support, Noesis UI library integration, 9patch support, new single mesh support, new geometric primitives in the editor and much more.

From the announcement blog:

OpenVR integration

Wave Engine 2.4.0 has adapted the OpenVR API to our engine, allowing the developers to create Virtual Reality applications for multiple hardware vendors such as HTC Vive and Oculus Rift. This is an important step forward in our VR field.

You can learn more in this article.

Mesh entities

Another crucial feature now introduced is the possibility to create entities from a model mesh, instead of a whole model. For example, if you have an FBX asset containing several meshes in a hierarchy, we can now create entities for every single mesh, also providing a simple way to maintain that hierarchy. We also improved the way materials are used, deprecating the MaterialsMap and Model components.

We have added the following components:

  • MeshFile: Represents a mesh contained in a model asset.
  • MeshRenderer: Renders the mesh with the defined material.
  • MaterialComponent: Component that associates a material to a mesh part. It allows multiple instances (Once per submaterial, per example)

This article explains this new component in much more detail.

Noesis GUI integration

Noesis GUI is a XAML based framework that allows the creation of highly advanced User Interfaces, supporting Vector graphics and can be developed using Expression Blend IDE. It can help developers to empower your game UI and deliver high quality animations.

You can learn much more in this article.

Ninepatch support

NinePatch is a really simple and powerful way to define how an image behaves when we escalate it. It adds extra information to an image file, defining what parts of it should be scaled (and which are not) when the image is rendered in a larger or smaller size. This technique was introduced in the Android SDK and is very useful for creating UI components such as buttons, panels, containers, etc.

This article shows how to use it in WaveEngine.

Services support in Visual Editor

Wave Engine Visual Editor has now added the possibility of adding and setting properties of your custom Services directly from the editor. This helps to develop components in our Visual Editor.

We have written an article further explaining these new possibilities.

Multiprocess asset exporting

Until now, Wave Engine exported the project assets sequentially, leading to a bottleneck when we have a larger amount of assets, or large textures, for example. When building your solution, Wave Engine only exports the assets that have changed since the last build, but even then, it can sometimes take a long time.

In Wave Engine 2.4.0 we have improved it, using multiprocessors to export each asset in a single process. That means that the export process is now parallelized, taking advantage of the Multiple cores of your CPU. That means that the export process is accelerated up to a 60% (depending on your machine and your project).

Large amount of assets are now exported much faster

Async/await operations in GameActions

We have improved the async/await support in WaveEngine 2.4.0 allowing us to widely use it in our application and get better integration with GameActions.

This article explains it.

IsEditor property available

We have introduced new property in the Platform Service that allows you to differentiate when you’re running your code in the Visual Editor and when you’re not.

For that we have added these properties:

  • Platform.IsEditor: True when executing in the editor, false otherwise.
  • Platform.ExecutionMode: Enum property containing one of the next values:
    • Standalone: The app is executing as a standalone application outside VisualEditor.
    • Editor: The application is running into the Visual Editor
    • EditorSimulation: The application is running into the Visual Editor on Simulation Mode.

Primitive components

Until now, when you wanted to create primitives from the editor, you had to select the primitives from the Model selector. However, sometimes you want more control over that primitives. For example, I want to change the size of a sphere without changing the entity’s Transform3D scale or adjusting the tessellation to your needs.

And, as we added the Mesh components in this Wave Engine version, we decided to add several primitive as components. They inherit from the Mesh component, so they can use the MeshRenderer component and MaterialComponent. These are the new primitive components:

  • SphereMesh
  • CubeMesh
  • CylinderMesh
  • ConeMesh
  • CapsuleMesh
  • TorusMesh
  • PyramidMesh
  • TeapotMesh
  • PlaneMesh

We have also changed the way the Editor creates the primitive entities:

Battery level support

WaveEngine has included in this version access to the battery life in the WaveServices.Platform.Features.Battery property.  It has the following interesting properties:

  • RemainingChargePercent: The percentage of the remaining battery.
  • Status: Enum of the BatteryStatus type. Represents the battery status and has one of the next values:
    • Unknown: The battery is in an unknown state
    • Charging: The battery is plugged in and charging
    • Discharging: The battery is currently discharging
    • Full: The battery is completely full
    • NotCharging: The battery is neither charging nor discharging
    • NoBattery: The battery is not present
  • PowerSource: Enum of the power source type. It can have one of the following values:
    • None: No external power source.
    • Ac: Charging from AC
    • USB: Charging from USB
    • Wireless: Charging from the wireless charger.
  • BatteryChanged: Event fired when the battery level or one of its properties has changed.

Vibration API

Another platform feature added in this WaveEngine release is the Vibration API. Now we can control the duration of the vibration with the following method in the WaveServices.Platform.Features.Vibrate property.

Vuforia 6.2.10 support

Wave Engine White Shark decided to improve the AR power upgrading its Vuforia integration, now implementing Vuforia 6.2.10 version. It has some new attractive functions such as:

  • Vumark Support: The next generation bar code. It allows the freedom for a customized and brand-conscious design while simultaneously encoding data and acting as an AR target. VuMark designs are completely customizable, so you can have a unique VuMark for every unique object.
  • Trackable component, making your AR development much easier.
  • Visual Editor integration.

New Forward Material

Our Standard Material is a really powerful material that uses Light Prepass to calculate its lighting, which is able to compute several lights thanks to its illumination pass.

However, that light pass has a cost especially when we have a small amount of light or none or when we try to manually configure your lights in a mobile development when GPU is a valuable resource.

For those cases we created the ForwardMaterial. It gets the lighting from the most relevant light that affects it in the scene (the brightest one or the closest one). That means the fastest rendering and the absence of the Light Pass.

Xamarin Forms template launchers.

If you’re using your Wave project within Xamarin Forms application, there is now some good news, as we’ve created a new template that helps you with the integration. This template will create a Xamarin Form with a Wave Engine component in it, similar to the other Interop templates like WPF and GTK#.

Xamarin Forms template on the UWP profile

PreRender and PostRender events

RenderManager has added two new useful events:

  • OnPreRender: called before the manager starts rendering the scene.
  • OnPostRender: called after the manager has finished rendering the scene.

These events can be helpful when dealing with other libraries (We used PreRender event on our NoesisExension to render the panel to a texture) or synchronizing your rendering phase with other parts of your application.

Geometry Shader support

We took a step further in our DirectX/OpenGL integration with the addition of Geometry Shaders. These shaders will allow you to create geometry in GPU, allowing spectacular effects like tessellation, displacement mapping or accelerated particle sprite generation. Now when you create your custom material, you can pass the Geometry Shader path along with the Vertex and Pixel shaders in every technique.

GameDev News

18. August 2017


On August 13th a critical Remote Code Execution flaw was discovered in the Unity editor, opening users of the Unity editor up to external threat.  Today they have released a security patch for several different versions of Unity available for download here.  The exploit is apparently only for Windows platform, so even though a Mac patch is available for download, it does nothing.  Details of the exploit have not been released yet.


Further information from the email sent to users:

Unity has identified a Remote Code Execution flaw in the Editor and we’re rolling out a critical security patch to remediate this issue.

You can select your Unity version and find the appropriate patch with instructions at

As a part of our commitment to Responsible Disclosure, we will release more details about the vulnerability once all of our users have been given time to patch.

If you have any questions, please don’t hesitate to contact our Customer Service team at


GameDev News

16. August 2017

Lumberyard, Amazon’s version of the venerable CryEngine, is now available in source code form on Github.  This does not however mean that the Lumberyard game engine is now open source, it still has a proprietary license available here.  The major difference in this change is that source code is now available using Github instead of requiring you to download it using the Lumberyard binary installer.  This update does however enable you to migrate to new versions easier, as they will be released as new branches.  This change also makes it possible for community members to easily submit engine improvements and fixes.

From the announcement:

Today, we’re excited to announce that Lumberyard source is now available on GitHub. This has been one of the most requested features from the community, and we’re happy to finally make it a reality. You can check it out at

Because making games is challenging enough. Here are two ways that GitHub makes it easier.

Get Lumberyard using GitHub

Up until now, the only way to get Lumberyard was to install Lumberyard using our standard installer. This would place all of Lumberyard, including the source, on your machine, in a new but separate directory. We heard you loud and clear: it was tedious to incrementally upgrade Lumberyard. That changes with GitHub.

Now you can get the Lumberyard source code directly from our GitHub repository and easily use GitHub to manage your code. Integrating a new version of Lumberyard is now a relatively simple operation. And since each new release of Lumberyard is a separate branch, you can integrate against any version. Plus, you can even create your own GitHub account to use GitHub for source control on your own project and use that as your remote repository, giving you an easy way to collaborate with your team.

If you are new to Lumberyard, we recently did a hands-on video available here and embedded below.

GameDev News

11. August 2017

All the way back to Unity 1.0, the Unity game engine has supported a version of JavaScript called UnityScript.  Today on the Unity blog, Unity have announced that they will no longer be supporting UnityScript going forward.  Starting in Unity 2017 beta 2, they will remove the ability to create JavaScript files directly inside the editor.  Then they will be removing the ability to submit .js files to the Asset Store.  Then at some point in the future they will be removing the compiler completely, although it will be available to be forked on Github.  According to Unity analytics numbers on a very small portion of the community is even using UnityScript at this point, with under 4% using it as the primary language. 

They actually published some fairly interesting stats about language usage:

  • To date, of all the projects that have used Unity 5.6, about 14.6% of them have at least one file with a .js extension in it. 14.6% sounds quite high, but then we broke the numbers down further, and looked at how many files were .js files as a fraction of total script files in the project (.js + .cs).
  • So, that leaves 85.4% of all projects which are entirely in C#, with no UnityScript files at all.
  • 9.5% of all projects are mostly in C# – they have some UnityScript files, but fewer than 10% of their total script file count. Another 1.5% of all projects have between 10% and 20% of their code in UnityScript files.
  • That leaves 3.6% of all projects that have more than 20% of their code in UnityScript.
  • Only 0.8% of all projects are exclusively (i.e. 100%) in UnityScript.

With only a small portion of the community using UnityScript it does make very little sense to continue supporting it, especially now that C# support isn’t stuck in the stone ages.

GameDev News

Month List

Popular Comments