Computer Graphics: Difference between revisions
(6 intermediate revisions by the same user not shown) | |||
Line 66: | Line 66: | ||
\end{bmatrix} | \end{bmatrix} | ||
</math> | </math> | ||
===Transformation matrix=== | |||
<math> | |||
L = T * R * S | |||
</math> | |||
Depending on implementation, it may be more memory-efficient or compute-efficient to represent affine transformations as their own class rather than 4x4 matrices. For example, a rotation can be represented with 3 floats in angle-axis or 4 floats in quaternion coordinates rather than a 3x3 rotation matrix. | |||
For example, see | |||
* [https://eigen.tuxfamily.org/dox/classEigen_1_1Transform.html Eigen::Transform] | |||
==MVP Matrices== | ==MVP Matrices== | ||
Line 160: | Line 170: | ||
See [https://static1.squarespace.com/static/58586fa5ebbd1a60e7d76d3e/t/593a3afa46c3c4a376d779f6/1496988449807/s2012_pbs_disney_brdf_notes_v2.pdf pbs disney brdf notes] and the [http://www.pbr-book.org/ pbr-book] | See [https://static1.squarespace.com/static/58586fa5ebbd1a60e7d76d3e/t/593a3afa46c3c4a376d779f6/1496988449807/s2012_pbs_disney_brdf_notes_v2.pdf pbs disney brdf notes] and the [http://www.pbr-book.org/ pbr-book] | ||
In frameworks and libraries, these are often refered to as ''standard materials'' or in Blender, ''Principled BSDF''. | In frameworks and libraries, these are often refered to as ''standard materials'' or in Blender, ''Principled BSDF''. | ||
==Blending and Pixel Formats== | |||
===Pixel Formats=== | |||
===Blending=== | |||
To output transparent images, i.e. images with alpha, you'll generally want to blend using [[Premultiplied Alpha]]. Rendering in premultiplied alpha prevents your RGB color values from getting mixed with the background color empty pixels. | |||
===Rendering=== | |||
For rasterization, the render loop typically consists of: | |||
# Render the shadow map. | |||
# Render all opaque objects front-to-back. | |||
## Opaque objects write to the depth buffer. | |||
# Render all transparent objects back-to-front | |||
## Transparent objects do not write to the depth buffer. | |||
Rendering opaque objects front to back minimizes overdraw, where a pixel gets drawn to multiple times in a single frame. | |||
Rendering transparent objects back to front is needed for proper blending of transparent materials. | |||
==Anti-aliasing== | |||
For a high-quality anti-aliasing, you'll generally want to multiple multi-sampling (MSAA). | |||
This causes the GPU to render the depth buffer at a higher resolution to determine the contribution of your fragment shader's color to the final image. | |||
See https://learnopengl.com/Advanced-OpenGL/Anti-Aliasing#:~:text=How%20MSAA%20really%20works%20is,buffer%20to%20determine%20subsample%20coverage for more details. | |||
==More Terms== | ==More Terms== |