top of page
Search
  • Writer's pictureMiles Cumiskey

Senior Thesis - The Lighthouse Project

Updated: May 31, 2021

Background


The Lighthouse Project began as an academic paper. I was investigating ways to make interesting 3D effects and wanted to transform a 3D scene into a dynamic painting that someone could jump in to and explore. As I researched, prototyped, and learned more about computer graphics, I proposed a technique to create the desired effect.

However, without a lot of experience in the field, I struggled to turn my method into reality. A lot of the steps sound simple, but are difficult to implement.

With this in mind, I transformed my project and expanded its scope. My proposal method is still an integral part of my project, however I plan to implement it later as a master or phd project. Currently, I am working on developing a 3D game while focusing on aesthetics, accessibility, and tool development while releasing pieces for public use.


Preliminaries

As part of making my thesis, I did a lot of research! Prior to starting this project, I had no experience in writing shaders, and had only just begun learning about 3D rendering and geometry.


Due to the amount of terms mentioned, I have linked Wikipedia pages with definitions, and included the tutorials that first started me on my journey.

Textures, Starting with Shaders, and Voronoi Diagrams

The most common way to add color to a 3D model is use a 2D texture, that is applied to the surface of the model like paint. This texture is then applied to the surface of the model as part of a material. Materials can have various other properties such as determining how the model reflects light or and how metallic the surface appears.

I wanted to automate the texturing process and ensure that I could access color information on the model’s surface (which I would need for a later step) so instead of using textures, I started looking into developing shaders.

Shaders are instructions to tell programs how something should be rendered [displayed on the screen].

They take a variety of inputs [sometimes including textures and UV maps] and can modify them to generate amazing new visual effects.

To create the base layer for my painting shader, I wanted to use a voronoi diagram to create irregular areas of color. Voronoi Diagrams [the black and white square pictured below] are commonly used in shaders to create organic textures, lava, and randomness. Each ‘cell’ is based around a central point, which I would ideally use to assign and store color information.



A black-ouline of a voronoi diagram [appearing as an irregular pattern similar to that of a giraffee is given a green color. Other blues, yellows, and oranges are also added for a mosaic effect. This is then applied to a 3D cube]
a proposed method for automatic texture generation using Voronoi Diagrams

The problem with using a Voronoi diagram is that it is difficult to implement on a 3D model without distorting the original. Applying something that is 2D in 3D space is like wrapping a present - if the gift is weirdly shaped, it is really hard to figure out how to make the paper conform to the surface. For the final implementation, I am currently deciding between integrating the Voro++ library into Unity or pre-generating the voronoi diagrams on the UV map as a texture.

Proposal for Adding Brushstrokes / The actual ‘painted’ effect

The voronoi diagram on is only a piece of the project. Since the end goal is to have a 3D model that looks like a painting, I also needed to create an effect that looked like paint. To do this, I want to generate brushstrokes.



The colored voronoi diagram is used as a base on a sphere. Then, more 'layers' of color are added based on the color of the surface normals
A visualization of the proposed method to create a brushstroke texture to a 3D model by adding brushstrokes on an additional transparent mesh using the colors at certain Voronoi points

In order to replicate the look of layers of paint and messy edges, I wanted to create new, transparent 3D models just a little bit bigger than the original. Once generated, these models become new surfaces to ‘paint’ on, adding depth to the flat model.

To add the color and generate the brushstrokes, we need to use the Voronoi diagram again. As each section of the diagram is created around a point, we can take the color and the normal of that point and use it on the transparent model.


The normal gives us a line that points straight out, parallel to the surface of the model. If we generate one brush ‘dab’ at the place where the normal intersects with the transparent model, we get a blob of paint on the surface. When we do this more we start to create a painting. We can then add another transparent 3D object, still just a little bigger, and do it again until we like the effect.

The goal of this is to give the illusion of texture and detail that conforms to the object’s surface.

Future work

The biggest takeaway I have from The Lighthouse Project is the knowledge I’ve gained during the development process. Learning about shaders has also taught me about optimization, hardware requirements, good design, and what I enjoy making.

While developing my shader, I started designing a Unity3D game project to prototype and test different methods, and as part of my focus on aesthetics, accessibility, and tool development, I am aiming to publicly release the materials used to make my projects in installments.


For now, a 3D Tour of the basic environment is available here: https://makermiles.itch.io/demo-05.

Thank you to all of the professors, family, and friends who have supported me, I hope to make you proud,

Miles Cumiskey



a logo with the name 'miles cumiskey'

21 views0 comments
bottom of page