Physically based rendering



Physically based rendering (PBR) is a computer graphics approach that seeks to render images in a way that models the lights and surfaces with optics in the real world. It is often referred to as "Physically Based Lighting" or "Physically Based Shading". Many PBR pipelines aim to achieve photorealism. Feasible and quick approximations of the bidirectional reflectance distribution function and rendering equation are of mathematical importance in this field. Photogrammetry may be used to help discover and encode accurate optical properties of materials. PBR principles may be implemented in real-time applications using Shaders or offline applications using ray tracing or path tracing.

History
Starting in the 1980s, a number of rendering researchers worked on establishing a solid theoretical basis for rendering, including physical correctness. Much of this work was done at the Cornell University Program of Computer Graphics; a 1997 paper from that lab describes the work done at Cornell in this area to that point.

"Physically Based Shading" was introduced by Yoshiharu Gotanda during the course Physically-Based Shading Models in Film and Game Production at the SIGGRAPH 2010. And followed by the course Physically Based Shading in Theory and Practice organised by Stephen Hill and Stephen McAuley between 2012 and 2020.

The phrase "Physically Based Rendering" was more widely popularized by Matt Pharr, Greg Humphreys, and Pat Hanrahan in their book of the same name from 2004, a seminal work in modern computer graphics that won its authors a Technical Achievement Academy Award for special effects. The book is now in its fourth edition.

The first successful, yet partial implementation of physically-based rendering in a video game can be found in the 2013 title Remember Me, that despite being built on a game engine not natively supporting this technology (Unreal Engine 3) was properly modified to accommodate this feature. Despite being a moderate approach to PBR, its accuracy has been further refined with posterior titles such as Ryse: Son of Rome and Killzone Shadow Fall, released on the same year, until the current state of PBR advancements in the 2020s.

Process
PBR is, as Joe Wilson puts it, "more of a concept than a strict set of rules" – but the concept contains several distinctive points of note. One of these is that – unlike many previous models that sought to differentiate surfaces between non-reflective and reflective – PBR recognizes that, in the real world, as John Hable puts it, "everything is shiny". Even "flat" or "matte" surfaces in the real world such as concrete will reflect a small degree of light, and many metals and liquids will reflect a great deal of it. Another thing that PBR models attempt to do is to integrate photogrammetry - measurements from photographs of real-world materials - to study and replicate real physical ranges of values to accurately simulate albedo, gloss, reflectivity, and other physical properties. Finally, PBR puts a great deal of emphasis on microfacets, and will often contain additional textures and mathematical models intended to model small-scale specular highlights and cavities resulting from smoothness or roughness in addition to traditional specular or reflectivity maps.

Surfaces
PBR often utilize Bidirectional scattering distribution functions to calculate the visible light reflected at a given point on surfaces. Common techniques use approximations and simplified models that try to fit approximate models to more accurate data from other more time consuming methods or laboratory measurements (such as those of a gonioreflectometer).

As described by researcher Jeff Russell of Marmoset, a surface-focused physically based rendering pipeline may also focus on the following areas of research:
 * Reflection
 * Diffusion
 * Translucency and transparency
 * Conservation of energy
 * Metallicity
 * Fresnel reflection
 * Subsurface scattering

Volumes
PBR is also often extended into volume renderings, with areas of research like:
 * Lens-related/Angle of view/Depth of field effects
 * Caustics
 * Light scattering
 * Participating media
 * Atmospheric visual properties such as:
 * Day-night cycle
 * Elevation
 * Angular distance from the Sun or Moon or other orbital objects
 * Weather and sky conditions, including clouds, precipitation, and aerosol obscurations such as fog or haze.

Application
Thanks to high performance and low costs of modern hardware it has become feasible to use PBR not only for industrial but also entertainment purposes wherever photorealistic images are desired, such as video games or movie making. Today's mid to high-end hardware is capable of producing and rendering PBR content and there exists a market of easy-to-use software that allows designers of all experience levels to take advantage of physically based rendering methods, such as:

A typical application provides an intuitive graphical user interface that allows artists to define and layer materials with arbitrary properties and to assign them to a given 2D or 3D object to recreate the appearance of any synthetic or organic material. Environments can be defined with procedural shaders or textures as well as procedural geometry or meshes or point clouds. If possible all changes are made visible in real-time and therefore allow for quick iterations. Sophisticated applications allow savvy users to write custom shaders in a shading language such as HLSL or GLSL, though increasingly node-based material editors that allow a graph-based workflow with native support for important concepts such as light position, levels of reflection and emission and metallicity, and a wide range of other math and optics functions are replacing hand-written shaders for all but the most complex applications.
 * Brikl
 * 3ds Max
 * O3DE
 * OGRE
 * Maya
 * Babylon.js
 * Blender
 * Cinema 4D
 * CryEngine
 * Enscape
 * Vue
 * Godot (game engine)
 * Houdini (SideFX)
 * jME
 * Microstation
 * Minecraft GLSL Shaders
 * Rhinoceros 3D
 * Roblox Studio
 * Sketchfab
 * Stride
 * Three.js
 * Unigine
 * Source 2
 * Unity
 * Unreal Engine
 * Webots