Augmented Reality SGIA 2018 Expo iOS App
Produced by S-One Holdings corporation I was responsible for modeling, texturing, unwrapping and integrating nine various commercial printer models as well as initial app setup and later optimization. The app was created over the span of three months in Unity3D with the use of Vuforia, ARkit and showcased at the SGIA 2018 Las Vegas Expo. Supported by a wide range of platforms including phones and tablets it runs at stable 30FPS and can be used to showcase and understand the scale of various printing equipment in relation to the room size.
Maya Python Tools
This is an example of a tool I wrote for Maya 2019 which allows artists to generate meshes and create randomized noise patterns for them.
Artists have the ability to re-roll a basic mesh or use any primitive or complex shape that can be generated within Maya. When satisfied with the mesh they may apply a noise generator which goes through every vertex of the mesh and fills it with a random gray-scale value. The values are stored in a generated colorSet2 which is created once the mesh is spawned. colorSet1 is filled with a flat color but can be adjusted if necessary.
If a user were to try to apply noise to an object without selecting one first they will be notified to spawn an object first by an on-screen message.
With a simple UI the tool aims to provide easy to use and intuitive interface for any user to use. It allows to limit greyscale values to a certain range with sliders for user’s convinience and the values can be inverted if necessary.
This tool was developed in Python over the course of a weekend.
Houdini Rigid Body Destruction
Houdini Rigid Body Simulation, its subsequent cleanup and import into Unreal Engine was a choice project which was added into my thesis “ShellShock”
The setup involves two airtight meshes exported from Maya into Houdini with the falling artillery shell being generated inside Houdini itself. The mesh is fractured first with Voronoi noise and is later separated by blast nodes in order to create a more precise level of fracture where the shell hits the mesh.
Glue constraints are deactivated through animation timeline right before the impact and a point force is applied in the AutoDopNetwork for a couple of frames before being deactivated as well. This creates the explosion force when the shell explodes. Gravitational force was doubled for objects to land quicker and avoid the feeling of slow motion in the simulation.
Once completed the simulation is rendered, cached and exported back into Maya with the use of Game Development Toolset as an FBX. The animation is cleaned up in order to get rid of rogue pieces which are individually keyed out or animated in the graph. The animation is converted from 24 to 30 fps and is imported into Unreal as a physical asset with a skeletal mesh is generated for it.
Once the animation works in engine in order for everything to click I added sound effects, particles, camera shake and a post process DOF adjustement upon impact for visual enhancement.
Procedural Environments
The following showcase is a selection of some procedural tools that were developed to create the majority of environments for my thesis project “ShellShock”. By utilizing these tools it became possible to cut down time spent on layout. It allowed for very quick blockout and initial setup while additional features like forced randomization and freezing made it possible for additional tweaks and personalized approach. For a complete article please click here: “Game Dev Under Limits“
Procedural spline trench tool
A modular trench spline created in UE4 construction script. As the handle is pulled the blueprint searches for meshes through multiple arrays and positions them based on specified inputs either deforming them along the spline or placing them freely. Depending on the inputs selected a mesh can either be used as part of the spline or as a freely placed object.
Users are being given control over the spline in a form of inputs that dictate whether an object should be deformed or not, whether the spline should be randomized again or whether an object should detach from the main spline and be separated from the rest of the structure. This allows for manual user input that can be used to create gaps in the trench structure, deviations, sharp turns or a more custom look to an existing trench.
Based on the nature of the tool it can be combined with other assets and transform to suit other needs. From trenches, barbed wire and sandbags to roads or rivers this tool is highly customizable and easy to use by environment artists.
Procedural gear randomizer
Procedural gear randomizer pulls character attire meshes from multiple arrays which communicate with each other. Those arrays set exclusions for other arrays based on the gear that was already selected for a soldier. For example if a soldier becomes equipped with an officer cap it is now restricted to certain rank patches as well as uniform they can wear.
These arrays are refreshed based on the world position of a soldier. This allows for multiple soldier presets to be placed in the same level procedurally. Once quick layout is complete each blueprint can be converted and merged into a static mesh for improved performance, fewer draw calls and a more hands on LOD approach.
Final product
The end result provides a versatile platform which can be used nearly infinitely to generate vast playing areas and game scenarios. The tools can be tweaked to user’s likeness, meshes can be swapped out and the end result can be adjusted for a variety of different projects.
Performance Optimization for various platforms
Performance profiling road map: Nvidia 1080Ti = 8ms > Nvidia Quadro M620 = 12 ms > Intel integrated graphics chip = 17ms
Custom IK Robot Rig and Model
Responsible for modeling, texturing, unwrapping and rigging. This Rocketeer inspired pursuit bot was modeled and rigged in Maya sporting leg IKs and a handful of extra joints to control its head night-vision system in order to have a gyroscope-like motion for it. Game ready and animated with efficient topology it fits neatly under a 70k polygon limit.
Shader and Materials
Reactive goo material
Unreal Engine node based material which imitates surface distortion through distance to nearest surface interpolating between tessellation of two various magnitudes. When an object collides with a material plane a mask is projected around the overlapping object and as a result splits the material into two zones. Masked zone around an object is tessellated with a smaller value than the zone which has no object mask projection. This creates an illusion of an object interacting with and distorting the surface.
Unrefined Ruby
A node based shader which creates an illusion of depth through the use of parallax occlusion and multiple crack/scratch masks. Although fairly expensive the GPU load can be reduced by reducing number of steps in the parallax function. Some depth can be achieved through bump offset nodes for LOD levels and improved performance however it will not yield same level of fidelity and depth compared to parallax.