Professional Documents
Culture Documents
PDF Ray Tracing Gems High Quality and Real Time Rendering With DXR and Other Apis Eric Haines Ebook Full Chapter
PDF Ray Tracing Gems High Quality and Real Time Rendering With DXR and Other Apis Eric Haines Ebook Full Chapter
https://textbookfull.com/product/real-time-rendering-4th-edition-
tomas-akenine-mo%cc%88ller/
https://textbookfull.com/product/making-isometric-social-real-
time-games-with-html5-css3-and-javascript-rendering-
simple-3d-worlds-with-sprites-and-maps-1st-edition-pagella-mario/
https://textbookfull.com/product/high-quality-high-volume-spay-
and-neuter-and-other-shelter-surgeries-1st-edition-sara-white-
editor/
https://textbookfull.com/product/3d-photorealistic-rendering-
volume-1-interiors-exteriors-with-v-ray-3ds-max-1st-edition-
cardoso/
Nonlinear Time Series Analysis with R 1st Edition Ray
Huffaker
https://textbookfull.com/product/nonlinear-time-series-analysis-
with-r-1st-edition-ray-huffaker/
https://textbookfull.com/product/between-perfect-and-real-1st-
edition-ray-stoeve/
https://textbookfull.com/product/smart-nitrate-sensor-internet-
of-things-enabled-real-time-water-quality-monitoring-md-eshrat-e-
alahi/
https://textbookfull.com/product/v-ray-5-for-3ds-
max-2020-3d-rendering-workflows-second-edition-jamie-cardoso/
https://textbookfull.com/product/kalman-filtering-with-real-time-
applications-5th-edition-charles-k-chui/
RAY
TRACING
GEMS
HIGH-QUALITY AND REAL-TIME RENDERING
WITH DXR AND OTHER APIS
EDITED BY
ERIC HAINES
TOMAS AKENINE-MÖLLER
SECTION EDITORS
ALEXANDER KELLER PETER SHIRLEY
MORGAN MCGUIRE INGO WALD
JACOB MUNKBERG CHRIS WYMAN
MATT PHARR
Ray Tracing Gems
High-Quality and Real-Time Rendering
with DXR and Other APIs
Section Editors
Alexander Keller
Morgan McGuire
Jacob Munkberg
Matt Pharr
Peter Shirley
Ingo Wald
Chris Wyman
Ray Tracing Gems: High-Quality and Real-Time Rendering
with DXR and Other APIs
Edited by Jacob Munkberg
Eric Haines Matt Pharr
Tomas Akenine-Möller Peter Shirley
Section Editors: Ingo Wald
Alexander Keller Chris Wyman
Morgan McGuire
Foreword������������������������������������������������������������������������������������������������� xv
Contributors������������������������������������������������������������������������������������������� xxi
Notation������������������������������������������������������������������������������������������������� xliii
iii
Table of Contents
iv
Table of Contents
v
Table of Contents
vi
Table of Contents
vii
Table of Contents
viii
Table of Contents
ix
Table of Contents
x
Table of Contents
xi
Preface
Ray tracing has finally become a core component of real-time rendering. We
now have consumer GPUs and APIs that accelerate ray tracing, but we also need
algorithms with a focus on making it all run at 60 frames per second or more, while
providing high-quality images for each frame. These methods are what this book is
about.
Prefaces are easy to skip, but we want to make sure you to know two things:
>> Supplementary code and other materials related to this book can be found
linked at http://raytracinggems.com.
The second sounds unexciting, but it means you can freely copy and redistribute
any chapter, or the whole book, as long as you give appropriate credit and
you are not using it for commercial purposes. The specific license is Creative
Commons Attribution 4.0 International License (CC-BY-NC-ND), https://
creativecommons.org/licenses/by-nc-nd/4.0/. We put this into place so that
authors, and everyone else, could disseminate the information in this volume as
quickly as possible.
Thanks are in order, and the support from everyone involved has been one of the
great pleasures of working on this project. When we approached Aaron Lefohn,
David Luebke, Steven Parker, and Bill Dally at NVIDIA with the idea of making a
Gems-style book on ray tracing, they immediately thought that it was a great idea
to put into reality. We thank them for helping make this happen.
We are grateful to Anthony Cascio and Nadeem Mohammad for help with the
website and submissions system, and extra thanks to Nadeem for his contract
negotiations, getting the book to be open access and free in electronic-book form.
The time schedule for this book has been extremely tight, and without the
dedication of NVIDIA’s creative team and the Apress publisher production team,
the publication of this book would have been much delayed. Many on the NVIDIA
creative team generated the Project Sol imagery that graces the cover and the
beginnings of the seven parts. We want to particularly thank Amanda Lam, Rory
Loeb, and T.J. Morales for making all figures in the book have a consistent style,
xiii
Preface
along with providing the book cover design and part introduction layouts. We also
want to thank Dawn Bardon, Nicole Diep, Doug MacMillan, and Will Ramey at
NVIDIA for their administrative support.
Natalie Pao and the production team at Apress have our undying gratitude. They
have labored tirelessly with us to meet our submission deadline, along with
working through innumerable issues along the way.
In addition, we want to thank the following people for putting in extra effort to help
make the book that much better: Pontus Andersson, Andrew Draudt, Aaron Knoll,
Brandon Lloyd, and Adam Marrs.
Major credit goes out to our dream team of section editors, Alexander Keller,
Morgan McGuire, Jacob Munkberg, Matt Pharr, Peter Shirley, Ingo Wald, and Chris
Wyman, for their careful reviewing and editing, and for finding external reviewers
when needed.
Finally, there would be no book without the chapter authors, who have generously
shared their experiences and knowledge with the graphics community. They have
worked hard to improve their chapters in many different ways, often within hours
or minutes of us asking for just one more revision, clarification, or figure. Thanks to
you all!
xiv
Foreword
by Turner Whitted and Martin Stich
Simplicity, parallelism, and accessibility. These are themes that come to mind with
ray tracing. I never thought that ray tracing would provide the ultimate vehicle for
global illumination, but its simplicity continues to make it appealing. Few graphics
rendering algorithms are as easy to visualize, explain, or code. This simplicity
allows a novice programmer to easily render a couple of transparent spheres
and a checkerboard illuminated by point light sources. In modern practice the
implementation of path tracing and other departures from the original algorithm
are a bit more complicated, but they continue to intersect simple straight lines with
whatever lies along their paths.
The term “embarrassingly parallel” was applied to ray tracing long before there
was any reasonable parallel engine on which to run it. Today ray tracing has met its
match in the astonishing parallelism and raw compute power of modern GPUs.
Accessibility has always been an issue for all programmers. Decades ago if a
computer did not do what I wanted it to do, I would walk around behind it and
make minor changes to the circuitry. (I am not joking.) In later years it became
unthinkable to even peer underneath the layers of a graphics API to add
customization. That changed subtly a couple of decades ago with the gradual
expansion of programmable shading. The flexibility of today’s GPUs along with
supporting programming tools provide unprecedented access to the full computing
potential of parallel processing elements.
So how did this all lead to real-time ray tracing? Obviously the challenges of
performance, complexity, and accuracy have not deterred graphics programmers
as they simultaneously advanced quality and speed. Graphics processors have
evolved as well, so that ray tracing is no longer a square peg in a round hole. The
introduction of explicit ray tracing acceleration features into graphics hardware is
a major step toward bringing real-time ray tracing into common usage. Combining
the simplicity and inherent parallelism of ray tracing with the accessibility and
horsepower of modern GPUs brings real-time ray tracing performance within the
reach of every graphics programmer. However, getting a driver’s license isn’t the
same as winning an automobile race. There are techniques to be learned. There is
experience to be shared. As with any discipline, there are tricks of the trade.
xv
Foreword
When those tricks and techniques are shared by the experts who have contributed
to this text, they truly become gems.
—Turner Whitted
December 2018
∗ ∗ ∗
And yet, while progress continues to be made to this day, to a degree we have
reached a limit on what is possible with rasterization-based approaches. In
particular, when it comes to simulating the behavior of light (the essence of
realistic rendering), the improvements have reached a point of diminishing returns.
The reason is that any form of light transport simulation fundamentally requires
an operation that rasterization cannot provide: the ability to ask “what is around
me?” from any given point in the scene. Because this is so essential, most of the
important rasterization techniques invented over the past decades are at their
cores actually clever workarounds for just that limitation. The approach that they
typically take is to pre-generate some data structure containing approximate scene
information and then to perform lookups into that structure during shading.
Shadow maps, baked light maps, screen-space buffers for reflections and ambient
occlusion, light probes, and voxel grids are all examples of such workarounds.
The problem that they have in common is the limited fidelity of the helper data
structures on which they rely. The structures necessarily contain only simplified
representations, as precomputing and storing them at the quantity and resolutions
required for accurate results is infeasible in all but the most trivial scenarios. As a
result, the techniques based on these data structures all have unavoidable failure
cases that lead to obvious rendering artifacts or missing effects altogether. This
xvi
Foreword
is why contact shadows do not look quite right, objects behind the camera are
missing in reflections, indirect lighting detail is too crude, and so on. Furthermore,
manual parameter tuning is usually needed for these techniques to produce their
best results.
Enter ray tracing. Ray tracing is able to solve these cases, elegantly and accurately,
because it provides precisely the basic operation that rasterization techniques
try to emulate: allowing us to issue a query, from anywhere in the scene, into any
direction we like and find out which object was hit where and at what distance.
It can do this by examining actual scene geometry, without being limited to
approximations. As a result, computations based on ray tracing are exact enough
to simulate all kinds of light transport at a very fine level of detail. There is no
substitute for this capability when the goal is photorealism, where we need to
determine the complicated paths along which photons travel through the is why
its introduction to the real-time domain was such a significant step for computer
graphics.
Using ray tracing to generate images is not a new idea, of course. The origins date
back to the 1960s, and applications such as film rendering and design visualization
have been relying on it for decades to produce lifelike results. What is new,
however, is the speed at which rays can be processed on modern systems. Thanks
to dedicated ray tracing silicon, throughput on the recently introduced NVIDIA
Turing GPUs is measured in billions of rays per second, an order of magnitude
improvement over the previous generation. The hardware that enables this level
of performance is called RT Core, a sophisticated unit that took years to research
and develop. RT Cores are tightly coupled with the streaming multiprocessors
(SMs) on the GPU and implement the critical “inner loop” of a ray trace operation:
the traversal of bounding volume hierarchies (BVHs) and intersection testing of
rays against triangles. Performing these computations in specialized circuits not
only executes them much faster than a software implementation could, but also
frees up the generic SM cores to do other work, such as shading, while rays are
processed in parallel. The massive leap in performance achieved through RT
Cores laid the foundation for ray tracing to become feasible in demanding real-time
applications.
xvii
Foreword
The key design decisions that went into these interfaces were driven by the desire
to keep the overall abstraction level low (staying true to the direction of DirectX 12
and Vulkan), while at the same time allowing for future hardware developments
and different vendor implementations. On the host API side, this meant putting
the application in control of aspects such as resource allocations and transfers,
shader compilation, BVH construction, and various forms of synchronization.
Ray generation and BVH construction, which execute on the GPU timeline, are
invoked using command lists to enable multithreaded dispatching and seamless
interleaving of ray tracing work with raster and compute. The concept of shader
tables was specifically developed to provide a lightweight way of associating scene
geometry with shaders and resources, avoiding the need for additional driver-
side data structures that track scene graphs. To GPU device code, ray tracing is
exposed through several new shader stages. These stages provide programmable
hooks at natural points during ray processing—when an intersection between a
ray and the scene occurs, for example. The control flow of a ray tracing dispatch
therefore alternates between programmable stages and fixed-function (potentially
hardware-accelerated) operations such as BVH traversal or shader scheduling.
This is analogous to a traditional graphics pipeline, where programmable shader
execution is interleaved with fixed-function stages like the rasterizer (which itself
can be viewed as a scheduler for fragment shaders). With this model, GPU vendors
have the ability to evolve the fixed-function hardware architecture without breaking
existing APIs.
Fast ray tracing GPUs and APIs are now widely available and have added a
powerful new tool to the graphics programmer’s toolbox. However, by no means
does this imply that real-time graphics is a solved problem. The unforgiving frame
rate requirements of real-time applications translate to ray budgets that are far
too small to naively solve full light transport simulations with brute force. Not
unlike the advances of rasterization tricks over many years, we will see an ongoing
development of clever ray tracing techniques that will narrow the gap between
real-time performance and offline-rendered “final pixel” quality. Some of these
techniques will build on the vast experience and research in the field of non-real-
time production rendering. Others will be unique to the demands of real-time
applications such as game engines. Two great case studies along those lines,
where graphics engineers from Epic, SEED, and NVIDIA have pushed the envelope
in some of the first DXR-based demos, can be found in Chapters 19 and 25.
As someone fortunate enough to have played a role in the creation of NVIDIA’s ray
tracing technology, finally rolling it out in 2018 has been an extremely rewarding
experience. Within a few months, real-time ray tracing went from being a research
niche to a consumer product, complete with vendor-independent API support,
xviii
Foreword
Eric Haines and Tomas Akenine-Möller are graphics veterans whose work has
educated and inspired developers and researchers for decades. With this book,
they focus on the area of ray tracing at just the right time as the technology gathers
unprecedented momentum. Some of the top experts in the field from all over the
industry have shared their knowledge and experience in this volume, creating an
invaluable resource for the community that will have a lasting impact on the future
of graphics.
—Martin Stich
DXR & RTX Raytracing Software Lead, NVIDIA
December 2018
xix
Contributors
Maksim Aizenshtein is a senior system software engineer at
NVIDIA in Helsinki. His current work and research focuses
on real-time ray tracing and modern rendering engine
design. His previous position was 3DMark team lead at UL
Benchmarks. Under his lead, the 3DMark team implemented
ray tracing support with the DirectX Raytracing API, as
well as devised new rendering techniques for real-time ray
tracing. He also led the development and/or contributed to
various benchmarks released by UL Benchmarks. Before
UL Benchmarks, at Biosense-Webster, he was responsible
for GPU-based rendering in new medical imaging systems. Maksim received his BSc in
computer science from Israel’s Institute of Technology in 2011.
xxi
Contributors
xxiii
Contributors
xxiv
Contributors
xxv
Contributors
xxvi
Contributors
xxvii
Contributors
xxviii
Contributors
xxix
Contributors
xxx
Another random document with
no related content on Scribd:
Gelsi le si fece incontro e le parlò piano. La Giuseppina s’era
ricomposta, senza però allontanarsi dal letto; un istinto sicuro
l’avvertiva che quello era il solo asilo inviolabile per lei, e che
nonostante la protezione di Raimondi, l’indulgenza del medico, la
simpatia della servitù, se si moveva dal suo posto non avrebbe più
potuto tornarvi.
S’intese la voce della baronessa. — Come? Ha scritto e non è lecito
saper che cosa ha scritto?
— Oh — rispose il medico — per quello che può aver scritto!... Ha
fatto pochi segni confusi.... Del resto diede egli stesso la carta a....
quella giovine....
— Quella giovine ne capì il senso.... Doveva comunicarlo....
— Perdoni.... Secondo i casi.... In ogni modo....
E l’onesto dottore, animato da uno spirito conciliativo, si accostò alla
Giuseppina.
Ma ella, che aveva côlto una parte della conversazione era già sulle
difese.
— Quella carta?... No, dottore.... non la dò a nessuno.... Le giuro per
quanto ho di più caro che non c’è nulla che possa interessar
nessuno.... altri che me....
E cedendo all’affanno che la soverchiava, continuò: — Dio mio, Dio
mio.... Mi lascino stare.... che male faccio?... Per che ragione
credono ch’io sia qui?... Ho delle colpe, ho dei peccati tanti.... ma
questi sospetti non li merito.... Oh se quel poveretto potesse
parlare!... Mi difenda lei, dottore, lei ch’è buono....
Gelsi le fece segno di quietarsi, di tacere, e si accinse a calmar gli
spiriti belligeri della baronessa. Vedeva bene che non era lecito
insistere.... non c’era stata frode, non c’era stato artifizio, non c’era
stata violenza.... egli n’era buon testimonio, e il foglio si trovava in
possesso della signora.... di quella giovine, per manifesto desiderio
del cavaliere Achille.... S’era un segreto ch’ella voleva custodire
nessuno aveva il diritto di strapparglielo.... Egli l’intendeva
perfettamente, certe cose urtavano la suscettività della baronessa;....
ma come si fa?... A questo mondo bisogna tante volte sacrificarsi
per evitar guai maggiori.... e in un momento simile....
La savia perorazione fu troncata da un gesto dell’infermiere.
Le condizioni del malato peggioravano di minuto in minuto. Al
grande eccitamento di prima succedeva una grande prostrazione di
forze, e i polsi declinavano rapidamente. Ciò era stato previsto fino a
un certo punto dal dottore Gelsi; tuttavia egli supponeva la reazione
meno subitanea, meno precipitosa. Così pure non illudendosi
sull’esito finale, egli non aveva creduto a una catastrofe imminente.
Adesso invece si presentavano sintomi tali da giustificare i più gravi
pronostici, e il medico, dopo aver fatto tutto ciò che la sua arte gli
suggeriva, stimò suo dovere di metter sull’avviso la baronessa
Eleonora e gli altri parenti ch’erano alzati.
La Giuseppina non aveva bisogno d’essere avvertita da alcuno. Ella
vedeva, ella sentiva spegnersi a oncia a oncia quella cara vita per la
quale avrebbe dato con entusiasmo la vita propria.
VIII.
IX.
· · · · · · · · · · · · · · · ·
I.
II.
Dopo le sette non venne più nessuno e il signor Barnaba poteva
ripromettersi qualche ora di quiete e riposare alquanto dalle sue
gravi fatiche. Rientrato in portineria, egli non era più l’uomo dalla
faccia decorosamente ossequiosa che i padroni e i visitatori erano
avvezzi a vedere; come per incanto la sua fronte s’aggrinziva, le sue
sopracciglia si corrugavano, le sue labbra prendevano
un’espressione amara e disgustata, e la sua voce di basso profondo
acquistava delle note stridule ed aspre. Gli è che il signor Barnaba,
intimamente convinto che la società non rendesse giustizia ai suoi
meriti, accumulava nella giornata una buona dose di fiele, ch’egli poi
distribuiva in equa misura tra quelli che avevano la fortuna di
avvicinarlo nell’intimità. Non che fosse proprio cattivo il signor
Barnaba, ma era un povero cervello in cui le più matte idee
cozzavano insieme. A volte pareva più aristocratico d’un
Montmorency, a volte, specie dopo la lettura dei giornali, diventava
giacobino e comunardo. In tutt’e due queste fasi, sua moglie, la mite
e timida siora Marianna, aveva le sue grandi tribolazioni. Perchè
quando suo marito faceva il demagogo ella temeva che le pazze
sfuriate di lui arrivassero all’orecchio dei padroni; quando invece egli
s’atteggiava a conservatore, a persona rispettosa delle regole
gerarchiche, ell’era sicura ch’egli avrebbe finito col trovar l’equilibrio
del suo spirito applicando una sua massima favorita: — La
subordinazione è giusta, ma bisogna rifarsi sui più deboli delle
umiliazioni che ci tocca subir dai più forti.
E il signor Barnaba si rifaceva particolarmente sulla moglie e sulla
Ninetta, ch’era quella bimba di cui abbiamo parlato prima. La Ninetta
non era nè figlia nè parente del signor Barnaba e della siora
Marianna: era una povera orfana, la quale veniva di mattina e di sera
a prestar dei piccoli servigi in portineria, ricevendone in compenso la
colazione e il desinare ch’ella portava nel suo tugurio e divideva con
uno zio, abile operaio, ma giuocatore e beone, il quale l’avrebbe
cacciata di casa s’ella gli si fosse presentata davanti con le mani
vuote. Non era una vita allegra quella della Ninetta, palleggiata fra la
brutalità dello zio e la pedanteria meticolosa e loquace del signor
Barnaba, ma ell’aveva indole buona e tranquilla e sopportava la sua
sorte disgraziata con infinita pazienza. Del resto, i suoi umili uffici al
palazzo Costi, oltre ai vantaggi economici le procuravano anche
qualche momento di svago. Già le tre camerette della portineria,
sebben piccole e scure, erano una reggia al paragone di quella
specie di magazzino umido ov’ella passava la notte. E poi c’era la
distrazione della gente che veniva a far visita, dei barcaiuoli che
apparecchiavano o sparecchiavano la gondola, dei padroni e delle
padroncine che uscivano di casa o rientravano lasciando dietro di sè
quel profumo acuto che hanno i signori, come la Ninetta soleva dire;
senza tener conto delle volte in cui per risparmiar la fatica al signor
Barnaba la bimba saliva lei stessa le scale e portava nel piano nobile
un’imbasciata, un pacco, una lettera. Allora, se le riusciva di dare
una capatina nelle stanze, ella ridiscendeva rossa rossa in viso con
l’impressione di esser stata in un soggiorno di fate.
III.
Quella sera il signor Barnaba era più bisbetico del consueto. Egli
non sapeva capacitarsi che la vigilia di Natale un uomo suo pari,
anzichè goder la sua piena libertà e banchettare gli amici, fosse
costretto a misurar per lungo e per largo l’androne di un palazzo e
ad aprir la porta a una ventina di parassiti d’ogni età e sesso. Il
mondo era proprio fatto male, e ci voleva una rivoluzione per
rinnovarlo ab imis fundamentis. — Per fortuna il 1889 non è lontano
e quello sarà un gran centenario.
La siora Marianna sbarrò tanto d’occhi, e il signor Barnaba
soggiunse con disprezzo: — Ecco ciò che vuol dire non avere
istruzione, non aver letto nulla.... E doveva toccare a me un’oca
simile!.... Il 1889 è il centenario del 1789.... l’anno della grande
Rivoluzione francese, quando s’è tagliata la testa ai re, ai nobili, ai
preti....
— Zitto! — gridò la siora Marianna spaventata.
— Ma che zitto! — replicò il consorte. — Qui nessuno mi sente.... E
se anche mi sentissero e volessero far i gradassi... sono un uomo
capace di anticipar di qualche anno il centenario, io.... E il primo che
deve pagarmela è il signor Schmaus, il mastro di casa.... quel
tedesco petulante che cerca il pelo nell’uovo.
A questo punto, nello spirito del signor Barnaba accadde
un’improvvisa reazione in senso conservativo, ed egli trovò che,
quantunque ingiustamente, il signor Schmaus era suo superiore in
ordine gerarchico e non aveva tutti i torti di voler rifarsi sopra di lui
delle risciacquate di capo prese dai padroni. Ma, come il solito,
l’indulgenza verso i superiori rese il signor Barnaba più aspro
cogl’inferiori. Se il signor Schmaus si rifaceva sopra di lui, il signor
Barnaba aveva ben il diritto di rifarsi su qualchedun altro.... — È
come nelle fabbriche, — egli diceva fra sè con bella similitudine. —
Le pietre che stanno in alto pesano sulle pietre che stanno abbasso.
— In omaggio al quale principio, egli strapazzò la moglie, strapazzò
la Ninetta, e finalmente, guardando di punto in bianco l’orologio,
ordinò alla fanciulla di fare un salto al chiosco più vicino per
prendergli il Secolo che doveva essere arrivato.
La pietosa siora Marianna arrischiò un ma....
— Che c’è? — ruggì il signor Barnaba.
— Niente.... niente.... Però la Ninetta ha da andar presto a casa
sua.... e con questa neve... farle fare una strada di più....
Il marito diede un pugno sulla tavola. — Ah vorrei vedere anche
questa!... Per un po’ di neve.... Come se fossero sassi.... Via,
signora delicatina.... si metta il suo scialle e non perda tempo....
Marsch!
La siora Marianna non fiatava più, ma guardava la Ninetta in un
certo modo come a dire: — Abbi pazienza. È una bestia e non
intende ragione.
E la Ninetta ubbidì in silenzio. Staccò da un chiodo lo scialletto di
lana che le copriva appena le spalle, guardò con un sospiro le sue
scarpe rattacconate, si fece dare un soldo dal signor Barnaba,
aperse a fatica il portone e uscì in istrada. Nevicava sempre,
nevicava fitto, e il vento s’ingolfava nella calle con un urlo lungo,
sinistro, somigliante a un gemito umano. Mal difesa dalla sua
vesticciuola leggera, la povera fanciulla sentiva il freddo penetrarle
nell’ossa, e studiava il passo segnando una piccola orma sul
candido lenzuolo steso per terra.
La distanza dal palazzo Costi al primo chiosco di giornali non era
mica grande, ma quella sera, con quel tempo, con quelle vie
solitarie, pareva alla Ninetta di dover percorrere un deserto
immenso. Lungo tutta la via ella incontrò appena un paio di persone,
imbacuccate nei loro cappotti, bianche e mute come fantasmi; solo
attraversando un Campielo chiamato Campielo dei morti (ce n’è più
d’uno di questi Campieli in Venezia e il loro nome deriva dall’esservi
stati secoli addietro in quei luoghi dei piccoli cimiteri) la ferì il
miagolio lamentevole d’un gattino perduto in mezzo alla neve.
Quando poi credeva di esser giunta alla meta, le toccò un’amara
delusione. Il chiosco era chiuso, forse a cagione del tempo, forse a
cagione della festa. Che partito prendere? Tornarsene indietro a
mani vuote, o andare in cerca d’un altro chiosco a rischio di trovar
chiuso anche quello? Però in quel punto ella sentì gridare in fondo
alla strada: il Secolo, appena arrivato il Secolo. — Secolo, — ella
gridò ripetutamente, correndo dietro al rivenditore. Ma questi non la
intese o non le badò, nè a lei riuscì di raggiungerlo, finchè un
passante impietosito che aveva la fortuna di possedere un vocione
non ebbe tuonato due volte: — Ehi, del Secolo, siete sordo? — Il
rivenditore si fermò con malagrazia, prese il soldo dalla mano della
Ninetta, tirò fuori di sotto il soprabito un numero del giornale, e dopo
averlo dato alla fanciulla si allontanò rapidamente ripetendo come un
pappagallo: Appena arrivato il Secolo. Con molte notizie il Secolo.
La Ninetta rifece il cammino di prima senza trovar anima viva, senza
udire una voce umana che rompesse il silenzio; bensì nel Campielo
dei morti suonava ancora, ma più rauco, più flebile, il miagolìo del
povero gattino smarrito, e una forma nera si dibatteva nella neve.
IV.
V.
I.