
Stato: da scrivere
Volume 6 — Grafica 3D avanzata
Vulkan e Direct3D, le interfacce esplicite della scheda video, accanto a OpenGL del volume 5: come si integrano con Avalonia, che cosa costano, quando conviene ciascuna.
30 capitoli · circa 460 pagine (stima) · da scrivere. Si apre con un ripasso del volume 5. La prima parte è Vulkan, dall'istanza ai comandi, alle code e alla sincronizzazione; la seconda Direct3D 11 e 12 su Windows; la terza confronta le tre strade con misure vere e parla dei motori 3D esterni. I progetti: particelle sulla scheda video, volumi di dati, una nuvola di punti da milioni di misure, un piccolo motore a più API.
Indice dei capitoli
Il volume 5 ha insegnato il 3D con OpenGL, che fa molte scelte da solo. Questo volume passa alle interfacce esplicite: Vulkan, che gira su Windows, Linux, Android e (con MoltenVK) macOS, e Direct3D 11 e 12 su Windows. Si scrive molto più codice, e in cambio si decide tutto: memoria, sincronizzazione, quanti fotogrammi in volo. Il libro si legge da solo: si apre con il ripasso del volume 5.
| Parte | Capitoli | Pagine |
|---|---|---|
| Prima di cominciare e ripasso del volume 5 | — | 25 |
| Prima · Vulkan | VI.1–VI.15 | 200 |
| Seconda · Direct3D | VI.16–VI.21 | 80 |
| Terza · Confronti e scelte | VI.22–VI.26 | 70 |
| Progetti | VI.27–VI.30 | 55 |
| Appendici | A–C | 30 |
| Totale | 30 capitoli | ≈ 460 |
Prima di cominciare ○
Prefazione · la collana · che cosa serve dei volumi precedenti · la scheda video del libro, i driver, i layer di validazione · le librerie e le licenze.
Ripasso: il 3D del volume 5 ○
Quello che i capitoli usano del volume 5, con il rimando al capitolo: matrici e proiezioni (e lo spazio di ritaglio 0…1 che qui diventa la regola), mesh e normali, luce, GLSL, texture, profondità, la telecamera orbitale, glTF.
Parte prima — Vulkan
- VI.1 Perché Vulkan ○ — il controllo esplicito: che cosa OpenGL faceva da solo e qui va scritto; quanto codice per un triangolo, e perché ne vale la pena.
- VI.2 Istanza, estensioni, layer di validazione ○ — Silk.NET.Vulkan; i messaggi di debug come primo strumento; leggere un errore di validazione.
- VI.3 Dispositivi fisici e logici, code ○ — scegliere la scheda; famiglie di code: grafica, calcolo, trasferimento.
- VI.4 Vulkan dentro Avalonia ○ — due strade: disegnare in un'immagine e passarla al compositore con
ICompositionGpuInterop(§IV.15), o una superficie nativa con swapchain; che cosa offre Avalonia 12 e dove. - VI.5 Shader SPIR-V ○ — compilare GLSL e HLSL in SPIR-V (glslang, shaderc, DXC); compilare durante la build o all'avvio; la riflessione.
- VI.6 Render pass e rendering dinamico ○ — attachment, subpass,
VK_KHR_dynamic_renderingdi Vulkan 1.3: il modo nuovo, più semplice. - VI.7 La pipeline grafica ○ — stati fissi e dinamici, layout della pipeline, cache delle pipeline; perché si creano prima e non durante il disegno.
- VI.8 Memoria e buffer ○ — tipi e heap di memoria; buffer di staging; un allocatore semplice scritto a mano, e quando serve uno vero.
- VI.9 Command buffer e sincronizzazione ○ — registrare e inviare; semafori, fence, barriere di pipeline; gli errori di sincronizzazione che la validazione trova e quelli che non trova.
- VI.10 Descrittori e uniform ○ — set, layout, pool; push constant; aggiornare i dati a ogni fotogramma.
- VI.11 Texture, campionatori, mipmap ○ — layout delle immagini e transizioni; generare le mipmap sulla scheda.
- VI.12 Profondità e multisampling ○ — il primo modello illuminato, come al volume 5, e il confronto del codice.
- VI.13 Più fotogrammi in volo ○ — due o tre fotogrammi alla volta; ridimensionare la finestra e ricreare la swapchain; misure di latenza.
- VI.14 Compute shader in Vulkan ○ — calcolo generale sulla scheda; code di calcolo asincrone; leggere i risultati.
- VI.15 Vulkan su Windows, Linux e macOS ○ — driver diversi, MoltenVK su macOS, le estensioni che mancano; le stesse misure su tre sistemi.
Parte seconda — Direct3D
- VI.16 Direct3D 11 con Vortice.Windows ○ — dispositivo, contesto, swapchain; il primo triangolo; il parente stretto di Direct2D (volume 4).
- VI.17 HLSL, buffer costanti, texture ○ — gli shader di Direct3D; dalle uniform ai buffer costanti.
- VI.18 Direct3D 11 in una finestra Avalonia ○ — la texture condivisa importata dal compositore, come per Direct2D al §IV.15; la finestra figlia; che cosa si perde fuori da Windows.
- VI.19 Direct3D 12 ○ — liste di comandi, heap di descrittori, barriere: il fratello di Vulkan, messo a confronto riga per riga.
- VI.20 Compute shader in Direct3D ○ — 11 e 12; scambio di dati con la CPU.
- VI.21 Strumenti di Direct3D ○ — il livello di debug, PIX, i messaggi del driver.
Parte terza — Confronti e scelte
- VI.22 La stessa scena in quattro modi ○ — OpenGL, Vulkan, Direct3D 11 e 12: righe di codice, tempo della CPU per fotogramma, memoria, fotogrammi al secondo.
- VI.23 Calcolare sulla scheda video ○ — lo stesso calcolo con i compute shader dei tre modi e con la CPU (SIMD di .NET): quando conviene e quando il trasferimento si mangia il guadagno.
- VI.24 Risorse della GPU ○ — memoria, perdite, rilascio, la scheda persa (device lost) e come ripartire.
- VI.25 Motori 3D esterni ○ — quando conviene un motore invece delle API: che cosa c'è per .NET, le licenze, come si mette in una finestra Avalonia.
- VI.26 Quale scegliere ○ — una tabella di scelta per tipo di programma e di sistema, con le misure del libro.
Progetti
- VI.27 Particelle sulla scheda video ○ — un milione di particelle calcolate in un compute shader Vulkan; il confronto con le particelle in Skia del capitolo IV.29.
- VI.28 Volumi di dati ○ — un volume 3D (tomografia, misure di campo) visto con il ray marching.
- VI.29 Nuvola di punti da milioni di misure ○ — caricamento in streaming, livelli di dettaglio, selezione.
- VI.30 Un piccolo motore a più API ○ — la stessa scena con tre backend dietro un'interfaccia sola; che cosa si guadagna e che cosa si perde ad astrarre.
Appendici
A. Gli inciampi di Vulkan e Direct3D ○ · B. Riferimento rapido ○ · C. Glossario ○
Stato dei capitoli: ✔ scritto · ✎ in bozza · ○ da scrivere.
Gli esempi del volume
Gli esempi di questo volume arriveranno con i suoi capitoli.