PhD, UCLA (University of California, Los Angeles), 2016.
Software Engineer, MSc Computer Graphics, PUC (Rio de Janeiro), 2002.
Here are a few of my publications and research projects.
Published as a Google Chrome Experiment.
VSim is a framework for the visualization of 3D architectural and archeological models. VSim's design focuses on educational use and scholarly collaboration, an approach that is not commonly found in existing commercial software. Two different camera control modes address a variety of scenarios, and a novel smoothing method allows fluid camera movement. VSim includes the ability to create and display narratives within the virtual environment and to add spatially localized multimedia resources. A new way to associate these resources with points and orientations in space is also introduced.
A simple, stable and fast hair simulation system for interactive graphics applications. The main contribution is a hair-head collision method that has very little CPU cost and simulates the volumetric effect of hair resting on top of each other without the need for hair-hair collision. A simulation-based hair styling method for end-users is also presented.
In this project I describe and implement an interactive virtual environment of the surface of Mars in which the user can drive and articulated rover. The Martian terrain is derived from the MOLA (Mars Orbiter Laser Altimeter) database available from NASA. The rover is subject to physics laws, and performs collision detection with the planetary surface. The ODE (Open Dynamics Engine) library provides the physics simulation and collision detection.
This was my UCLA course work for CS274C - Computer Animation - Prof. Petros Faloutsos - 2010.
This work was built on top of my Mars Visualizer project, a system for rendering the NASA MOLA dataset (and other terrains) in real time in mulit-resolution.
In this work, low level control of three different virtual characters is achieved using simulated annealing to make these characters perform locomotion. Aspects that were studied include joint positioning and their characteristics (including degrees of freedom), control scheme, neural network inputs and outputs and annealing schedule. A visual annealing approach optionally allows the experimenter to observe the annealing process animated as it happens. A modeling pipeline based on Blender provides a sofisticated way to model characters, and the character loading and assembly in the runtime is data-driven. Three characters were created and used: a spider, a snowboarder and a cyclist. Good results were obtained with the spider and the cyclist; they successfully learned to locomote on the virtual terrain.
The source code compiles without modifications on Mac OS X and Linux, the two platforms used for development. It should compile with only minor modifications on Windows. The ODE library is required. OpenGL and GLUT are optional for annealing, but required for rendering.
This was my UCLA course work for CS275 - Artificial Life - Prof. Demetri Terzopoulos - 2010.
3D game engines are APIs that help the development of games with real time 3D graphics. It is convenient to use a 3D game engine when developing games, because all the low-level functionality is already built. However, each 3D engine API is constructed in a different way, causing engines to be incompatible. The learning process is also difficult, because the APIs of some engines are not well designed. This work analyzes this issue by doing a critic survey of some existing 3D engines and proposes an abstraction layer over them, called IEngine.
The IEngine layer gives engines a standard API. An application built over IEngine can be compiled with any of the 3D engines adapted to IEngine, and that application could switch engines without any code change. The adaptation of a new engine to IEngine is also facilitated by IEngine's structure of abstract classes (interfaces) and is done by inheritance.
In this work, an implementation of IEngine over the open-source and multiplatform engine Crystal Space is presented. Also, it is presented a way to implement IEngine over a second engine, Fly3D. Finally, the possibility of IEngine receiving an interface layer with other programming languages such as Java and Lua is studied, in such a way to allow the quick development of good visual quality 3D games.
Terrain visualization is an area of active research that has yielded many results in the last decade. Despite all the literature generated, there is still need for a simple and effective solution that takes advantage of graphics boards available in current consumer PCs. This paper describes an implementation of a modified version of the Geometrical Mipmaps proposed by de Boer. Our version allows arbitrary sized terrains and is not restricted to square terrains with a side measuring 2k + 1 samples. Furthermore it is simpler and requires no preprocessing stage, thus allowing its direct insertion in an existing open GIS such as TerraLib. Results are shown to validate the ideas presented here and to suggest future works.
A wave simulator based on Wave Particles, described by [Yuksel, House and Keyser 07]. I present a simplification of Wave Particles which is very lightweight and produces good visual results. It simplifies the technique by not modelling horizontal movement of the water surface and not providing interaction with objects. Further derivations of the original idea are proposed: a ring-shaped texture that models a wavefront instead of individual particles, in some constrained cases, can greatly reduce rendering demand on the pixel buffer; and ripples in the surface of an ocean can be approximated by linear wavefronts.
PDF (draft): SimplifiedWaveParticles.pdf
An algorithm animator written as a Java applet. It allows the animation of 2D algorithms with predefined point set and solution set classes and a predefined view. It's extensible, allowing the user to write his/her own algorithms and animate them, and the predefined input and output classes can also be changed. Not only does it show each finalized step of the algorithm (when an output item is found), but it also shows intermediate steps, as candidates to join the solution set are being examined by the algorithm.
This was my Computational Geometry course work (PUC-Rio / IMPA, 2000, Prof. Luiz Henrique de Figueiredo).