Home

Hello I'M

Weichu(Bill) Cao

A Game Developer

I am a graduate from University of Southampton, with a passion for game development, programming in particular. I enjoy a variety of games from narrative driven cinematic games such as Bioshock franchise to strategic and competitive online games such as Rainbow SIx Siege. I have made several personal projects and am now looking to get a junior programming position.

  • C# in Unity
  • C++ and Blueprint in Unreal Engine
  • Generic C++ skills using the libraries and frameworks such as openGL
  • Other general programming skills including Java and Python
  • Machine learning algorithms such as CNN and Transformer
  • Proficiency in version control and team management softwares such as git and notion
  • Creative minded with a passion for immersive and narrative-driven games
  • Games Master for in a Cyberpunk Campaign for 3 years

PROJECTS

Here are some projects I made or contributed as part of coursework, personal project and game jams.

Fengshui Engine(风水引擎)

The project is a learning project trying to understand the fundamentals of a game engine. The journey took to through a lot of the aspects of engine programming, primarily in the rendering pipeline. This was a solo project by me. It is implemented using C++.

key features:

  • 2D and 3D renderer supporting custom texture and batch rendering
  • Entity Component System
  • Audio system with 2d and 3d audio capability
  • Editor allowing minimal code development
  • The engine is a long-term project aimed as a playground where I could learn and experiment all techniques in game development. Through the project, I understood how data is stored and processed as well as how a tick is used in a game in its most fundamental form. Some plans for the future include a storage system for saving projects, fixing up the physics system, implement raytracing and whatever comes to mind really. I might even make a full game with the engine one day, who knows where it will take me.

    During the projec, a lot of difficulties come from the manipulative nature of C++ where memory is directly managed, it led to a lot of memory leaking and pointer issues where values are not assigned correctly, but as I worked more on it, I grew used to it and started devising a process using breakpoints to track all the changes of data and identify where the issues are. Fitting different libraries was particularly annoying as well as some are more oriented towards a C style grammar while others use more modern grammar. However, as engine progressed, and after building a lot of the fundamentals, both issues lessened as I started essentially using my own code which gave me total control and familiarity, which is I think a nice perk with C++.

    • Visual Studio
    • Premake
    • OpenGL
    • GLFW
    • spdlog
    • imgui
    • openal
    • miniaudio
    • C++

    Graviton

    This project is a game made for Thinky Puzzle Game Jam 4, in a 9-person team, in this game, the player uses some fundamental physics ideas of time and gravity to navigate the scene and solve puzzles. I worked as a programmer on the team. It is implemented in Unity.

    Contributions:

  • Adjusted unity physics to accomodate the changed gravity and time dilation
  • Implemented Gravity gun which can change the direction of gravity for objects and time dilation field which can slow time around player
  • Modified player movement controller to incorporate slope movement and other quality of life features
  • Created materials for arrows and time dilation field
  • The project was born from a casual conversation with a physicist in pub and quickly evolved into a jam game with 9 developers. It was the first game where I worked in such a big team and worked with fellow programmer from whom I learnt a lot regarding both project management and optimisation. I even had the chance to write complex shadergraphs pretty much for the first time in my life. The jam gave me tremendous experience working in an inter-disciplinary team having had to coordinate production between the technical and design team.  It was really a rewarding and fun experience if not for the lack of sleep.

    Two major challenges in this project were management and dealing with physics in Unity. Since the team was quite large for a jam project, there was a huge need for smooth communication. I took up a somewhat production role for the technical side and communicated with the design and art team during it. It was quite hard to juggle between that and coding to start with as I would be stuck in infinitely long meetings and not be able to explain what I need and want very well. However, as I learnt more about how artists and designers work, I started to ask the right questions and estimate the time they need, and communication improved drastically. Then there was the issue with physics as Unity runs its physics in a black box which meant adjusting time is quite hard as I cannot just change the time scale for everything. I had to use work arounds adjusting the mass and velocity of objects to simulate the time dilation and that took a lot of tuning as well as giving in to the rule of fun to make unrealistic but fun physics.

    • Unity
    • C#
    • Shadergraph for various materials

    Portal Demo

    The project is a learning project trying to learn unreal C++ while recreate some of my favourite mechanics in my gaming life. This was a solo project by me. The project is implemented in Unreal C++.

    key features:

  • Created Portal Gun with ability to travel through the paired portals as player
  • Added Titanfall-like movement including double jump, sprinting, sliding and wallrun implemented using the Character Movement Component states
  • Created Grappling gun similar to Pathfinder from Apex Legends
  • Created Flash ability similar to Tracer from Overwatch
  • The whole project was made with character movement state in mind and overrides the physics calculation. The result was a lot cleaner than I anticipated. It is probably in a state where I could build a little parkour game with it at some point if a good idea comes to mind.

    This was my first Unreal C++ project, which was quite challenging already. Furthermore, the documentation for Unreal C++ was not the best, and often I have to look through several layers of source code to figure out the functionality of a method, and I find that the greatest challenge. I also struggled with orientation a bit as Unreal uses Rotator which takes in Vector3 and is not as safe as using quaternion. It made the portal placement code quite janky. If I were to rewrite it, I would probably do all of it using quaternion but at the time, taking care of the edge cases of rotations took quite a bit of time.

  • Unreal
  • C++
  • Shadergraph for Portal material
  • Physics Engine

    The project is a learning project trying to understand the physics in game engine, which is a topic I am fascinated about. This was a solo project by me. The project uses an exisiting renderer, and is implemented using C++.

    key features:

  • Rigidbody based physics calculation
  • Constraints and constraint enhanced collision handling including ragdoll
  • Support for primitives such as sphere and cube as well as convex shapes
  • The engine follows the tutorial of Game Physics in One Weekend series. The engine handles most low speed physics interactions quite well and was optimised as I reimplemented it with the book. I really learnt a lot about cutting corners and how to make physics believable while keeping the cost of computation low. The knowledge helped me in developing my later demos and games such as the portal demo and graviton where both have heavy physics adjustment compared to the real world physics.

    There weren’t many particularly challenging issues in this project as I followed a tutorial for the majority of it. However it was the first time that I used C++ and I was quite perplexed with the syntax as the team and made a lot of mistakes trying to simplify code from the book. I ended up doing so, which improved the performance ever so slightly, but it was a rather nice first optimisation experience with C++.

    • Visual Studio
    • Vulkan
    • C++

    SMALLER PROJECTS

    Shell Shuffle

    Developer-Merge game made for mini jam 159. The game was a collaboration among five IG50 winners and I was in charge of the programming. Tools: Unity
    More Details

    My Monument Valley

    Developer-A recreation of Monument Valley, a game I truly loved with amazing art and mechanics. Tools: Unity
    More Details

    Mini Demos

    These are a series of mini demos each implementeing one function or aspect of a game. More details on each github page.
    More Details

    All Stacked Up

    Developer-Platformer made for GMTK. I was in charge of implementing and integrating the different aspects of the game. Tools: Unity, FMOD
    More Details

    Non-Programming Projects
    (Ask about them if you like what you see)

    Spiritual Realm - TA

    Achievements