Yu Zhang's Projects

Stable Fluids 3D

A single-file implementation of 3D stable fluids.

Github YouTube

Several Classical Partial Differential Equations: Numerical and Exact Solutions

Several classical linear partial differential equations, including the transport equation, Laplace's equation, the heat equation, and the wave equation, are analyzed. Their exact solutions and numerical solutions (including Eulerian methods and Monte Carlo methods) in two-dimensional space are then compared.

Github Article
Project Image

A Corrected Derivation of Invertible Neo-Hookean Model

In this project, we implement several different invertible constitutive models. Additionally, we correct the derivation of the invertible neo-hookean model, which is presented in the SIGGRAPH course 'Dynamic Deformables: Implementation and Production Practicalities'.

Github Article

Soft2D Physics Engine

Soft2D is a 2D multi-material continuum physics engine designed for real-time applications. With soft2d, users can simulate various materials such as fluids, sand, snow, and elastic bodies within their applications. Soft2D runs on GPU, and currently supports Vulkan and Metal backends. For user convenience, we offer a comprehensive suite of easy-to-use interfaces in C language. Please see the user documentation for more details. We also provide a free-to-access unity plugin - Soft2D for Unity, which allows users to build simulation scenes in a low-code way.

Website Github YouTube
Project Image

2D Semi-Implicit MPM

We provide a detailed derivation of a 2D semi-implicit MPM (Material Point Method) time integration solver, and the experimental results are analyzed. Unlike other matrix-free methods (such as PCG), which avoid the explicit construction of stiffness matrices, we provide a full derivation for a 2D semi-implicit method and present the explicit form of the stiffness matrix.

Article Tutorial
Project Image

High-Performance PBD Physics Engine

This project aims to develop a high-performance PBD (position-based dynamics) physics engine, which is similar to Houdini Vellum. The engine supports a series of materials' simulation: rigid body, soft body, fluid, cloth, granular material, etc. We achieve a 60 FPS's 240k particles fluid simulation, and the simulation can be extended to a large-scale scene (there are 20 million particles in the picture on the right side). To obtain a high-quality fluid surface, we implement a surface reconstruction algorithm based on dual contouring. In this project, we also use a CCD (Continuous collision detection) algorithm to tackle the tricky collision problem.

Unreal Engine SPH Plugin

This plugin simulates SPH (smoothed-particle hydrodynamics) linear elasticity deformable objects and fluids in the UE (Unreal Engine) game engine. We implement several linear algebra algorithms in HLSL (high-level shader language), for example, a HLSL version's 3x3 SVD algorithm. To our knowledge, we are the first ones who implement these algorithms in HLSL. The major reference for this project is the SPH-related papers mentioned in Jan Bender's SPH Eurographics course.

Github

Unity Stable Fluids Plugin

Inspired by FluidNinja LIVE, this plugin achieves a high-performance stable fluids simulation in the Unity game engine. Besides fluids, this plugin can also be employed to simulate wind field and magic effects in games. This plugin is optimized specifically for mobile devices and is able to run at 2ms/frame performance on a mid-range mobile phone.

Project Image

Simple Path Tracing Renderer

This project achieves a BRDF model renderer based on path tracing (I am considering expanding this project to the BSSRDF model in the future). In Monte Carlo integration, uniform sampling is used, and direct/indirect light sources are sampled separately to improve rendering quality. Moreover, a Russian Roulette scheme is used when casting rays recursively. In this project, a BVH (bounding volume hierarchy) data structure is used to accelerate querying ray-triangle intersection. This project is inspired by the course GAMES 101.

Github

GAMES 201 Course Projects

This project includes algorithm implementations of the course GAMES 201: 高级物理引擎实战指南2020 . I complete almost all algorithms mentioned in this course, these algorithms include: Euler fluid methods; Hybrid fluid methods: PIC (Particle-In-Cell), APIC (Affine Particle-In-Cell), FLIP (Fluid Implicit Particles), MPM (Material Point Method); 3D implicit FEM (Finite Element Method); Vortex methods; Several numerical methods: Conjugate Gradients, Multigrid Methods. All procedures are written in the Taichi programming language.

Github

Real-Time Fluid Simulation in Games

This pre-research project was finished during my internship in NetEase Games, with advisor Xiaosheng Li . This project aims to explore the possibility of achieving real-time interactive fluid simulations in desktop and mobile games. Two popular Lagrangian methods, SPH (Smooth Particles Hydrodynamics) and PBF (Position Based Fluids), are achieved on both PC and cell phones, and their performance is compared. For free-surface rendering, two rendering methods are implemented and compared: Marching Cubes and SSFR (Screen Space Fluid Rendering). This project is written by Unity compute shader and fully runs on GPU.

Project Image

Vascular Fitting System

A vascular fitting system for visualizing, editing, and fitting 3D vascular data. This software is developed during my first year of postgraduate, and it is currently used by Virtual Reality and Visualization Lab of Beijing Normal University. This system is based on Dynamic Ball B-Spline Curves and is written in Qt / C++ / OpenGL.

More Details
Project Image

Computer Graphics Course Assistant

I design assignments for Beijing Normal University undergraduate computer graphics course. The content includes a modern OpenGL tutorial, basic shading modes, mesh subdivision, curves and surfaces, physical simulation, and simple ray tracing. These procedures are based on Qt C++ framework and use the OpenGL 4.0 APIs.

More Details
Return to Resume
Return to Blog