See Render Hell 1.1 Change Log

Added new possible problem-source about batching here.

Added a note about the pipeline simplification here. Madsy9 pointed it out here.

This article was honored with two reddit threads. Here and here.

Added better FIFO explanation here. Thx sccrstud92, tmachineorg and koyima

Cort mentioned this these slides about “How Shader Cores Work”.

NVidia specifications with actual core counts. Thx Jan, Volkan and Hakan Candemir

Mr.Yeah also wrote actual core counts in his comment.

Corrected some misspellings. Thx OddEyesCG for mentioning!

Videos are now only auto-played when you scroll to them (to prevent another server overload). Thx Flannon and RXMESH for the code.And garblefart for all the feedback.

A lack of knowledge sometimes can be a strength, because you naively say to yourself “Pfff..how complicated can it be?” and just dive in. I started this article by thinking “Hm…what exactly is a draw call?”. During my 5-Minute-Research I didn’t find a satisfying explanation. I checked the clock and since i still had 30 minutes before bedtime i said …

“Pfff, how complicated can it be to write it by my own?”

… and just started. This was two months ago and since that i was continuously reading, writing and asking a lot questions.

It was the hardest and low levelest research i ever did and for me as a non-programmer it was a nightmare of “yes, but in this special case…” and “depends on the api…”. It was my personal render hell – but i went through it and brought something with me: five books, each representing an attempt to explain one part of rendering from an artist perspective. I hope you’ll like it.

Open this Book



Open this Book



Open this Book



Open this Book



Open this Book



Thank you!

Thanks goes out to all readers but especially to the people listed below. This article wouldn’t be there without you guys! Thank you for answering all my questions, reading over all my text iterations and supporting me.

Links & Resources

Videos

[v01] CPU vs GPU Demonstration with Paint-Gun-Robots

[v02] Multiple Materials in one Draw Call

Podcast

[p01] Overview about Rendering, APIs and all that stuff

Book

[b01] Real-Time Rendering: Page 711

Articles

[a01] MSDN: Accurately Profiling Direct3D API Calls (Direct3D 9)

[a02] GPU Programming Guide GeForce 8 and 9 Series

[a03] MSDN: States (Direct3D 9)

[a04] MSDN: Efficiently Drawing Multiple Instances of Geometry (Direct3D 9)

[a05] Understanding Modern GPUs

[a06] A trip through the Graphics Pipeline

[a07] Understanding GPUs from the ground up

[a08] Flushing the pipeline

[a09] Sides: Avoiding Catastrophic Performance Loss

[a10] Radeon R5xx Acceleration

[a11] SIGGRAPH 2006: GPU Shading and Rendering

[a12] Tool: GPUView for performance measurement

[a13] Real-Time Graphics Architecture

[a14] How GPUs Work

[a15] NVidia GPU Gems Book

[a16] Wikipedia: Shader

[a17] Wikipedia: Graphics Pipeline

[a18] ExtremeTech 3D Pipeline Tutorial

[a19] Linux Programmer’s Reference Manuals

[a20] More AMD References (like [a10])

[a21] OpenGL Lecture

[a22] Learning Modern 3D Graphics Programming

[a23] OpenGL Programming Guide

[a24] Draw Call Batching

[a25] OpenGL Step by Step

[a26] OpenGL 3 & DirectX 11: The War Is Over

[a27] Rendering Pipeline Overview

[a28] GPU Parallelizable Methods

[a29] Parallelism in NVIDIA GPUs

[a30] Many SIMDs Make One Compute Unit

[a31] PowerPoint: Modern GPU Architecture

[a32] Unreal: Layered Material

[a33] Unity: One draw call for each shader

[a34] Reducing GPU Offload Latency via Fine-Grained CPU-GPU Synchronization

[a35] Accurately Profiling Direct3D API Calls

[a36] Technical Breakdown – Assassins Creed II

[a37] NVidia GPU Gems 2

Forum Discussions

[f01] 2 Materials on one mesh

[f02] Which is faster

[f03] Multiple Materials with one glDrawElements()

[f04] What Is A Draw Call? How Does It Effect My Product?

[f05] Why are draw calls expensive

[f06]

[f07] Another great reddit discussion about the content of this article