My favourite programming project and why you should start your own

in #programming7 years ago (edited)

Hello everyone! This is my first post, so I will write about something that currently consumes most of my time. This is going to give you some insight into who I am without providing you with the standard “introducemyself” post. So before I start with the main content I will just tell you a bit about myself.

About me

I currently live in a small city in Germany. I am a computer science student, who is working on his Master graduation thesis. The focus of my thesis is realistic ray tracing which is a subject of computer graphics. I assume that the overlap of people with computer scientific background and cryptocurrency interests is still large, which is why I think the following might be of interest to some.

Learning by doing

I always had an interest in video games. Video games are also the reason why I decided to study computer science. After being introduced to the basics of a programming language, I decided to write a lot of small projects. One of these projects was a small application, that generated images from simple virtual scenes. This is one of my favourite projects to date, as it allowed to see visualize differences a change in code produces. Here is one of the resulting images:

ForSteemit.png

In my opinion, the content of the project doesn’t matter as long as you enjoy working on it. In order to perfect something you need to put a lot of time into it, but getting better at something only requires determination. I hope that I can somehow spark an idea for a project of any kind in you.

Rendering

Rendering is the process of generating images from a virtual scene description. There exist a variety of rendering techniques that allow the generation of images. The two main categories we can divide them into are called rasterisation and ray tracing. Rasterisation is commonly used for applications that need to generate images at a high rate. While ray tracing techniques are usually preferred for images that need to look as realistic as possible. The rendering time for a single frame in some movies, for example, can take multiple hours.

I want to talk about ray tracing, as it is part of my thesis. Ray tracing works by following straight lines from a virtual camera into the scene. If these lines intersect the virtual scene description at some point, we have to compute the color. This color can be computed by following new lines from the intersection point until we reach a light source.

A similar simple description was the catalyst for why I started to write a simple ray tracing application. Note that this formulation is only simple, because we did not talk about the governing equations. Maybe I will write a post some other time, that will go into more detail.

Evolution of the results

The first part I implemented was the intersection test. Intersection tests are required to find points on a line that intersect the scene. At that time I only used the terminals output to visualize the result, which resulted in the following image:

The next step was to introduce light sources and use them to shade surfaces. The light sources in the following animation are point light sources. They are a purely mathematical construct, but allow for simple illumination of scenes. The rendered animation also shows a checkerboard floor, which was created analytically.

CSG_anim.gif

After that, the introduction of global illumination effects was set as the next goal. Global illumination is a category of visual effects, that include, but are not limited to caustics and color bleeding. These effects enhance the perceived realism of generated images by a lot. But color bleeding, for example, requires the computation of light from all directions. This makes global illumination really hard to compute and required me to study Monte Carlo Integration. With the help of this technique the following image was created, which illustrates the so called Cornell Room scene:

End

I hope I was able to convey that small projects are a great way to gain knowledge in any field. On the way you will encounter a lot of interesting problems, which will then enhance your knowledge even more.
Thank you for taking the time and reading this post. Let me know what you think, and don’t hesitate to ask questions or give me some feedback.

I am still not a great writer, but as with all things in life I have to work on it in order to improve.

Sort:  

Herzlich Willkommen auf Steemit :)
Solltest du auch auf deutsch schreiben (z.B. einen Vorstellungspost) bitte unbedingt den #deutsch Tag verwenden!
Habe dich außerdem via @welcoming geteilt, einem Account wo ich vielversprechende Neuvorstellungen teile!
LG
P.S.: Da du aus dem Süden kommst - in der Nähe von München? :)

Vielen Dank für die Informationen und resteem. Ich komme aber nicht aus München sondern aus Freiburg. Vielleicht werde ich mal etwas auf Deutsch schreiben, aber dieser Post ist als Übung für mein schriftliches englisch entstanden.
LG

Hello, very interestingly written. Look in my blog! Good luck on the project!

Welcome! Nice to have you!

Congratulations @canttouchdis! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You made your First Comment
Award for the number of upvotes received
You made your First Vote

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Congratulations @canttouchdis! You received a personal award!

1 Year on Steemit

Click here to view your Board of Honor

Do not miss the last post from @steemitboard:

Saint Nicholas challenge for good boys and girls

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @canttouchdis! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

Coin Marketplace

STEEM 0.19
TRX 0.25
JST 0.037
BTC 96709.35
ETH 3340.46
USDT 1.00
SBD 3.16