Realtime Graphics on GPU - labs (2017/2018)

Current tasks

015. GPU benchmark (C++, 13. 5. 2018) - 25+ points

Compare several variants how to render massive data (106 triangles) on a modern GPU. Write a report about it.

003. Procedural texture using noise (C++/C#, 20. 5. 2018) - 25+ points

Noise function implementation on GPU (fragment shader) + implementation of actual "natural" texture (wood, marble, ..). 2D or 3D approach.

006. Crystal ball (C#/C++, 10. 6. 2018) - 18+ points

Fragment shader implementing light refraction in a crystal ball.

005. Terrain with LoD (C++/C#, 1. 7. 2018) - 30+ points

Implementation of a LoD (Level of Detail) system for potentially infinite terrain. The surface will be rendered from low altitudes (land vehicle, hovercraft with limited speed).

016. Hovercraft mini-game (C++/C#, 1. 7. 2018) - 25+ points

A simple interactive game simulating a hovercraft flying above terrain surface (see the task 005). User interaction, certain motion simulation fidelity, game "achievements", 3rd person view, ...

012. Laser show in CUDA (C#/C++, 1. 7. 2018) - 20 to 48 points

CUDA/OpenCL simulation of a laser show with disco balls etc. Ray-triangle intersection implemented in a CUDA/OpenCL kernel, OpenGL interop for rendering.

Some old tasks for reference

004. Trackball (C++, 23. 4. 2017) - 12 to 28 points

Intuitive 3D object rotation using mouse + some nice 3D object. Momentum.

010. Texture animation using shaders (C++/C#, 7. 5. 2017) - 15 to 28 points

Any interesting effect involving texture animation using fragment shader. Bitmap texture can be used as well.

007. Vinyl surface shader (C++/C#, 21. 5. 2017) - 20 to 32 points

Vinyl record groove simulation in a fragment shader.

014. Pool simulation (C++/C#, 2. 7. 2017) - 18 to 50 points

Simulation of a small pool (waves, tiling, light refraction and absorbtion/coloring) using fragment shader only.

013. Ocean waves (C++, 15. 5. 2016)

Realtime simulation of ocean waves in vertex shader (Gerstner formula or better).

008. Particle system in CUDA (C#/C++, 3. 7. 2016)

CUDA implementation of simple particle system with statical obstacles. Particle vs. obstacle collisions, no inter-particle interaction.

Credit requirements

Every student has to earn min 50 points, upper limit is 80 points (ICG: at least 16 points has to be from 3D graphics tasks).
Deadline for winter-term credit is 17. 2. 2019 !
Deadline for summer-term credit is 30. 6. 2019 !

Credit points will be added to examination result (max. 100 points) and final grades will be determined using the next table.
Grading table:
150+ points A (výborně)
130 to 149 points B (velmi dobře)
110 to 129 points C (dobře)
less than 110 points F (nevyhověl(a))

How to earn points

A. tasks (assignments) runnung through the whole term (C#)

Tasks are defined on labs. Typical task will be 3 to 4 weeks due. Asssesment depends on difficulty, solution quality, robustness and elegance. Additional bonus points can be given, e.g. in case of contest.

B. transfer from previous year

90% of last-year points could be transferred from the previous year (upon explicit student's request).


Some tasks could include contest (if there is well defined criterion for solution comparison).
Such tasks will be marked as "CONTEST" and there will be public chart displaying best results. There will be point bonus associated with top ranks (typically 10, 6, resp. 3 points in case at least 10 participants).
Only solutions submitted in time are counted!


There are several simple rules that you should follow:
  • mail messages has to be sent from e-mail identity where your civil first name and surname can be easy determined
    (try to use something like "Malcolm Reynolds" <>)
  • one message = one solution. If you want to ask a question or send a complaint, use different message!
  • message subject has to contain task number (three-digit decimal number). Everything else is optional..
  • you definitely must follow rules for source-file naming, there is a clear definition on each task's web page. Don't forget to write your name into a comment on the first line of source file!
  • don't send unasked files (there are exceptions but they are quite rare)
  • don't send huge mail attachments! If you want to send an image (demonstration of a good/bad case, input picture, etc.), use small resolution. Large files (e.g. videos) should be uploaded to any common sharing site (Dropbox, Google drive, and you will send URL in a mail instead.
  • functionality of your code could be tested in conditions slightly different from the obvious ones. Produce robust code! Handle all (even weird) input conditions well, please.
  • sometimes we will include special comments into source files to mark places where your code/changes should go. Please don't feel restricted by those comments. You can insert any variable/support class/data structure as long as it stays in a source file declared for consignment. Don't add more source files to the task project.


Simply attach the requested source code to a mail message. Uncompressed, unecrypted, follow rules declared earlier (message subject)!

There is a penalty of 1 point for every day after a task deadline.

Lab schedule

See lab schedule on the SIS server - Monday 12:20 SW1 (two alternating groups, the Czech one starts on 26 Feb, the English one on 5 Mar)

Copyright (C) 2000-2018 J.Pelikán, last change: 2018-09-24 11:20:26 +0200 (Mon, 24 Sep 2018)