m (→Exercise00 "Vectors and Matrices") |
|||
(110 intermediate revisions by 3 users not shown) | |||
Line 25: | Line 25: | ||
Fx = 0-59 | Fx = 0-59 | ||
− | *[https://docs.google.com/spreadsheets/d/ | + | *[https://docs.google.com/spreadsheets/d/1emeCZo3fX5lgA-hOB-lgllLghS-0LDdW1rxdNXFWx_o/edit?usp=sharing '''VIEW RESULTS'''] |
− | * [https://moodle.uniba.sk/ | + | *[https://moodle.uniba.sk/course/view.php?id=2164 Final Term] by Comenius University Moodle Electronic test 16.5 8:00 ) |
− | * Before the test exam you can try to solve many | + | * 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 ( | + | ** Mon (15:40) - Online MS Teams (lecture) |
− | ** | + | ** Wed (8:10) - (excercises) |
=== Materials to read === | === Materials to read === | ||
Line 73: | Line 73: | ||
* Š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. | * Š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 | ||
Line 82: | Line 88: | ||
* Š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). | * Š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 | * Diffuse reflectance function | ||
* Radiative equilibrium between emission and absorption, escape | * Radiative equilibrium between emission and absorption, escape | ||
Line 88: | Line 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]] | ||
− | * | + | * Book chapter Shading: [[media:Shading.pdf|shading.pdf]] |
− | === | + | === Lecture08 "BRDF." === |
* Bidirectional Reflectance Distribution Function (BRDF) | * Bidirectional Reflectance Distribution Function (BRDF) | ||
* Reflection models | * Reflection models | ||
Line 96: | Line 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 | + | ** 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 | + | ** 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 | ||
Line 104: | Line 110: | ||
* Lecture notes: [[media:cg2_lesson07Phys.pdf|lesson07Phys.pdf]] | * Lecture notes: [[media:cg2_lesson07Phys.pdf|lesson07Phys.pdf]] | ||
− | === | + | === Lecture09, Lecture10 "Shadows." === |
* Lecture notes: [[media:cg2_lesson08.pdf|lesson08.pdf]] | * Lecture notes: [[media:cg2_lesson08.pdf|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. | * Š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 | * Texture parameterization | ||
* Procedural methods | * Procedural methods | ||
Line 117: | Line 123: | ||
* Š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. | * Š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 | * Plenopticfunction | ||
* Panoramas | * Panoramas | ||
Line 124: | Line 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. |
− | === | + | === Lecture14 "Image Based Rendering 2." === |
* Layered Depth Images | * Layered Depth Images | ||
* View-dependent Texture Mapping | * View-dependent Texture Mapping | ||
Line 133: | Line 139: | ||
* Lecture notes: [[media:cg2_lesson10.pdf|lesson10.pdf]] | * Lecture notes: [[media:cg2_lesson10.pdf|lesson10.pdf]] | ||
− | === | + | === Lecture15 "Ask me anything." === |
* Test problem introduction | * Test problem introduction | ||
---- | ---- | ||
= Seminars on Advanced Computer Graphics = | = Seminars on Advanced Computer Graphics = | ||
− | + | *[https://docs.google.com/spreadsheets/d/1Pvxi5Q9Dhxl0f6qaIqP9bCUACfqhZlwy7uqgkmtEXdo/edit?usp=sharing '''VIEW RESULTS'''] | |
− | * | + | On Thursdays at 13:10. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | See [https://liveuniba.sharepoint.com/:f:/s/2-AIN-12715-Pokroilpotaovgrafika/Eme5y4JAIIVJjh5fKSgryQgBPF8LIrh4mt0nWBG5vpQXPw?e=OkGBlo recordings] from previous year. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | '''Guide:''' Lukáš Gajdošech | |
− | + | ||
− | * | + | '''Contact:''' lukas.gajdosech@fmph.uniba.sk |
− | * Your code should be well '''formatted and commented'''. Titles of functions, classes, variables should be representative | + | |
+ | == 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 assingment is ''' midnight before the next successive seminar'''. 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 and send executable files. | ||
+ | * Send by email to [mailto:lukas.gajdosech@fmph.uniba.sk lukas.gajdosech@fmph.uniba.sk]. | ||
== Exercises == | == Exercises == | ||
− | === "Introduction" === | + | === Exercise00 "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] | ||
Line 171: | Line 193: | ||
* 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] | ||
− | ** [ | + | ** [https://www.dofactory.com/visual-studio-shortcuts Visual Studio Shortcuts], [http://www.shortcutworld.com/en/win/SharpDevelop_4.0.html SharpDevelop Short cuts] |
− | === | + | === Exercise01 "Vectors and Matrices" === |
+ | '''Deadline (no extended deadline): ''' 22.2.2023 at 23:59 | ||
+ | |||
'''Asignment:''' | '''Asignment:''' | ||
− | Create a simple application for | + | Create a simple application for vector(4x1) and matrix operations(4x4). |
− | Use struct properties, | + | 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'' | + | Add implementation to theese files in folder ''./Mathematics/'' : ''Vector4.cs'', ''MathEx.cs'', and ''Matrix44.cs''. |
− | For help, | + | '''[2 bonus %]:''' |
+ | Vector operations "/" (vector projection) and "^" (modulation product). | ||
+ | |||
+ | For a help, see [https://chortle.ccsu.edu/vectorlessons/vectorindex.html this reminder on linear algebra] and/or useful [http://learnwebgl.brown37.net/transformations2/transformations_matrices.html tutorial on transformation matrices]. | ||
*[[media:CG1.Ex01.Sample.zip|Sample]] | [[media:CG1.Ex01.Template.zip|Template]] | *[[media:CG1.Ex01.Sample.zip|Sample]] | [[media:CG1.Ex01.Template.zip|Template]] | ||
− | ''' | + | === Exercise02 "Ray Casting" === |
+ | '''Deadline:''' 1.3.2022 at 23:59 | ||
+ | '''Extended deadline:''' 8.3.2022 at 23:59 | ||
− | + | [https://docs.google.com/presentation/d/1qfbRX35LpC72wCmBLcaftWsIUqFF7Ej6fBn4NGFoKMc/edit?usp=sharing Seminar slides] | |
− | [https://docs.google.com/presentation/d/ | + | |
'''Asignment:''' | '''Asignment:''' | ||
− | Implement | + | Implement basic ray casting and the intersection of ray and plane. Define the camera class and implement a simple ray-casting 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]] | ||
− | ''' | + | === Exercise03 "Primitives" === |
− | + | '''Deadline:''' 8.3.2023 at 23:59 | |
− | + | '''Extended deadline:''' 15.3.2023 at 23:59 | |
− | + | ||
− | + | ||
− | + | [https://docs.google.com/presentation/d/1QqosOvNF8QMCX_AvhbjhgO2Kbc1ehBI6aomLubBKpdQ/edit?usp=sharing Seminar Slides] | |
− | [https://docs.google.com/presentation/d/ | + | |
'''Asignment:''' | '''Asignment:''' | ||
− | Improve your tracer by adding | + | 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]] | ||
− | '''Bonus [ | + | '''Resources:''' |
− | Create also a cylinder and | + | [http://geomalgorithms.com/a04-_planes.html#Barycentric-Coordinate-Compute Planes, triangles, and distances], |
+ | [http://www.realtimerendering.com/intersections.html 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). | ||
− | '''Deadline: | + | === Exercise04 "Shaders, Shading and Shadows" === |
+ | '''Deadline:''' 15.3.2023 at 23:59 | ||
+ | '''Extended deadline:''' 22.3.2023 at 23:59 | ||
− | |||
[https://docs.google.com/presentation/d/1q_n3gjcUHZ8Nr7ma6EJXmE9RJxMHj1bmysQnKQwzb3U/edit?usp=sharing Seminar Slides] | [https://docs.google.com/presentation/d/1q_n3gjcUHZ8Nr7ma6EJXmE9RJxMHj1bmysQnKQwzb3U/edit?usp=sharing Seminar Slides] | ||
'''Asignment:''' | '''Asignment:''' | ||
− | Improve your tracer by implementing | + | 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 get a similar functionality as in the sample application. |
* [[media:CG2.Ex03.Sample.zip | Sample]] | [[media:CG2.Ex03.Template.zip | Template]] | * [[media:CG2.Ex03.Sample.zip | Sample]] | [[media:CG2.Ex03.Template.zip | Template]] | ||
− | '''Deadline: | + | === Exercise05 "Light Types" === |
+ | '''Deadline:''' 22.3.2023 at 23:59 | ||
+ | '''Extended deadline:''' 29.3.2023 at 23:59 | ||
− | |||
[https://docs.google.com/presentation/d/1BefIrufgieVVjSyr5R65CKWFwuxBaj2CGhXIx_58CNA/edit?usp=sharing Seminar Slides] | [https://docs.google.com/presentation/d/1BefIrufgieVVjSyr5R65CKWFwuxBaj2CGhXIx_58CNA/edit?usp=sharing Seminar Slides] | ||
'''Asignment:''' | '''Asignment:''' | ||
− | Improve your tracer by adding a point | + | 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. |
* [[media:CG2.Ex04.Sample.zip | Sample]] | [[media:CG2.Ex04.Template.zip | Template]] | * [[media:CG2.Ex04.Sample.zip | Sample]] | [[media:CG2.Ex04.Template.zip | Template]] | ||
− | '''[ | + | '''[2 bonus %]:''' |
− | Write equation for illumination computed by sample code from seminar slides | + | Write an equation for illumination computed by sample code from seminar slides |
− | '''Deadline: | + | === Exercise06 "Shaders" === |
+ | '''Deadline:''' 5.4.2023 at 23:59 | ||
+ | '''Extended deadline:''' 12.4.2023 at 23:59 | ||
− | + | [https://docs.google.com/presentation/d/1nJxdeN_NfT_45Fn7z_d-Vh3sS-NZcYWbRslSPudYKxw/edit?usp=sharing Seminar Slides] | |
− | + | ||
− | [ | + | |
− | + | ||
− | + | ||
'''Asignment:''' | '''Asignment:''' | ||
− | + | Improve your tracer by adding a few more shaders: Toon, Gradient, Cook-Torrance, and Oren-Nayar. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | Improve your tracer by adding a few more shaders: Toon | + | |
* [[media:CG2.Ex05.Sample.zip|Sample]] | [[media:CG2.Ex05.Template.zip|Template]] | * [[media:CG2.Ex05.Sample.zip|Sample]] | [[media:CG2.Ex05.Template.zip|Template]] | ||
− | |||
'''[2 bonus %]:''' | '''[2 bonus %]:''' | ||
Implement [http://cseweb.ucsd.edu/~ravir/6998/papers/p265-ward.pdf Ward Shader] [ [[media:Spheres.PNG|Example]] ]. | 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 | * Remember to keep the same orientation of tangent space at each point | ||
− | |||
− | '''Deadline: | + | === Exercise07 "Reflections" === |
+ | '''Deadline:''' 19.4.2023 at 23:59 | ||
+ | '''Extended deadline:''' 26.4.2023 at 23:59 | ||
− | + | [https://docs.google.com/presentation/d/1GNhGJqi-ELtQMMUU2RvHqTa_0U2oJQLHEyAh-dvIzoQ/edit?usp=sharing Seminar Slides] | |
− | [https://docs.google.com/presentation/d/ | + | |
'''Asignment:''' | '''Asignment:''' | ||
− | Improve your tracer by adding reflections | + | 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]] | ||
− | '''[ | + | === Exercise08 "Transparency" === |
+ | '''Deadline:''' 26.4.2023 at 23:59 | ||
+ | '''Extended deadline:''' 3.5.2023 at 23:59 | ||
+ | |||
+ | [https://docs.google.com/presentation/d/1XxI2xLD8UFpLSICbP5f09biCb8DAaxrM0nmxto2-bL4/edit?usp=sharing Seminar Slides] | ||
+ | |||
+ | '''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. | Implement fresnel effect. | ||
− | '''Deadline: | + | === Exercise09 "Postprocessing" === |
+ | '''Deadline (no extended deadline): ''' 10.5.2023 at 23:59 | ||
− | |||
[https://docs.google.com/presentation/d/1CxRs7VM0ZEMMq-m4BCklmpTWJyFDQDb_XPunFWeFtMU/edit?usp=sharing Seminar slides] | [https://docs.google.com/presentation/d/1CxRs7VM0ZEMMq-m4BCklmpTWJyFDQDb_XPunFWeFtMU/edit?usp=sharing Seminar slides] | ||
− | + | '''Asignment:''' | |
+ | Add supersampling antialiasing [http://en.wikipedia.org/wiki/Supersampling] and 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]] | ||
Line 290: | Line 310: | ||
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. | 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. | ||
− | '''Deadline: | + | === Exercise10 "Textures" === |
+ | '''Deadline (no extended deadline): ''' 24.5.2023 at 23:59 | ||
− | + | [https://docs.google.com/presentation/d/1mA_sgdu19f3hnHEnVZysXyVv_s-H-M20BkBYPoVQGJw/edit?usp=sharing Seminar slides] | |
− | [ | + | |
'''Asignment:''' | '''Asignment:''' | ||
− | The time has come to | + | The time has come to finalize your project. Use textures in your ray tracer [https://quixel.com/megascans/] [http://www.crazybump.com/]. Implement plane, and normal mapping [http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-13-normal-mapping/]. Your results should be similar to the given sample. |
− | Implement | + | |
* [[media:CG2.Ex09.Sample.zip | Sample]] | [[media:CG2.Ex09.Template.zip | Template]] | * [[media:CG2.Ex09.Sample.zip | Sample]] | [[media:CG2.Ex09.Template.zip | Template]] | ||
'''Tutorial:''' | '''Tutorial:''' | ||
− | * 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 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 | + | * Define class TextureMapping and its descendants: class PlaneMapping and class NormalMapping. |
− | * Improve phong shader to include sample point from the texture | + | * Improve phong shader to include sample point from the texture. |
'''[1 bonus %]:''' | '''[1 bonus %]:''' | ||
− | Implement | + | Implement sphere mapping [http://4.bp.blogspot.com/-X5yJU7L87b4/Tuph1yIE64I/AAAAAAAAAOg/n36HVurEtxs/s1600/adadad.png]. |
− | + | === Exercise11 (optional/voluntary) "Acceleration Structures" === | |
+ | [https://dai.fmph.uniba.sk/upload/e/e0/Cg2_Kd-tree.pdf Seminar slides] | ||
− | + | '''Asignment:''' | |
− | + | Implement accelerating structure for ray tracing. The structure is KD Trees + surface area heuristic (SAH). The dimension is 2. As usual you should use a similar functionality as in the sample application. | |
+ | * Physically based rendering could help [http://www.amazon.com/Physically-Based-Rendering-Second-Edition/dp/0123750792] | ||
+ | * [[media:Ex11.Sample.zip | Sample]] | [[media:Ex11.Template.zip | Template]] | ||
− | + | <!-- | |
− | + | '''[1 bonus %]:''' | |
− | + | Implement repeat and mirror texture sampling and bilinear texture filtering. | |
− | + | ||
− | === | + | === Exercise11 "The One About Acceleration" === |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
* Implement accelerating structure for ray tracing. The structure is KD Trees + surface area heuristic (SAH) [http://www.sccg.sk/~durikovic/classes/CG2/Handouts/CG03-kdtrees.pdf] (4.4.2). The dimension is 2. Go. As usual you should use a similar functionality as in the sample application [http://www.sccg.sk/~durikovic/classes/CG2/Handouts/CG03RT-II.pdf]. | * Implement accelerating structure for ray tracing. The structure is KD Trees + surface area heuristic (SAH) [http://www.sccg.sk/~durikovic/classes/CG2/Handouts/CG03-kdtrees.pdf] (4.4.2). The dimension is 2. Go. As usual you should use a similar functionality as in the sample application [http://www.sccg.sk/~durikovic/classes/CG2/Handouts/CG03RT-II.pdf]. | ||
* Physically based rendering could help [http://www.amazon.com/Physically-Based-Rendering-Second-Edition/dp/0123750792] | * Physically based rendering could help [http://www.amazon.com/Physically-Based-Rendering-Second-Edition/dp/0123750792] | ||
Line 343: | Line 352: | ||
** '''Special bonus deadline:''' 17.5. - 23:59 | ** '''Special bonus deadline:''' 17.5. - 23:59 | ||
− | === [ | + | === Exercise05 "More About Shaders" === |
+ | * Improve your tracer by adding a few procedural shaders: noise, turbulence / clouds / marble, stripes, gradient, wood. For inspiration and additional material start here - [http://wiki.blender.org/index.php/Doc:2.6/Manual/Textures/Types/Procedural]. As usual you should use a similar functionality as in the sample application. | ||
+ | * ''''[2 bonus %]:''' | ||
+ | ** Create a voronoi shader | ||
+ | * [http://www.sccg.sk/~hudak/CG2/Ex05.Sample.zip Sample] | [http://www.sccg.sk/~hudak/CG2/Ex05.Template.zip Template] | ||
+ | |||
+ | === ExerciseChicken "The One About Chickens" === | ||
+ | * [[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. | ||
+ | |||
+ | === ExerciseLab "Laboratory Experiment" === | ||
+ | Could we imitate materials from the real world? | ||
+ | [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], | ||
+ | Yes, we can, and we will! | ||
+ | |||
+ | '''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 | ||
+ | |||
+ | === 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 | ||
+ | * Oral exam afterwards for successful students | ||
+ | |||
+ | ''' 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. | ||
+ | * [http://youtu.be/1twa3CJOEfA?t=1m49s Example Camera Movement] | ||
--> | --> |
Latest revision as of 09:53, 11 May 2023
Contents
- 1 Advanced Computer Graphics
- 1.1 What you Need to Pass
- 1.1.1 Materials to read
- 1.1.2 Lecture00 "Introduction to Computer Graphics"
- 1.1.3 Lecture01 "Graphics Pipeline"
- 1.1.4 Lecture02 "Ray Tracing 1."
- 1.1.5 Lecture03 "Ray Tracing 2."
- 1.1.6 Lecture04 "Ray Tracing 3."
- 1.1.7 Lecture05 "Shading."
- 1.1.8 Lecture06 "Light Trasport."
- 1.1.9 Lecture07 "Radiosity."
- 1.1.10 Lecture08 "BRDF."
- 1.1.11 Lecture09, Lecture10 "Shadows."
- 1.1.12 Lecture11, Lecture12 "Texturing 1, 2."
- 1.1.13 Lecture13 "Image Based Rendering 1."
- 1.1.14 Lecture14 "Image Based Rendering 2."
- 1.1.15 Lecture15 "Ask me anything."
- 1.1 What you Need to Pass
- 2 Seminars on Advanced Computer Graphics
- 2.1 Info
- 2.2 Exercises
- 2.2.1 Exercise00 "Introduction"
- 2.2.2 Exercise01 "Vectors and Matrices"
- 2.2.3 Exercise02 "Ray Casting"
- 2.2.4 Exercise03 "Primitives"
- 2.2.5 Exercise04 "Shaders, Shading and Shadows"
- 2.2.6 Exercise05 "Light Types"
- 2.2.7 Exercise06 "Shaders"
- 2.2.8 Exercise07 "Reflections"
- 2.2.9 Exercise08 "Transparency"
- 2.2.10 Exercise09 "Postprocessing"
- 2.2.11 Exercise10 "Textures"
- 2.2.12 Exercise11 (optional/voluntary) "Acceleration Structures"
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 16.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 (15:40) - Online MS Teams (lecture)
- Wed (8:10) - (excercises)
Materials to read
- http://www.cs.princeton.edu/courses/archive/fall00/cs426/
- http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/pipeline33/
- http://www.amazon.com/Mathematics-Computer-Graphics-Undergraduate-Science/dp/1849960224
- http://www.martinus.sk/?uItem=19688 - Moderni Pocitacova Grafika
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."
- RayTracing Pipeline
- Lecture notes: lesson01.pdf
Lecture03 "Ray Tracing 2."
- Ray Intersections
- Lecture notes: lesson01.pdf
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:
- 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 Thursdays at 13:10.
See recordings from previous year.
Guide: Lukáš Gajdošech
Contact: lukas.gajdosech@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 assingment is midnight before the next successive seminar. 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 and send executable files.
- Send by email to lukas.gajdosech@fmph.uniba.sk.
Exercises
Exercise00 "Introduction"
- Motivation?
- Theory / Reading?
- Ingo Wald's Thesis - PhD. thesis about rendering, acceleration and global illumination.
- Physically Based Rendering
- Practice?
- Intro to c#?
Exercise01 "Vectors and Matrices"
Deadline (no extended deadline): 22.2.2023 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.
[2 bonus %]: Vector operations "/" (vector projection) and "^" (modulation product).
For a help, see this reminder on linear algebra and/or useful tutorial on transformation matrices.
Exercise02 "Ray Casting"
Deadline: 1.3.2022 at 23:59 Extended deadline: 8.3.2022 at 23:59
Asignment: Implement basic ray casting and the intersection of ray and plane. Define the camera class and implement a simple ray-casting procedure.
Exercise03 "Primitives"
Deadline: 8.3.2023 at 23:59 Extended deadline: 15.3.2023 at 23:59
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).
Exercise04 "Shaders, Shading and Shadows"
Deadline: 15.3.2023 at 23:59 Extended deadline: 22.3.2023 at 23:59
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 get a similar functionality as in the sample application.
Exercise05 "Light Types"
Deadline: 22.3.2023 at 23:59 Extended deadline: 29.3.2023 at 23:59
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
Exercise06 "Shaders"
Deadline: 5.4.2023 at 23:59 Extended deadline: 12.4.2023 at 23:59
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
Exercise07 "Reflections"
Deadline: 19.4.2023 at 23:59 Extended deadline: 26.4.2023 at 23:59
Asignment: Improve your tracer by adding reflections for rendering mirror-like materials.
Exercise08 "Transparency"
Deadline: 26.4.2023 at 23:59 Extended deadline: 3.5.2023 at 23:59
Asignment: Improve your tracer by adding reflections and refractions for rendering glass materials.
[2 bonus %]: Implement fresnel effect.
Exercise09 "Postprocessing"
Deadline (no extended deadline): 10.5.2023 at 23:59
Asignment: Add supersampling antialiasing [3] and 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.
Exercise10 "Textures"
Deadline (no extended deadline): 24.5.2023 at 23:59
Asignment: The time has come to finalize your project. Use textures in your ray tracer [5] [6]. Implement plane, and normal mapping [7]. Your results should be similar to the given sample.
Tutorial:
- 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 and class NormalMapping.
- Improve phong shader to include sample point from the texture.
[1 bonus %]: Implement sphere mapping [8].
Exercise11 (optional/voluntary) "Acceleration Structures"
Asignment: Implement accelerating structure for ray tracing. The structure is KD Trees + surface area heuristic (SAH). The dimension is 2. As usual you should use a similar functionality as in the sample application.