Topics in Computer Animation
C++ / OpenGL - GLFW / Visual Studio 2019
2D OpenGL Parametric Curves & Interpolation Engine.
Supports: Linear, Bezier Cubic Catmul-Rom, Hermite, B-Splines.
Methods: Bernstein Polynomials, De Casteljau.
Can help represent position & orientation (Quaternions and Euler Angles) of 3D Objects over time.
3D OpenGL Animation Engine.
Supports: Scene Graph World Hierarchy, Skeleton Transform Kinematic Chain Traversal, Foward Kinematics Solver, Loading of BVH animation files, Inverse Kinematics Solver, Skeleton - Mesh Skinning to drive geometry.
Methods: For FK, The skeleton's joints are arranged in a hierarchy where each child is positioned and oriented relative to its parent. The engine can compute or read from a BHV file the position and orientations of each joint in a skeleton relative to the world.
For IK, an IK chain is created, and it's solved by using both Cyclic Coordinate Descent and the Pseudo-Inverse Jacobian Approach.
PD Controllers, Intelligent Agents with Behaviors.
Supports: Individual and Group Behaviors such as: Seek, Flee, Arrive, Wander and Obstacle Avoidance. Flocking and Leading for Group sims are also supported.
Methods: Every agent gets info on the state of the world per frame. With this, the sim computes the desired velocities and heading angles which are then used by the feedback controllers (PD controllers in this case) to produce corresponding forces and torques. Then, the software updates all the agent's state vector using Euler integration and then displays the agent in the world.
Simple Physics Engine.
Supports: Simulation of Particle Systems. Rockets can fly up in the air and explode with particles.
Methods: Every rocket has the current state per frame and the derivate of the state. Integration methods such as Euler and Runge-Kutta are used to solve for the dynamics of the system.
Topics in Computer Graphics & Rendering
C++ / OpenGL - GLSL / QT
3D Software Rasterizer.
Supports: Rasterization of a full 3D Scene from World Space to Screen Space with Z-Buffering. Texture Sampling, Model Shading with Lights, Camera and OBJ model loading are supported.
Methods: Starting from World Space, the software converts to Camera Space using the View Matrix, then the Projection Matrix to get to Screen Space. SS Triangle rasterization is done manually. Texture Sampling done with Barycentric interpolation. Lighting and Shading using Lambert's law of cosines.
Fully Featured 3D CPU & GPU Path Tracer Rendering Engine.
Supports: Full OBJ scene loader. Global Illumination. Different types of surface materials, colors and lights. Textures.
Methods: Solving the Light Transport Equation and shooting rays per pixel that bounce in the scene.
Direct and Global Illumination, different types of BRDFs & Multiple Importance Sampling (MIS) are among parts of technology that has been implemented.
For the GPU case, the Rendering is being solved via a shader, on a screen space sized quadrangle.
Look below for some actual results from my rendering engine!
Physically Based Shaders. "RealShading."
Supports: RealTime PBR Materials. Environment Maps. Metallic - Roughness PBR Workflow.
Methods: Implementation of Epic Game's Real Shading in Unreal Engine 4 paper found here.
General Implementation of the Cook-Torrance Microfacet Specular Shading Model. We pre-calculate the information of GI and store it in a 2D look-up Texture.
Videogame Development
Raw OpenGL / Unity / Unreal Engine
OpenGL: From Scratch Minecraft Clone
NeonDodge VR - A Multiplayer VR Dodge Ball Game.
Lumos - A Multiplayer Hack n' Slash Game