Brian Budge
What's New?
About Me
Current Work
Resume/
CV
Publications
Photos
Contact Me
index » Resume
Brian C. Budge
Cell phone
E-mail
Webpage
(530) 220-4398
budge@cs.ucdavis.edu
http://idav.ucdavis.edu/~bcbudge
Address 306 Cambridge Terrace Apt B
Davis, CA 95618

Skills
Graphics Related Knowledge
Knowledge of graphics in the areas of real-time graphics, NPR, photorealistic rendering, visualization, ray-based, and scanline based approaches including use of hardware shading languages.
Programming Languages
C, C++, CUDA, Java, Scheme, Lisp, Pascal, Javascript, Basic, Prolog
APIs
STL, Boost, Cg, OpenMesh, OpenGL, Direct3D, GLUT, GLUI, MFC, the Windows API
Operating System Experience
Linux, IRIX, Solaris, Windows 9X, NT, 2000, XP, Mac OS
Education Ph. D., Computer Science
University of California, Davis
Focus:Computer Graphics
Expected graduation: 2008
GPA: 3.9
Advisor: Ken Joy
 
B. S., Mathematics
University of Utah
Graduated: 2002
Overall GPA: 3.6

Experience
Student Intern Summer of 2007
Advanced Micro Devices Santa Clara, CA
I researched the feasibility of applying GPUs to general SQL queries. The thought is enticing because databases tend to be very bandwidth heavy applications, and GPUs provide a large aggregate bandwidth, however, updating the database would need to be dissallowed (due to the fact that databases generally require atomicity), making the match somewhat less desirable.
Student Intern Summers of 2003, 2004, and 2006
NVIDIA Corporation Santa Clara, CA
June 2006 to September 2006
I helped to write a significant portion of the CUDA compute driver for NVIDIA graphics hardware. While working on this project, I influenced driver and language decisions, wrote code to allow the concurrent use of multiple GPUs, and filed a patent. http://developer.nvidia.com/object/cuda.html
June 2004 to September 2004
I helped to architect a new version of CgFX. My tasks included aiding with language design, implementing core features of CgFX, and implementing a virtual machine. http://developer.nvidia.com/object/cg_toolkit.html
June 2003 to September 2003
I wrote programs to test the performance of the texture unit of the Geforce 6800. I would then analyze the data for potential performance problems and offer possible solutions.
Undergraduate Student Technician Summers of 2001 and 2002
Los Alamos National Labs Los Alamos, New Mexico
I researched and implemented various flow visualization techniques for use in ocean flow viz. I wrote an ocean visualization program in Direct3D designed to run on a desktop box replacing an OpenGL program that required a 128 processor SGI supercomputer. Job responsibilities included learning the Direct3D API, researching efficient texture streaming implementations, writing vertex and pixel shaders and retaining the replaced program's functionality.
Graphical Database Engineer Intern May of 1999 to April 2000
Evans and Sutherland Salt Lake City, Utah
I designed and implemented a graphical database tool called 3D SignGen. The program saved artists design time by allowing quick alteration of numerous attributes associated with airfield sign boards. These could be viewed graphically and written to a database.

Honors and Awards
DAAD Scholarship for research in Germany January 2005 to August 2005
GAANN Fellowship 2002 to Present
Eccles Engineering Scholarship 2001 to 2002
Novell Scholar for Computer Science (2) 1999 to 2001
Honors at Entrance, University of Utah 1997 to 1998
Dean's List (multiple)

Academic Projects
Shell Maps with Level Sets Modeling and Rendering
I played mostly an advising role in this paper, suggesting a couple of the techniques presented, most notably the explicit mapping. The explicit mapping is beneficial from a speed point of view, and behaves similarly to Shell Maps, except that the mappings tend to be smoother. The other main technique in the paper, implicit mapping, is much slower, but ultimately has the nicer mapping: The result is yet another level set, and so smoothing, blending, and merging operations are simple and elegant.
Shell Maps Modeling and Rendering
I created a technique by which space near surfaces could be parameterized. This creates a shell in which 3D texture coordinates can be applied. The technique is bijective, so data can be transformed into or out of the space. The image on the left shows a weave pattern that was created using ray marching in shell space. This paper, called ``Shell Maps'' was published in SIGGRAPH 2005.The image was generated by my photon tracer, which allows arbitrary BRDF calculations, creates physically based images, and can run on large clusters using MPI, or can run multi-threaded on large shared memory machines.
Geometric Flow Viz Vector Field Visualization
Another student and I worked on an idea to use GPUs to perform point advection in 3D. This allows the use of geometric streamlines for volumetric flow visualization. Typically this is desirable due to the occlusion problems inherent in dense texture flow models. This paper was published in EuroVis 2005.
Multi-dimensional Transfer Functions Vector Field Visualization
A related project was implementing multi-dimensional transfer functions (MDTF) in graphics hardware. These MDTFs allow for selective visualization in flow fields, and on GPUs can run at interactive rates. These MDTFs were applied to dense texture flow models, as those where the only flow vis techniques adapted to graphics hardware up to that time. In the EuroVis 2005 paper, we also implemented MDTFs. This paper was published in the proceedings of the 12th Pacific Graphics Conference, 2004.
Nested Dielectrics Realistic Rendering
I worked with another student on a project to allow arbitrary nesting of dielectric objects in ray-based renderers. The technique maintains good surface properties for any nesting of dielectric objects, or nesting of non-dielectric objects within dielectric objects. This image is an example of what can easily be modeled using our method. There is nesting of ice within water within glass, and remains consistent even with a specular straw immersed within the water. Our paper has been published in the Journal of Graphics Tools, Volume 7, No. 2. This image was generated using an older version of my renderer and has appeared on the cover of the journal and the book "Graphics Tools: The JGT Editors' Choice".
Human Iris Rendering Modeling and Rendering
This image is from a paper I worked on with some other students at the University of Utah. The paper explains a method to use an Ocularist's approach to render realistic human irises. We were able to achieve amazing results using an approach similar to those used by ocularists; namely we used the blending of many levels of textures in order to simulate the 3D nature of the human iris. Our paper was published in the IEEE Computer Graphics and Applications, Volume 23, No. 6.
Miscellaneous Non-graphics Related Projects
In addition to a large base of graphics projects from course work, I have worked on several large projects. As part of a team, I wrote a compiler that compiled a Java-like language down to SPARC assembly and performed optimizations like dead code analysis, static loop unrolling, and constant folding. I have also written several interpreters, including a scheme interpreter with custom high-speed low-fragmentation memory allocation, and mark-and-sweep garbage collection. Additionally, I implemented several features including virtual memory, scheduling, and interprocess communication for a simple OS kernel called Yalnix.
Works in progress
Out-of-core Global Illumination Rendering

I'm currently working on a system which performs data management for out-of-core, hybrid computation. Out-of-core means that the data required for the computation is too large to fit in system memory, often requiring a large number of slow disk reads to accomplish the task of accessing data. By hybrid I mean that we aren't restricted to CPUs for our computation, but can use CPUs, GPUs, and theoretically Cell processors and custom ASICs.

This has been applied to rendering synthetic images via path tracing. Path tracing tends to be expensive, and has difficult access patterns for out-of-core algorithm design, however, with the use of our data management system, and some additional intelligent design choices on the part of the path tracing components, we now have a highly efficient out-of-core path tracer which can utilize the powerful computational resources offered by modern GPUs, as well as multiple multi-core CPUs, and which scales across several cluster nodes.

Improved Convergence of Caustics Rendering
Caustics tend to be a computational burden when computing realistic images via unbiased means. Several methods have made strides in computational efficiency for diffusive types of materials, however, caustics are generally calculated via a biased method such as photon mapping because of the difference in render speed. We split the integral of the rendering equation, and utilize previous methods for computing the "diffusive component", while applying our new method to computing the "specular component".
Real-time Ray Tracing on GPUs Rendering
I have implemented a real-time ray tracer running on NVIDIA GPUs which achieves over 50 frames/second for small scenes like the Stanford Bunny, while reaching nearly 12 frames/second on a seven million triangle scene, the XYZ_RGB Dragon, also from Stanford's scanning repository.
Better RBSP Trees Rendering, Algorithm Complexity Reduction
We are also working on improving restricted BSP trees, both from a build and a render aspect. Our build shows asymptotic improvement, and in practical terms is hundreds of times faster than previous work. Our render times are also an order of magnitude faster than previous work.

References provided upon request