====== Seminars ====== ===== Syllabus ===== ^ Week ^ Date ^ Content ^ | 1. | 1.10. | //[[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg0.pdf|Introduction]]// | | 2. | 8.10. | Team forming \\ //[[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg1.pdf|Homework assignment I]]// | | 3. | 15.10. | Homework assignment I - consultation \\ | | 4. | 22.10. | Homework assignment I - submission \\ //[[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg2.pdf|Homework assignment II]]// | | 5. | 29.10. | Homework assignment II consultation | | 6. | 5.11. | Homework assignment II - submission \\ //[[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg3.pdf|Homework assignment III]]// | | 7. | 12.11. | Homework assignment III - consultation | | 8. | 19.11. | Homework assignment III - submission \\ //[[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg4.pdf|Homework assignment IV]]// | | 9. | 26.11. | Homework assignment IV - consultation | | 10. | 3.12. | Homework assignment IV - submission \\ //[[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg5.pdf|Homework assignment V]]// | | 11. | 10.12. | Test \\ Homework assignment V - consultation | | 12. | 17.12. | Homework assignment V - submission | | 13. | 7.1. | Assessment | ===== Rules of the Game ===== * [[http://dcgi.felk.cvut.cz/en/study/academic_principles|Academic principles ]] * 5 homework assignments: 50 points (10 points each) + bonus points * All assignments must be accepted * Later submissions are penalized by 3 points for each week of delay! * Test in the 11th week for up to 10 points * At least 30 points for the assessment ===== Homework Assignments ===== * Simple graphics library (SGL) divided into 5 assignments * Team of two people * Submission: * Manual evaluation: https://cw.felk.cvut.cz/brute/ * Clear code, comments, etc. * Functionality * Automatic evaluation: https://apg.courses.dcgi.fel.cvut.cz/ * Images diff * Speed competition * Speed competition (homework assignments I, II, III): * 3 bonus points for the 1st fastest solution * 2 bonus points for the 2nd fastest solution * 1 bonus point for the 3rd fastest solution ==== Test Application ==== * Test application using GLUT for all homework assignments: [[https://cent.felk.cvut.cz/courses/APG/testapp.zip|testapp.zip]] * Use CMake to generate makefile or VS solution * Windows: freeglut binaries are part of the zip file * Linux/MacOS: GLUT installation (e.g. freeglut using brew) * Test application calls SGL functions defined in sgl/sgl.h, so don't change it! * Implement functions in sgl/sgl.cpp * Add your h/cpp files to sgl/ * Switch contexts using keys 0-9 * [[https://cent.felk.cvut.cz/courses/APG/testappdoc/html/sgl_8h.html|SGL API documentation]] ==== Homework Assignment I ==== === 2D Graphics Library, part A === [[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg1.pdf|Presentation]] * Library initialization, data structures design * Rasterization of basic primitives: * Point * Line and polyline (Bresenham's algorithm) * Circle (Bresenham's algorithm) * Ellipse (sglEllipse) and arc (sglArc): * Approximation of ellipse by 40 line segments * Approximation of arc by 40*(from-to)/(2 PI) line segments * BONUS: * Adaptive approximation of ellipse and arc with the error less than 1 pixel (1 point) * Transformations: * Modeling transformations (translation, rotation, scale) * Orthographic projection (sglOrtho) * Viewport transformation * Transformation stack === Reference Images === graphics elements\\ {{https://cent.felk.cvut.cz/courses/APG/results/test1a-ref.png?200x150|graphics elements}} transformations\\ {{https://cent.felk.cvut.cz/courses/APG/results/test1b-ref.png?200x150|transformations}} transformation stack\\ {{https://cent.felk.cvut.cz/courses/APG/results/test1c-ref.png?200x150|transformation stack}} ==== Homework Assignment II ==== === 2D Graphics Library, part B === [[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg2.pdf|Presentation]] * Non-convex polygon filling: * Polygon definition (sglBegin(SGL_POLYGON)) * Self-intersecting polygon filling, so don't use seed filling! * Filling circle, ellipse, and arc * Perspective projection (sglFrustum) * Depth management via z-buffer * BONUS: * [[http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.3.211|Perspective correct interpolation of vertex attributes]] (1 point) === Reference Images === non-convex polygon filling\\ {{https://cent.felk.cvut.cz/courses/APG/results/test2a-ref.png?200x150|non-convex polygon filling}} graphics elements filling\\ {{https://cent.felk.cvut.cz/courses/APG/results/test2b-ref.png?200x150|graphics elements filling}} 3D scene rendering - cube with z-buffer enabled/disabled\\ {{https://cent.felk.cvut.cz/courses/APG/results/test2c-ref.png?200x150|3D scene rendering - cube with z-buffer enabled/disabled}} 3D scene rendering - NFF file\\ {{https://cent.felk.cvut.cz/courses/APG/results/test2d-ref.png?200x150|3D scene rendering - NFF file}} ==== Homework Assignment III ==== === Simple Ray Tracer, part A === [[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg3.pdf|Presentation]] * Scene definition via SGL API (see sgl.h) * Primary rays generation: * Transformation matrix inverse * [[https://cent.felk.cvut.cz/courses/APG/invert-matrix.cpp|Matrix inverse from Numerical Recipes in C]] * [[https://cent.felk.cvut.cz/courses/APG/ray-sphere.cpp|Ray-sphere intersection]] * Ray-triangle intersection: [[https://dl.acm.org/citation.cfm?id=272315|Moeller]] or [[https://cent.felk.cvut.cz/courses/APG/triangle-pbrt.cpp|PBRT]] * Phong lighting model: * Material definition (see sglMaterial) * Diffuse coefficients: [r*kd g*kd b*kd] * Specular coefficients: [ks ks ks] * BONUS: * Adaptive anti-aliasing (1 point), * Multiple lighting models support: [[http://inst.cs.berkeley.edu/~cs294-13/fa09/lectures/cookpaper.pdf|Cook-Torrance]] or [[http://www.graphics.cornell.edu/pubs/2005/Wal05.html|Ward]] (1 point) === Test scenes and reference images === sphere ([[https://cent.felk.cvut.cz/courses/APG/test3/nff/sphere.nff|sphere.nff]])\\ {{https://cent.felk.cvut.cz/courses/APG/results/test3a-ref.png?200x200|sphere}} Cornell box ([[https://cent.felk.cvut.cz/courses/APG/test3/nff/cornell.nff|cornell.nff]])\\ {{https://cent.felk.cvut.cz/courses/APG/results/test3b-ref.png?200x200|Cornell box}} sphere on floor ([[https://cent.felk.cvut.cz/courses/APG/test3/nff/floor_sph.nff|floor_sph.nff]])\\ {{https://cent.felk.cvut.cz/courses/APG/results/test3c-ref.png?200x200|sphere on floor}} ==== Homework Assignment IV ==== === Simple Ray Tracer, part B === [[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg4.pdf|Presentation]] * Shadow rays * Secondary Rays: recursive ray tracing: * Reflections and [[https://cent.felk.cvut.cz/courses/APG/refract.cpp|refractions]] * Max. recursion depth 8 * Backface culling: ignore intersections if DotProd(normal,dir)>0.0 * BONUS: * Depth of field (1 point) === Test Scenes and Reference Images === shadows ([[https://cent.felk.cvut.cz/courses/APG/test4/nff/cornell-blocks.nff|cornell-blocks.nff]])\\ {{https://cent.felk.cvut.cz/courses/APG/results/test4a-ref.png?200x200|shadows}} reflections and refractions ([[https://cent.felk.cvut.cz/courses/APG/test4/nff/cornell-spheres.nff|cornell-spheres.nff]])\\ {{https://cent.felk.cvut.cz/courses/APG/results/test4b-ref.png?200x200|reflections and refractions}} multiple reflections and refractions ([[https://cent.felk.cvut.cz/courses/APG/test4/nff/cornell-spheres-crazy.nff|cornell-spheres-crazy.nff]])\\ {{https://cent.felk.cvut.cz/courses/APG/results/test4c-ref.png?200x200|multiple reflections and refractions}} ==== Homework Assignment V ==== === Simple Ray Tracer, part C === [[https://cent.felk.cvut.cz/courses/APG/PDF/seminar/apg5.pdf|Presentation]] * Area light sources: * Emissive materials support (see sglEmissiveMaterial) * Point sampling on triangles, 16 samples per triangle * Intensity of light samples (Phong lighting model): * sample_i = (r,g,b)*cos fi*(light_triangle_area/num_samples)/(c0 + c1*d + c2*d^2) * cos fi = DotProd(light_triangle_normal, -shadow_ray.direction) * Environment mapping: * Use environment map instead of constant background color (see sglEnvironmentMap) * Mapping ray direction to environment map coordinates (u,v) [0,1]x[0,1]: * d = sqrt(dir.x^2 + dir.y^2) * r = d>0 ? acos(dir.z)/(2*PI*d) : 0.0 * u = 0.5 + dir.x * r * v = 0.5 + dir.y * r * BONUS: * Textures support (2 points) === Test Scenes and Reference Images === area light source ([[https://cent.felk.cvut.cz/courses/APG/test5/nff/cornell-blocks-arealight.nff|cornell-blocks-arealight.nff]])\\ {{https://cent.felk.cvut.cz/courses/APG/results/test5a-ref.png?200x200|area light source}} color area light source ([[https://cent.felk.cvut.cz/courses/APG/test5/nff/cornell-blocks-arealight-color.nff|cornell-blocks-arealight-color.nff]])\\ {{https://cent.felk.cvut.cz/courses/APG/results/test5b-ref.png?200x200|color area light source}} environment map St. Peter's Basilica ([[https://cent.felk.cvut.cz/courses/APG/test5/nff/basilica.nff|basilica.nff]]/[[https://cent.felk.cvut.cz/courses/APG/test5/nff/stpeters_probe.hdr|stpeters_probe.hdr]])\\ {{https://cent.felk.cvut.cz/courses/APG/results/test5c-ref.png?200x200|environment map St. Peter's Basilica}} environment map St. Uffizi Gallery ([[https://cent.felk.cvut.cz/courses/APG/test5/nff/uffizi.nff|uffizi.nff]]/[[https://cent.felk.cvut.cz/courses/APG/test5/nff/uffizi_probe.hdr|uffizi_probe.hdr]])\\ {{https://cent.felk.cvut.cz/courses/APG/results/test5d-ref.png?200x200|environment map St. Uffizi Gallery}}