top of page
Thin Stripes
SUMMARY
ChalkBites Inc. looks to capture a portion of the corporate training market with Live Virtual Reality Training courses and aided by  lifelike simulators.  Forklift Simulator is one such simulator. This is a record of my contributions to the product.

Official Store Links

Position

Unity Developer

​

Platforms

Windows Mixed Reality

Oculus Rift & Quest

Steam VR

Studio

ChalkBites

Date

2019-2020

ForkliftRealtime_Transparent.png
BackGroundShadow.png

FORKLIFT SIMULATOR

Thin Stripes

Corporate Training Product

CONTRIBUTIONS

Dynamic VR Interaction Toolkit

Most VR Interaction Systems follow a Command Based Behavioral Design Pattern, where an Controller or interacting object delivers commands to the an Interactable or responding object. This approach is popular because it is intuitive and conceptually is like real life. For example a hand issues a pick up command to a cup, then the hand issues a drop command releasing the cup. However, this approach introduces scalability problems as the hand needs to be aware of all the different commands it needs be capable of. 

​

Instead, I pushed for an Observer Behavioral Design Pattern. This means nearly all of the functional logic belongs to the Observer or Interactable, rather than the Controller. In consequence, the Controller only needs to know commands that wake up an Interactable. The Interactable can then choose whether or not the necessary criteria have been met to begin observation of the Controller. During the Observation state, the Interactable can respond to Controllers state without the controller needing to issue alternative commands. Using our hand and cup analogy, the hand issues a grab command to the cup. The cup responds by entering its Observation state and attaching itself to the hand. The cup then observes the hand and sees that the hand is no longer performing a grab gesture. The cup proceeds to release itself from the hand, falling to the ground. This means when creating new Game Play Mechanics augmentation to Controller Code can be kept to a minimum. Polymorphism allows for new Interactables to be easily created as they can can inherit common functionality from base classes.

​

Fantastic, our ToolKit is now flexible and highly scalable. However if improperly implemented the Observer Behavioral Design Pattern may show a critical flaw. The observer may be continuously observing the Controller without any changes in the Controller's state actually being made. In Unity, the observer may be performing Observations in its Update function. This means wasted message calls, resulting in additional performance left on the table. We eliminate this flaw from causing any possibile problems by introducing a Publisher-Subscriber Relationship between the Controller and the Interactor. By exposing C# Event Delegates inside the Controller for each major state change that can occur. Now when the observer enters its Observation State, it can subscribe to the different events that notify it of changes in state that it cares about. This also has a additional benefit to scalability. Instead of writing code respond to changes in state of the Controller as a whole. The programmer can easily create mechanics by picking and choosing between states that its he or she interested in to create different effects. For example, after a drill is picked up it listens for a change in the controllers trigger state in order to activate its motor.

ChalkBites_Virtual_Reality_Forklift_Cert

Google Sheets Integration

Conception:

As an individual who is always looking to optimize our Production Pipeline. Google Sheets Integration, was a no-brainer. It gave writers the ability to make changes to text and audio in a google sheet and the security that those changes would be reflected in the next published version. This would also lighten the burden on developers to implement each additional change in the project individually.

​

Implementation:

Fortunately, ChalkBites already used Google's GSuite product for team organization. Google Cloud's OAuth 2.0 Protocol provided secure access to google sheets from unity using employee GSuite accounts. Then I made a custom Inspector for viewing and managing imported Data.

Simultaneously, a team mate authored a easy to use google sheets plugin to make the writers jobs easier.

​

image_2020-10-01_204022.png

Importer

image_2020-10-01_204420.png

Imported Content

Rendering Optimization

AbnormalFrame.png

Before

Rendering.png

After

Our team's initial target platform was PC VR. When the call was made to switch platforms to the Oculus Quest, a standalone Android device, our project was left extremely GPU bound.

​

After countless hours of research and testing, the artists and I hatched a plan to reach our new optimization goals. To combat our Pixel Overdraw, Pixel Fill Rate and Draw Call problems the following optimizations were made:

​

  • Explaining the benefits of Texture Atlases as opposed to Tiling textures and higher quality textures

  • Changing lighting from Per Pixel to per vertex

  • Reducing Transparent material count to an absolute minimum

  • Changing Transparency blend modes from Alpha Clip to Alpha Blend where applicable. (Alpha Clip is expensive on Android)

  • Replacing Real-Time Lighting and Shadows with Light Probes and blob shadows instead

  • Removing Real-Time Reflections

  • Better use of Occlusion Culling

This System organizes imported data and manage Runtime Execution of in game events. The system takes in the data imported from Google Sheets and assigns that data to various Scriptable Objects called Tasks

​

Features Include:

  • A Node Editor for organizing assignments and task execution order.

  • A Scriptable Object Based Component Structure to give tasks unique runtime behaviour.

  • A ID System to interface tasks with Scene Only References.

State Machine & Content Manager

bottom of page