Email: kolomaznik (at) cgg.mff.cuni.cz | |
Lecture for real-time 3D graphics supported by GPUs.
Math - slides
Framebuffer - slides
Effects I - slides
Generate Geometry on GPU - slides
Lab practices start from second week (March 1st).
In order to pass the lab practices, you need to pick 2 assignments from the pool below, implement them and submit them via e-mail by 30. 6. 2024, i.e., the end of the summer semester examination period. Note, that to be able to sign up for the exam, you should obtain the grade for practicals first. Use separate messages for each project and use a meaningful subject like "NPGR019 - {name of the project}". I will send you e-mail confirming delivery followed by further questions (if any) and the result or I may ask you for some further improvements or fixes.
Implement a simple particle system that will represent some effect such as fire, smoke, etc. (be creative). Render the particles as sprites with an animated texture. Particles should be lit by a scene light.
Requirements:
Screen Space Ambient Occlussion is very popular method for approximating decrease of light intensity in corners and crevices. Such and effect is normally produced by global illumination which is, however, impractical for real-time scene hence the approximation. The easiest and more straightforward way of doing this is taking the scene depth buffer and calculating depth difference of each texel vs. some average around sampled texel.
Requirements:
Implement a simple scene that uses directional light to cast shadows. A common extension to basic shadow map used to fight perspective
aliasing is called Cascaded Shadow Maps, where we render the scene into several shadow maps based on the distance from the camera.
A scene you create should be sufficiently large, e.g., long alley of poles, and should provide varied geometry to assess how you
fought with common shadow map artifacts like shadow acne and Peter panning. At the least you should there at least some spheres and cylinders or some other curved surfaces.
Recommended approach:
In this assignment, you will implement a Depth of Field (DoF) post-processing effect
for a deferred shading renderer. The objective is to simulate camera focus in a 3D scene,
making objects outside a certain range appear blurred, while keeping those within the range
sharp and in focus. This effect enhances the visual realism and can be used to direct
the viewer's attention to specific parts of the scene.
Implement the DoF effect as a post-processing step to deffered shading renderer. You will need to:
Depth peeling is an advanced rendering technique used to accurately display translucent objects in 3D scenes. Unlike traditional transparency methods that can lead to sorting issues and inaccurate blending, depth peeling allows for correct rendering of multiple overlapping translucent surfaces by peeling away and rendering layers of geometry in a sequence. In this task, students will implement depth peeling in an existing renderer to enhance the rendering of translucent materials.
Extend the renderer to support depth peeling. This includes:
Extend the provided ray-casting renderer to support advanced rendering modes, based on integration along the ray.
Implement an integration scheme that accumulates color and opacity along each ray. This should take into account the material properties of the voxels, such as color and transparency.
Use the visibility integration to render semi-transparent materials, allowing for the visualization of internal structures within the volumetric data.
Examples:
Ray-casting can be used to search for intersection with user specified implicit surfaces. Let user specify implicit surface in following format F(x, y, z) = 0.
During ray following you will evaluate the expression in the shader and find point of zero crossing. For correct shading of the surface you will need a normal to the surface.
The direction of the normal is same as the direction of the gradient vector. You can let user specify also a formula for the partial derivatives, or you can compute the gradient numerically.
Recommended approach: