Walid Chtioui

Game Programmer

Hello! My name is Walid(He\Him), I'm currenty pursuing a master's degree in Computer Science at the University of Passau in cooperation with the National School of Computer Science, Tunisia.
My focus areas are Game Development using the Unity game engine and Artificial Intelligence, mainly Deep Learning.
Below you can find my Portfolio highlighting some of my software development projects in the fields of Game Development and Artificial Intelligence.

Virtual Exhibition

Freelance @ SCALE

TECHNOLOGIES: Unity3D, C#, Git LFS, Blender, GIMP, JavaScript

TARGET PLATFORM(s): WebGL

Virtual Exhibtion is a highly-customizable, immersive, 3D job fair that runs flawlessly on WebGl. This is a freelance software development project done by a team of 2 developers; a fullstack web developer and me as a game developer.
Note: the frame rate of the videos below do NOT reflect the actual frame rate of the game.

Since I wanted to learn as much as possible from this project, only two assets from the Unity Assets Store were used (for 3D Characters and sounds), everything else was built from scratch; Character Movement, UI, AI System, 3D Models, Camera Collision Avoidance, Lighting, Animations, etc...

Challenges

  1. WebGl is single-threaded. CPU optimization is extremely important
  2. Highly coupled and unmaintainable code base
  3. Animations took alot of CPU time
  4. Customizable textures have to be requested during runtime
  5. High numbers of draw calls and high number of vertices
  6. Indoor realtime lighting heavily impacted game's performance

Solutions

  1. Reduced the number of materials by sharing materials across numerous 3D models. Heavy use of static batching to reduce state changes.
  2. ScriptableObjects as intermediate layers. For instance, a ScriptableObject was used as an intermediate layer between the Input Manager and the objects that required input functionalities. Another ScriptableObject was also used as a Scene Management intermediate layer. I've also relied heavily on using Manager Singletons. For instance, we had a UIManager, CustomizationManager, TextureRequestManager, etc... All of these were put into a seperate, persistent Scene that holds all persistent GameObjects. This has greatly improved the structure of the project.
  3. Use environment to properly set up Occlusion Culling to completely cull NPC characters and set a maximum distance after which they won't be rendered.
  4. Built a TextureRequestManager that receives texture requests and executes them when possible. Since, for each scene, we have hundreds of texture requests, this manager solved a lot of issues by limiting how many texture requests can be served at a time.
  5. Manually merge models that share the same material together, this was done for all the roof's 3D models.
  6. Lightmapping resulted in better visuals with much better performance. Thanks to proper setup of light probes, runtime-instantiated objects had acceptable visual quality.

We've learned that

  • Modern principles of software development are extremely important. Not following these results in an unmaintainable project.
  • Singletons come with a lot of disadvantages in Unity development environment. Using ScriptableObjects when possible proved to be a better design choice.
  • We should optimize for the target platform. WebGl is single-threaded, most performance issues are caused by CPU-bottleneck, thus reducing vertex-count of 3D objects wasn't very helpful in improving the performance.
  • Using a CI\CD pipeline could've saved us a lot of time. Many times we had to rebuild the whole project because of an error that could had been easily detected in the integration phase.
  • Using the Unity Profiler in development builds helped us identify numerous performance issues.

For project management, we followed the SCRUM agile development methodology where a sprint lasted four weeks. At the end of each sprint the customer reviewed the outcome and gave us feedback. We have heavily relied on using Trello to organize our sprints.

ML pipeline for ECG health data

Internship @ PPR Technologies inc.

TECHNOLOGIES: Python, Keras, KerasTuner, Cookiecutter, Git, Github

Worked in a team of two developers to build a small, extensible and AutoML-based pipeline to automatically determine which deep learning model performs best on ECG, time-series data.

Detailed Achievements

  • Used hyperparameter optimization (HPO) algorithms such as: Hyperband, Bayesian Optimization and Random Search to determine the best hyperprameters in a given search space.
  • Built a well-documented, wrapper library that allowed very little technical knowledge to get it to work; just importing the library and calling very basic functions.

Personal Projects

Below is a list of my open-source personal projects. Some of these are not yet fully completed. I've mostly done these projects during my first two years of Computer Science studies as a hobby to practically apply the subjects I was studying.

Unity Spawn Editor

Unity3D, C#, UI Toolkit

Built a custom editor for the Unity engine using UI Toolkit to edit spawn\waypoint positions

  • Ability to edit spawn positions from both the Inspector and the Scene View

EZ
Quadcopter

C/C++, ESP32, PlatformIO, Git

Educational project to teach first year CS students how to build a quadcopter from scratch using easy-to-get, cheap components

  • Wrote the flight controller code for ESP32 microcontroller using C/C++ and PlatformIO
  • Wrote a full guide on how to build a quadcopter from scratch

labyrinth game

C/C++, SDL2, Make

A simple random-maze-generated game made using C/C++ with SDL2.0 graphics library

  • Used a backtracking algorithm to generate random mazes
  • Understood core game development concepts such as: game loop, importance of capturing the time between last two frames
  • Learned the importance of game programming designs; the whole game was written in just one file which made the code completely unmaintainable

encbench

C/C++, WxWidgets, Make

EncBench is GUI application that allows you to visualize benchmark results of numerous encryption algorithms that are run using the GO programming language

  • Designed and built the GUI using C/C++, WxWidgets GUI library and Make
  • Built a small bar chart library from scratch
  • Worked in a team of two developers
  • Designed the app to be easily extensible
  • Application is agnostic in regards to which language the encription algorithm is implemented in

nrf transmitter

C/C++, WxWidgets, Make

Generic transmitter based on ESP32\Arduino boards using nRF24 transceiver module

  • Assembled the transmitter using ESP32 as a microcontroller
  • Wrote the code for the transmitter and tested it

Fancy Pathfinder

C/C++, SDL2, Make, Git

Fancy graphical visualization for pathfinding algorithms (DFS, BFS, A* with custom heuristic function) with highly customizable case layout.

  • Wrote a small case layout graphics library
  • Implemented pathfinding algorithms such as: DFS, BFS, HC, and A* with custom heuristic function
  • Made sure that the code is extremely easy to read for newcomers into the A.I. field to learn from