Artists use many different methods to convey the 3D shape of what they draw or paint when using a 2D paper or canvas. This project is working to find out how texture effects the way that a person percieves 3D shape. To study this, the project includes an interface used in experiment stages that displays a series of images. For each image, the subject adjusts a probe to show how they percieve the surface. Currently the project has been focused on textures on 3D surfaces that are based on the first (and sometimes second) principle direction of the surface.To find out more detail about the project please visit the project description page.
This summer I worked with Haleh, the graduate student working on the project, on several parts of the project. Background work that I did to prepare me for the project included learning OpenGL, learning about splines, and reading several papers. During the summer I worked to create surfaces using splines. I wrote a program that creates a surface defined by splines that allows the user to alter the position of the control points (points that define the shape of the spline) to see how it alters the surface and to design surfaces easily. What I did needed to be changed so that the mathematical calculations that needed to be completed later could be done. So, Haleh wrote a program similar to mine, using some of my code to allow for this. We also worked on defining a family of surfaces for future experiments. I also worked on texturing surfaces.
The main accomplishment for the summer was the program I wrote that was based on the paper "Fast Line Integral Convolution for Arbitrary Surfaces in 3D" (H. Battke, D. Stalling, HC Hege, 1996). This program takes as input a surface file (in .smfd format) of vertices, principle direction for each vertex, and triangles. It then uses Line Integral Convolution to create a texture for each triangle calculating streamlines based on the principle direction vector field and displays the textured surface.
There were many challenges and pieces to this project. It was overwhelming for me initially to read the paper knowing I was going to try to implement it. Before I could even start I had to do some more background work. I read several papers about LIC in 2D. I looked at code for a program that does LIC in 2D. I read the above mentioned paper many times. I also had to review projections, learn about barycentric coordinates, barycentric interpolation, and barycentric point-in-triangle tests. I wrote a smaller program that calculated the texture coordinates for each triangle for a surface. I also learned about creating ppm files.
There were also many challenge as I wrote the program. These included coding the details of LIC, keeping track of when a streamline left a triangle of a surface and finding where it ended up, and creating, writing and managing often several thousand texture files. Along the way, I made some pretty bad coding errors that were causing frustrating problems that I finally found. At times, progress was slow, but I enjoyed it for the most part. It was very rewarding when the images the program created were truly LIC images.To find out more detail about the specific work I did this summer please visit my weekly journal.
The whole project has been ongoing for several years and remains a work in progress. The work that remains on the LIC texturing program includes further debugging it as well as adapting it to work well with the other parts of the project. Also some work might need to be done to make the program more efficient. The work that remains on the project as a whole includes creating the final families of surfaces, texturing them using the LIC texturing program, use those images and possibly some from another texturing program written a couple years ago to complete a series of experiments. As after the previous set of experiments was completed in this project several years ago, a considerably about of analysis on the results will need to be done to decide where the project should go next.
Before participating in DMP this summer, I knew almost nothing about computer graphics and very little about graduate school and computer science research. I learned a great deal about all these things through this experience. I have become better at debugging my code and at managing the details of a larger project. I got a chance to learn about some of the wide range of topics that fall into the category of computer science research by learning about the projects in progress in the Graphics Lab as well as a few of the projects in the A.I. and Robotics Lab downstairs. I got a chance to read several research papers that were interesting. I realized that reading them multiple times often helps them to make a little more sense. I realized that I would probably do well and enjoy graduate school if I decide to go.
I also had the chance to meet some great people this summer. Everyone was so great about answering my questions, giving me debugging tips, letting me borrow textbooks, and getting excited for me when things were working well. I had a great time this summer and I'll miss everyone!