top of page

ACADEMIC PROJECTS |   在校項目

 

AZURENDER

C++, OPENGL

 

This project is my progressive ray tracing based renderer: Azurender. It is currenly based on Monte Carlo Ray Tracing, Path Tracing and Photon Mapping based GI , optimized spatial acceleration date structure, basic texture mapping, environment mapping, Image Based Lighting (which is not fully finished), Depth Of Field, plus configurable xml based scene files.

 

I am currently working on it as my side project. Since I'm working on a whole bunch of code reconstruction, optimization, and integration of more features, the code base is a bit messy. Accessable from the Github repository

 

The current progress is updated on my blog post.

Distributed Ray tracing for out-of-core rendering problems

C++, OPENGL, OPEN MPI

 

This project was aimed at solving out-of-core ray tracing problem for ultra large scenes that could not fit in the memory of a single machine.

 

We used 10 machines (Redhat Linux) to render 108 Lucies within a minute. We proposed and implemented two approaches: Synchronous Blocking vs. Asynchronous Non-Blocking. 108 Lucies have 48 GB memory footprint in Azurender.

 

The detailed technical solutions are presented in my blog and in this final report document.

ISPC BASED PARALLEL KD - TREE CONSTRUCTION FOR PHOTON MAPPING

C++, OPENGL, OPENMP, ISPC

 

My work on the parallel KD-Tree construction on this project won 4th place in 3rd Annual Parallelism Competition. Progress blog is updated here (ISPC Based Parallel KD-Tree Construction for Photon Mapping (A Modified VVH Approach)). Here are the presentation slides for parallel competition.

 

This project is based on Monte Carlo Ray Tracing (see below). Caustics and diffusive inter-reflection is based on gathering the radiance of scattered photons from photon map. My earliest implementation was based on this SIGGRAGH COURSE NOTE. 3D KD-Tree was used as acceleration data structure.

 

During Game Development Conference (GDC) 2014, I revamped my old version of photon mapping. Inspired by the method of Peter Kutz and publications by Prof. Henrik Wann Jensen, I changed my irradiance estimation in a way that is similar to progressive photon mapping. I got decent caustics and smoother global illumination.

CUDA CIRCLE RENDERER

Parallel Computing Assignment, C++ / CUDA

 

The assignment requires to render randomly generated translucent circles. It is mainly aiming for dealing with two challenges in parallel computing: atomicity and order, while ensuring prominent speedup. All image update operations must be atomic and all pixels should be updated in the order of circles. Decomposition, workload balance for each CUDA threads and maximumly exploiting GPU computing capability is crucial in the task.

 

 

Loop Subdivision

Personal 2 week project, C++, OPENGL

 

This project is to apply Loop Subdivision Algorithm to refine model mesh. We could get increasingly smooth surface by applying refinement scheme - creating new vertices and faces. Subdivision defines a smooth curve or surface as the limit of a sequence of successive refinements.

 

Loop subdivision a two pass algorithm. In the first pass we interpolate existing vertices to create new Odd Vertices. In the second pass, we interpolate old Even Vertices to make them smoother. This project is implemented with OPENGL.

 

Extra credits for this project is to have fast subdivision (6th iteration of stegosaurus in under 10 seconds). My implementation has 4.8 seconds performance.

 

The algorithm and discussions are in this SIGGRAGH COURSE NOTE.

Monte Carlo Raytracing

Personal 2 week project, C++, OPENGL, OPENMP

 

This project is to implement backward raytracing for rendering. In brief, the method is to cast eye ray from each pixel on screen to intersect with objects in  the scene. Each time an intersection happens, a new ray would be cast to light source or to manifest reflective or refrective rays depending on the surface of intersection. The color of the intersection instance is then calculated by interpolation. Backward raytracing is discussed in this SIGGRAGH COURSE NOTE.

 

In this project, the scenes are consisted of triangle meshes, spheres and complex models. The challenge (and extra credits) is to have good acceleration spatial data structure. I implemented Bounding Volumes Hierarchical Tree (BVH Tree) as spatial data structure, improves the Dragon Scene rendering time from 10 hours to less than 10 seconds. My construction of BVH Tree is described in this paper. NVIDIA in this paper further discussed about BVH. I also implemented an optimized Ray-Box intersection algorithm described in this paper.

 

More Rendered Works

Simple Physics Engine

Personal 2 week project, C++

 

This project consists of writing a physics engine that simulates spheres, triangles, and planes. Rendering is done with OpenGL. The main scheme is about  collision detection and movement simulation.

 

Using Runge-Kutta 4th Order for movement integration is described in the tutorial for Differential Equation and Implicit Methods For Differential Equation.

 

 

MUSIC VIDEO: LOSE YOURSELF

2 week project, by Cookie Roses, Actor

 

This project is the final project of Visual Story Telling, mostly for fun. It aims to creating a music video with three key words: defiant red, insignia and survival story. Our goal is to synthesize what we learnt from story board creating, camera, lighting and improvisational acting to create something funny and interesting.

 

This project is done with Albert Shih, Ari Novick and Rex Hsieh. Apparently they thought "A- is an Asian F" is a funny idea...

 

 

bottom of page