Graduate courses

Shadow and Environment Mapping (Apr. 2013)

Monte Carlo Path Tracing (Mar. 2013)

  • Resolution: 1,024 by 768
  • Material: Lambertian and Phong BRDFs
  • Sampling: Cosine weighted importance sampling
  • Direct lighting: Enabled
  • Russian Roulette: Enabled
  • Minimum length of path: 2
  • # of samples: 6,400 per pixel

Progressive Mesh (Feb. 2013)

Undergraduate courses

Distributed Ray Tracing (Jul. 2011)

I developed a distributed ray tracer based on stochastic sampling. The tracer renders 3D geomet- ric primitives based on Phong illumination, supporting texture and bump mapping. The main features are recursive reflection, recursive refraction, soft shadows, depth of field, and motion blur. The tracer accelerates computations using binary space partitioning (BSP) and OpenMP.


  • Renders 3D geometric primitives based on Phong illumination.
  • Distributed ray tracing (stochastic sampling)
    • Soft shadows, depth of field, and motion blur
  • Recursive reflection and refraction.
  • Texture and bump mapping
  • Accelerates computations using binary space partitioning (BSP) and OpenMP.

C-like language interpreter with a static type checking system (Sep. 2005—Dec. 2005)

I developed a C-like imperative language interpreter with a static type checking system in nML, a dialect of ML. To be specific, I developed a sound and static type checking system using the algorithm V and J. A. Robinson's unification algorithm [2]. My language was type-safe; it eliminates type errors from runtime because the interpreter statically checks types prior to execution. Also, I implemented Hindley-Milner style let-polymorphism using the algorithm W.

KVM Profiler

KVM Profiler is a profiler for Kernel-based Virtual Machine (KVM) and QEMU. Theoretically, this tool can profile any hypervisor that supports libvirt, such as Xen, VirtualBox, and VMware. The co-authors are moc.liamg|7ikkot#nuyH selrahC and moc.liamg|gninromdniw#gnaK nooheeJ (Seoul National University).

Automatic code generation using only C++ templates and macros (Jun. 2008)

Generally, to maintain consistency between a server and a client, packet classes and their serialization codes are automatically generated from common specification files by an external code generator. However, I tried to develop a more standard and internal way of code generation that removes the necessity of an external code generator. Using MPL and Preprocessor of the Boost libraries, I was able to implement automatic code generation at compile time using only C++ internal templates and macros.

Web search engine using Google's PageRank (Jun. 2004—Feb. 2005)

I implemented Google’s PageRank algorithm following [1]. I implemented a crawler in Java, a repository using MySQL, and a Web front end in PHP.

Other projects

1. Brin, S., and Page, L. 1998. The anatomy of a large-scale hypertextual web search engine. Computer Networks and ISDN Systems 30, 1-7, 107-117. Proceedings of the Seventh International World Wide Web Conference.
2. Robinson, J. A. 1965. A machine-oriented logic based on the resolution principle. J. ACM 12 (January), 23-41.