Saul Vilchez

Software Engineer

I am a graduated software engineer currently living in Iceland. I am passionate in developing 3D software and Research Machine Learning.

During my studies and internships, I have gained experience in machine learning, game development and web development.

Skilled in Unity, C#, Python, Git, C++, OpenGL, Shaders, Deep Learning, Reinforcement Learning, Pytorch.

Experience with the frameworks such as Django, ASP.NET, NodeJS.

GitHub Profile Link

Linkedin Profile Link

Deep Reinforcement Learning for Physics-Based Animation of Human Motion

This project was part of my 60 ECTS Master’s Thesis. The objective was to reconstruct human motion using Deep Reinforcement Learning. The project is divided into two parts. The first part focuses on motion mimicking, where the goal is for a humanoid character to imitate reference motion data. Using PPO (Proximal Policy Optimization), the agent learns to apply torque forces through SPD (Stable Proportional-Derivative) controllers, enabling each joint of the humanoid to replicate the motion accurately. The second part involves using a dataset of reference motions and a Discriminator Network to mimic and blend the motions while simultaneously performing a task. In my thesis, the task was for the agent to move toward a target. The project was built using PyTorch for PPO and MuJoCo for physics simulation. You can learn more about the project by clicking the "View Thesis" button. Please note that the source code is still a work in progress and requires further cleanup and organization.

Combining Behaviour Tree and Reinforcement Learning

Unity BT Unity ML

This project was part of an independent study I completed at the University of Reykjavik. I developed a tool in Unity to combine Behaviour Trees and Reinforcement Learning for creating AI agents. Using various resources, I implemented a custom Behaviour Tree system along with its own editor, built using Unity’s UI Builder and GraphView API. Finally, with Unity ML-Agents, I integrated the Behaviour Tree editor with Reinforcement Learning. In essence, the agent learns which node to execute in the Behaviour Tree through reinforcement learning. To test the system, I re-implemented two of the Unity ML-Agents examples using both Behaviour Trees and Reinforcement Learning.

Compute Shaders Unity

In this project, I explored compute shaders in Unity by implementing a simple physics simulator for spheres. There are three different implementations: the first runs the physics on the CPU, the second uses compute shaders for physics, and the third uses both compute shaders and a surface shader. In the last implementation, the GPU handles both the rendering of the spheres and the physics simulation, resulting in the best performance among the three.

3D OpenGL Mesh and Shaders

In this project, I explored more advanced computer graphics features using OpenGL. I implemented a system that allows viewing the scene through three different cameras: a free-look camera, an orthographic camera, and a first-person camera. I used the Assimp library to load 3D meshes into the scene. I also used the tessellation shader to render Bézier curves and visualize the interpolated movement of objects. Additionally, I utilized the geometry shader to generate new geometry from vertices, which enabled an explosion effect. For lighting, I implemented a Phong spotlight model to illuminate the scene.

3D OpenGL Maze

This project is my first 3D OpenGL project. The main features include lighting and texture shaders, as well as a custom camera system. It features two cameras: a 3D third-person follow camera and an orthographic camera in the top-right corner. I also implemented a simple ECS (Entity Component System) to manage the entities in the scene.

2D OpenGL Collisions

This project was developed for the Computer Graphics course at the University of Reykjavik. It is a simple 2D game; however, the main feature of the project is its collision detection algorithm. I implemented the SAT (Separating Axis Theorem) algorithm from scratch to detect collisions. The project was built using C++ and OpenGL.

Flambe Game

This is a group project developed for the course Advanced Game Design & Development at the University of Reykjavik. This is a 2D platformer game. Focused on boss battles. I developed and implemented the state machines for the AI and the player mechanics. The AI of the bosses uses state machines to define the behaviour of the boss. I also implemented a probability script, so the AI can decide what to do when certain conditions are met.

AI Stealth Game

This is a group project developed for the course Artificial Intelligence in the University of Reykjavik. This a stealth game where the main player with the use of the A star algorithm will try to reach the target node while avoiding enemies. The A star algorithm re-calculate the path in real-time. I implemented this algorithm with the use of the game engine Unity3D.

The Colleran Web Page

This is a e-commerce web page developed during my internship. The web page was developed with Django and JavaScript. I used Stripe and PayPal APIs for handling the payment of the users.

Embedded Project

Project where I am trying to improve the implementation of a team coursework project that I had during my bachelors. This is a embedded system project, developed with the MCU ESP32 and C++. Is a Home Environment System for detecting the changes of the temperature and humidty.

Racetrack Game

This is a project that I developed during my bachelors degree. I have implemented A star and Breadth First Search algorithms in the game racetrack (vector race). The game was developed in python with the use of the library Pygame.