Inferno Creative Studio

Chapter summaries · The Complete Guide to Photorealism

11-14: The CG World

Part 3 condensed. Rendering, shading, texturing and modeling - what a projection artist should take from it.

Reading: Eran Dinur, The Complete Guide to Photorealism for Visual Effects, Visualization and Games (Focal Press, 2022), Part 3, chapters 11-14, pages 113-170. This page condenses four chapters. If you work in Cinema 4D, Blender, Maya or Unreal, read the full chapters - they are the most directly practical part of the book for you. If you work in After Effects and TouchDesigner, this page is enough.

Why Part 3 is condensed here

Part 2 described how light behaves in the world. Part 3 is about reproducing that behavior inside a 3D application - render engines, shaders, texture maps and geometry. It is a production manual for CG artists.

Most of it does not transfer to a wall. But four ideas in it do, and they are worth knowing by name, because they explain why some of your source content will look convincing under a projector and some will not.

↑ Contents

Chapter 11: Rendering and Lighting

The history in one paragraph

By the 1970s the physics of light was fully understood - Newton, Huygens, Fresnel, Planck and Einstein had all done their work. What did not exist was the computing power. Dinur's comparison: the CDC 7600, one of the most powerful supercomputers of the 1970s, filled a room and ran at 36 million megaflops; a 2015 Samsung Galaxy S6 ran at 36 billion. A consumer phone from a decade ago is a thousand times more powerful than the strongest supercomputer of the era when CG rendering was invented.

So the first CG light emitters, shading models and rendering algorithms were never meant to emulate real light. They mimicked its behavior through crude approximations and smart compromises. Everything since has been a slow march back toward the physics.

Scanline to path tracing

A render engine has exactly one job: decide what color a pixel is.

  • Scanline / rasterised rendering transforms 3D geometry into a 2D projection based on the camera's viewing plane, sorts depth with a Z buffer so only the frontmost surface is drawn, and asks the shader for a color at each point. Fast, efficient, and the foundation of contemporary game engines - but it ignores the surrounding environment entirely.
  • Raytracing follows light's path backward, from the camera to the light sources, so only rays that matter get traced. Still slow: a single ray splits into many at each interaction point, multiplying exponentially, and one pixel can take millions of calculations. It brought true specular reflections, realistic refraction and accurate shadows. Nvidia's RTX in 2018 started making it viable in real time.
  • Path tracing is what almost every contemporary physically based renderer (PBR) uses - the most holistic and physically accurate approach to raytracing, treating all light equally whether direct or reflected, incoming or outgoing.

Global illumination and the ways of faking it

Accurate reflections and shadows matter, but global illumination (GI) - the contribution of bounced light - is the most crucial ingredient in the photorealism recipe. It is also much more expensive to calculate, so CG spent decades approximating it:

  • Ambient light emitter - the old crude fill. Not really a light at all, just a multiplier raising the overall color gain, producing utterly flat illumination with no shading or occlusion. Effectively obsolete.
  • Ambient occlusion (AO) - not a GI solution, since it calculates no reflected light. It assumes a uniformly white sphere of light around the scene and checks how much of it reaches each point. Exposed areas brighten, occluded areas darken, producing the soft shadowing of an overcast day. Far faster than tracing bounces, and still widely used in games and as a compositing pass for contact shadows.
  • Radiosity - the first effective GI solution, adopted quickly by ArchViz. View-independent, dividing surfaces into patches and computing a view factor for each pair. Limited to diffuse light only, and prone to artifacts along hard edges.
  • Photon mapping - two stages: shoot photons from the light and record their interactions in a photon map, then use it to determine surface radiance. Cheaper than path tracing, but faster hardware made path tracing the preferred choice.

Path tracers manage the cost with Monte Carlo sampling - tracing a limited number of random rays rather than every possible one, the way a survey polls a sample rather than the whole population. Too low a sampling rate gives noisy renders; too high wastes time. Indirect components are the noisiest, so they get higher sampling while direct illumination stays lower.

Dinur's take on the biased versus unbiased debate is worth borrowing: the truly ideal renderer does not exist, and even renderers considered unbiased use approximations. Path tracing relies on sampled rather than absolute results and often uses importance sampling, which is itself a biased process. All renderers are estimators of reality, not reality itself. Arnold is considered unbiased and V-Ray biased; both are production workhorses. Redshift is clearly biased and blazingly fast. Bias does not mean inferior.

Light emitters

Point and spot lights emit from an infinitely small point, which makes them fast and noise-free but physically incorrect, since real light always comes from a measurable surface. Three limitations follow: they cannot produce true soft shadows with a real umbra and penumbra, only a faked global softness parameter; having no scale, they cannot appear in specular reflections at all, so their representation in Phong and Blinn shaders is a cheat; and they can only emit spherically, making fluorescent tubes, rectangular fixtures and neon signs very hard to emulate.

Directional light also has no surface, but its position is irrelevant - only its direction - and it casts parallel rays and shadows, making it a basic but effective sun. Most engines add a shadow softness or angle parameter to simulate the atmosphere's effect.

Area lights emit from a surface with real shape and scale, solving all three point-light problems: accurate soft shadows, visibility in specular reflections, and non-spherical illumination. That last one matters because the visual character of a fixture usually comes from the lampshade, reflector or diffuser rather than the bulb. The cost is noise, since many rays must be shot from the surface. Mesh lights take it further, turning any geometry into an emitter - especially good for neon signs and irregular fixtures.

Image-based lighting

IBL uses a 16-bit HDR spherical panorama to light the scene with a real-world lighting snapshot, and simultaneously provides a full environment for specular reflections, transmission and refraction. It is how VFX captures on-set lighting for CG elements, how product visualization replicates studio lighting, and the standard route to believable outdoor light.

The limitation to remember: standard IBL is not a three-dimensional environment - it is an eggshell surrounding the scene. It only works for distant or background lights that do not interact with elements in the scene. It cannot replace street lights in a driving shot or interior lights in a walkthrough.

Requirements for a usable IBL source: a consistent uninterrupted 360 panorama, usually shot with a very wide or fish-eye lens rotated on a nodal head; multiple exposures per angle - typically five or seven - merged into a 16- or 32-bit image, since no camera captures the full range in one shot; slight blurring if used for lighting only, to avoid sharp peaks causing render artifacts, but a sharp version retained for specular reflection.

Procedural HDR environments are the alternative: physically based sky simulations where you set sun position, sky turbidity, color and sun scale, with the sky's gradation shifting automatically to reflect Rayleigh and Mie scattering. Landscape applications like Terragen and Vue go further with genuinely volumetric atmosphere, depth-based haze and fog, even crepuscular rays. More control and flexibility than a photograph, but usually lacking real-world detail and irregularity - and useless for matching set lighting.

Photometric lights read IES profiles published by lighting manufacturers, simulating the actual light distribution and color temperature of a specific real fixture. Invaluable to architects and interior designers, who can pre-visualize a lighting design with the exact products they intend to buy.

Strategies worth remembering

  • Scale matters now. When emitters were points and GI was not integral, the scale of surfaces and lights barely mattered. In a PBR it decides everything: a one-square-inch emitter gives out far less energy than a ten-square-foot one, and a one-inch cube contributes far less to GI than a ten-foot cube. Compensating for wrong scale by pushing light intensity tips the physical balance of the scene, and texture luminance cannot be tweaked to match. Photometric lights lose accuracy entirely when scale is incoherent.
  • Skylight color needs desaturating. Diffuse sky radiation is not as blue as the sky itself, but an HDR of a clear sky derives its light color from those deep blue pixels and casts an oversaturated blue. Some desaturation gives a more balanced result. HDRs also often need a brightness boost, because merged exposures do not represent true luminosity, and their white balance is subjective to the camera - which is why shooting a color card at the bottom of frame is good practice.
  • AO works better outdoors than indoors. Bounced light is far less critical outdoors, where most incident light is reflected back toward the sky. Indoors, a room lit by a single window would be far too dark without GI. AO works especially well on natural scenes full of small detail, and poorly on large uniform surfaces like building exteriors, where the missing color bleed is obvious.
  • Daytime interiors are a sampling problem. The exterior environment is a full hemisphere but the light only enters through small windows, so most samples are wasted and the critical regions go noisy. A light portal - a plane placed in front of the window - focuses the sampling there. The other option is to drop exterior IBL entirely and put large bright area lights in front of the windows, which is how interior film sets are actually lit.

↑ Contents

Chapter 12: Shading

A shader's fundamental job is to calculate illumination at every point on a surface. The word comes from the traditional art technique of shading areas of partial occlusion to fake three dimensions in a 2D painting.

The evolution, briefly

  • Flat shader - checked each face's angle to the light. Faceted look; fine for a cube, useless for a curve.
  • Gouraud (1971) - calculated color at each vertex from its normal and interpolated linearly between them. Smooth, but specular highlights falling in the middle of a polygon were simply not seen.
  • Phong (1975) - interpolated the vertex normals first, then assigned a color per pixel. Per-pixel accuracy, and specularity solved. Blinn later reduced render time with half-way normal vectors. Phong/Blinn was the pillar of CG shading for years and is now obsolete.

BRDF - the current model

Most physically based renderers build their surface shaders on the Bidirectional Reflectance Distribution Function. Its advantages are the reason CG surfaces stopped looking like plastic:

  • Microfacet models like GGX or Cook-Torrance emulate surface roughness accurately, for specular reflection and transmission as well as diffuse.
  • True isotropic and anisotropic specular for dielectrics and metals alike.
  • The Fresnel effect is always factored in, from simple IOR for dielectrics or complex IOR for metals.
  • Conservation of energy is enforced. Specular, diffuse and transmission are balanced so light leaving a surface never exceeds light arriving. Specular intensity is automatically reduced at higher roughness, so the same reflected energy spreads over a wider lobe.
  • Multiple specular layers in one material - most BRDF shaders have a second layer for clear coat and glossy paint.
  • True depth-based transmission color, and complex effects like dispersion and subsurface scattering.

The parameters that matter

  • Diffuse roughness - simulates falloff variance on rougher surfaces. Low values suit coated plastic, water and glass; higher values suit concrete, plaster, sand and paper.
  • Dielectric / metallic toggle. Real materials are one or the other with nothing in between, though most applications expose it as a slider to accommodate texture maps. Switching to metallic changes the specular model to the metallic one and swaps simple IOR for complex IOR. Because metals do not reflect diffusely, the diffuse color parameter now controls the specular tint - set it yellow and you get gold. Several parameters become irrelevant and are grayed out: diffuse roughness, specular intensity (metals are assumed 100% specular), IOR, and transmission.
  • Specular. Because energy is conserved, the rougher the specularity the lower its intensity - so specular roughness alone covers the full range from mirror to matte, and specular intensity should normally stay fixed at 100%. Raising IOR to fake a metallic look is possible but unnecessary; switch the toggle instead.
  • Anisotropy. Unlike Phong or Blinn, energy conservation means the amount of stretching is also affected by roughness - a roughness of 0.05 yields minimal stretching even at 100% anisotropy. That is the photoreal outcome, since real anisotropic highlights come from tiny grooves and are rougher by default.
  • Coat (clear coat) - the optional second specular layer, for the thin clear coating on plastics, lacquered wood and coated metals, and very effective for wet surfaces when modulated by a texture. A duller base under a glossier outer layer produces a complexity no single specular setting can reach.
  • Transmission. Keep transmission weight at 100% and avoid in-between values, so diffuse color has no effect. Control clarity with transmission roughness instead. Transmission color replaces diffuse color as the base hue and varies with depth - brighter and less saturated in thin areas, darker and more saturated in thick ones - which is a large part of why BRDF glass reads as real. Transmission scatter handles murky liquids like honey.
  • Subsurface scattering. The key parameter is radius. A small radius gives a subtle, almost imperceptible effect that nonetheless makes a material feel softer and milkier - right for marble and some plastics and stones. A wider radius reads as translucency, as in wax. Crucially, no matter how large the radius, the material stays opaque - SSS and transmission are different things serving different purposes.
  • Emission. Above zero the surface acts as a light source. Useful for self-illuminated surfaces like distant lights, stars, neon signs and bioluminescence. Not to be used to make a surface brighter or stand out - that breaks conservation of energy and damages the photoreal coherence of the render.
  • Sheen - in CG terminology specifically the velvety effect of microfiber in textiles. Not specular reflection but a soft lustre tied to the facing direction of the fibres. For garments, upholstery, rugs, carpets, bed linen and skin.
  • Thin-film interference - the rainbow shift of a soap bubble or an oil slick.
  • Dispersion - the separation of frequencies in refraction, measured by abbe number. Higher abbe means lower dispersion. Most glass is between 100 and 20, so the effect is normally very subtle; below 20 you get prism-like results that are more stylistic than photoreal.

↑ Contents

Chapter 13: Texturing

Dinur argues texture mapping has a greater impact on photorealism than modeling, shading or lighting, because our eyes go instinctively to the color variations and patterns that define surfaces. Switch the color texture on a cube and it becomes a stone wall, a concrete slab, a cereal box or a book.

But texture is something you feel, not just see. A wooden table feels different from a towel. Since you cannot touch a render, texture maps recreate that feel by modulating bumps, displacement, ambient occlusion, roughness, metalness and transmission. Done badly - obvious repetition, implausible grime, over-the-top bumps - texturing ruins a render no matter how good everything else is.

The linear workflow

There are no color spaces in nature - light and surface interaction is universally linear, and a PBR must work in linear space. But display technologies force color curves onto digital images, and by default images are saved in sRGB with a gamma curve baked in. Used directly in linear space they are far too dark, which skews the entire lighting solution and pushes the artist to over-boost the emitters.

Modern applications linearise automatically via color management. The trap: many secondary maps are not feeding color data at all - a normal map's values are XYZ vectors, a roughness or metallic map is a zero-to-one grayscale. Non-color maps must always be set to linear (raw) color space at input or their values are corrupted.

The maps

  • Base color (diffuse color, albedo) - the most important map in the set. Two rules to know. PBR safe range: since conservation of energy applies, extreme values break it, so the common safe range is roughly 30-240 on a 0-255 sRGB scale for diffuse, and around 180-255 for metallic color. And avoid extreme contrast and saturation - color textures have to react well to any lighting setup, and pitch-black areas or blown highlights make parts of an object pop out unnaturally. Extreme saturation makes the scene lighting impossible to balance.
  • Roughness map - in PBR the specular amount is constant and only roughness varies. Necessary for layered materials: on a partly painted wooden beam, roughness is higher where bare wood shows; on wet pavement it is higher in the dry parts. A great way to add subtle imperfection to clean surfaces like glass or polished metal.
  • Metallic map - grayscale, defining which areas are metallic. Essential for any mixed surface; rusted metal is the classic case, since the clean metal is metallic and the rust is not. Crank the contrast so values sit near zero or one - areas should be metallic or dielectric with a fairly sharp transition, not a gray gradient.
  • Bump / normal map - an illusion of roughness and small-scale detail. Does not affect geometry; it is a shading trick. Double-edged: used correctly it adds remarkable subtlety by breaking up specular reflections, but there is a strong tendency to push it too far. Real surface roughness is generally only noticeable up close and loses definition with distance, so overstrong bumps harm realism from a distance and reveal their fakery up close along the object's outline. Best practice is to combine bumps with displacement, using displacement for larger features and bumps only for the small ones. Normal maps use RGB for XYZ relief rather than a simple up-down grayscale height value.
  • Ambient occlusion map - the renderer can only detect occlusion from geometry, not from bumps, so the AO texture is the bump map's companion, shading the cavities in the material itself. Usually applied as a multiplier on the base color. Keep it subtle: in the final render, the darkest AO values should not be darker than true geometry-based occlusion in the scene.
  • Displacement (height) map - actually modifies geometry, which makes it a modeling tool among shading tools. Needs enough subdivision at render time, and works best when height differences are not extreme. When generating displacement from an image, mask out or blur the small features and keep only the large detail.
  • Transparency vs opacity map - a transparency map controls the transmission amount and does not affect reflection or bumps, which stay visible as on clear window glass. An opacity map simply makes parts of a surface invisible - a cookie-cutter for leaves or twigs, so a fence or a net need not be modeled.

Three workflows

Photographs, procedural generation, or hand painting. No superior methodology - the best solution is usually a combination.

Image textures are inherently photoreal and carry intricate natural detail that is hard or impossible to fake. Their disadvantages are real: photographs are 2D and need meticulous UV mapping to avoid stretching; tiling large surfaces often takes substantial retouching; lighting is baked into every photograph, and strong directional lighting is severely limiting; and generating secondary maps from a photo is hard, because color information does not necessarily represent height, occlusion or specularity.

Shooting for texture - the practical advice here is directly usable in this course:

  • Resolution. 2K is the norm for generic materials, smaller for anything tiled many times, 4K or higher for a large surface with no tiling. Always shoot at the highest available resolution to allow cropping later.
  • Baked-in lighting. The rule is simple: avoid direct light. Shoot outdoors under overcast sky or in full shadow. Indoors, light as flatly and diffusely as possible. Even a gradual color change from a soft shadow makes a texture hard to tile.
  • Angle, perspective and focus. Shoot at a straight angle, with a medium or long lens to minimize wide-lens distortion. Perspective can be corrected later; sharpness cannot - avoid shallow depth of field.
  • Exposure. Brightness and contrast are easy to change later, but muddy blacks and clamped highlights cannot be salvaged. Always shoot raw, never JPG. Three to five exposures per angle expands the range further.
  • Tiling. Equalise color and luminosity across the texture. Remove any singular or unusual detail - a knot in bark, a lone bolt in a concrete wall - because it adds realism used once and becomes conspicuously repetitive when tiled.

Procedural textures are generated from noise, fractals and pattern generators. Fully editable at every level, easily randomised into variations, free of baked lighting, easy to derive secondary maps from, and seamlessly tileable. They lack the inherent realism of photographs and tend to feel mechanical and generic. The judgement call Dinur offers: for one leaf, photograph it. For thousands of leaves on a tree, go procedural, because it avoids the cloned look.

Combining them is where the craft is. Games that went all-procedural often ended up with a generic look where everything feels nearly identical - the same rusted metal and peeling paint everywhere. His tips: tile the base image a few times and add large-scale procedural or hand-painted maps on top to mask repetition while keeping photographic quality; use images for color and procedurals for bump and displacement; mix several noises and grunge maps at varying scales to break up recognisable Perlin patterns; and hand-paint wear and dirt where they physically belong - finger smudges at doorknobs and handles, scratches around areas of friction, dust in cracks and under objects, water marks following the curvature downward.

↑ Contents

Chapter 14: Modeling

Dinur opens by asking whether modeling affects photorealism at all, given that the rest of the book is about light. He concludes it does, in two specific ways.

Modeling for lighting - the bevel argument

Technical models are built from simple geometric forms: a table is essentially five boxes, a building is a big box made of smaller boxes. In the mathematically perfect world of CG those boxes have perfectly sharp corners. In reality that is almost never the case. The edges of a real table have been cut and sanded, leaving the corners slightly rounded.

As Chapter 5 established, rounded corners and edges act as highlight magnets. Even extremely thin bevels contribute substantially to how an object catches light. When a CG model has perfectly sharp corners, the rim highlights we unconsciously expect are missing - and the render feels dull, flat and "CG".

So modeling for lighting means judiciously applying bevels or chamfers. It costs modeling time and poly count, and it must be weighed case by case: bevelling an office building for an exterior render is overkill, because it is too large and too far away for rim highlights to register, while an apartment interior benefits from bevels on furniture and even wall corners. Games get the same effect by baking bevels into normal maps on low-poly models.

Procedural modeling

Standard modeling works well for man-made objects and creatures but is inefficient for terrain, rocks and plants, whose realism depends on a combination of randomness and order. Nature's chaos is only convincing when it obeys natural laws - the way water, wind and ice shape mountains, the way plants of one species share characteristics, the way vegetation grows only in certain places.

Terrain modeling starts from a height map displacing a plane. Real elevation data such as USGS DEM maps has been used for years, but is not always right for creative work. Specialised applications - Vue, Terragen, World Machine, World Creator, Gaea - combine three techniques:

  • Fractal-based elevation - natural elements show fractal characteristics, larger patterns recurring at smaller scale. Perlin noise is the most used; Voronoi is another. Scale, amplitude and roughness set the overall look, while the number of subdivided iterations, or octaves, sets the amount of detail.
  • Erosion simulation - fractals alone still feel repetitive and mechanical. Real terrain is shaped by millions of years of water, wind and ice, giving the crisscrossed fluvial marks on slopes, U-shaped glacial valleys and alluvial deposits at the foothills that read as familiar. Erosion tools are what these applications are really for.
  • Free sculpting and terrain filters - the best of both, letting the artist sculpt the general shape then apply procedural displacement and erosion, or the reverse. Newer software adds filters for terraces, stratified rocks, sand dunes, plateaus and scattered rocks.

Vegetation uses L-systems, which combine random generation with deterministic algorithms to "grow" an infinite number of plant variations from one species. SpeedTree is ubiquitous in games, VFX and visualization because it bundles this with poly count and LOD control and animation tools for wind and growth. Houdini provides L-system tools in the core application. The same approach generates libraries of stones, rocks, bricks and minerals.

↑ Contents

Terms from Part 3

  • Rasterization / Z buffer - projecting 3D to 2D and sorting depth. The basis of game engines.
  • Raytracing / path tracing - following light backward from the camera; path tracing is the physically accurate version.
  • PBR - physically based renderer.
  • Global illumination (GI) - the contribution of bounced light.
  • Ambient occlusion (AO) - a fast approximation of occlusion shadowing. Not a GI solution.
  • Monte Carlo sampling / sampling rate - tracing a random subset of rays. Too few gives noise.
  • Biased vs unbiased rendering - shortcuts or none. All renderers are estimators of reality.
  • Area light / mesh light - emitters with real surface and shape.
  • Image-based lighting (IBL) - lighting from an HDR panorama. An eggshell, not a 3D environment.
  • IES profile - a manufacturer's measured light distribution, read by photometric lights.
  • Light portal - a plane at a window that focuses exterior light sampling.
  • BRDF - the shading model behind physically based materials. Enforces conservation of energy.
  • Coat / clear coat - a second specular layer for lacquered and wet surfaces.
  • Sheen - the velvety lustre of microfibre.
  • Abbe number - a measure of dispersion. Higher means less.
  • Linear workflow - working in linear space, with non-color maps set to raw.
  • PBR safe range - roughly 30-240 sRGB for diffuse color maps.
  • Bump / normal / displacement - shading illusion, RGB vector version, and true geometry change.
  • Bevel / chamfer - the rounded edge that catches a rim highlight.
  • L-system - the algorithm behind procedural plant generation.
  • Octaves - the number of fractal iterations, setting terrain detail.

↑ Contents

Check yourself

  • What single question does a render engine exist to answer?
  • Why does raytracing follow light backward from the camera?
  • What is ambient occlusion actually calculating, and why is it not global illumination?
  • Name three things a point light cannot do that an area light can.
  • Why is IBL described as an eggshell, and what does that rule out?
  • In a metallic BRDF material, what does the diffuse color parameter control?
  • Why should specular intensity normally stay at 100%?
  • Why must a roughness or normal map be set to raw rather than sRGB?
  • Give three rules for photographing a surface you intend to use as a texture.
  • Why does a perfectly sharp CG corner make a render feel flat?
  • When would you photograph a leaf, and when would you generate one procedurally?

↑ Contents