Welcome to my portfolio. Please use to buttons below to navigate towards sections that interest you.
Pipeline & Tooling
Throughout my career at Enversed Studios I've developed several improvements for the art pipeline. Below some improvements that I'm allowed to show.
|
Tools for either Maya or Unreal Engine.
Made using either Mel, Python or blueprints. |
Parcel Generation
A tool was required for generating and filling up parcels that made use of data provided by a city generation tool (made by a co-worker). It had quite some requirements, such as the parcels needed to be able to be exported as nft-images, possibility to recreate the parcel in both the game and the simulation app, easy to expand upon and each parcel should be unique (to an extent) with a total of 12k parcels.
The generation can be dumbed down to 3 sections: - Import and process the city generation data. - Generate and assign data to tiles. - Spawn meshes (blueprints) based on the tile data. Features - Use city generation data as base (different sizes). - Easy to author visuals by artists. - Visuals are made within Child Blueprints for each size. - Connectivity done through sockets. - Easy to implement through the use of data tables. - Each tile can be randomized through the use of colors, rotation, visual used or by adding elements on sockets such as holograms or floats. - Easy to expand functionality. - Tile assignment is set up as a sequence. - Required functionality is similar so can be copy + pasted. - Parcel exports all it's data as a JSON file so it can be recreated in another application. - Road generation. - Seeded generation. - All tile assignment functionality is adjustable through settings. |
Houdini ChatGPT integration
To simplify and make it easier for everyone to understand all the VEX code, I implemented ChatGPT into Houdini. On the side I also ensured that all modules were shared, allowing updates to be instantly handed over to everyone that worked with Houdini without requiring manual actions.
Features - Automate commenting VEX code through ChatGPT - Simplified the module setup, by using a shared drive. - Automated OpenAI installation. - Functionality is easy to access. |
360 Stereo capture
|
For a lot of projects at Enversed Studios a video was also required or even the end-product.
Sadly the plugin in Unreal Engine is rather buggy and has a lot of limitations, so I developed my own capture blueprint to address this. This blueprint is simple drag & drop into either the level or pawn. The sequencer can then be used to capture the footage while maintaining correct fps or the built in system that pauses the game to wait untill the rendering of a frame is done. The video to the side shows a short capture of a normal view and several buffer visualizations which the default plugin doesn't capture. Features - Drag & drop and it works. - Renders 1:1 what is visible in editor/play. - Can render stereo, mono, 360 or 180. - Capable of rendering up to 8K footage. - Adjustable eye distance. - Render through sequencer or through blueprint capturing. - Output can be all stages of rendering (separate view, stitched, etc.) |
VR fullbody IK
Fullbody solution that works with just two controllers and a HMD. Pelvis location and rotation calculated based on HMD. Controllers used for arm animation. Lastly a system that calculates location of feet based on HMD transform over time and basically does a prediction (still WIP, but already functional and in use). When a skeletal mesh is used without legs the blueprint automatically adapts to this, disabling the leg animation part.
Created a workflow to allow this system to work with any skeletal mesh. Players can also calibrate themselves to further ensure the virtual body matches the player either through simple or complex calibration. Simple only uses the HMD height, while complex takes into account limb length and pelvis height. As base I use the UE4 Mannequin and skeleton, allowing custom animations to be easily used. |
Master material
One of the first pipeline improvements I've made that is still under continuous improvements. This material material allows for easy creation of most of the materials required for any project. Simply features can simply be toggled on or off, aside from this features are always separate material functions. Allowing parallel work on the material, better encapsulation and ofcourse a cleaner overview. By making all the features separate material functions it's also easier to ensure any updates won't break previously created instances.
The material is set up in such a way that the artist should always work from top to bottom, new options always open up below the enabling button. A great way for artists with little experience in Unreal to still create the materials they require. Features - Switch between texture and value input. - Multi channel textures supported (such as AORM) for any input. - Quickly enable tweaking settings for each input such as power, multiply or add color. - UV adjustments such as scale, move, rotate, but also panner, rotator or diffent index. - Switch between world algined, object aligned (see below) or traditional Uv-based projection. - Masking functionality allows for creation of material layers. - Vertex paint and create materials (with base adjustment possibilities) for each vertex color. - Adjusting shading models opens up different settings (opaque, masking, translucent). - Two-sided support, resulting in new settings. |
Object aligned texture projection (in world units)
World projected object aligned textures, instead of the normal world projection this ensures that the texture projection stays consistent regardless of object transform.
I made this as we would often reuse textures for different objects, however in order to ensure that the scaling of the textures stays the same you normally would use the worldprojection (or a lot of back and forth with UVscaling). That is all fine in most cases however, as can be seen rotating and moving the object shifts the texture. At times this is undesirable and this material function is the solution to that. |
Worldspace to UVspace calculation
For this we required a hit target to move based on where the player was looking projected onto a half-sphere.
Decals will fail with this as the curvature and depth changes and just a plane connected to the HMD will not look the same as an actual projection onto the sphere. So to tackle this i created a material function that calculations the UV location based on XYZ input. The function will then calculate the UV position while taking into accoutn the curvature (texture will not deform as can be seen on the image to the side). |
Effect over spline spawner
|
A blueprint in UE4 that spawns effects over a spline.
The effect was made to simulate how a supply goes through some pipes and builds up in a kettle (note this was before Niagara was even a thing). Features - Effect moves overa spline, not requiring collision or velocity. - Can halt the effect whever desired on the spline. - Can halt/stop the adding of the effect whenever desired. - Size of the pipe is given through a 2 vector input. One indicating location on the spline on a 0-1 scale and the other being an indication of radius of the pipe. - Adjust the amount of effects on tick. - Adjust the speed the effect moves at. - Can be animated through sequencer. - Can be minimized in such a way that it works on Runtime in VR (obviously quality decreases). |
Foliage spawner blueprint
Started out as a spawner for farmland foliage, though it proved to have more potential then just that.
Foliage is spawned based on a X and Y setting for the amount of foliage. The distance for the X- and Y-Axis can then be set resulting in farmland foliage (placed straight in rows with equal distance between each other). After that I added to option to spawn the foliage over splines, allowing it to adjust to terrain. Features - Optimized foliage placement utilizing hierarchical instanced static meshes. - Culling distance to stop the rendering, best combined with dither fade-out material. - Spawn over spline or grid-based. - Random distance to add variation. - Random height (both through scale or spawn height). - Multiple meshes, either placed on order in array or chosen at random. |
Soft Body Objects
We required objects that could be squished within VR with the Vive Index controllers. As that supports finger tracking the objects required simultaneous deformation at multiple positions.
Through rigging and physics constraints I was able to simulate a similar effect, resulting in soft body objects. Here I showcase the effect on simple volumes, however technically any object can be turned into a soft body. |
Crowd characters
Blueprint for placing NPCs in the level and set their behaviour. Aside from this, I created a simple python script to ensure all characters can easily be retargeted to the skeleton for this blueprint.
Features - Several modes such as walking, sitting, standing or leaning. - Toggle option to allow the character to talk, causing their animations to adapt to this. - Randomize Character and Colors. Allowing the characters to quickly be auto-randomized. - Automatic feet to ground placement, ensuring the characters will always sit with their feet on the ground (when desired). - For standing functionality to make the characters hold onto something, such as a pole. - Walking transformation is done through a separate spline blueprint, which always a single or multiple characters to be assigned. |
VR Pawn
Base VR pawn I made back when I started at the studio, the pawn has several modes which can be enabled for player use. Players can then simply toggle between these modes to change the behaviour of their controllers buttons.
Features - Base Pawn system (Game mode, Player controller, Pawn and Player State). - Several modes such as teleportation, grab, joystick movement, camera, pointer, maquette teleportation can be enabled. - Inactivity detection, allowing for a sequence overlay on the spectator screen. - Controller adjust based on VR hardware. |
Shaders & Effects
Below several shaders and effects that I've created during my time at Enversed Studios.
|
All Created within Unreal Engine 4.
Texturework either done in Substance or utilizing pictures together with Photoshop / Krita. |
Fire & Smoke system
Made in Cascase and optimized for VR (Niagara didn't work with VR yet).
For a firetraining an adjustable fire and smoke system which would simulate the several stages these go through during a fire. Extinguishing the fire is also an option and the smoke then reacts accordingly. In the gif to the side the fire can be seen going through stages 1-5. The smoke is split into smoke from the fire itself and accumulating smoke (ceiling smoke). Several effects can be added upon this system and each fire/smoke system can be adjusted to match the burning object (liquid, electric, solid, fat, etc.). |
Outline postprocess material
Post process outline material for a set of games.
The outline is calculated differently for objects near and far. Normally the calculation is done on scene depth, however with VR this can quickly becomes pixelated when it's far off. This material uses world normal difference to calculate the outline. For close-by the scene depth as it is a bit easier to tweak the effect. Because there is a different calculation for far and near it is possible to have a different outline for each. Settings are there for color, opacity, thickness and transition between near and far. |
Breaking glass
Grass material
Swarm Effect
While testing out the Niagara systems I made an effect that would swarm around a light and take over its colors.
The effect keeps looping and works perfectly in VR. For a longer animation please visit: https://www.youtube.com/watch?v=mMTeDjJfgt4 |
Environments
Below are some environments for projects I've created or co-created for Enversed Studios. All of them are created for VR. During all of them I was the Lead Artist on the project.
|
All environments are created within Unreal Engine 4.
|
Koeweide
Previsualization of a big adjustment on a nature reserve, Koeweide is an area in Limburg, The Netherlands and we were tasked to visualize this 4x4km area (2x2km playable space) filled with foliage for VR.
My main roles for this environment where creating the foliage workflow, rivers, lightbake solution (dynamic light is a no-go for VR and sadly before VT was a thing) and optimisation (mostly shader). |
Snowdown V2
Airbike
Design by Tim van der Grinten (Creative Director at Enversed Studios)
|
Airbike is part of a set of games made for Proto in Estonia.
The player traverses this environment on an airbike, while physicall on a bike. This was the first of the set of games created, for this game I've done the final lighting, cloudscape, material adjustments to match the overal look better and all visual effects and post processing. |
Submarine
Design by Tim van der Grinten (Creative Director at Enversed Studios)
|
Another of the set of games for Proto Estonia.
This is an underwater environment, the player tries to reach the center of the submerged city where a treasure lies. Before able to reach that however the locks at three plateaus have to be opened. Sentinels are guarding these locks however and have to be shot down with torpedos. For this environment I did the lighting, visual effects, post processing, some modelling (mostly to get it working for gameplay) and material adjustments. Lastly to add more dynamic elements to the environment I added some nautical animals that moved through blueprinting. |
Snowdown V1
Musica Universalis
Oostkamer - Architectural Visualisation
House design by Tim van der Grinten (Creative Director at Enversed Studios)
|
Oostkamer is one of the many archviz projects I've done at Enversed Studios. This project was to visualize several plots, allowing potential buyers to get a better insight on how much space each plot has, light direction and just a feel of the neighbourhood in general.
|
Miscellaneous
Other stuff that doesn't fall in the above categories. These are mostly projects I've done on the side in my own time.
Global Game Jam 2020 - Arsembly
|
In 2020 I joined the Global Game Jam at the BUAS location in Breda. A gamejam is creating a game within 48 hours. The theme was repair and we went with a game where the player starts off as just a pelvis and needs to find the correct limbs for their full body. Any other limb does attach to the body and can be used as a weapon to damage other players.
2v2 team based game, made in Unreal Engine 4. My tasks: - Level design - Lighting - Effects - Rigging characters - Worked together with a programmer on the limb attachment system. |
Cover design - PhD
The cover design I made for a friend's PhD publishment. it had to have several elements in which he talks about. The research he did was to stimuli-responsive commodity polymers. In layman's terms he researched how 'plastics' could be modified to respond to certain changes such as weather, temperature or light. By ensuring certain condititions where met, this reaction could also allow for movement in the form of bending.
Elements I placed into the design where: Seasonal changes, birdwing, robotic arm, color changing shirt |