• NV Random – Controlled randomisation for UE4

    I’ve released my second Unreal Engine Marketplace product.
    This one is a configurable randomisation system, written entirely in Blueprints.

    It allows random sequences of either numbers (e.g. die rolls) or outcomes (e.g. chance to hit) to be generated, with options to coax the results into fairer distributions and to limit unlikely edge cases.

    We’ve all played games where some randomised result feels really unfair because it seems to keep rolling against us repeatedly. Since the outcome of each roll is not affected by previous rolls, it’s perfectly possible (though unlikely) to get any number of low-probability results in a row, and given enough attempts and enough players, such a sequence is almost guaranteed to happen to someone.

    So, I created this system to allow designers to control the randomness, to make it slightly less random but also closer to what we as humans expect random outcomes to be like, based on some of the tricks I’ve read about other game developers using.

    It uses a two main methods to achieve this effect:

    The first method is the use of a shuffle bag – instead of rolling for each outcome as needed, a number of future outcomes are placed into a bag and their order is randomized.
    For example, given a 20% chance, two successes and eight failures are placed into the bag, guaranteeing an exact 20% outcome over ten rolls.
    This actually changes the nature of the what is being randomised – the individual outcomes are no longer random, but instead the order of the outcomes is randomised.

    The second method uses random generation, but adjusts the chances to favour some outcomes and disfavour or disallow others (such as excessively long streaks.)
    For example, when rolling six-sided dice, each number can become more likely to be rolled the more rolls it has gone without appearing.

    The system has a lot of options to further configure the randomisation algorithm. The full documentation is available on Google docs.

    These tricks can be used for things like making sure the player doesn’t go too long without scoring a hit or a critical strike, to make sure that a weapon which deals damage in a range has an even spread inside that range, or to make it increasingly unlikely for a player to go without finding rare treasure with a very low chance to drop, to name but a few examples.

    NV Random on the Unreal Marketplace

  • Preparing content for publishing on the Unreal Marketplace

    This tutorial is a quick summary of the process for preparing a content pack for submission into the Unreal Marketplace.
    It is geared towards content-based asset packs.

    The tutorial will cover three main aspects:

    1. Preparing the content, including a list of things to check before submission.
    2. Submitting the product to the Marketplace.
    3. Updating a submission, including updates when a new version of the Unreal Engine is released.

    Read the rest of this entry »

  • Using a light function to make a lantern that casts dynamic, soft shadows from its model

    The goal of this tutorial is to set up a lantern object which casts soft dynamic shadows from the solid parts of the lantern.

    The two normal ways of creating detailed shadows are to either bake them with static lights (which will not work for a moveable light source), or to use Raytraced Distance Field Soft Shadows, which don’t work very well if the light source is actually inside the model which is supposed to cast the shadow.

    Instead of either of those, I will explain how to solve this problem by using a light function.

    A light function is a material shader that can filter the intensity of light being output by a light source.  It can be used to give the light different intensities at different angles, with the output of the light dependant on the colour of the material, from black (no illumination) to white (full illumination).

    We will use this to effectively mask the parts of the light where we don’t want it to shine at full brightness.
    Further, we will blend between two different masks depending on the distance, giving a more realistic effect where the shadows are fairly sharp close to the light source, but get softer as the distance increases.


    Read the rest of this entry »

  • NV Spline Tools – version 2.0 update

    I have just released an update to my NV Spline Tools package, adding some new features that people asked about, and fixing some minor bugs.

    New in version 2:

    • Now uses instanced static meshes for “Between Segments”, “Periodic”, and “At Points” modes
    • Can now be called at run-time via the “Build Spline Mesh Sequence” function
      • It will re-use the previous components as much as possible to improve performance
    • Added the option to specify the Mobility of the created components
    • Added the option to globally override the curve type of the points in the spline
    • Added the option to automatically drop the spline points to the closest surface under them
    • Added the ability to use separate sets of meshes for the start and the end of the sequence
    • Fixed a bug where the choice of last segment in a randomised sequence did not use the random seed
    • Fixed a bug where the sequencing of meshes would be off if more than one series of meshes used it

    NV Spline Tools is available on the Unreal Marketplace

  • NV Spline Tools – a system for setting up a modular sequence of meshes to follow the path of a spline.

    I just got my first Marketplace submission published!

    It’s is a system for setting up a modular sequence of meshes to follow the path of a spline, built entirely in Blueprints for use at edit time when creating levels.

    I had been working on some props that were supposed to follow terrain along a path, but I wasn’t happy with how the easy way to do it was to stretch the meshes between each point on the spline, because that would mean manually placing each point at roughly the correct distance apart to avoid excessive stretching.

    So, I started work on a system that would let me repeat the meshes at appropriate distances along the spline automatically, to keep each mesh as close to its proper size as possible.

    I was adding a few more layout options, and thought that maybe this system might be generally useful to people who want to use spline meshes, so I decided to add a few more features, polish it up and document it, and release it on the Marketplace for others.

    NV Spline Tools is available on the Unreal Marketplace

  • UE4: Repeating Terrain – using blueprints and randomisation

    When creating levels for games, you will often want to place sequences of terrain features which repeat, for example: stairs, fences, and other repetitive details.

    When making stairs, you could model an entire staircase in your 3D-modelling package specifically for the area at hand, but that requires you (or your artists) to make a lot of customised, single-use meshes.

    Alternatively, you could model individual steps (or a mesh with a small number of steps) and repeat those until your staircase is the right height.  Constantly using the same model will most likely make the repetitive use of the same texture extremely obvious and jarring.

    This article proposes a solution to this problem: to create a number of unique meshes which are all variations on the same section of the repeating terrain, and to then use a blueprint to automatically select and place the individual meshes to build up the desired length of terrain.

    For example, to model a dozen variations of a single step, and then have a blueprint which randomly (or sequentially) picks one of those variations and places it appropriately until it has built the entire staircase.

    This allows the level designer to quickly and easily create repetitive terrain features, each with a unique look, and without requiring custom assets to be made for each individual use case.

    Four sets of stairs generated from four step models using the system described in this tutorial.

    Read the rest of this entry »