Portfolio Lukas Valine Outcomes Education Experience Contact
About this site
Hi, I'm Lukas Valine. This site is an exhibit of some of the work I produced during my studies at UNWSP as a Graphics Programming major.
Education
University of Northwestern, Saint Paul 2018
Graphics Programming is a combination of Computer Science and Animation. More specifically, it is computer programming as it relates to displaying visual elements, including 3D elements, on a computer display. My focus has been on cross platform accelerated rendering. I've written render engines targeting macOS, Linux, iOS, Android, and Web platforms employing graphics apis like OpenGL, OpenGL ES, and WebGL. In addition to accelerated rendering, I've also developed a proficiency in 3D modeling and animation using both Blender and Maya.


Mobile App Development
Part of my major includes a focus on cross platform development. A big part of cross platform development is mobile application development. This was an introductory class that taught the basics of Android development using Android Studio and Java. In this class I learned about the Android activity lifecycle, the handling of user input, the process of building flexible layouts with fragments, the development of custom Android widgets, and how to work with SQLite for persistant data storage.

Linear Algebra
Linear algebra is a vital part of graphics programming. This class taught me how to leverage vectors and matrices to perform 3D transformations like translation, rotation, scaling. Additionally I learned about perspective and orthographic projection matrices and how these matrices can be used to create the impression of 3D space when drawing images. This is esspecially useful on computers with GPUs that are optimised to perform matrix multiplication.

3D Modeling
3D transformations on a computer are only useful if you have 3D models to transform. 3D modeling is important because it gives me the tools I need to create my own 3D models. This increases the breath of software I can create on my own, and gives me additional avenues for debugging the graphics software I write. In this class I learned how to manipulate vertices, edges, and faces in 3D space in both Maya and Blender. Over the course of this class I created 3D models of buildings, animals, and people. I learned different modeling techniques like box modeling and plane modeling. I also learned how to retopologize 3D models for improving performance and minimizing artifacts caused by poor mesh structure.

Animation 1
Animation 1 convered the 12 basic animation concepts including ease-in and ease-out, squash and stretch, and timing. It also focused on character animation and taught techniques for working in Maya.

Animation 2
Animation 2 expanded on concepts from animation 1, and teaches more advanced character animation techniques. In this class I worked with facial animation rigs, and learned the basics of Maya blend shapes.

Calculus 1
There are many topics in graphics programming that apply concepts from Calculus. Calculus 1 at Northwestern covers topics like derivatives, limits, definite integrals, and Reimann Sums. I have applied many of the concepts I learned in Calculus 1 in my graphics programming related projects. For instance, in modern, physically based rendering it is nessesary to solve a definite integral in order to calculate the radiant energy at a point on a 3D mesh.

Calculus 2
Calculus 2 at Northwestern expands on Calculus 1 and covers subjects like indefinite integrals, partial derivatives, and surfaces of revolution. Many of the topics in Calculus 2 have direct applications in graphics programming. Specially, I've used partial derivatives to accelerate the calculation of surface normals in my implementation of the marching cubes algorithm. To elaborate on this, marching cubes is an algorithm that generates a triangle mesh useful for visualizing isosurfaces. Metaballs are a specific type of isosurface that can be created by summing spherical gradients. After performing marching cubes over an isosurface, it is necessary to calculate the surface normals of the resulting mesh in order to render it convincingly. A basic solution would be to iterate over the triangle mesh and take the cross product of two edges of every triangle. However, because an implementation of Metaballs by definition has access to the isosurface function used to create the mesh, the meshes surface normals can be calculated by taking the partial derivative of the gradient function. In my experiance, this is more performant, and produces higher quality surface normals than the basic method.

Outcomes
Artifact 1 Octotap
Octotap lets you remotely control and monitor a 3D printer from an iPhone of iPad. This project demonstrates my proficiency in Swift and my ability to write software that displays streaming data in the form of charts. I developed this application in Swift 4 and leveraged the new Swift 4 JSON decoder. This shows my ability and willingness to stay up to date with the latest versions of Apple's development tools, and apply them in ways that reduce development time and complexity.


Screenshots
Artifact 2 Patient Records
Patient records is an electronic health record keeping application for iPhone and iPad. This project shows my knowledge of key/value data structures as they relate to SQL databases. Additionally, Patient Records demonstrates my ability to develop and maintain mobile applications targeting multiple screen sizes. Currently this app is optimized for screens ranging from a 4 inch iPhone to a 12.9 inch iPad Pro. One key challenge in developing for multiple screen sizes is that every screen needs to be designed multiple times, which can greatly increase development time.


Screenshots
Artifact 3 ZPath
ZPath is a physically based, hybrid renderer built with CUDA and OpenGL. This project demonstrates my proficiency in C++ and my ability to solve problems related to graphics programming. ZPath is my senior project and is still in development.

Artifact 4 3D Modeling and Animation
The following animations demonstrate my proficiency in 3D modeling and animation using Blender, Maya and Mudbox, as well as my proficiency with Python. The first animation is an advertisement I created for Medtronic about their Intellis Neurostimulator. I started by creating a 3D model of the implantable device in Maya, after which I choreographed the animations in Blender. I performed the rendering using Blender's offline renderer Cycles. To manage the complexity of the animations and to make future changes easier, I automated the rendering pipeline using Python.

The second two animations I created for my 3D modeling class at UNWSP. I created all the 3D models and animations inside of Blender. For the third video I leveraged Blender's fluid simulator as well as Blender's dynamic paint tools for generating texture masks.


Professional Experience
Software Engineering Summer Accociate 2015-2016
During my internship at Medtronic I worked developing an iOS application that tracks patient symptom data, as well multiple 3D rendererings of inplantable medical devices. I worked with Swift and built multiple prototype applications for iPhone, iPad, and Apple Watch.

Software Engineering Contractor 2016 - Present
I currently work as a part-time software engineer for Medtronic. I have developed multiple accelerated 3D rendering applications for Android with OpenGL ES 3.0, including a custom render engine for Android cardboard VR. In addition to Android development, I also work on UX designs and have partnered with Medtronic's marketing department to create detailed 3D renderings and animations for use by sales representives in Germany.

Contact


Copyright Lukas Valine, 2018