Maya Alignment Tool
This is a quick tool I created in Python for Maya for aligning a selection of objects.
It calculates the bounding box and minimum, maximum and median distances between the objects before using the user specified axis to direct the object movement.
I created the icons in Maya and these are located in a folder at “maya/2018/scripts/icons”. The script is passed the directory and then uses string manipulation to get the filename for each icon.
VR Adventure Demo
This is a VR adventure game prototype I’ve created in Unity for Google Cardboard. I created all the assets and programming apart from the Google Cardboard Unity Package.
I had the double challenge of not only having to optimise assets for Android but also so that they could be rendered out twice by the VR system. I also had to accommodate for motion sickness which is why I made the player exit the first scene via a manhole rather than have them run away and why the player smoothly and slowly moves through the sewer scene.
The caustics in the sewer scene are projectors running flipbooks and the murky underwater look is achieved by a post processing volume with a blur and colour grading effect that lerps in and out according to the player’s head height as a Y position. This gives the player the feeling of being able to bob up and down in the water.
This is only a quick prototype and I hope to develop it further in the coming weeks and months.
This is my showreel showcasing some of the realtime effects I’ve created recently.
There’s a mixture of particle effects, environmental effects, explosions, buffs and debuffs and some dynamic shaders.
Custom Cobweb tool
This is a tool I started working on recently to help create cobwebs for 3D levels that are easy to place and stretch as opposed to an alpha on a plane which isn’t as flexible.
The script generates an outer ring of helper objects which the user can move to deform the web. Line renderers are drawn from these helpers back to the centre point. The number of rings is calculated by dividing the length of the splines by the number entered by the user. Empty nodes are then distributed along the divisions which then use line renderers to link to the previously created neighbour, except for the last segment which links to both its previous neighbour and the first segment.
To prevent the web looking too uniform a random limit variable is available to the user to increase the random likelihood of the lines not connecting, giving a more natural look.
The web material uses an updated version of my custom made Shaderforge shader which I moved over to use lerps instead of switches/toggles after receiving some technical advice. The material also uses a noise map to add further variation.
Future optimisations could be made for a LOD group which would bake the lines to a texture and then map that to stretched polygons and also to reduce the number of times and the ways the script has to refresh when the user enters new data.
Max Creation Graph tool to clone elements at various distances and intervals
This is an original tool I created using Max’s node based system to allow me to instantiate and place solar panels on a low poly space station I’m working on.
The tool uses origin and destination objects to get an array of interpolated vector3 positions to place the instantiated elements at.
I had some difficulty being able to get the average Vector3 of the origin and destination helpers which I had originally created in the MCG as null arrow objects. I was able to find an alternative solution to this problem by presenting the origin and destination as scene nodes to the user so that they could specify their own helpers to use.
Future improvements would be to add rotation, the ability to follow a path or spline and improved UI.
Mission Control UI
This is a UI system with motion graphics with a space theme.
The planet has a Shaderforge shader which masks the sea from the land with an alpha mask and then has several normal maps controlling the water flow.
The shader also has borders that animate for dynamic effect.
I have uploaded a view of the shader graph to illustrate the various sections and how they link together.
World-Space UI text boxes were used for the fictional territory names and then set to always face the camera. Additionally, the depth from the camera was used to blend in their opacity when close and fade out when far away.
The “Polarity” box has two graphs that use an audio waveform to draw an animated line that smoothly interpolates via code.
The “Atmosphere” moving bars are UI sliders that are animated with code choosing random values to smoothly interpolate to over time.
The network of nodes with connecting lines in the “Drive Core” box uses line renderers to join between nearby nodes and uses the particle colour as a gradient.
Total War: Warhammer II homage
Here’s a video illustrating some I effects I replicated in Unity from Total War: Warhammer II.
Thanks for watching!
Green Death Explosion
This effect comprises four components; an emitter with thin sparks, collision enabled debris billboards, a laughing skull and a smoke fadeout.
The sparks velocity is controlled by a curve giving a faster expansion and slower fadeout effect. The size is also controlled by curves with the particles length decreasing over time as well as decreasing their width until they disappear.
The debris is a particle system that uses the texture sheet component to choose a random image from a flipbook so that there is variation. The size is also randomised between two constants.
The debris has colliders that allow it to interact and bounce on the floor before disappearing.
The smoke and skull animations are simple flipbooks with a colour over time animation fadeout.
This effect uses upside down cone frustrums as meshes to wrap a noise texture around. The material uses a shader that adds another UV scrolled noise map on top as the opacity channel to add variety.
The glints are sub emitters that a spinning particle system emits on death, inheriting velocity and rotational speed. The glint particles grow in size, plateau and then shrink to disappear.
The vertical sparks are billboards that are emitted from a cone shape to follow the shape of the mesh tubes and disappear by gradually shrinking in width. A subtle noise component was used to add variety.
The crack effect is a flipbook on a quad which increases frame with a jagged, uneven curve creating a staccato movement across the floor. The fire is also a flipbook created using particles in After Effects.
There are two smoke particle systems which emit smoke from the edge of a circle and from a cone into the air. These both have hand drawn animation curves to create a more interesting effect.
The rocks are meshes which use velocity over lifetime curves to create the animation of being still, then flying into the air with a random variance before falling to the floor. the rocks also have colliders so they have a slight bounce when they hit the ground to add interest.
The lightning strikes are flipbooks which are spawned at random intervals by a particle system which then, upon death emit a spark particle system and a scorchmark.
The sparks have their velocity controlled over time to create a burst effect before fading out and the scorchmarks fade out over time.
This effect uses a shader which pans a noise texture which is then lerped with the UV co-ordinates of the main texture which is masked, meaning only the tails receive the distortion.
The rays are a particle system which spawns an arc billboard with a random rotation and the clouds are simple billboards.
Improvements could be made to the overall silhouette of the effect and the efficiency of the shader.
Golden Tower LOD
This effect demonstrates my LOD alpha blending system in Unity.
The effect on the left is a simple particle system and the one on the right is a flipbook “recording” of the particle system in action which is seamlessly looped.
I wrote a script which takes the distance from the camera to the effect, remaps the values from 0 – 1 and then sets this to be the opacity of the complex effect while the inverted value is used for the flipbook, meaning the effect transitions smoothly.
To save memory the elements are deactivated when their LOD is not in view of the camera.
This effect uses a torus mesh which uses a panned noise texture to distort the UV coordinates of a texture which is mapped to a custom gradient map using the brightness intensity as a key. This is a quick and flexible solution as custom gradients can be quickly created for a variety of different looks.
The links between the toruses use renderers that draw billboards from two specified vector3 locations for flexibility.
This effect is comprised of multiple components:
- A spinning emitter which emits blue smoke billboards
- A spinning emitter which emits small white “swowflake” particles
- A distortion ring which is controlled by a script influencing the amount of refraction over time.
- An energetic snowflake particle system which uses noise to influence the particle direction.
- A slower snowflake particle system using similar principles.
- An emitter which emits smoke flipbooks that fade out over time which also have random rotation, size and lifetime to add variety.
The timing could be improved to match the original effect and a more realistic smoke simulation could be created in Houdini and then turned into a flipbook for the effect.
This effect emits small stretched particles which then decrease in velocity towards the end of their lifetime and shrink in length. A torus billboard is emitted using a shader that pans a UV distorted noise texture over a BlendAdd emission.
A simple paraboloid was used as the central disc which fades out to reveal multiple smoke billboards which are moved via the noise module in Unity’s particle system.
This effect could benefit from closer timing to the original and also some visual fidelity as the overall impression is a little noisier and not as clear as the original.
Flipbooks + Particle systems + Shaderforge shaders + UI
This is a digital card game style asset which uses both VFX and UI programming for dynamic effect.
The character portrait is a Shaderforge shader on a quad which has a scrolling parallax texture behind the Witch.
The three energy bars of fire, water and poison all drive X coordinate values which are then remapped to exactly one third of the total Y range of the large purple liquid orb, meaning that their combined total will fill the liquid orb exactly.
The three bars are masked behind the bar rect-transforms so they don’t overflow and the poison bar has a bubble UI particle effect attached to it.
The three coloured orbs display the value of the bars, remapped from 0 to 10 and then rounded to the nearest integer. The pink orb in the top right hand corner displays the combined total of these three orbs.
Finally, the background is a particle effect rendered on a separate camera and then sorted behind the card.
Flipbooks + Particle systems + UV scrolled meshes
This is a visually complex effect which features the witch ascending out of view.
A rotating empty object was used as a parent for the magic floating solids which also have attached glint particle effects. A cylindrical mesh with a UV scrolled texture was used for the light tunnel and two spiral meshes with scrolling UVs were also used for the effect. The electricity effect was a flipbook created procedurally in After Effects and then animated on quads.
The solids had non-kinematic rigidbodies attached which were activated when the effect ended to make them drop to the ground, creating the illusion of being suspended by magic.
This effect is comprised of four elements; A distorted torus texture that rises over the witch and then shrinks before triggering a spark particle system, a rotating disc with two glowing sections and a tube textured with an emissive distorted noise texture.
The top effect, the torus uses two flowmaps with varied panning values to distort it’s UV co-ordinates.
The second effect, the ring uses a texture that is split into red, green and blue sections which are then masked out to allow for user chosen colours rather than just lerping three masked alpha textures together. It rotates over time and also has a series of switches to toggle features like emission, noise and opacity.
The tube based effect uses a noise map to distort the UV co-ordinates of a turbulent perlin noise texture resulting in an interesting effect. This is masked with a gradient so it appears stronger at the base and weaker at the top of the tube.
The sparks are a simple particle system that use gravity to affect the trajectory of the particles and their length shrinks over lifetime as well.
Keyframed mesh + Particle Systems + Shaderforge shaders
The Eye mesh is animated using Unity’s animator component and the eyeball itself has a shader that uses an alpha mask of the iris to mask emission intensity which is also keyframed.
The blasts are alphas spawned by a particle system and the laser beam uses a custom shader that has a subtle refraction effect creating the illusion of the laser distorting the air. The circular particle system is a simple directional emitter.
The dummy has a simple custom shader which has an alpha mask of damage fade in during a keyframed sequence.
Particle systems + UV scrolled meshes
This effect uses an additive blend shader for a rune circle with meshes for the swirling meshes around the witch.
Other meshes were used for the rune glow and ice crystals as well as a glint particle system.
Shape keyed meshes + Particle systems + UV scrolled meshes
Building upon the basis of the “Frostbite” effect this effect features a vine lattice cocoon to protect the witch from an attack.
The cocoon is made of a mesh with blend shapes that grow to surround the witch. The flowers also have blend shapes and the bees are a particle system that use flipbook wings over a mesh to create the illusion of flapping wings.
ShaderForge base + Particle systems
This effect used a quad with a ShaderForge shader as a base. The shader used a single noise texture with scrolled UV coordinates as an opacity map creating the liquid edge effect to the base.
Hand animated gas vapour and bubble burst flipbooks were used to add detail alongside the hand and bone meshes.
Flipbook + Debris particles + Smoke quad
This effect can be used when a player strikes an enemy. It uses a flipbook with a refraction shader that creates a subtle shockwave/distortion effect.
A debris particle system and burst effect are also applied for impact.
Flipbook + 1 Quad
This is a simple effect with a text alpha in front of a flipbook render of a metaball particle simulation.
Flipbook + Debris particle system + Refraction shockwave quad
These are two flipbook based explosions which use a rendered sequence of a displacement modified mesh as a source.
Debris particles with trails were added in addition to an expanding billboard with a refraction shader creating a shockwave effect.
Flipbook + Debris particle system + Refraction shockwave quad
These effects all use Phoenix FD for 3ds MAX or Houdini’s PyroFX to simulate explosions that are then rendered to flipbooks.
An erosion map is used for a crack circle that then dissipates out using the alpha channel of the erosion map.
ShaderForge shader + Particle system
This is a refraction effect using a single ShaderForge shader and a particle system for dust.
The shader has a rotating vortex map around the central refraction disc which adds to the impact of the effect.
The dust is a particle system that spawns in a sphere around the black hole before being sucked into the singularity by an empty object with a wind zone component attached to it.
ShaderForge shader with chromatic aberration, scanlines, distortion + noise
This is a VHS shader created in ShaderForge.
It takes a live render texture from a camera output before applying chromatic aberration by separating the red and green channels of the output. The UVs are distorted by a scrolling image to create stuttering and scanlines are overlaid on top.
ShaderForge shader + Render texture + Particle effects
This effect consists of a render texture displaying camera output from another room with a refraction vortex map overlaid. A fresnel emission colour is then applied.
Finally, a scaled rotating vortex quad and a particle system of plasma jets help create an interesting look to the teleporter.