Optimization and Management
I Use Unreal Engine 4’s profiling tools to optimize content or code to achieve the required performance, to see where the performance is spent. When I used the profiling tools it was to optimize for frame rate issues in an undergraduate project called, Apex Dawn. The major tools I used on Apex Dawn was the light map tool, texture map tool and the FBX’s meta data feature. Since Apex Dawn main feature was foliage in an open world single-player environment, maintaining performance was integral. I would use these tools to find and identify assets that didn’t meet the team’s written standard requirements. If possible, I would resize bitmaps or light-maps to save on performance. I would communicate with the other artist on the team to optimize the assets then I would re-import the updated asset within the engine.
I utilized Unreal Engine’s PhysX 3.3 physics engine to drive physical simulation calculations and perform collision calculations to make realistic interactions between objects within the world. I used the physics system in UE4 to create interactable destructible mesh. The destructible mesh included a script so when a player shoots a projectile at the mesh there is a force at the impacted location. Then the destructible mesh would begin to fracture and fall. This blueprint was used for a puzzle in which destroying the mesh would reveal a hidden path to the player. Furthermore, I used cable actors for a grappling hook mechanic. I attached the start to the player’s weapon and the end to the projectile’s impact location. I used a cable actor because they have built in collision and physics so in motion it feels like a rope swinging. I also used particle effects to differentiate between healing and damaging actors in the game.
I design user interface elements such as in-game HUD’s, menus using blueprint widgets to script interact ability for the user. I created modular UI components for a mech flying game prototype. Each component of the UI can be swapped and reworked to build new and varied UI elements. Then I scripted in Unreal Engine the mech’s pitch, yaw, roll, altitude, and velocity to update in the player’s HUD. I also scripted a warning to the player if there are any flying Artificial intelligence in the area. Then I scripted a modular system for health so that health data from the player can be easily communicated to the blueprint widgets.
I create materials through HLSL code via a network of visual scripting nodes within the Unreal Engine’s material editor. In Apex Dawn I was given textures by teammates from external art packages. I imported them into the engine and used UE4’s material editor to implement the textures within engine. For each material I created material instancing with parameters to change Physical Based Rendering values such as metallic, roughness, and specular values. I did this to give the artist more control over the look of the material. Also, material instancing saves on memory because it uses information created by the base material within instanced materials. I also use lighting and shadowing geometry, Global Illumination, and reflections to create the mood and feel of a scene while keeping optimization and performance. I matched the mood and implemented feedback from the art director when I created lighting for Apex Dawn. I used a combination of directional lighting, point lights, spotlights, atmospheric fog, exponential height fog, post processing, and emissive materials to guide the player through the environment to enhance the design of the game.
I develop animations systems using Unreal Engine 4’s skeletal based deformation, morph-based vertex deformation, animation sequences, anim montages, and logic-based state machines. To get data from the pawn actor to the animation blueprint I communicate the values in an efficient and organized way. I organize and group variables together that will be communicated so I can keep track of data that gets passed to the animation blueprint. The animation states have limited ways to organize the graphs. A technique I adopted is to use conduits within UE4’s state machine. I use conduits as centers that can branch out to different animations depending on the state machines. I also layer similar animations using the Boolean blend node within the same state node to keep the state machine clean and organized.
I was prototyping a mech game in which the player dog fights other mechs. Since the Unreal Engine doesn’t not support 3-d artificial intelligence navigation. I decided to create a flying navigation system using ray tracing. I used ray tracing so that the AI can get information about its surroundings for collision avoidance. Also I used a combination of ray tracing and environmental query system to implement a cover system to avoid projectiles from the player and to fire projectiles at the player. I also implemented an aim offset within the AI’s animation blueprint so the AI will believably rotate to face the player when firing a projectile. I made a system that communicates the AI actor’s information to the behavioral tree and animation state machine to drive believable chase and flee behavior to the player.