(130 intermediate revisions by 3 users not shown)
Riadok 1: Riadok 1:
 
[[File:cg2_2014.png]]
 
[[File:cg2_2014.png]]
= Computer Graphics 2 =
+
= Advanced Computer Graphics =
  
 
== What you Need to Pass ==
 
== What you Need to Pass ==
Riadok 18: Riadok 18:
  
 
* Grades
 
* Grades
** A = 92-100
+
    A = 92-100
** B = 84-91
+
    B = 84-91
** C = 76-83
+
    C = 76-83
** D = 68-75
+
    D = 68-75
** E = 60-67
+
    E = 60-67
** Fx = 0-59
+
    Fx = 0-59
  
* [https://docs.google.com/spreadsheets/d/1k9qGAlKjxJLHS71MDg6L_Mz4wJH4snIfPWXGo2R35Eo/edit?usp=sharing VIEW RESULTS]
+
*[https://docs.google.com/spreadsheets/d/1jbNMBGyIsJ3m6MwfGBKiq7BTLl6scVlAKAIp0qZvlTM/edit?usp=sharing '''VIEW RESULTS''']
* [https://moodle.uniba.sk/fmfi Final Term] by Mooddle Ecetronic test (20.5.2015 16:30 in H3)
+
*[https://moodle.uniba.sk/course/view.php?id=2164 Final Term] by Comenius University Moodle Electronic test 17.5 8:00 )
 +
* Before the test exam you can try to solve many tests from the graphics page, is you can pass the example test then you have big chance to pass the test exam.
  
 
* Schedule
 
* Schedule
** Mon (8:10) - Room B (lecture)
+
** Mon (12:20) - Online MS Teams (lecture)
** Wed (16:30) - Room I-H3 (seminar)
+
** Str (9:50) - (excercises)
 
+
  
 
=== Materials to read ===  
 
=== Materials to read ===  
Riadok 38: Riadok 38:
 
* http://www.amazon.com/Mathematics-Computer-Graphics-Undergraduate-Science/dp/1849960224
 
* http://www.amazon.com/Mathematics-Computer-Graphics-Undergraduate-Science/dp/1849960224
 
* http://www.martinus.sk/?uItem=19688 - Moderni Pocitacova Grafika
 
* http://www.martinus.sk/?uItem=19688 - Moderni Pocitacova Grafika
 
 
----
 
----
 +
=== Lecture00 "Introduction to Computer Graphics" ===
 +
* Computer Graphics Applications
  
=== Lecture01 "Introduction to Computer Graphics" ===
+
=== Lecture01 "Graphics Pipeline" ===
 +
* What is The Graphics Pipeline
 +
* Vertex Shader
 +
* Primitive Assembly
 +
* Tessellation Shaders
 +
* Geometry Shader
 +
* Geometry Postprocessing and Rasterization
 +
* Fragment Shader
 +
* Frame Buffer Operations
 +
* http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/pipeline33/
 +
* Lecture notes: [[media:cg2_lesson00.pdf|lesson00.pdf]] [https://docs.google.com/presentation/d/1Gc0a1VoGR096N1aO7Y_11GCc3k-Jpm8jEGzQ5qgpL3Q/edit?usp=sharing]
 +
* Štátnicová téma: Zobrazovací kanál. Grafická pipeline moderného hardvéru, framebuffer, buffer objekty, používané súradnicové priestory, druhy shader programov, druhy optimalizačných techník (view frustum, occlusion, backface culling), príklad shader programov.
  
 
=== Lecture02 "Ray Tracing 1." ===
 
=== Lecture02 "Ray Tracing 1." ===
* TayTracong Pipeline
+
* RayTracing Pipeline
 
* Lecture notes: [[media:cg2_lesson01.pdf|lesson01.pdf]]
 
* Lecture notes: [[media:cg2_lesson01.pdf|lesson01.pdf]]
  
Riadok 59: Riadok 71:
 
* Lecture notes: [[media:cg2_lesson02.pdf|lesson02.pdf]]
 
* Lecture notes: [[media:cg2_lesson02.pdf|lesson02.pdf]]
 
* Poznámky v Slovenčine k téme [[media:cg2_DatoveStruktury.pdf|Dátové Štruktúry]] a [[media:cg2_Kd-tree.pdf|Kd-tree]].  
 
* Poznámky v Slovenčine k téme [[media:cg2_DatoveStruktury.pdf|Dátové Štruktúry]] a [[media:cg2_Kd-tree.pdf|Kd-tree]].  
* Štátnicová téma: Kanál metódy sledovania lúča. (definícia lúča, popis metódy sledovania lúča, generovanie lúča, pochod po lúči (ray traversal), prienik lúča s trojuholníkom, stromová štruktúra lúčov (ray tree) a jej použitie na výpočet lokálnej farby, problém presnosti priesečníkov)
+
* Štátnicová téma: Kanál metódy sledovania lúča a porovnanie s Radiosity metódou. (definícia lúča, definícia tieňového lúča, popis metódy sledovania lúča, generovanie lúča, pochod po lúči (ray traversal), prienik lúča s trojuholníkom, stromová štruktúra lúčov (ray tree) a jej použitie na výpočet lokálnej farby, problém presnosti priesečníkov). Metóda sledovania lúča na GPU, urýchľovacie techniky.
  
=== Lecture05 "Light Trasport." ===
+
=== Lecture05 "Shading." ===
 +
* OPENGL Light sources
 +
* Shading Phong model
 +
* First time meeting with Rendering Equation
 +
* Book chapter Shading: [[media:Shading.pdf|shading.pdf]]
 +
 
 +
=== Lecture06 "Light Trasport." ===
 
* Physics behind ray tracing
 
* Physics behind ray tracing
 
* Physical light quantities
 
* Physical light quantities
Riadok 68: Riadok 86:
 
* Light transport simulation: Rendering Equation
 
* Light transport simulation: Rendering Equation
 
* Lecture notes: [[media:cg2_lesson05.pdf|lesson05.pdf]]
 
* Lecture notes: [[media:cg2_lesson05.pdf|lesson05.pdf]]
* Štátnicová téma: Globálny osvetľovací model. (definujete problém, metódy riešenia problému Neumanovou postupnosťou,  Radiosity metóda s rovnicou a popisom, definujte form-factor, riešenie globálneho problému metódou sledovania lúča, metóda sledovania fotónov).
+
* Štátnicová téma: Fyzikálny osvetlovací model a výpočet farieb renderovacou rovnicou. (definícia radiancie, definícia BRDF a jej vlastnosti, fyzikálne BRDF Cook-Tarrance, definícia priestorového uhlu, napíšte renderovaciu rovnicu a vysvetlite jej členy).
  
=== Lecture06 "Radiosity." ===
+
=== Lecture07 "Radiosity." ===
 
* Diffuse reflectance function
 
* Diffuse reflectance function
 
* Radiative equilibrium between emission and absorption, escape
 
* Radiative equilibrium between emission and absorption, escape
Riadok 76: Riadok 94:
 
* Iterative solution Neuman series
 
* Iterative solution Neuman series
 
* Lecture notes: [[media:cg2_lesson05.pdf|lesson05.pdf]]
 
* Lecture notes: [[media:cg2_lesson05.pdf|lesson05.pdf]]
* Boo chapter Shading: [[media:Shading.pdf|shading.pdf]]
+
* Book chapter Shading: [[media:Shading.pdf|shading.pdf]]
  
=== Lecture07 "BRDF." ===
+
=== Lecture08 "BRDF." ===
 
* Bidirectional Reflectance Distribution Function (BRDF)
 
* Bidirectional Reflectance Distribution Function (BRDF)
 
* Reflection models
 
* Reflection models
Riadok 84: Riadok 102:
 
* Shading Phong model, Blin-Phong model
 
* Shading Phong model, Blin-Phong model
 
* Lecture notes: [[media:cg2_lesson07.pdf|lesson07.pdf]]
 
* Lecture notes: [[media:cg2_lesson07.pdf|lesson07.pdf]]
* Homework:  
+
* '''Homework:'''
** 1. Prove that the specular BRDF from slides [https://dai.fmph.uniba.sk/upload/1/1d/Cg2_lesson07.pdf less07] fulfills the BRDF properties: reciprocity, energy conservation, definit space, value space of BRDF
+
** 1. Prove that the mirror BRDF from slides [https://dai.fmph.uniba.sk/upload/1/1d/Cg2_lesson07.pdf less07] fulfills the BRDF properties: reciprocity, energy conservation, definit space, value space of BRDF
** 2. Derive the equation for reflected direction Omega_r from [https://dai.fmph.uniba.sk/upload/e/eb/Shading.pdf shading] document.
+
** 2. Derive the equation for refracted direction Omega_r from [https://dai.fmph.uniba.sk/upload/e/eb/Shading.pdf shading] document in section 6.3.3.
 
* Physical BRDF
 
* Physical BRDF
 
* Ward Reflection Model
 
* Ward Reflection Model
 
* Cook-Torrance model
 
* Cook-Torrance model
 
* Lecture notes: [[media:cg2_lesson07Phys.pdf|lesson07Phys.pdf]]
 
* Lecture notes: [[media:cg2_lesson07Phys.pdf|lesson07Phys.pdf]]
* Štátnicová téma: Výpočet farieb renderovacou rovnicou. (definícia radiancie, definícia BRDF a jej vlastnosti, fyzikálne BRDF Cook-Tarrance, definícia priestorového uhlu, napíšte renderovaciu rovnicu a vysvetlite jej členy, Phongov model BRDF).
 
  
=== Lecture08 "Shadows." ===
+
=== Lecture09, Lecture10 "Shadows." ===
 
* Lecture notes: [[media:cg2_lesson08.pdf|lesson08.pdf]]
 
* Lecture notes: [[media:cg2_lesson08.pdf|lesson08.pdf]]
* Štátnicová téma: Problém viditeľnosti a tieňa. (Z-buffer, definícia tieňového lúča, tiene vo Phongovom modeli, projekčné tiene, tieňové telesá, definícia hrany siluety, stencil bufer, mäkké tieňové telesá, metóda kompozícia tieňov pomocou Z bufra (shadow mapping)).
+
* Štátnicová téma: Tiene, typy tieňov (mäkké, tvrdé, statické, dynamické), typy a popis algoritmov (projekčné, tieňové objemy, tieňové mapy (shadow mapping)), spôsoby implementácie jednotlivých algoritmov, artefakty a ich odstraňovanie, príklad shader programov pre tieňové mapy. Artefakty spôsobené diskretizáciou. Tiene vo Phongovom modeli.
  
=== Lecture09 "Texturing 1, 2." ===
+
=== Lecture11,  Lecture12 "Texturing 1, 2." ===
 
* Texture parameterization
 
* Texture parameterization
 
* Procedural methods
 
* Procedural methods
Riadok 104: Riadok 121:
 
* Lecture notes: [[media:cg2_lesson09.pdf|lesson09.pdf]]
 
* Lecture notes: [[media:cg2_lesson09.pdf|lesson09.pdf]]
 
* Book chapter (Surface reality techniques): [[media:cg2_lessonBook09.pdf|lessonBoook09.pdf]]
 
* Book chapter (Surface reality techniques): [[media:cg2_lessonBook09.pdf|lessonBoook09.pdf]]
* Štátnicová téma: Metódy zobrazenia scény množinou obrázkov. (Problém textúrovania, bump-mapping)
+
* Štátnicová téma: Lokálne osvetľovacie modely. (tieňovanie, Phongov a Blinn-Phongov osvetlovací model, zložky (ambientna, difúzna, zrkadlová), textúrovanie a druhy textúr, mapovanie a filtrácia textúr, popísať princípy environment, bump, normal mapovania, textúrovací a tangenciálny priestor, príklad shader programov na GPU.
  
=== Lecture10 "Image Based Rendering 1." ===
+
=== Lecture13 "Image Based Rendering 1." ===
 
* Plenopticfunction
 
* Plenopticfunction
 
* Panoramas
 
* Panoramas
Riadok 113: Riadok 130:
 
* The Lumigraph
 
* The Lumigraph
 
* Lecture notes: [[media:cg2_lesson10.pdf|lesson10.pdf]]
 
* Lecture notes: [[media:cg2_lesson10.pdf|lesson10.pdf]]
* Homework: Blinn-Phong enumeration.
+
* '''Homework:''' Blinn-Phong enumeration.
  
=== Lecture11 "Image Based Rendering 2." ===
+
=== Lecture14 "Image Based Rendering 2." ===
 
* Layered Depth Images
 
* Layered Depth Images
 
* View-dependent Texture Mapping
 
* View-dependent Texture Mapping
Riadok 121: Riadok 138:
 
* View Morphing
 
* View Morphing
 
* Lecture notes: [[media:cg2_lesson10.pdf|lesson10.pdf]]
 
* Lecture notes: [[media:cg2_lesson10.pdf|lesson10.pdf]]
* Štátnicová téma: Metódy zobrazenia scény množinou obrázkov. Definícia plenoptickej funkcie a jej tvorba, popis IBR (Image Based Rendering) metód ako sú Svetelné polia (Light Field), geometrické IBR metódy, aliasing a výpočet hustoty obrázkov, metóda svetelných polí na ploche objektu (Surface Light Fields)).
 
  
=== Lecture12 "Ask me anything." ===
+
=== Lecture15 "Ask me anything." ===
 
* Test problem introduction
 
* Test problem introduction
 
----
 
----
 +
= Seminars on Advanced Computer Graphics  =
  
= Seminars on Computer Graphics 2 =
+
On wednesdays at 9:50 [https://teams.microsoft.com/l/channel/19%3a940702169208456d80b2bd374bfdc14b%40thread.tacv2/Cvi%25C4%258Denia?groupId=ef1d5f0e-c528-46c9-8b30-3e704e8af8ee&tenantId=ce31478d-6e7a-4ce7-8670-a5b9d51884f9 On Teams]
  
== Rules / Info ==
+
'''Guide:''' Adam Riečický
* On every seminar we will implement selected problems/algorithms related to lessons. We will '''usually - not necessary''' start with a prearranged template downloadable from this site.
+
* As a programming language we will use C#. We will use Visual C# 2010 as development environment. Alternatively you can use MonoDevelop (Linux / Mac OSX) on your own machine.
+
* Attendance at seminars is '''optional but recommended'''.
+
* Seminars are conducted by
+
** Michal Piovarči (cg2.2015.hw@gmail.com, Room M113)
+
* Schedule of seminars is
+
** Wed (16:30) - Room I-H3
+
<!--
+
* Other collaborators and authors: Juraj Onderik
+
* Comment, errata, constructive criticism or suggestion - [https://docs.google.com/spreadsheet/ccc?key=0AhREYgn4NR6AdHgyemtJYWk0REt3SVJXMUdnQW5ockE&usp=sharing Make It Better]
+
-->
+
  
== Homeworks ==
+
'''Contact:''' adam.riecicky@fmph.uniba.sk
* You can get '''max 100% per homework'''. Submission after deadline is for 0%.
+
* There is a '''min 60% of your final evaluation''' required for admission to final term.
+
* Additional activity can be awarder by '''max 10% of your final evaluation'''.
+
* Don't cheat - create instead. Any kind of cheating is punished by '''withholding 30% of your final evaluation''' for all involved students.
+
* As a homework, you will program what we could not finish during the exercise. Assignment and template will be downloadable from this site. See exercises.
+
* Homework must be submitted by email to [mailto:cg2.2015.hw@gmail.com  cg2.2015.hw@gmail.com] every week until the '''next Wednesday 16:30'''.
+
* Your submission email '''must''' have title in form 'ExNN' where NN is the number of exercise, eg. Ex05.
+
* It is required to submit '''zipped source code of your homework''' (preferably the whole solution). Do not send executable files. Homework without the source code is for 0%.
+
* Your code should be well '''formatted and commented'''. Titles of functions, classes, variables should be representative for their purpose. Homework without appropriate comments is for 0%.
+
* There are ~12 homeworks during the semester. This number can change due to holidays, tech. problems etc.
+
<!--
+
* [https://docs.google.com/spreadsheet/pub?key=0AguOJecPQwoSdFVER3BYMVhINHBnTnRGelVlUGx3eVE&single=true&gid=0&output=html Your Evaluation]
+
  
== Projects ==
+
== Info ==
* There are no projects in this semester. However, if you want to implement something different than exercises you can choose e.g.:
+
Each week a short guided presentation will be given.
** Implement photon mapping method
+
** Implement stochastic ray tracing method
+
** Implement radiosity method
+
** Implement ambient occlusion method
+
** Implement path tracing method - CUDA or openCL required
+
** Implement indirect lighting method
+
  
* '''Deadline:''' 17.5. - 23:59
+
An assignment for every week will be finishing a template C# project. The deadline for every project is ''' right before the next successive seminar - Wednesday at 9:50'''. The extended deadline is a week after with 0.5x penalization. Solutions to bonus assignment can be submitted anytime during the 2 weeks without the penalization.
  
* Evaluation will be calculated due to the complexity of your solution. Evaluation % will be summed into % from the exercises.
+
=== Grading ===
-->
+
 
 +
* Total points from exercises make half of your final grade!
 +
* Minimum of 50% from exercises required to finish the class successfully
 +
* Late submission is for 0, no discussion
 +
 
 +
=== Project Evaluation Criteria ===
 +
 
 +
* 10 pt => Correct submission, everything works as supposed.
 +
* 6 pt => Partially correct submission, most of the things work as supposed.
 +
* 3 pt => Partially correct submission, at least one core functionality correct.
 +
* 0 pt => Incorrect submission or unsubmitted.
 +
* Penalization 0.5x when submitting in extended deadline (not for bonus).
 +
 
 +
=== Project Submittion ===
 +
 
 +
* Your code should be well '''formatted and commented'''. Titles of functions, classes, variables should be representative of their purpose.
 +
* Submission email must have the '''subject in the form of 'ACG ExNN'''' where NN is the exercise id, eg. ACG Ex05.
 +
* Solution source codes have to be '''archived and named properly 'ExNN_YourName''''
 +
* Do not archive send executable files.
 +
* Send by email to [mailto:adam.riecicky@fmph.uniba.sk  adam.riecicky@fmph.uniba.sk].
  
 
== Exercises ==
 
== Exercises ==
  
=== Exercise00 [18.02.2015] "Introduction" ===
+
<!---
 +
=== Introduction ===
 
* Motivation?
 
* Motivation?
 
** [http://goo.gl/5YLSxN 1st Octane], [http://goo.gl/J0E8qM 2nd Octane], [http://goo.gl/xVMEIk 3rd Octane]
 
** [http://goo.gl/5YLSxN 1st Octane], [http://goo.gl/J0E8qM 2nd Octane], [http://goo.gl/xVMEIk 3rd Octane]
 
** [http://www.fxguide.com/featured/the-state-of-rendering/ The State of Rendering 1], [http://www.fxguide.com/featured/the-state-of-rendering-part-2/ The State of Rendering 2]
 
** [http://www.fxguide.com/featured/the-state-of-rendering/ The State of Rendering 1], [http://www.fxguide.com/featured/the-state-of-rendering-part-2/ The State of Rendering 2]
 
* Theory / Reading?
 
* Theory / Reading?
** [http://www.scratchapixel.com/lessons/ Scratchapixel Lessons] - intersections, polygones, phong lighting
 
 
** [http://www.sci.utah.edu/~wald/PhD/wald_phd.pdf Ingo Wald's Thesis] - PhD. thesis about rendering, acceleration and global illumination.
 
** [http://www.sci.utah.edu/~wald/PhD/wald_phd.pdf Ingo Wald's Thesis] - PhD. thesis about rendering, acceleration and global illumination.
 
** [http://www.amazon.com/Physically-Based-Rendering-Second-Edition/dp/0123750792 Physically Based Rendering]
 
** [http://www.amazon.com/Physically-Based-Rendering-Second-Edition/dp/0123750792 Physically Based Rendering]
 
* Practice?
 
* Practice?
** [http://www.belanecbn.sk/3dtutorials/index.php?id=16 Ray Tracer in c++]
 
 
** [http://www.codeproject.com/Articles/20355/Simple-Ray-Tracing-in-C-Part-VII-Shadows Ray Tracer in c#]
 
** [http://www.codeproject.com/Articles/20355/Simple-Ray-Tracing-in-C-Part-VII-Shadows Ray Tracer in c#]
 
* Intro to c#?
 
* Intro to c#?
 
** [http://www.amazon.com/Microsoft-Visual-2010-Step/dp/0735626707 Visual c# 2010], [http://www.amazon.com/4-0-Nutshell-The-Definitive-Reference/dp/0596800959 c# 4.0 in a Nutshell]
 
** [http://www.amazon.com/Microsoft-Visual-2010-Step/dp/0735626707 Visual c# 2010], [http://www.amazon.com/4-0-Nutshell-The-Definitive-Reference/dp/0596800959 c# 4.0 in a Nutshell]
 
** [http://www.dofactory.com/ShortCutKeys/ShortCutKeys.aspx Visual Shortcuts], [http://www.shortcutworld.com/en/win/SharpDevelop_4.0.html SharpDevelop Short cuts]
 
** [http://www.dofactory.com/ShortCutKeys/ShortCutKeys.aspx Visual Shortcuts], [http://www.shortcutworld.com/en/win/SharpDevelop_4.0.html SharpDevelop Short cuts]
** Exercise "Vectors and Matrices" - [http://www.dai.fmph.uniba.sk/w/CG1_2013/en CG1]
+
--->
* [[media:CG2.Ex00.pdf | Seminar slides]]
+
  
=== Exercise01 [25.02.2015] "Ray Casting" ===
+
=== Exercise00 "Vectors and Matrices" ===
* [[media:CG2.Ex01.pdf | Seminar slides]]
+
'''Deadline (no extended deadline): ''' 3.3.2021 at 23:59
* Implement a camera class suitable for the ray casting method. As usual you should use a similar functionality as in the sample application. Application should specifically be able to:
+
 
** Render the scene (objects are movable).
+
'''Asignment:'''
** Move the camera in a 3D space.
+
Create a simple application for vector(4x1) and matrix operations(4x4).
** Change the camera's field of view (larger angle = more space to render), see Blender camera.
+
Use struct properties, functions and/or operators. Create a calculator, check your equations and results.
* Try to change the color of the intersected object due to distance from the camera
+
Add implementation to theese files in folder ''./Mathematics/'' : ''Vector4.cs'', ''MathEx.cs'', and "Matrix44.cs''
* '''[2 bonus %]:'''  
+
 
** Create a camera which will rotate around defined point P (target) along a sphere with r = 1. You can use ideas from the Blender camera system and / or two-angle camera in openGL. Camera should use some sort of interactivity (2 angles) and targeted point P should be movable. Bonus camera can be created in a separated solution or you can change the structure in the template to implement two different cameras.
+
'''You can ignore vector operations "/" (vector projection) and "^" (modulation product).'''
** [http://youtu.be/1twa3CJOEfA?t=1m49s Example Camera Movement]
+
 
 +
For a help, see [https://chortle.ccsu.edu/vectorlessons/vectorindex.html this reminder on linear algebra]
 +
*[[media:CG1.Ex01.Sample.zip|Sample]] | [[media:CG1.Ex01.Template.zip‎|Template]]
 +
 
 +
 
 +
=== Exercise01 "Ray Casting" ===
 +
'''Deadline (no extended deadline):''' 10.3.2021 at 23:59
 +
 
 +
[https://docs.google.com/presentation/d/1qfbRX35LpC72wCmBLcaftWsIUqFF7Ej6fBn4NGFoKMc/edit?usp=sharing Seminar slides]
 +
 
 +
'''Asignment:'''
 +
Implement basic ray casting and the intersection of ray and plane. Define the camera class and implement a simple ray-tracing procedure.
 
* [[media:CG2.Ex01.Sample.zip | Sample]] | [[media:CG2.Ex01.Template.zip | Template]]
 
* [[media:CG2.Ex01.Sample.zip | Sample]] | [[media:CG2.Ex01.Template.zip | Template]]
<!--* [http://www.sccg.sk/~hudak/CG2/Ex01.Sample.zip Sample] | [http://www.sccg.sk/~hudak/CG2/Ex01.Template.zip Template]-->
 
* '''Deadline: 4. 3. - 16:30'''
 
  
=== Exercise02 [4.03.2015] "Primitives" ===
+
''' Bonus [2 bonus %]:'''
* [[media:CG2.Ex02.pdf | Seminar slides]]
+
Create a camera that will rotate around defined point P (target) among a sphere with r = 1. You can use ideas from the Blender camera system and/or two-angle camera in OpenGL. The camera should use some sort of interactivity (2 angles) and targeted point P should be movable. Bonus camera can be created in a separate solution or you can change the structure in the template to implement two different cameras.
* Improve your tracer by adding a few primitives (ring, sphere, AABB box, triangle) [http://mrl.nyu.edu/~dzorin/rend05/lecture1a.pdf] [http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/barycentric-coordinates/] [http://geomalgorithms.com/a04-_planes.html#Barycentric-Coordinate-Compute] [http://www.cs.virginia.edu/~gfx/Courses/2003/ImageSynthesis/papers/Acceleration/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf]. Each object should be movable. As usual you should use a similar functionality as in the sample application.
+
* [http://youtu.be/1twa3CJOEfA?t=1m49s Example Camera Movement]
* '''[1 bonus %]:'''  
+
 
** Create also a cylinder and a cone primitives
+
 
 +
=== Exercise02 "Primitives" ===
 +
'''Deadline:''' 10.3.2021 at 9:50
 +
'''Extended deadline:''' 17.3.2021 at 9:50
 +
 
 +
[https://docs.google.com/presentation/d/1QqosOvNF8QMCX_AvhbjhgO2Kbc1ehBI6aomLubBKpdQ/edit?usp=sharing Seminar Slides]
 +
 
 +
'''Asignment:'''
 +
Improve your tracer by adding new primitive object types: box, sphere, and ring.
 
* [[media:CG2.Ex02.Sample.zip | Sample]] | [[media:CG2.Ex02.Template.zip | Template]]
 
* [[media:CG2.Ex02.Sample.zip | Sample]] | [[media:CG2.Ex02.Template.zip | Template]]
<!--* [http://www.sccg.sk/~hudak/CG2/Ex02.Sample.zip Sample] | [http://www.sccg.sk/~hudak/CG2/Ex02.Template.zip Template]-->
 
* '''Deadline: 11. 3. - 16:30'''
 
  
=== Exercise03 [11.03.2015] "Shader & Shading & Shadow" ===
+
'''Resources:'''
* [[media:CG2.Ex03.pdf | Seminar slides]]
+
[http://geomalgorithms.com/a04-_planes.html#Barycentric-Coordinate-Compute Planes, triangles, and distances],
* Improve your tracer by adding shaders, shadows and lights. Implement checker and phong shader, sun light and hard shadows. Compute normals to each primitive in the point of intersection. As usual you should use a similar functionality as in the sample application.
+
[http://www.realtimerendering.com/intersections.html Intersection algorithms]
* [[media:CG2.Ex03.Sample.zip | Sample]] | [[media:CG2.Ex03.Template.zip | Template]]
+
 
<!--* [http://www.sccg.sk/~hudak/CG2/Ex03.Sample.zip Sample] | [http://www.sccg.sk/~hudak/CG2/Ex03.Template.zip Template]-->
+
'''Bonus [3 bonus % (1 for each)]:'''
* '''Deadline: 18. 3. - 16:30'''
+
Create also a triangle, cylinder, and cone primitives and add them to the tracer. Also, create a new scene where you present the primitive(s).
 +
 
 +
 
 +
=== Exercise03 "Shaders, Shading and Shadows" ===
 +
'''Deadline:''' 17.3.2021 at 9:50
 +
'''Extended deadline:''' 24.3.2021 at 9:50
 +
 
 +
[https://docs.google.com/presentation/d/1q_n3gjcUHZ8Nr7ma6EJXmE9RJxMHj1bmysQnKQwzb3U/edit?usp=sharing Seminar Slides]
 +
 
 +
'''Asignment:'''
 +
Improve your tracer by implementing Phong and checker shaders, directional light, and hard shadows. Compute normals of each primitive at the point of intersection. As usual, you should use a similar functionality as in the sample application.
 +
* [[media:CG2.Ex03.Sample.zip | Sample]] | [[media:CG2.Ex03.Template.zip | Template]]  
 +
 
 +
 
 +
=== Exercise04 "Light Types" ===
 +
'''Deadline:''' 24.3.2021 at 9:50
 +
'''Extended deadline:''' 31.3.2021 at 9:50
 +
 
 +
[https://docs.google.com/presentation/d/1BefIrufgieVVjSyr5R65CKWFwuxBaj2CGhXIx_58CNA/edit?usp=sharing Seminar Slides]
  
=== Exercise04 [18.03.2015] "Lights & Shadows" ===
+
'''Asignment:'''
* [[media:CG2.Ex04.pdf | Seminar slides]]
+
Improve your tracer by adding a point, spot and an area light types. In the case of point and spotlight, define the light as a point with hard shadows and linear/quadratic light attenuation [http://wiki.blender.org/index.php/Doc:2.6/Manual/Lighting/Lights/Light_Attenuation]. Area light could be defined by Lights x Lights point lights. Area light should also be able to produce "soft" shadows.
* Improve your tracer by adding a point light, spot light [http://wiki.blender.org/index.php/Doc:2.6/Manual/Lighting/Lamps/Spot] and an area light. In the case of point and spot light, define the light as a point with hard shadows and linear/quadratic light attenuation [http://wiki.blender.org/index.php/Doc:2.6/Manual/Lighting/Lights/Light_Attenuation]. Area light could be defined by Lights x Lights point lights. Area light should also be able to produce soft shadows.
+
* '''[1 bonus %]:'''
+
** Write equation for illumination computed by sample code from seminar slides
+
 
* [[media:CG2.Ex04.Sample.zip | Sample]] | [[media:CG2.Ex04.Template.zip | Template]]
 
* [[media:CG2.Ex04.Sample.zip | Sample]] | [[media:CG2.Ex04.Template.zip | Template]]
<!--* [http://www.sccg.sk/~hudak/CG2/Ex04.Sample.zip Sample] | [http://www.sccg.sk/~hudak/CG2/Ex04.Template.zip Template]-->
 
* '''Deadline: 25. 3. - 16:25'''
 
  
=== ExerciseLab [25.03.2015] "Laboratory Experiment" ===
+
'''[2 bonus %]:'''  
* Could we imitate materials from the real world?
+
Write an equation for illumination computed by sample code from seminar slides
** [http://img291.imageshack.us/img291/4066/failani.png Anisotropic], [http://rhinotoday.com/wp-content/uploads/2012/03/keyshot-render-paint-sphere.jpg Carpaint], [http://1.bp.blogspot.com/_TCqLkmUciss/TPMGTwQwteI/AAAAAAAAALI/ZO5RQt60E6k/s1600/Glass_Balls_Color-1280x800.jpg Translucent], [http://graphics.ucsd.edu/~henrik/papers/photon_diffusion/milk_photon_diffusion.jpg Semi-translucent]
+
* Yes we can and we will. Choose a sample paint and
+
** Measure its '''color in Lab''' and Convert to '''RGB''' - [http://www.easyrgb.com/index.php?X=CALC Easy RGB] (use illuminant D50)
+
** Measure '''gloss value''' in different conditions
+
* Write your results: Template
+
** Fill out [https://docs.google.com/spreadsheets/d/1vTk48NSrglbi9LJScbdDcOctnlvDvS5DYxxR_TCiRCg/edit?usp=sharing online form] with selected results (during the seminar)
+
** Guidelines are in the [http://www.sccg.sk/~hudak/CG2/CG2.Ex10.Template.doc template]
+
** Submit your results as a regular submission by mail
+
  
=== Exercise05 [01.04.2015] "More About Shaders" ===
 
* [[media:CG2.Ex05.pdf | Seminar slides]]
 
* Improve your tracer by adding a few more shaders: Toon / Cell, Cook-Torrance, Oren-Nayar, Gradient. As usual you should use a similar functionality as in the sample application.
 
* Set Cook-Torrance color to match your measurements from Laboratory exercise.
 
* '''[2 bonus %]:'''
 
** Implement [http://cseweb.ucsd.edu/~ravir/6998/papers/p265-ward.pdf Ward Shader] [ [[media:Spheres.PNG|Example]] ]
 
** You should generate tangent space for each point on the sphere
 
** Remember to keep the same orientation of tangent space at each point
 
** You can replace Phong sphere with a Ward sphere
 
* [[media:CG2.Ex05.Sample.zip|Sample]] | [[media:CG2.Ex05.Template.zip|Template]]
 
* '''Deadline: 15. 4. - 16:25'''
 
  
=== FreeTime [08.04.2015] There is no seminar this week ===
+
=== Exercise05 "Shaders" ===
 +
'''Deadline:''' 31.3.2021 at 9:50
 +
'''Extended deadline:''' 7.4.2021 at 9:50
  
=== Exercise06 [15.04.2014] "Even More About Shaders" ===
+
[https://docs.google.com/presentation/d/1nJxdeN_NfT_45Fn7z_d-Vh3sS-NZcYWbRslSPudYKxw/edit?usp=sharing Seminar Slides]
* [[media:CG2.Ex06.pdf | Seminar slides]]
+
 
* Improve your tracer by adding reflections and refractions to render mirror and glass objects. As usual you should use a similar functionality as in the sample application.
+
'''Asignment:'''
* ''''[1 bonus %]:'''  
+
Improve your tracer by adding a few more shaders: Toon, Gradient, Cook-Torrance, and Oren-Nayar.
** Implement fresnel effect
+
* [[media:CG2.Ex05.Sample.zip|Sample]] | [[media:CG2.Ex05.Template.zip|Template]]
 +
 
 +
'''[2 bonus %]:'''
 +
Implement [http://cseweb.ucsd.edu/~ravir/6998/papers/p265-ward.pdf Ward Shader] [ [[media:Spheres.PNG|Example]] ].
 +
* Generate tangent space for each point on the sphere
 +
* Remember to keep the same orientation of tangent space at each point
 +
 
 +
 
 +
=== Exercise06 "Reflections" ===
 +
'''Deadline:''' 7.4.2021 at 9:50
 +
'''Extended deadline:''' 14.4.2021 at 9:50
 +
 
 +
[https://docs.google.com/presentation/d/1GNhGJqi-ELtQMMUU2RvHqTa_0U2oJQLHEyAh-dvIzoQ/edit?usp=sharing Seminar Slides]
 +
 
 +
'''Asignment:'''
 +
Improve your tracer by adding reflections for rendering mirror-like materials.
 
* [[media:CG2.Ex06.Sample.zip | Sample]] | [[media:CG2.Ex06.Template.zip | Template]]
 
* [[media:CG2.Ex06.Sample.zip | Sample]] | [[media:CG2.Ex06.Template.zip | Template]]
<!--* [http://www.sccg.sk/~hudak/CG2/Ex06.Sample.zip Sample] | [http://www.sccg.sk/~hudak/CG2/Ex06.Template.zip Template]-->
 
* '''Deadline: 29. 4. - 16:25'''
 
  
=== Exercise07 [22.04.2015] There is no seminar this week ===
 
  
=== Exercise08 [29.04.2015] "Postprocessing" ===
+
=== Exercise07 "Transparency" ===
* [[media:CG2.Ex08.pdf | Seminar slides]]
+
'''Deadline:''' 14.4.2021 at 9:50
* Improve your raytracer by adding supersampling SSAA / FSAA [http://en.wikipedia.org/wiki/Supersampling].
+
'''Extended deadline:''' 21.4.2021 at 9:50
* Implement blur. User can scale the intensity of blur [http://www.blackpawn.com/texts/blur/default.html]
+
 
* '''[2 bonus %]:'''
+
[https://docs.google.com/presentation/d/1XxI2xLD8UFpLSICbP5f09biCb8DAaxrM0nmxto2-bL4/edit?usp=sharing Seminar Slides]
** Implement DOF. You can use definition from blur to create a fake DOF. User can define a point of sharpness and the intensity of the effect.
+
 
 +
'''Asignment:'''
 +
Improve your tracer by adding reflections and refractions for rendering glass materials.
 +
* [[media:CG2.Ex06.Sample.zip | Sample]] | [[media:CG2.Ex07.Template.zip | Template]]
 +
 
 +
'''[2 bonus %]:'''
 +
Implement fresnel effect.
 +
 
 +
 
 +
=== Exercise08 "Postprocessing" ===
 +
'''Deadline:''' 5.5.2021 at 9:50
 +
'''Extended deadline:''' 12.5.2021 at 9:50
 +
 
 +
[https://docs.google.com/presentation/d/1CxRs7VM0ZEMMq-m4BCklmpTWJyFDQDb_XPunFWeFtMU/edit?usp=sharing Seminar slides]
 +
 
 +
Finalize your raytracer by adding supersampling antialiasing [http://en.wikipedia.org/wiki/Supersampling]. Implement blur. Users can scale the intensity of blur [http://www.blackpawn.com/texts/blur/default.html].
 
* [[media:CG2.Ex08.Sample.zip | Sample]] | [[media:CG2.Ex08.Template.zip | Template]]
 
* [[media:CG2.Ex08.Sample.zip | Sample]] | [[media:CG2.Ex08.Template.zip | Template]]
<!--* [http://www.sccg.sk/~hudak/CG2/Ex08.Sample.zip Sample] | [http://www.sccg.sk/~hudak/CG2/Ex08.Template.zip Template]-->
 
* '''Deadline: 6. 5. - 16:25'''
 
  
=== Exercise09 [06.05.2015] "Textures" ===
+
'''[2 bonus %]:'''
* [[media:CG2.Ex09.pdf‎ | Seminar slides]]
+
Implement DOF. You can use the definition from blur to create a fake DOF. A user can define a point of sharpness and the intensity of the effect.
<!-- * The time has come to use textures in your ray tracer [http://dev.quixel.se/megascans] [http://www.crazybump.com/]
+
 
* Implement 3 kinds of texture mapping: plane, sphere [http://4.bp.blogspot.com/-X5yJU7L87b4/Tuph1yIE64I/AAAAAAAAAOg/n36HVurEtxs/s1600/adadad.png] and normal mapping [http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-13-normal-mapping/]
+
<!--
* Tutorial
+
=== ExerciseLab "Laboratory Experiment" ===
** Define class Sampler and its descendants: class ColorSampler(only color) and class TextureSampler(also texture). Texture sampler should use some sort of sampling (clamp) and some sort of filtering (nearest neighbor)
+
Could we imitate materials from the real world?
** Define class TextureMapping and its descendants: class PlaneMapping, class SphereMapping and class NormalMapping
+
[http://rhinotoday.com/wp-content/uploads/2012/03/keyshot-render-paint-sphere.jpg Carpaint],
** Improve phong shader to include sample point from the texture
+
[http://1.bp.blogspot.com/_TCqLkmUciss/TPMGTwQwteI/AAAAAAAAALI/ZO5RQt60E6k/s1600/Glass_Balls_Color-1280x800.jpg Translucent],
* Your results should be similar to the given sample
+
Yes, we can, and we will!
* '''[1 bonus %]:'''
+
 
** Implement repeat and mirror texture sampling and bilinear texture filtering
+
'''Asignment:'''
 +
[https://docs.google.com/document/d/1FqxzjfmSg71wpO9b0RnK-pSFYy5lSL_CVjXq-Lpg_hI/edit?usp=sharing LAB assignment document]
 +
* Submit your results as a regular submission by mail
 +
 
 +
 
 +
 
 +
<!--=== Exercise09 "Textures" ===
 +
[[media:CG2.Ex09.pdf‎ | Seminar slides]]
 +
 
 +
'''Asignment:'''
 +
The time has come to use textures in your ray tracer [http://dev.quixel.se/megascans] [http://www.crazybump.com/]
 +
Implement 3 kinds of texture mapping: plane, sphere [http://4.bp.blogspot.com/-X5yJU7L87b4/Tuph1yIE64I/AAAAAAAAAOg/n36HVurEtxs/s1600/adadad.png] and normal mapping [http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-13-normal-mapping/]. Your results should be similar to the given sample.
 
* [[media:CG2.Ex09.Sample.zip | Sample]] | [[media:CG2.Ex09.Template.zip | Template]]
 
* [[media:CG2.Ex09.Sample.zip | Sample]] | [[media:CG2.Ex09.Template.zip | Template]]
<!--* [http://www.sccg.sk/~hudak/CG2/Ex09.Sample.zip Sample] | [http://www.sccg.sk/~hudak/CG2/Ex09.Template.zip Template] -->
 
* '''Deadline for laboratory exercise: 13. 5. - 16:30'''
 
** No other assignment this week
 
  
=== AMA [13.05.2015] "Ask Me Anything" ===
+
'''Tutorial:'''
* Send your questions in advance to homework email
+
* Define class Sampler and its descendants: class ColorSampler(only color) and class TextureSampler(also texture). Texture sampler should use some sort of sampling (clamp) and some sort of filtering (nearest neighbor)
 +
* Define class TextureMapping and its descendants: class PlaneMapping, class SphereMapping and class NormalMapping
 +
* Improve phong shader to include sample point from the texture
  
=== Final Term [20.05.2015] "Final Term" ===
+
'''[1 bonus %]:'''
 +
Implement repeat and mirror texture sampling and bilinear texture filtering.
 +
 
 +
'''Deadline : 7.5. - 16:30'''
 +
 
 +
=== AMA "Ask Me Anything" ===
 +
Send your questions in advance to homework email
 +
 
 +
[https://docs.google.com/presentation/d/1RtsxHpjtC_Rfh3tKd7u4cQYNqi71lvOP7XUnzlI-rS4/edit#slide=id.p29 Slides]
 +
 
 +
=== Final Term "Final Term" ===
 
* Final test in moodle
 
* Final test in moodle
 
* Oral exam afterwards for successful students
 
* Oral exam afterwards for successful students
<!--
+
 
 
=== [20.05.2015] "Final Term" ===
 
=== [20.05.2015] "Final Term" ===
  
 
=== ExerciseChicken [01.04.2015] "The One About Chickens" ===
 
=== ExerciseChicken [01.04.2015] "The One About Chickens" ===
 
* [[media:CG2.ExChicken.pdf‎ | Chicken slides]]
 
* [[media:CG2.ExChicken.pdf‎ | Chicken slides]]
* Improve your chickener by adding a few more shaders: Chicken, Cooked-Chicken, Chicken-Nyan. As usual you should use a similar functionality as in the sample application.
+
* Improve your chickener by adding a few more shaders: Chicken, Cooked-Chicken, Chicken-Nyan. As usual, you should use a similar functionality as in the sample application.
  
 
=== Exercise05 [02.04.2014] "More About Shaders" ===
 
=== Exercise05 [02.04.2014] "More About Shaders" ===
Riadok 322: Riadok 383:
  
 
=== [21.05.2014] "Final Term" ===
 
=== [21.05.2014] "Final Term" ===
 +
-->

Verzia zo dňa a času 11:02, 3. máj 2021

Cg2 2014.png

Advanced Computer Graphics

What you Need to Pass

  • Attend lessons. One missed +0 points. 2 missed 0 points, 3 missed 0 points, 4 and more is Fx.
  • Project and exercise (mandatory, 10+50 points).
  • Solve all homework problems (mandatory each one >=30%, 10 points)
  • Pass final term (mandatory, 20 points) You will need to solve several problems discussed during lessons.
  • Pass oral/written exam: (mandatory, +20 points)
  • Summary
    • Attendance = 0 or -100 (Fx)
    • Exercise = +50..0
    • Bonus = +10..0 (optional)
    • Homework = +10..4 or +4..0 (Fx)
    • Final term = +20..0
    • Oral/written exam = +20..0
  • Grades
   A = 92-100
   B = 84-91
   C = 76-83
   D = 68-75
   E = 60-67
   Fx = 0-59
  • VIEW RESULTS
  • Final Term by Comenius University Moodle Electronic test 17.5 8:00 )
  • Before the test exam you can try to solve many tests from the graphics page, is you can pass the example test then you have big chance to pass the test exam.
  • Schedule
    • Mon (12:20) - Online MS Teams (lecture)
    • Str (9:50) - (excercises)

Materials to read


Lecture00 "Introduction to Computer Graphics"

  • Computer Graphics Applications

Lecture01 "Graphics Pipeline"

  • What is The Graphics Pipeline
  • Vertex Shader
  • Primitive Assembly
  • Tessellation Shaders
  • Geometry Shader
  • Geometry Postprocessing and Rasterization
  • Fragment Shader
  • Frame Buffer Operations
  • http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/pipeline33/
  • Lecture notes: lesson00.pdf [1]
  • Štátnicová téma: Zobrazovací kanál. Grafická pipeline moderného hardvéru, framebuffer, buffer objekty, používané súradnicové priestory, druhy shader programov, druhy optimalizačných techník (view frustum, occlusion, backface culling), príklad shader programov.

Lecture02 "Ray Tracing 1."

Lecture03 "Ray Tracing 2."

Lecture04 "Ray Tracing 3."

  • Ray Tracing Acceleration
  • Data structure: grids, BVH, Kd-tree, Directional Partitioning
  • Dynamic Scenes
  • Beam and Cone Tracing
  • Packet Tracing
  • Lecture notes: lesson02.pdf
  • Poznámky v Slovenčine k téme Dátové Štruktúry a Kd-tree.
  • Štátnicová téma: Kanál metódy sledovania lúča a porovnanie s Radiosity metódou. (definícia lúča, definícia tieňového lúča, popis metódy sledovania lúča, generovanie lúča, pochod po lúči (ray traversal), prienik lúča s trojuholníkom, stromová štruktúra lúčov (ray tree) a jej použitie na výpočet lokálnej farby, problém presnosti priesečníkov). Metóda sledovania lúča na GPU, urýchľovacie techniky.

Lecture05 "Shading."

  • OPENGL Light sources
  • Shading Phong model
  • First time meeting with Rendering Equation
  • Book chapter Shading: shading.pdf

Lecture06 "Light Trasport."

  • Physics behind ray tracing
  • Physical light quantities
  • Visual perception of light
  • Light sources
  • Light transport simulation: Rendering Equation
  • Lecture notes: lesson05.pdf
  • Štátnicová téma: Fyzikálny osvetlovací model a výpočet farieb renderovacou rovnicou. (definícia radiancie, definícia BRDF a jej vlastnosti, fyzikálne BRDF Cook-Tarrance, definícia priestorového uhlu, napíšte renderovaciu rovnicu a vysvetlite jej členy).

Lecture07 "Radiosity."

  • Diffuse reflectance function
  • Radiative equilibrium between emission and absorption, escape
  • System of linear equations
  • Iterative solution Neuman series
  • Lecture notes: lesson05.pdf
  • Book chapter Shading: shading.pdf

Lecture08 "BRDF."

  • Bidirectional Reflectance Distribution Function (BRDF)
  • Reflection models
  • Projection onto spherical basis functions
  • Shading Phong model, Blin-Phong model
  • Lecture notes: lesson07.pdf
  • Homework:
    • 1. Prove that the mirror BRDF from slides less07 fulfills the BRDF properties: reciprocity, energy conservation, definit space, value space of BRDF
    • 2. Derive the equation for refracted direction Omega_r from shading document in section 6.3.3.
  • Physical BRDF
  • Ward Reflection Model
  • Cook-Torrance model
  • Lecture notes: lesson07Phys.pdf

Lecture09, Lecture10 "Shadows."

  • Lecture notes: lesson08.pdf
  • Štátnicová téma: Tiene, typy tieňov (mäkké, tvrdé, statické, dynamické), typy a popis algoritmov (projekčné, tieňové objemy, tieňové mapy (shadow mapping)), spôsoby implementácie jednotlivých algoritmov, artefakty a ich odstraňovanie, príklad shader programov pre tieňové mapy. Artefakty spôsobené diskretizáciou. Tiene vo Phongovom modeli.

Lecture11, Lecture12 "Texturing 1, 2."

  • Texture parameterization
  • Procedural methods
  • Procedural textures
  • Fractal landscapes
  • Lecture notes: lesson09.pdf
  • Book chapter (Surface reality techniques): lessonBoook09.pdf
  • Štátnicová téma: Lokálne osvetľovacie modely. (tieňovanie, Phongov a Blinn-Phongov osvetlovací model, zložky (ambientna, difúzna, zrkadlová), textúrovanie a druhy textúr, mapovanie a filtrácia textúr, popísať princípy environment, bump, normal mapovania, textúrovací a tangenciálny priestor, príklad shader programov na GPU.

Lecture13 "Image Based Rendering 1."

  • Plenopticfunction
  • Panoramas
  • Concentric Mosaics
  • Light Field Rendering
  • The Lumigraph
  • Lecture notes: lesson10.pdf
  • Homework: Blinn-Phong enumeration.

Lecture14 "Image Based Rendering 2."

  • Layered Depth Images
  • View-dependent Texture Mapping
  • Surface Light Fields
  • View Morphing
  • Lecture notes: lesson10.pdf

Lecture15 "Ask me anything."

  • Test problem introduction

Seminars on Advanced Computer Graphics

On wednesdays at 9:50 On Teams

Guide: Adam Riečický

Contact: adam.riecicky@fmph.uniba.sk

Info

Each week a short guided presentation will be given.

An assignment for every week will be finishing a template C# project. The deadline for every project is right before the next successive seminar - Wednesday at 9:50. The extended deadline is a week after with 0.5x penalization. Solutions to bonus assignment can be submitted anytime during the 2 weeks without the penalization.

Grading

  • Total points from exercises make half of your final grade!
  • Minimum of 50% from exercises required to finish the class successfully
  • Late submission is for 0, no discussion

Project Evaluation Criteria

  • 10 pt => Correct submission, everything works as supposed.
  • 6 pt => Partially correct submission, most of the things work as supposed.
  • 3 pt => Partially correct submission, at least one core functionality correct.
  • 0 pt => Incorrect submission or unsubmitted.
  • Penalization 0.5x when submitting in extended deadline (not for bonus).

Project Submittion

  • Your code should be well formatted and commented. Titles of functions, classes, variables should be representative of their purpose.
  • Submission email must have the subject in the form of 'ACG ExNN' where NN is the exercise id, eg. ACG Ex05.
  • Solution source codes have to be archived and named properly 'ExNN_YourName'
  • Do not archive send executable files.
  • Send by email to adam.riecicky@fmph.uniba.sk.

Exercises

Exercise00 "Vectors and Matrices"

Deadline (no extended deadline): 3.3.2021 at 23:59

Asignment: Create a simple application for vector(4x1) and matrix operations(4x4). Use struct properties, functions and/or operators. Create a calculator, check your equations and results. Add implementation to theese files in folder ./Mathematics/ : Vector4.cs, MathEx.cs, and "Matrix44.cs

You can ignore vector operations "/" (vector projection) and "^" (modulation product).

For a help, see this reminder on linear algebra


Exercise01 "Ray Casting"

Deadline (no extended deadline): 10.3.2021 at 23:59

Seminar slides

Asignment: Implement basic ray casting and the intersection of ray and plane. Define the camera class and implement a simple ray-tracing procedure.

Bonus [2 bonus %]: Create a camera that will rotate around defined point P (target) among a sphere with r = 1. You can use ideas from the Blender camera system and/or two-angle camera in OpenGL. The camera should use some sort of interactivity (2 angles) and targeted point P should be movable. Bonus camera can be created in a separate solution or you can change the structure in the template to implement two different cameras.


Exercise02 "Primitives"

Deadline: 10.3.2021 at 9:50 Extended deadline: 17.3.2021 at 9:50

Seminar Slides

Asignment: Improve your tracer by adding new primitive object types: box, sphere, and ring.

Resources: Planes, triangles, and distances, Intersection algorithms

Bonus [3 bonus % (1 for each)]: Create also a triangle, cylinder, and cone primitives and add them to the tracer. Also, create a new scene where you present the primitive(s).


Exercise03 "Shaders, Shading and Shadows"

Deadline: 17.3.2021 at 9:50 Extended deadline: 24.3.2021 at 9:50

Seminar Slides

Asignment: Improve your tracer by implementing Phong and checker shaders, directional light, and hard shadows. Compute normals of each primitive at the point of intersection. As usual, you should use a similar functionality as in the sample application.


Exercise04 "Light Types"

Deadline: 24.3.2021 at 9:50 Extended deadline: 31.3.2021 at 9:50

Seminar Slides

Asignment: Improve your tracer by adding a point, spot and an area light types. In the case of point and spotlight, define the light as a point with hard shadows and linear/quadratic light attenuation [2]. Area light could be defined by Lights x Lights point lights. Area light should also be able to produce "soft" shadows.

[2 bonus %]: Write an equation for illumination computed by sample code from seminar slides


Exercise05 "Shaders"

Deadline: 31.3.2021 at 9:50 Extended deadline: 7.4.2021 at 9:50

Seminar Slides

Asignment: Improve your tracer by adding a few more shaders: Toon, Gradient, Cook-Torrance, and Oren-Nayar.

[2 bonus %]: Implement Ward Shader [ Example ].

  • Generate tangent space for each point on the sphere
  • Remember to keep the same orientation of tangent space at each point


Exercise06 "Reflections"

Deadline: 7.4.2021 at 9:50 Extended deadline: 14.4.2021 at 9:50

Seminar Slides

Asignment: Improve your tracer by adding reflections for rendering mirror-like materials.


Exercise07 "Transparency"

Deadline: 14.4.2021 at 9:50 Extended deadline: 21.4.2021 at 9:50

Seminar Slides

Asignment: Improve your tracer by adding reflections and refractions for rendering glass materials.

[2 bonus %]: Implement fresnel effect.


Exercise08 "Postprocessing"

Deadline: 5.5.2021 at 9:50 Extended deadline: 12.5.2021 at 9:50

Seminar slides

Finalize your raytracer by adding supersampling antialiasing [3]. Implement blur. Users can scale the intensity of blur [4].

[2 bonus %]: Implement DOF. You can use the definition from blur to create a fake DOF. A user can define a point of sharpness and the intensity of the effect.