-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathindex_rtr2.html
1729 lines (1686 loc) · 166 KB
/
index_rtr2.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="description" content="Real-Time Rendering Resources">
<meta name="keywords" content="computer graphics, real-time, real time, rendering, interactive, accelerator, hardware, OpenGL, DirectX, Direct3D">
<title>Real-Time Rendering Resources</title>
<link rel="icon" href="http://tog.acm.org/resources/RTR/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="http://tog.acm.org/resources/RTR/favicon.ico" type="image/x-icon">
</head>
<body bgcolor="#FFFFFF" link="#2D4280" vlink="#9A6D03" alink="#2D92A0" background="background.jpg">
<font face="LUCIDA, ARIAL, HELVETICA" color="#0D3256" size="+3"><h1>Real-Time
Rendering</h1>
</font> <font face="LUCIDA, ARIAL, HELVETICA" color="#0D3256">
<I>Last changed: November 18, 2007</I>
<p>
<p>This is the Web site for the book <font size="+1"><i><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1568811829?tag=somebooksilike">Real-Time
Rendering</a></i></font>, by <a href="http://cs.lth.se/tomas_akenine-moller">Tomas
Akenine-Möller</a> and <a href="http://www.erichaines.com/">Eric
Haines</a>, ~880 pages, from <a href="http://www.akpeters.com">A.K. Peters Ltd.</a>,
2nd edition, ISBN 1568811829<b>, </b>list price $64.
<table align="right" border="0" width="200">
<tr align="center" valign="top">
<td rowspan="3"> </td>
<td> <a href="rtr2ed.jpg"><img border="1" src="rtr2ed_thumb.jpg" alt="2nd ed. cover image" width=156 height=237></a>
</td>
</tr>
</table>
<p>Ordering information and excerpts from the book <a href="book.html">can be found here</a>. The rest of this page is supplemental material and links.
<p>Book related resources include:
<ul>
<li><font color="#c850c8">Tomas' <B><a href="http://www.cs.lth.se/home/Tomas_Akenine_Moller/RTR/RTRslides.zip">Powerpoint Slides</a></B> for a semester's course derived from the book.</font>
<li>The <B><a href=corrigenda.html">Corrections</a></B>
area (for first and second editions).
<li>The <a href="refs2.html"><b>Bibliography</b></a> of the book, with hyperlinked
resources (the <a href="refs1.html">First Edition</a> bibliography is also
available).
<li>A <a href="portal/"><b>Portal Page</b></a> for real-time web resources.
<li>The <a href="http://www.realtimerendering.com/int/"><b>Object/Object Intersection
page</b></a> for information on 3D object intersections.
<li>Our <B><a href="books.html">book recommendation list</a></B> for real-time
computer graphics; we would appreciate your comments.
<li><font color="#c850c8">A Google map of <a href="http://www.realtimerendering.com/gd.html">the top 20 game publishers of 2006</a></font>.
<li><B><a href="http://www.realtimerendering.com/fgl/">Fantasy Graphics League</a></B> results
- once a yearly contest, based on choosing the best graphics lab for SIGGRAPH.
</ul>
<p>Here are the book chapters and links to resources:
<p>
<table border=0 cellspacing=0 cellpadding=2 width="100%" >
<tr>
<td> <a href="#intro">Introduction </a> (<a href="#books">Recent Books</a>)
</td>
<td> <a href="#rendpipe">Rendering Pipeline </a> </td>
<td> <a href="#xforms">Transforms </a> </td>
</tr>
<tr>
<td> <a href="#visapp">Visual Appearance </a> </td>
<td> <a href="#texture">Texturing </a> </td>
<td> <a href="#specfx">Advanced Lighting and Shading</a> </td>
</tr>
<tr>
<td> <a href="#npr">Non-Photorealistic Rendering</a> </td>
<td> <a href="#ibr">Image-Based Rendering</a> </td>
<td> <a href="#speed">Acceleration Algorithms</a> </td>
</tr>
<tr>
<td> <a href="#pipeopt">Pipeline Optimization</a> </td>
<td> <a href="#polytech">Polygonal Techniques</a> </td>
<td> <a href="#curves">Curves and Curved Surfaces</a> </td>
</tr>
<tr>
<td> <a href="#isect">Intersection Test Methods</a> </td>
<td> <a href="#colldet">Collision Detection</a></td>
<td> <a href="#gfxhw">Graphics Hardware</a> (<a href="#ihv">IHVs and News</a>)
</td>
</tr>
<tr>
<td> <a href="#future">The Future</a> (<a href="#faq">FAQs</a>) </td>
<td> <a href="#opengl">(OpenGL)</a> </td>
<td> <a href="#directx">(DirectX)</a> </td>
</tr>
<tr>
<td> <a href="#linalg">Linear Algebra</a> </td>
<td> <a href="#trigo">Trigonometry</a> </td>
<td> <a href="#refs">Bibliography</a> </td>
</tr>
</table>
<p>This website has two locations, identical in content, which are worth bookmarking in case one server
becomes unavailable: <a href="http://tog.acm.org/resources/RTR/">http://tog.acm.org/resources/RTR</a>
and <a href="http://www.realtimerendering.com/">http://www.realtimerendering.com</a>.
<p>
Thanks to all who bought this and other books by clicking through
to <a href="http://www.amazon.com/exec/obidos/tg/detail/-/1568811829?tag=somebooksilike">Amazon</a>
and <a href="http://bn.bfast.com/booklink/click?sourceid=9446116&ISBN=1568811012">B&N</a>;
money earned by doing so has paid for this site's costs for the next few years.
<p> Since we are constantly adding new links (and deleting stale ones), <font color="#C850C8">the
newest additions are shown in this color</font>, <font color="#A043A0">fading
to this color</font>, <font color="#7A357A">then this color</font>, then to
black, over a period of a few months.
<hr>
<a name="intro">
<h2> Introduction</h2>
</a>
<p>Our <a href="refs2.html">Bibliography page</a> has links to many of the references
in our book. Papers listed there will not also be listed on this page, unless
the article is particularly noteworthy.</p> <font color="#c850c8">If you are interested in slides based on our book
that could form the basis for course lectures, visit <a href="http://www.ce.chalmers.se/edu/course/EDA425/index.shtml">Tomas' course site</a>. Do not be daunted
by the Swedish there, just scroll down to the "Föreläsning" area; the PDFs linked there are in English. Better yet, Tomas' <a href="http://www.cs.lth.se/home/Tomas_Akenine_Moller/RTR/RTRslides.zip">powerpoint slides</a> are now available.</font>
<p><font color="#c850c8">Eric has an article, <a href="http://www.erichaines.com/AnIntroductoryTourOfInteractiveRendering.pdf">"An Introductory Tour of Interactive Rendering"</a>, from IEEE CG&A, Jan/Feb 2006.</font>
<p>There are many graphics related links pages, including ACM TOG's <a href="http://tog.acm.org/Software.html">software</a>
and <a href="http://tog.acm.org/BibLook.html">literature</a> areas, <a href="http://www.technomagi.com/links/graphics.html">Technomagi's</a>, and <a href="http://www.zen-x.net/Links.htm">Tomas Arce's</a>
(also see his <a href="http://www.zen-x.net/">homepage</a>). <a href="http://graphics.csail.mit.edu/~fredo/Book/index.html">Frédo
Durand's</a> page has links to researchers, labs, conferences and publications.
<a href="http://www2.iro.umontreal.ca/%7Eratib/code/">Karim Ratib's page</a>
has links to older research literature in his Applications/Computer Graphics/Publications
subdirectory. We have a <a href="portal/index.html">portal page</a> that summarizes
popular and useful links. <a href="http://www2.iro.umontreal.ca/%7Eratib/code/"></a>
</p>
<p> The <a href="http://www.cs.brown.edu/exploratory/">Exploratory</a> at Brown
University has a wide range of <a href="http://www.cs.brown.edu/exploratories/freeSoftware/catalogs/repositoryApplets.html">computer
graphics applets</a>. These cover areas such as linear algebra, color science,
image processing, and hierarchy of transformations. Patrick Min at Princeton
has also made <a href="http://www.cs.princeton.edu/~min/cs426/applets.html">Java
applets</a> to aid in understanding computer graphics concepts.
<p><a href="http://www.education.siggraph.org/materials/HyperGraph/hypergraph.htm">HyperGraph</a>
covers the basics on many topics within computer graphics. A source for quick
summaries of various graphics algorithms is <a href="http://www.geocities.com/ResearchTriangle/Lab/1767/pol.html">The
White Flame Page of Learning</a>. <a href="http://www.math.mcgill.ca/~loisel/">Zed3d</a>,
an entire book on introductory and intermediate graphics (with code), is available
online for free. It is 5 years old and not maintained by the author, who notes
it has "many many errors", but it does give a different view of the
world (and the price is right).
<a name="books">
<h3>Recent Books</h3>
</a><font color="#7a357a">One good source for books on interactive 3D graphics is the database at <a href="http://www.3dlinks.com/3DBooks.cfm?subcategoryid=35">3D Links</a>.</font>
<p><font color="#a043a0">Looking at Amazon's best-selling <a href="http://www.amazon.com/exec/obidos/tg/browse/-/3922/1/002-8174022-0714455?rank=%2Bsalesrank&submit.x=6&submit.y=7&submit=Go%21?tag=somebooksilike">DirectX</a> and <a href="http://www.amazon.com/exec/obidos/tg/browse/-/3935/1/002-8174022-0714455?rank=%2Bsalesrank&submit.x=11&submit.y=7&submit=Go%21?tag=somebooksilike">OpenGL</a> book lists can be helpful.</font>
<p>
Some books which have come out in the past few years and are relevant to the field:
<ul>
<li><font color="#c850c8"><a href="http://www.amazon.com/Mobile-3D-Graphics-Kaufmann-Computer/dp/0123737273?tag=somebooksilike">Mobile 3D Graphics: with OpenGL ES and M3G</a>, Kari Pulli, Tomi Aarnio, Ville Miettinen, Kimmo Roimela, Jani Vaarala, November 2007. <a href="http://www.graphicsformasses.com">More information.</a></font>
<li><font color="#c850c8"><a href="http://www.amazon.com/Real-Time-Cameras-Kaufmann-Interactive-Technology/dp/0123116341?tag=somebooksilike">Real-Time Cameras</a>, Mark Haigh-Hutchinson, 2008.</font>
<li><font color="#c850c8"><a href="http://www.amazon.com/GPU-Gems-3-Hubert-Nguyen/dp/0321515269?tag=somebooksilike">GPU Gems 3</a>, edited by Hubert Nguyen, August 2007.</font>
<li><font color="#c850c8"><a href="http://www.amazon.com/Color-Imaging-Fundamentals-Erik-Reinhard/dp/1568813449?tag=somebooksilike">Color Imaging: Fundamentals and Applications</a>, by Erik Reinhard et al., August 2007.</font>
<li><font color="#c850c8"><a href="http://www.amazon.com/Beginning-DirectX-10-Game-Programming/dp/1598633619?tag=somebooksilike">Beginning DirectX 10 Game Programming</a>, by Wendy Jones, July 2007.</font>
<li><font color="#c850c8"><a href="http://www.amazon.com/Ultimate-Engine-Architecture-Charles-Development/dp/1584504730?tag=somebooksilike">Ultimate 3D Game Engine Design & Architecture</a>, by Allen Sherrod, December 2006.</font>
<li><font color="#c850c8"><a href="http://www.amazon.com/gp/product/1568812876?tag=somebooksilike">Collada: Sailing the Gulf of 3d Digital Content Creation</a>, by Remi Arnaud and Mark C. Barnes, August 2006.</font>
<li><font color="#c850c8"><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1568812663?tag=somebooksilike">Real-time Volume Graphics</a>, by Klaus Engel, Markus Hadwiger, Joe M. Kniss, Christof Rezk-Salama, and Daniel Weiskopf, July 2006.
(<a href="http://www.real-time-volume-graphics.org/">book information page</a>, <a href="http://www.vrvis.at/via/resources/course-volgraphics-2004/">SIGGRAPH 2004 course notes</a>)</font>
<li><font color="#c850c8"><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1568812841?tag=somebooksilike">The Game Programmer's Guide to Torque</a>, by Edward F. Maurina III, March 2006.</font>
<li><font color="#c850c8"><a href="http://www.amazon.com/Introduction-Game-Programming-Direct-9-0c/dp/1598220160?tag=somebooksilike">Introduction to 3D Game Programming with Direct X 9.0c: A Shader Approach</a>, by Frank Luna, June 2006.</font>
<li><a href="http://www.amazon.com/gp/product/1584504501?tag=somebooksilike">Game Programming Gems 6</a>, edited by Mike Dickheiser, March 2006. A little more info <a href="http://www.charlesriver.com/Books/BookDetail.aspx?productID=124038">here</a>.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321334892?tag=somebooksilike">OpenGL Shading Language, 2nd Edition</a> ("The Orange Book"), by Randi Rost et alia, January 2006.
<li><a href="http://www.amazon.com/High-Dynamic-Range-Imaging-Acquisition/dp/0125852630?tag=somebooksilike">High Dynamic Range Imaging: Acquisition, Display, and Image-Based Lighting</a>, by Erik Reinhard et al., 2006.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1584503572?tag=somebooksilike">ShaderX<sup>4</sup></a>, edited by Wolfgang Engel et alia, November 2005 (more information <a href="http://www.shaderx4.com/">here</a>).
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1592008305?tag=somebooksilike">More OpenGL Game Programming</a>, by Dave Astle and Kevin Hawkins, October 2005 (<a href="http://glbook.gamedev.net/moglgp/">table of contents</a>).
<li><a href="http://www.amazon.com/gp/product/156881240X?tag=somebooksilike">Advanced Game Development with Programmable Graphics Hardware</a>, by Alan Watt and Fabio Policarpo, August 2005.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1568812698?tag=somebooksilike">Fundamentals
of Computer Graphics, 2nd Edition</a>, by Peter Shirley et alia, July 2005.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/012553180X?tag=somebooksilike">Physically Based Rendering</a>, by Matt Pharr and Greg Humphreys, August 2005 (<a href="http://pbrt.org/">more information</a>, including a sample chapter).
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321335732?tag=somebooksilike">OpenGL Programming Guide, Version 2 (5th Edition)</a> ("The Red Book"), by the OpenGL Architecture Review Board, August 2005.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1592006507?tag=somebooksilike">Machinima: Making Animated Movies in 3D Virtual Environments</a>, by Dave Morris, Matt Kelland, Dave Lloyd, June 2005.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1584503521?tag=somebooksilike">Game Programming Gems 5</a>, edited by Kim Pallister, March 2005. A little more info <a href="http://www.charlesriver.com/titles/gamegems5.html">here</a>.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321335597?tag=somebooksilike">GPU Gems II: Techniques for Graphics and Compute Intensive Programming</a>, edited by Matt Pharr (<a href="http://developer.nvidia.com/object/gpu_gems_2_home.html">homepage</a> here)
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1558606599?tag=somebooksilike">
Advanced Graphics Programming Using OpenGL</a> by Tom McReynolds and David Blythe, Feb. 2005 (more information <a href="http://books.elsevier.com/us/mk/us/subindex.asp?maintarget=&isbn=1558606599">here</a>)
<li><a href="http://www.mcshaffry.com/GameCode/">Game Coding Complete</a>,
by Mike McShaffry, January 2005 (<a href="http://www.amazon.com/exec/obidos/tg/detail/-/1932111913?tag=somebooksilike">Amazon link</a>).
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1558607323?tag=somebooksilike">Real-Time Collision Detection</a>, by Christer Ericson, Dec. 2004 (the <a href="http://realtimecollisiondetection.net/">companion website</a> has additional information).
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1568812345?tag=somebooksilike">Practical Linear Algebra: A Geometry Toolbox</a>, by Gerald Farin and Dianne Hansford, Dec. 2004 (<a href="http://vidya.prism.asu.edu/~farin/pla/">Sample chapters</a>).
<li><a href="http://www.charlesriver.com/Books/BookDetail.aspx?productID=91312">Programming a Multiplayer FPS in DirectX</a>, by Vaughan Young, Dec. 2004 (<a href="http://www.gamasutra.com/features/20050411/young_01.shtml">excerpt</a>, <a href="http://www.amazon.com/exec/obidos/tg/detail/-/1584503637?tag=somebooksilike">Amazon link</a>)
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/012229064X?tag=somebooksilike">3D Game Engine Architecture</a>, by Dave Eberly, Dec. 2004 (<a href="http://www.geometrictools.com/Books.html">companion web site</a>)
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1584503572?tag=somebooksilike">ShaderX<sup>3</sup></a>, edited by Wolfgang Engel et alia, November 2004 (more information <a href="http://www.shaderx3.com/">here</a>).
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1556222920?tag=somebooksilike">Advanced Lighting and Materials With Shaders</a>,
by Kelly Dempski and Emmanuel Viale, November 2004 (<a href="http://www.advancedrenderingtechniques.com/">website here</a>).
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1592003702?tag=somebooksilike">OpenGL ES Game Development</a>,
by Dave Astle and Dave Durnil, September 2004 (a little more info <a href="http://www.courseptr.com/ptr_detail.cfm?group=Game%20Development&subcat=Wireless&isbn=1-59200-370-2">here</a>).
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1568812299/">Metaprogramming GPUs with Sh</a>, by Michael McCool and Stefanus Du Toit, August 2004.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1932111859?tag=somebooksilike">3D Game-Based Filmmaking: The Art of Machinima</a>, by Paul Marino, July 2004.
<li><a href="http://www.amazon.com/exec/obidos/ASIN/0672326019?tag=somebooksilike">OpenGL
SuperBible, Third Edition</a></I>, by Richard S. Wright Jr., Benjamin Lipchak, Sams
Press, 2004.
<li><a href="http://www.evenlakestudios.com/books/">Demoscene: the art of real-time</a>, edited by Lassi Tasajärvi, June 2004 (U.S. residents buy it <a href="http://www.fusecon.com/products/demobooks/">here</a>).
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1592000924?tag=somebooksilike">Shaders for Game Programmers and Artists</a>
by Sebastien St-Laurent, May 2004.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1592003494?tag=somebooksilike">Beginning DirectX 9</a>, by Wendy Jones, April 2004. Gamasutra review <a href="http://www.gamasutra.com/columns/books/20040616/index.shtml">here</a>.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321237625?tag=somebooksilike">OpenGL: A Primer</a>, by Edward Angel, April 2004.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1584502959?tag=somebooksilike">Game Programming Gems 4</a>, edited by Andrew Kirmse, March 2004. A little more info <a href="http://www.charlesriver.com/titles/gamegems4.html">here</a>.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0735713901/">Beginning Math and Physics for Game Programmers</a>, by Wendy Stahler, March 2004.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1592003699?tag=somebooksilike">Beginning OpenGL Game Programming</a>, by Dave Astle and Kevin Hawkins, March 2004 (<a href="http://glbook.gamedev.net/boglgp/">table of contents</a> and <a href="http://www.gamasutra.com/features/20040817/lloyd_01.shtml">review</a>).
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/155860863X?tag=somebooksilike">Essential Mathematics for Games and Interactive Applications</a>, Jim Van Verth and Lars Bishop, March 2004
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321228324?tag=somebooksilike">GPU Gems: Programming Techniques, Tips, and Tricks for Real-Time Graphics</a>, edited by Randima Fernando, March 2004 (excerpts and more at <a href="http://developer.nvidia.com/object/gpu_gems_home.html">NVIDIA's site</a>)
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1558607404?tag=somebooksilike">Game
Physics</a>, by Dave Eberly, Dec. 2003 (<a href="http://www.geometrictools.com/Books.html">companion web site</a>)
<li><a href="http://www.terathon.com/books/mathgames2.html">Mathematics for 3D Game Programming and Computer Graphics, Second Edition,</a> Eric Lengyel, Nov. 2003. (<a href="http://www.amazon.com/exec/obidos/tg/detail/-/1584502770?tag=somebooksilike">Amazon link</a>)
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0130153907?tag=somebooksilike">Computer Graphics with OpenGL (3rd Edition)</a>, by Donald Hearn and M. Pauline Baker, August 2003.
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0521821037?tag=somebooksilike">3D Computer Graphics: A Mathematical Introduction with OpenGL</a>,
by Samuel R. Buss, June 2003 (<a href="http://uk.cambridge.org/computerscience/buss/">sample code, etc.</a>)
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1558605940?tag=somebooksilike">Geometric
Tools for Computer Graphics</a>, by Philip Schneider and David Eberly, Sept.
2002 (<a href="http://www.geometrictools.com/Books.html">companion web site</a>)
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1558608605?tag=somebooksilike">Jim Blinn's Corner: Notation, Notation, Notation</a>, by Jim Blinn, July 2002
<li><a href="http://www.amazon.com/exec/obidos/tg/detail/-/3540656200?tag=somebooksilike">Computational
Geometry: Algorithms and Applications</a>, by deBerg, Van Kreveld, Overmars,
and Schwarzkopf, 2000
</ul>
We also maintain a <a href="books.html">recommended book list</a> (somewhat dated at this point), with brief
reviews. The <a href="http://www.geometryalgorithms.com/">Dan Sunday's Geometry Algorithms site</a> gives <a href="http://www.geometryalgorithms.com/books_top_10.htm">a good list</a> of some of the best books on, what else, geometry algorithms, as well as a <a href="http://www.geometryalgorithms.com/books.htm#BestBuys">best buys list</a>. They also highly recommend the new <a href="http://www.amazon.com/exec/obidos/tg/detail/-/1558605940?tag=somebooksilike">Schneider and Eberly book</a> (as do we).
<a name="rendpipe">
<h2> Rendering Pipeline</h2>
</a>
<p><font color="#C850C8">Alexey Busygin tracks a wide range of <a href="http://www.devmaster.net/engines/">current 3D engines</a>.</font> Karsten Isakovic maintains an all-encompassing <a href="http://cg.cs.tu-berlin.de/~ki/engines.html">3D
engines list</a>, many with source code available (though not updated since
mid-2000). <a href="http://www.garagegames.com/index.php?sec=mg&mod=resource&page=category&qid=80">GarageGames</a>
has a newer list. One free source engine worth pointing
out is <a href="http://www.mesa3d.org/">Mesa</a>, an OpenGL clone which runs
on almost everything and even has some accelerator support. SGI themselves have
released a <a href="http://oss.sgi.com/projects/ogl-sample/">sample OpenGL implementation</a>
to the open source community, to <a href="http://www.sgi.com/newsroom/press_releases/2000/january/ogl_sample.html">encourage
Linux driver creation</a>. </p>
<p>The <a href="http://msdn.microsoft.com/library/techart/d3dxfrm6.htm">Direct3D
pipeline</a> is detailed online, with supporting equations. Similar treatment
for OpenGL can be found in the <a href="http://www.gamedev.net/download/redbook.pdf">online
version of the Red Book</a>, in Chapter 3, Viewing.
<p><a href="http://www.doomworld.com/">Doom</a> is the <a href="http://www.cs.unm.edu/~dlchao/flake/doom/">3D
killer app</a> for system administration. Source code for <a href="http://www.idsoftware.com/games/wolfenstein/rtcw/">Castle
Wolfenstein 3D</a>, <a href="http://www.doomworld.com/">DOOM</a>, <a href="http://www.idsoftware.com/games/hexen/hexen2/">Heretic and Hexen</a>, <font color="#c850c8">and <a href="http://www.idsoftware.com/business/techdownloads/">Quakes I through III</a></font> are
available for download under GPL. <font color="#c850c8">There are also <a href="http://www.doomworld.com/classicdoom/ports/">ports of DOOM</a> to a huge number of platforms.</font> More coolness: the <a href="http://www.theoperative.com/">source
code for "No One Lives Forever"</a> has been released to the public.</p>
<p><font color="#c850c8">Mike McShaffry has <a href="http://www.mcshaffry.com/GameCode/">game code related to his book</a> free to download and reuse under Creative Commons.</font>
<p> <a href="http://genesis3d.com/">Genesis3D</a> is a commercial rendering engine
that has an open source license. <a href="http://www.wildtangent.com/">WildTangent</a>
has purchased Genesis3D and developed an interesting system which runs DirectX
in a browser window, and is developing an inexpensive game development platform.
Sourceforge has <a href="http://sourceforge.net/softwaremap/trove_list.php?form_cat=110">any number of renderers</a> (also check <a href="http://3d.foundries.sourceforge.net/">here</a>), such as <a href="http://sourceforge.net/projects/orion3d/">Orion3D</a>.
The portable <a href="http://g3d-cpp.sourceforge.net/">G3D C++ library</a>
gives many tools for vector/quaternion/matrix math, collision detection, shader programming, and
other common graphics tasks. For fast, cross-platform access to the frame-buffer, try
the open-source <a href="http://www.libsdl.org/index.php">SDL</a> (Simple DirectMedia
Layer); Marius Andra has <a href="http://cone3d.gamedev.net/cgi-bin/index.pl?page=tutorials/gfxsdl/index">some
tutorials</a> about it. <a href="http://www.renderware.com/">RenderWare</a>, <a href="http://www.unrealtechnology.com/html/technology/ue30.shtml">Unreal
engine</a>, <a href="http://www.lithtech.com/">LithTech engine</a>, <a href="http://www.idsoftware.com/business">Quake</a>, and <a href="http://members.shaw.ca/merconconsulting/Lugh3D.htm">Lugh3D
engines</a> are some commercial renderers with many special effects.
Commercial general purpose game engines include the extremely inexpensive ($100) <a href="http://www.garagegames.com/mg/projects/torque1/">GarageGames' Torque engine</a>
<font color="#a043a0"> (<a href="http://www.garagegames.com/pg/demo.php?id=1">here's how to get a demo license</a>)</font>,
<a href="http://www.egerter.com/">Egerter's Power
Render engine</a>, <a href="http://www.ndl.com/">NetImmerse</a>
(now with Gamecube support), and <a href="http://www.snsys.com/">SN Systems</a>.
An interesting
(though now dead) offshoot from gaming engines is that <a href="http://www.unrealty.net/">the
Unreal engine was used for interactive architectural walkthroughs.</a>
<p> <a href="http://www.anfyteam.com/panfy3d.html">Anfy 3D</a> is a small, fast
software-only 3D renderer in Java. The open source <a href="http://gl4java.sourceforge.net/">GL4Java</a> system
can provide hardware support for Java applications.
<p> Michael Wimmer has a somewhat dated, but fairly complete <a href="http://www.cg.tuwien.ac.at/~wimmer/apis/API_Summary.html">list
of graphics APIs and scene graphs</a>. The well-know <a href="http://oss.sgi.com/projects/inventor/">Open
Inventor</a> scene graph system is now open source. <a href="http://www.openscenegraph.org">Open
Scene Graph</a> and <a href="http://sourceforge.net/projects/sgl/">SGL</a> are
both free, open source scene graph systems.
<a href="http://ogre.sourceforge.net/">OGRE</a> is a modern object-oriented system
for developing interactive applications, especially games.
<a href="http://www.coin3d.org/">Coin</a>
is an open source retained mode scene graph library based on Open Inventor.
<a href="http://www.hoops3d.com">The Hoops3D application framework</a>,
a professional scene graph system used in CAD applications, is now open source
and free for personal use on Linux systems. Ur Studios has announced <a href="http://www.urstudios.com/">GEL
(Graph Evaluation Language)</a>, an open-source scene graph API which supports
multi-user distributed processing. <a href="http://www.sgi.com/software/performer/">SGI's
Performer</a> is available in demo form to develop on for free, running on Linux
and IRIX. <a href="http://www.intrinsic.com/">Intrinsic Graphics</a>, formed
by some of the designers of SGI's Performer, has announced a graphics development
system for games with Performer-like capabilities and more.
<font color="#a043a0">Yet another engine is the <a href="http://g3d-cpp.sourceforge.net/">G3D</a> provided by Morgan McGuire.</font>
<p>An excellent article on <a href="http://www.cbloom.com/3d/techdocs/pipeline.txt">pure
software rendering</a>, with all its tricks and pitfalls, is presented by Charles
Bloom. Software rendering is not dead; for example, see <a href="http://www.flipcode.com/cgi-bin/msg.cgi?showThread=11-12-2002&forum=iotd&id=-1">Nicolas Capens' efforts</a>. <font color="#c850c8">Brian Collins has also made a <a href="http://hatchbackjack.com/?page_id=4">software-only renderer, SGS</a>, with many features.</font> <font color="#7a357a">Another software-only renderer: <a href="http://www.aceshardware.com/read.jsp?id=45000330">Kribi</a>.</font>
<a href="http://www.radgametools.com/pixomain.htm">Pixomatic</a> is a new commercial product that
takes a similar approach; see some benchmarks</a>
at <a href="http://www.radgametools.com/pixofeat.htm">the bottom of this page</a>. It's available in
<a href="http://www.ataricommunity.com/forums/showthread.php?threadid=295832">UT2003</a>, for example,
allowing people with old graphics cards and portables to still play newer games.
<a name="xforms">
<h2> Transforms</h2>
</a>
<p>The <a href="http://www.cs.brown.edu/exploratories/freeSoftware/catalogs/repositoryApplets.html">Exploratory</a>
has a number of tutorial applets related to linear algebra and transforms.
<p><a href="http://www.geometrictools.com">Dave Eberly's site</a> has useful
papers and code on a wide variety of geometric operations, including quaternion
interpolation. Nick Bobick also has a nice article on <a href="http://www.gamasutra.com/features/19980703/quaternions_01.htm">quaternion
rotation and interpolation</a>.
<a href="http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/code/">Code</a> for rotating
from one vector to another rapidly using quaternions (as described in the book)
is available online. If you need a further explanation of quaternions, you might
try <a href="http://www.gamedev.net/reference/programming/features/whyquats/default.asp">this
article</a>.
<p>Scott Johnson discusses <a href="http://www.gamasutra.com/features/20020510/johnson_01.htm">ways to make creating transforms easier</a>, including a shorthand notation used in robotics.
<p>Flipcode has a <a href="http://www.flipcode.com/geometry/">3D geometry primer</a>
online. Animats has a <a href="http://www.animats.com/topics/developers.html">C++
version</a> of the speedy and useful Doué's Graphics Gems <a href="http://www1.acm.org/pubs/tog/GraphicsGems/gemsiv/vec_mat/">vector
manipulation classes</a> (if you prefer pure C, consider using <a href="http://www1.acm.org/pubs/tog/GraphicsGems/gemsiii/vector.h">Hollasch's
vector macros</a>). The <a href="http://plib.sourceforge.net/">Portable Game
Library</a> includes code for a <a href="http://plib.sourceforge.net/sg/index.html">Simple
Geometry library</a>. The Math3d library is open source and includes C++ classes
for vector, quaternion, matrix, ray, line, plane, and AABB's (however, such
operations as intersection between these objects are currently not implemented).
<p>MSDN Magazine has a tutorial on <a href="http://msdn.microsoft.com/msdnmag/issues/01/06/Matrix/Matrix.asp">skinning
with vertex shaders</a>. <font color="#a043a0">Intel has an article on <a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/games/172123.htm">CPU-side skinning</a>.</font>
Keshav Channa has a <a href="http://www.flipcode.com/tutorials/tut_dx8shaders.shtml">tutorial
on skinning</a> using DirectX 8.0.
<a href="http://www.idiom.com/~zilla/Work/PSD/PSD_WEBNOTES/index.html">Pose
Space Deformation</a> is another approach to the problem which overcomes some
problems with skinning. And, you name it, they have it, SourceForge hosts a
free, open-source <a href="http://cal3d.sourceforge.net">skeletal animation
system</a>.
<p><a href="http://www.swin.edu.au/astronomy/pbourke/">Paul Bourke's site</a>
includes information on geometry and projection, and includes many basic geometric
operations as well as more advanced (e.g. <a href="http://www.swin.edu.au/astronomy/pbourke/projection/anamorphism/">anamorphic
projections</a>).
<p> The <a href="http://tog.acm.org/GraphicsGems/">Graphics Gems</A> book
series contains a number of good articles on transformations, with code online.
<font color="#a043a0">Sample chapters from the book <a href="http://vidya.prism.asu.edu/~farin/pla/">
<I>Practical Linear Algebra</I></a> are available.</font> The book <a href="http://www.nr.com/"><i>Numerical
Recipes</i></a> is available online, and contains information on topics such
as linear and spline interpolation (and much else).
<p>A comparison of the cost of Cramer's Rule vs. Gaussian Elimination for different
size matrices can be found in an <a href="http://ceee.rice.edu/Books/CS/chapter5/cost6.html">online
version of a book on computational science</a>.
<p>Putting your z-buffer's near plane as far from the eye as possible is a good idea.
Steve Baker has an <a href="http://www.sjbaker.org/steve/omniv/love_your_z_buffer.html">article
on this topic</a>.
<p>For more transform related information, see the <a href="#linalg">Linear Algebra</a>
section.
<a name="visapp">
<h2> Visual Appearance</h2>
<p><font color="#c850c8">Lacroix has an article about modern <a href="http://www.gamasutra.com/features/20050729/lacroix_01.shtml">dynamic lighting on the GPU</a>.</font>
<p>
</a> The <a href="http://www.cs.brown.edu/exploratory/">Exploratory</a> has applets
that <a href="http://www.cs.brown.edu/exploratories/freeSoftware/catalogs/repositoryApplets.html">teach
about lighting models and signal processing</a>, among other topics. <a href="http://tog.acm.org/resources/applets/vrml/pellucid.html">Pellucid</a>
is a Java applet that allows you to manipulate the VRML lighting model, which
is similar to the lighting model covered in this chapter.
<p> Scott R. Nelson's <a href="http://jgt.akpeters.com/papers/Nelson97/">antialiased
line code</a> is available for download. Here is a comparison generated using
his program of lines improperly drawn with <a href="gamma10.png">gamma=1.0</a>
(note the severe roping and Moíre patterns) and properly drawn with <a href="gamma22.png">gamma=2.2</a>.
Note that you must view these files with a 2.2 gamma display system (e.g. on
a PC). <font color="#a043a0">Eric Chan has <a href="http://graphics.csail.mit.edu/~ericchan/articles/prefilter/">a piece of code and a description of a technique</a> for drawing antialiased lines with the GPU.
</font>
<p>24 bits of color is usually enough, but not always. Here's an <a href="cubes.gif">image
showing concentric bands</a> only one pixel value apart; look in particular at the
bottom half of the large cube in the center.
<p>The <a href="http://research.compaq.com/wrl/people/jouppi/Z3.html">Z3 paper</a>
by Jouppi and Chang has a good summary of many previous antialiasing techniques.
<p>Sun Microsystems' new <a href="http://www.sun.com/aboutsun/media/presskits/siggraph2002/">XVR-4000 machine</a> has some interesting features. It uses a 5x5 filtering kernel to reconstruct an antialiased image in real-time. It's brute force, using up to 400 samples per pixel, but looks great.
<p>Akenine-Möller has an <a href="http://graphics.cs.lth.se/research/mobile/">inexpensive multisampling scheme</a> (1.25 samples per pixel) that compares favorably with Quincunx sampling.
<p><font color="#7a357a">Extremetech made an interesting <a href="http://www.extremetech.com/article2/0,1558,1607374,00.asp">side-by-side comparison</a> of filtering techniques used by ATI and NVIDIA.</font>
<p>Baker and Boyd discuss ways to create <a href="http://www.gamasutra.com/features/20011003/boyd_01.htm">volumetric fog</a>, where only a
given volume of space has fog in it.
<p>Transparency is difficult to perform correctly in a single pass when using
a Z-buffer. Steve Baker gives a <a href="http://www.sjbaker.org/steve/omniv/alpha_sorting.html">good
summary</a> of the various approaches to solve this problem.
<p>Poynton's web site talks about <a href="http://www.poynton.com/GammaFAQ.html">gamma correction</a> and <a href="http://www.poynton.com/ColorFAQ.html">color spaces</a>.
<a href="http://chriscox.org/gamma/">Chris Cox</a> also
has a useful page, with links to many resources. <a href="https://stephen-westin.com/gamma/gamma.html">Steve
Westin</a> has a nice page for setting the black level of your monitor and determining
the gamma value for your viewing environment.
<a name="texture">
<h2> Texturing</h2>
</a> The SIGGRAPH course notes for <I>Advanced Graphics Programming Techniques
Using OpenGL</I>
are <a href="http://www.opengl.org/resources/code/samples/sig99/advanced99/notes/notes.html">available
online</a>. These contain an incredible amount of information on shading, texturing,
and special effects. Sadly, the SIGGRAPH '99 course notes for <I>Lighting and Shading Techniques for Interactive Applications</I> are no longer on the web (that I could find).
<p><a href="http://developer.nvidia.com/">NVIDIA</a>'s, <a href="http://www.ati.com/developer/index.html">ATI</a>'s,
and <a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/games/resources/index.htm">Intel</a>'s (especially <a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/games/resources/graphics/index.htm">here</a>)
developers' sites include demos, white papers, and presentations on texturing,
environment and bump mapping, and much more. These sites are invaluable for
technical information and code samples. Gamasutra has a old but informative
article on the theory and practice of <a href="http://www.gamasutra.com/features/19981211/flavell_01.htm">mipmapping</a>.
<p><a href="http://www.vrvis.at/vis/research/hq-hw-reco/">Hadwiger et al.</a>
present an algorithm which can use graphics hardware to accelerate arbitrary
filter kernels (e.g. bicubic) for magnification. The method can also be applied
to volume visualization.
<p>NVIDIA has a <a href="http://developer.nvidia.com/object/presentations.html">presentation
from GDC 2003</a> about using their hardware to implement summed area tables.
<p><font color="#7a357a">An <a href="http://developer.nvidia.com/object/normalization_heuristics.html">article</a> from NVIDIA discusses when it is more efficient to use a cube map lookup for normalizing a vector.</font>
<p> <a href="http://hpl.hp.com/ptm/">Polynomial Texture Mapping</a> by Malzbender
et alia at SIGGRAPH 2001 looks to be a promising approach for realistic display
and capture of bump maps from actual models. A <a href="http://hpl.hp.com/ptm/downloads/agreement.htm">runnable
demo</a> of their work is available for a variety of systems.
<p>Rupert Paget has a good collection of <a href="http://www.vision.ee.ethz.ch/~rpaget/links.htm">links to research about texture synthesis</a> on his web site, which also presents his own approaches to the problem.
<p> Some fascinating applications of texture mapping can be seen on <a href="http://www.dorbie.com/">Angus
Dorbie's site</a>.
<p>S3TC texture compression has become a standard part of DirectX, and is now
called DXTn texture compression. Information about the DXTn format can be found
at <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dx8_c/directx_cpp/Graphics/ProgrammersGuide/UsingDirect3D/Textures/Compressed/CompressedTextureFormats.asp">Microsoft's
site</a>. A free <a href="http://developer.nvidia.com/view.asp?IO=ps_texture_compression_plugin">Photoshop
plugin</a> and compression library is available for manipulating DXTn (DDS) format
textures (the package also converts heightfields to normal maps). Aleksey Berillo
has a thorough <a href="http://www.digit-life.com/articles/reviews3tcfxt1/">comparison
of S3TC and FXT1</a>. <font color="#c850c8">The Unreal developer network has an excellent article on <a href="http://udn.epicgames.com/Two/TextureComparison">DXTC compression and quality comparison</a>.</font>
NVIDIA has sample code for
<a href="http://developer.nvidia.com/view.asp?IO=dxtc_decompression_code">reading DDS
format image files</a>. <font color="#c850c8">Gamasutra has a <a href="http://www.gamasutra.com/features/20051228/sherrod_01.shtml?sssdmh=dm4.162072">techniques and tips</a> article about texture compression.</font> <a href="http://openil.sourceforge.net/">DevIL</a> is an open-source
image conversion library that reads and writes DDS and many other formats.
If you are interested in compression in general, go to
<a href="http://datacompression.info/index.shtml">DataCompression.info</a>.
<p>The <a href="http://www.openexr.com">OpenEXR</a> image format, developed by ILM, allows higher
precision formats to be written and read, including support for the 16-bit floating point "half"
format used in NVIDIA's Cg format. It is an extensible format that allows arbitrary buffers of data.
The latest version's "exrdisplay" program uses hardware acceleration to implement the display pipeline.
<p>Heckbert has written a worthwhile <a href="http://www.cs.cmu.edu/~ph/#papers"><i>Survey
of Texture Mapping</i></a> and a more in-depth work, <a href="http://www.cs.cmu.edu/~ph/#papers"><i>Fundamentals
of Texture Mapping and Image Warping</i></a>. Many interesting applications
of texture mapping are discussed at <a href="http://www.sgi.com/grafica/texmap/index.html">Paul
Haeberli's site</a>.
<p>Light maps can be applied a number of ways: by doing multitexturing on the
fly, or by combining the illumination and surface texture map once and caching
the resulting single texture. <a href="http://www.fluidstudios.com/publications.html">Fluid
Studios</a> discusses their KAGE surface caching system to manage these derived
textures. Michael Herf gives a more <a href="http://www.stereopsis.com/ProcBlend.html">elaborate
method of using light maps</a> effectively, a software approach that might be
doable with pixel shaders. Luke Hodorowicz gives a number of techniques for
using <a href="http://www.flipcode.com/tutorials/tut_advlightmaps.shtml">dynamic
light maps</a>.
<p> A great <a href="http://www.debevec.org/ReflectionMapping/">history
of reflection mapping</a> is available from Paul Debevec's site. Some normally
difficult to obtain early papers and videos can be found here. High dynamic
range environment map image data is also <a href="http://www.debevec.org/Probes/">available
at Paul's site</a>, along with 8 bit/channel spherical map images. His <a href="http://www.debevec.org/HDRShop/">HDRShop
program</a> is useful for creating and manipulating environment maps of different
types (including the ability to make irradiance maps); free for non-commercial
use. Michael Herf has <a href="http://www.stereopsis.com/sblur/">Photoshop plugins</a>
for more artistic blurs and Fresnel effects. Masa has a <a href="http://www.daionet.gr.jp/~masa/rthdribl/index.html">great demo</a> showing HDR lighting,
glare, depth of field, motion blur, Fresnel effects, and more. Riguer <a href="http://www.ati.com/developer/Guennadi_Mojo.pdf">gave a talk</a> discussing his method of using pixel shader blurs to simulate depth of field.
<p><font color="#7a357a">What makes a great technical demo? <a href="http://www.firingsquad.com/features/art_of_tech_demo/">One person's opinion.</a></font>
<p>A clever thing: Mark VandeWettering took <a href="http://brainwagon.org/images/escher.jpg">Escher's mirrored ball</a> and reversed the mapping,
to obtain <a href="http://brainwagon.org/images/escher.env.jpg">a cube map of the scene</a>.
<p>The VTP site notes a number of <a href="http://vterrain.org/Textures/spherical.html">other
ways to map to a sphere</a>, with pros and cons of each.
<p><a href="http://www.gamasutra.com/features/20030813/hargreaves_01.shtml">Hargreaves gives methods</a> for quick approximation of color bleeding for objects moving through an outdoor environment.
<p>Paul Baker has an article about <a href="http://www.paulsprojects.net/tutorials/simplebump/simplebump.html">how to perform bump mapping</a> using the ARB OpenGL extensions. He also has code for <a href="http://www.paulsprojects.net/opengl/bumpatten/bumpatten.html">per pixel lighting with bump maps</a> using NVIDIA extensions. <font color="#7a357a">NVIDIA has an <a href="http://developer.nvidia.com/object/mipmapping_normal_maps.html">article</a> about mipmapping normal maps.</font> <font color="#a043a0">NVIDIA explores simple <a href="http://developer.nvidia.com/object/bump_map_compression.html">compression techniques for bump maps</a> to achieve better quality at a cheaper cost.</font>
<p><font color="#c850c8">A new family of bump-mapping techniques are based on <a href="http://vrsj.t.u-tokyo.ac.jp/ic-at/ICAT2003/papers/01205.pdf">Kaneko's parallax bump-mapping work</a> in 2001. The underlying concept is to do a simplified ray trace of the bump map surface's heightfield, finding which texel is actually visible at each pixel. There are a number of schemes to accelerate this process. <a href="<a href="http://www.infiscape.com/rd.html">Welsh</a> gives a basic solution to the problem using the GPU, providing bits of source code. <a href="http://download.nvidia.com/developer/GPU_Gems_2/GPU_Gems2_ch08.pdf">Donnelly</a> creates a 3D distance map to more rapidly find the closest ray/heighfield intersection, at the cost of additional storage. <a href="http://www.inf.ufrgs.br/~oliveira/RTM.html">Oliveira, Policarpo, and others</a> call the algorithm "relief texture mapping" (RTM). They use an approach of sampling the texture heightfield along the projection of the ray onto the surface, using these samples to approximate where the first intersection is located. They have a <a href="http://www.shadertech.com/contest/#reliefmapping">implementation available in Cg, along with a video</a>. They have also done some work on handling curved surfaces, a trickier case. See <a href="http://fabio.policarpo.nom.br/relief/index.htm">Policarpo's site</a> for more demos and papers. Tatarchuk and Brawley have published work in the area, including <a href="http://www.ati.com/developer/gdc/Tatarchuk-ParallaxOcclusionMapping-FINAL_Print.pdf">this article</a> and <a href="http://www.ati.com/developer/SIGGRAPH05/Tatarchuk-ParallaxOcclusionMapping-Sketch-print.pdf">this presentation</a>, showing ways to perform convincing self-shadowing and improve quality and speed. Tatarchuk and others at ATI have also made a <a href="http://www.ati.com/designpartners/media/edudemos/RadeonX1k.html#">Toyshop video</a> showing the effect. Morgan and Max McGuire <a href="http://graphics.cs.brown.edu/games/SteepParallax/index.html">have a poster</a> describing a similar technique, and provide source code.</font>
<p> Gamasutra has a pair of articles on <a href="http://www.gamasutra.com/features/20001117/oliveira_01.htm">performing
refractive mapping</a>.
<p><a href="http://www.ludicon.com/castano/files/magica/">Ignacio Castaño</a> has made some free 3DSMAX tools
to convert a highly polygonalized model to a bump map texture. ATI has a program
called <a href="http://www.ati.com/developer/">NormalMapper</a> which generates
bump maps from a high and low resolution model.
<p>There are many sites with free textures out there. NVIDIA has a <a href="http://developer.nvidia.com/view.asp?IO=IO_TTVol_01">set
of over 200 free tiling textures</a>, in the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dx8_c/directx_cpp/Graphics/ProgrammersGuide/Appendix/DDSFileFormat/ovwDDSFileFormat.asp">DirectDraw
Surface</a> (DDS) format, with a liberal license. Another good place to
look are <a href="http://www.3dcafe.com">3D Cafe</a>, <a href="http://www.3dspot.com/main.html">The
New Graphics BBS</a>.
<p>Tom Nuydens
has a <a href="http://www.delphi3d.net/download/perlin.zip">demo in Delphi</a>
that renders animated Perlin noise. There is also an Intel article on <a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/games/resources/graphics/20247.htm">making noise</a> and on <a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/games/20534.htm">generating
procedural cloud textures</a>.
James and Harris presented at GDC 2003 <a href="http://www.cs.unc.edu/~harrism/gdc2003/">a number of uses</a> of procedural texture generation for animation.
There is <a href="http://www.bhusa.com/mk/us/subindex.asp?maintarget=companions/defaultindividual.asp&isbn=1558608486&country=United+States&srccode=&ref=&subcode=&head=&pdf=&basiccode=&txtSearch=&SearchField=&operator=">a companion web site</a> for the book <a href="http://www.bhusa.com/mk/us/subindex.asp?maintarget=bookscat%2Fsearch%2Fresults%2Easp&country=United+States&ref=&mscssid=FHSBRTGHPLAX9GBN9465J857HGTCANB7">Texturing
& Modeling: A Procedural Approach, 3rd Edition</a>, which has much information on procedural
texture generation.
<a name="specfx">
<h2> Advanced Lighting and Shading</h2>
</a>
<p>Phil Dutre's <a href="http://www.cs.kuleuven.ac.be/~phil/GI/">Global Illumination
Compendium</a>, mentioned in "Further Resources", has much useful
information on BRDFs and other facets global illumination theory.
<p>For more on radiometry definitions, <a href="http://www.optics.arizona.edu/Palmer/rpfaq/rpfaq.htm#radiometry">James
Palmer's site</a> is one place to look. The Brown Exploratory has an <a href="http://www.cs.brown.edu/exploratories/freeSoftware/catalogs/repositoryApplets.html">interactive
tutorial on color perception</a>, using Java applets to illustrate various concepts.
<p>There is a color space FAQ available. Well, two: <a href="http://www.poynton.com/ColorFAQ.html">Poynton's</a>
and <a href="http://www.neuro.sfc.keio.ac.jp/%7Ealy/polygon/info/color-space-faq.html">Bourgin's</a>.
Poynton's is maintained and more extensive, Bourgin's has some tidbits on different
color space conversions. The <a href="http://www.cvrl.org/">CVRL website</a>
has a huge amount of easily downloadable primary research data relating to color.
A <a href="http://www.cs.rit.edu/%7Encs/color/a_chroma.html">chromaticity diagram
applet</a> made the image used in the book. ExtremeTech has a recent article
on <a href="http://www.extremetech.com/article2/0,3973,15467,00.asp">color
matching</a>. There is information about the <a href="http://www.microsoft.com/hwdev/tech/color/sRGB64.asp">sRGB64
color management standard</a> at Microsoft's site.
<p>Stanford and Berkeley's <a href="http://graphics.stanford.EDU/courses/cs448c-00-fall/">Appearance
Models course</a> reading list is a good place to start for information on material
appearance. NIST maintains some <a href="http://slp.nist.gov/appearance/links.html">links
to BRDF information</a>. Steve Westin has some good information on <a href="http://www.graphics.cornell.edu/~westin/fresnel.html">Fresnel
reflectance</a>. BRDF data is available from <a href="http://www.graphics.cornell.edu/online/measurements/reflectance/index.html">Cornell</a>
and <a href="http://www.cs.columbia.edu/CAVE/curet/">Columbia</a> Universities.
<p> Sloan, Kautz, and Snyder have a paper in SIGGRAPH 2002 called <a href="http://research.microsoft.com/%7Eppsloan/"><i>Precomputed
Radiance Transfer for Real-Time Rendering in Dynamic, Low-Frequency Lighting
Environments</i></a>, which discusses how to implement some global illumination
effects at interactive rates.
Kautz, Sloan, and Snyder's paper <a href="http://research.microsoft.com/%7Eppsloan/">Fast,
Arbitrary BRDF Shading for Low-Frequency Lighting Using Spherical Harmonics</a>
discuss using spherical harmonics to evaluate anisotropic BRDFs, as well as
perform self-shadowing.
Sloan et al. follow up in SIGGRAPH 2003 with
<a href="http://research.microsoft.com/~ppsloan/">Clustered Principal Components for
Precomputed Radiance Transfer</a>, which gives considerably more efficient ways of
using such algorithms.
<font color="#c850c8">A very nice tutorial on precomputed radiance transfer is <a href="http://www.research.scea.com/gdc2003/spherical-harmonic-lighting.html">available from SCEA.</a></font>
<font color="#c850c8">Steve Hill has written <a href="http://www.gamasutra.com/features/20040319/hill_03.shtml">an article</a> about using hardware-accelerated precomputed radiance transfer (PRT)
for game art production.</font>
<p>Dave McAllister presents a method called
<a href="http://www.cs.unc.edu/~davemc/SBRDF/">SBRDF</a> about implementing the Lafortune lobe model for hardware accelerated BRDFs.
<font color="#a043a0"><a href="http://www.cs.unc.edu/~davemc/Pubs.html">His thesis</a> on the subject is also available.</font>
<p>There is a <a href="http://www.cgl.uwaterloo.ca/Projects/rendering/Shading/database.html">repository
of factored BRDFs</a> available for download; the page also gives worthwhile implementation details.
<p><font color="#7a357a">An excerpt from <I><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321228324?tag=somebooksilike">GPU Gems</a></I> is available, about <a href="http://developer.nvidia.com/object/GPU_Gems_Samples.html">rendering skin</a> using a number of advanced techniques.</font>
<p><a href="http://gamasutra.com/features/19991112/pallister_01.htm">Kim Pallister's
article</a> gives a good overview of techniques for rendering to a texture. Older information on <a href="http://www.mesa3d.org/brianp/sig97/offscrn.htm">offscreen
rendering in general</a> is presented in Brian Paul's 1997 course notes.
<p>Wolfgang Engel has a good series of articles about <a href="http://www.gamedev.net/columns/">vertex
and pixel shaders</a>. You can find another <a href="http://www.cfxweb.net/modules.php?name=News&file=article&sid=1305">introductory shader article</a> by Adrian Boeing. MSDN has a tutorial on <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndrive/html/directx02192001.asp">vertex shaders</a>. <a href="http://developer.nvidia.com/">NVIDIA</a>'s and
<a href="http://www.ati.com/developer/index.html">ATI</a>'s sites both have
a huge amount of information on advanced techniques (in particular, see the
<a href="http://developer.nvidia.com/view.asp?IO=NVEffectsBrowser_3">NVEffectsBrowser</a>
for a way to quickly access a wide range of effects);
keep visiting these sites, as they are frequently updated. <a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/games/resources/index.htm">Intel</a>'s
also has some worthwhile articles, <a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/games/resources/graphics/index.htm">especially here</a>. <a href="http://opengl.nutty.org/opengl.html">Nutty.org</a>
and <a href="http://esprit.campus.luth.se/%7Ehumus/">Humus</a> both have some
other examples of advanced effects. An article about <a href="http://www.gamasutra.com/features/20020801/beaudoin_01.htm">non-integer power functions</a>
is excerpted from the <a href="http://www.amazon.com/exec/obidos/tg/detail/-/1556220413?tag=somebooksilike">ShaderX book</a>.
<p>ATI's <a href="http://www.ati.com/developer/rendermonkey/index.html">RenderMonkey
toolset</a> provides shader development tools for all DirectX 9.0 compliant
graphics cards. The toolset allows compilation and previewing of shaders, and
comes with a large number of sample shaders. NVIDIA's <a href="http://developer.nvidia.com/object/IO_CgFXViewer.html">CgFX Viewer</a> is a related program. <a href="http://www.shaderstudio.com/">Shader Studio</a> is another utility for developing shaders, and <a href="http://www.shaderworks.com/">ShaderWorks</a> is yet another tool. Wolfgang Engel has an article on Gamasutra
about <a href="http://www.gamasutra.com/features/20030418/engel_01.shtml"><I>Implementing Lighting Models With HLSL</I></a>. <font color="#7a357a">Michal Valient <a href="http://www.dimension3.sk/web/news.php">has a thesis (and more)</a> discussing using DirectX 9 to implement various shading models.</font>
<a href="http://www.shaderx.com/direct3d.net/index.html">He also has a tutorial</a>
for Microsoft's HLSL (High Level Shading Language) in DirectX 9 using RenderMonkey.
Ron Fosner also writes about <a href="http://www.gamasutra.com/features/20030514/fosner_01.shtml"><i>Implementing
HLSL with RenderMonkey</i></a>. <font color="#a043a0">What you probably really want to be doing for production rendering
is create <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/EffectFileReference/EffectFileReference.asp">effects files</a> instead, which give you a higher level of abstraction.</font>
<p><font color="#c850c8"><a href="http//www.gpgpu.org/">GPGPU.org</a> is an excellent site for information on using GPUs for general purpose computation. Their <a href="http://www.gpgpu.org/wiki/FAQ">FAQ</a> and <a href="http://www.gpgpu.org/w/index.php/Main_Page">wiki</a> are particularly useful.</font>
<p><font color="#7a357a">The <a href="http://www.3dshaders.com/">3D Shaders</a> site is the online part of the <I><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321197895?tag=somebooksilike">OpenGL Shading Language</a></I> book. There's source code, shaders, errata, and useful links here.</font>
<p>NVIDIA's <a href="http://developer.nvidia.com/view.asp?IO=cg_about">Cg programming language</a>
is one higher level solution for programming vertex and pixel shaders for OpenGL
and DirectX. <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321194969?tag=somebooksilike">The Cg Tutorial</a> book is a well-written guide to this language. This compiler has been open sourced. A <a href="http://www.cgshaders.org/">shader repository</a> has
been created specifically for this language.
At SIGGRAPH 2003 <a href="http://www.cs.utexas.edu/users/billmark/papers/Cg/">Mark et al.</a> presented a paper on the Cg system. Other <a href="http://developer.nvidia.com/object/presentations.html">Cg related presentations</a> are also available. The graphics3d site has a <a href="http://graphics3d.com/guides/cg/index.html">tutorial
on Cg</a>, and Tom Nuydens has an <a href="http://www.delphi3d.net/">example
Cg program in Delphi</a> available for his height fog method. <a href="http://developer.nvidia.com/object/SIG2003_cg_sessions.html">Cg sessions at SIGGRAPH</a> are also available. <font color="#7a357a">There is even a <a href="http://graphics.cs.lth.se/pyfx/">Python framework</a> for writing Cg effects.</font> For inspiration
on shaders, visit the <a href="http://www.renderman.org/">Renderman.org site</a>.
<font color="#7a357a">Speaking of RenderMan, it can be implemented (to a fair extent) even on a PS2.</font>
<p><font color="#7a357a"><a href="http://conal.net/Vertigo/">Vertigo</a> is a shading language from Microsoft Research that focusses on procedural modeling, shading, and texturing.</font>
<p>The University of Waterloo has developed <a href="http://libsh.sourceforge.net">Sh</a>, a metaprogramming language for GPU programming. McCool et al. discuss in <a href="http://www.cgl.uwaterloo.ca/Projects/rendering/Papers/"><I>Shader Metaprogramming</i></a> a way to
define a high-level shading language in C++ and shows the advantages of their approach. <font color="#7a357a">A nuts-and-bolts <a href="http://www.gamasutra.com/features/20040716/mccool_01.shtml">description</a> of their <I>Sh</I> system is on Gamasutra. The <a href="http://libsh.org">Sh website</a> is where to get the software.</font>
<p>Stanford has an <a href="http://graphics.stanford.edu/projects/shading/#Downloads">executable version</a> of their real-time shading language available.
<p> <font color="#a043a0"> Texture fetches in the vertex shader are now possible with the Shader Model 3.0. NVIDIA has a nice
<a href="http://developer.nvidia.com/object/using_vertex_textures.html">tutorial on this topic</a></font>
<p><a href="http://developer.nvidia.com/view.asp?IO=nvparse">NVParse</a> is a tool from
NVIDIA that simplifies the process of configuring texture shaders and register combiners, and
gives improved error reporting for vertex shaders.
<p><a href="http://developer.nvidia.com/view.asp?IO=presentations">NVIDIA</a> and <a href="http://www.ati.com/developer/techpapers.html">ATI</a>
each have a large number of new presentations
from GDC 2003 about shaders and related topics.
<p> <font color="#a043a0">The <a href="http://graphics.stanford.edu/projects/brookgpu/">BrookGPU</a> is a system (language, compiler, runtime) for general-purpose computations on the GPU. </font>
<p><font color="#c850c8">The Mac OS X
release of the Graphing Calculator will, when possible, <a href="http://pacifict.com/Shaders.html">generate GPU programs on the fly</a> from typed equations.</font>
<p><font color="#a043a0">There is a large variety of <a href="http://www.opengl.org/resources/tutorials/">OpenGL tutorials</a> on advanced techniques at the <a href="http://www.opengl.org/">OpenGL.org site</a>.</font>
<p><font color="#a043a0"><a href="http://www.paulsprojects.net/oldnews.html">Paul Baker's site</a> has a large number of different demos and code for advanced techniques.</font>
<p><a href="http://www.sgi.com/software/clearcoat/index.html">ClearCoat</a> is
SGI's (now free) implementation of Cabral et alia's 1999 SIGGRAPH paper, in
which they create realistic BRDFs by blending spherical environment maps for
different viewpoints.
<p><a href="http://www.cs.brown.edu/%7Etor/sig2002/ea-shader.pdf">Paul Lalonde</a>
has a paper in SIGGRAPH 2002 about creating shaders for multiple platforms from
a single set of data. Florian Sauer and Sigmund Vik discuss <a href="http://www.gamasutra.com/features/20021002/sauer_01.htm">managing different
shading techniques on the Nintendo Gamecube</a>.
<p>To see the original soft reflection and transparency images by Paul Diefenbach,
visit <a href="http://www.openworlds.com/employees/paul/index.html">his site</a>.
He gives other interesting experiments in using graphics accelerators for global
illumination, as well as his seminal thesis on the subject and a shorter, summary
article.
<p><a href="http://www.gamasutra.com/gdce/jensen/jensen_01.htm">Jensen and Golias's
article</a> on simulating water gives a detailed approach to the problem.
<p>Heckbert maintains a (fairly dated, unfortunately) <a href="http://www.cs.cmu.edu/%7Eph/shadow.html">page
on shadowing techniques</a>, as well as links to Herf & his own work. Charles
Bloom has a useful "how to" guide for <a href="http://www.cbloom.com/3d/techdocs/shadowmap.txt">generating
shadow textures</a>.
<p>The best recent article on shadow volume theory and implementation is <a href="http://developer.nvidia.com/object/robust_shadow_volumes.html">Everitt
and Kilgard's</a>. Also at this paper's site is the otherwise difficult-to-find
Heidmann paper (the first on stencil buffered shadows) and Carmack's
original thoughts on doing z-fail counting.
<a href="http://www.gamasutra.com/features/20021011/lengyel_01.htm">Eric Lengyel has an article</a> further discussing
implementation details and optimizations for shadow volumes.
There is also <a href="http://www.gamedev.net/columns/hardcore/shadowvolume/">an extremely thorough article</a> about z-fail shadow volumes and related topics
at GameDev.net.
NVIDIA has also introduced <a href="http://www.nvidia.com/page/search.html?keywords=ultrashadow">ultrashadows</a>, which helps trim the amount of fill needed for shadow volume computation. <font color="#7a357a">Brandon Lloyd et alia <a href="http://gamma.cs.unc.edu/ccsv/">discuss a number of improvements</a> that can be made when using shadow volumes in complex environments.</font>
<p> <a href="http://www9.informatik.uni-erlangen.de/Persons/Stamminger/Publications/psm.pdf">Perspective shadow maps</a> is an algorithm from 2002 that makes better use for the texels in the shadow map. This is done by creating the shadow maps in post-perspective space. <font color="#a043a0">Several improvements of perspective maps have been presented, including <a href="http://www.cg.tuwien.ac.at/research/vr/lispsm/">LISPSMs</a>, <a href="http://www.comp.nus.edu.sg/~tants/tsm.html">trapezoidal shadow maps</a>, and <a href="http://www.cs.harvard.edu/~sjg/papers.html">A Lixel for Every Pixel</a>.
To do shadow mapping with optimal use of the samples, <a href="http://www.tml.hut.fi/~timo/">alias free shadow maps</a> is the way to go.
<a href="http://www.cs.utexas.edu/users/billmark/papers/ism-TR/">The irregular Z-buffer</a> is the same idea, but presents how you can
actually build hardware for it.
</font>
<p><font color="#a043a0">For better performance when using shadow volumes, a <a href="http://graphics.cs.lth.se/research/shadows/">hierarchical shadow volume algorithm</a> has been developed. The idea is to perform per-pixel work only in tiles where there are shadow boundaries (however, new hardware is required for this). Chan and Durand use a similar idea, but <a href="http://graphics.csail.mit.edu/~ericchan/papers/smapSV/">combines the best of shadow volumes and shadow maps</a>.
</font>
<p>Akenine-Möller and Assarsson <a href="http://graphics.cs.lth.se/research/shadows/">have a number of papers</a> on their techniques for creating soft shadows with modified shadow volumes<font color="#a043a0"> as well as <a href="http://graphics.cs.lth.se/research/shadows/">source code</a></font>.
<p>At SIGGRAPH 2003 Govindaraju et al. <a href="http://gamma.cs.unc.edu/Shadow/">presented LOD and visibility culling methods</a> to accelerate shadow algorithms for large environments.
<p>Masaki Kawase has a <a href="http://www.daionet.gr.jp/%7Emasa/ishadowmap/index.html">demo
(including source)</a> for NVIDIA cards of projective texturing, indexed shadow
mapping using an alpha priority buffer, reflection, anisotropic filtering, and
other effects. Ron Frazier has a <a href="http://www.ronfrazier.net/apparition/index.asp?appmain=research/index_cube_shadow_mapping.html">number
of articles (and code)</a> discussing how NVIDIA's register combiners can be
used to produce complex shading, lighting, and shadowing effects.
Riguer <a href="http://www.ati.com/developer/Guennadi_Mojo.pdf">presents a method</a> and <font color="#c850c8">Fernando <a href="http://developer.nvidia.com/object/siggraph_2005_presentations.html">gives an efficient method</a> for performing percentage closer filtering for shadow maps.</font>
<p>Hasenfratz et al. have written <a href="http://w3imagis.imag.fr/Publications/2003/HLHS03/index.fr.html">A Survey of Real-Time Soft Shadow Algorithms</a>. Chan and Durand <a href="http://graphics.lcs.mit.edu/%7Eericchan/papers/index.html">extend the shadow map</a> to rapidly generate reasonable soft shadows. Cg code is included. Wyman and Hansen similarly extend the shadow map <a href="http://www.cs.utah.edu/~wyman/publications/">to create penumbral shadows</a>.
<font color="#7a357a">Brabec and Seidel have a <a href="http://www.mpi-sb.mpg.de/~brabec/doc/brabec_cgi01.pdf">paper</a> on antialiasing shadow map edges.</font>
<font color="#c850c8">Willem De Boer has an article about creating <a href="http://whdeboer.com/papers/smooth_penumbra_trans.pdf">smooth penumbrae with shadow maps</a> in image space.</font>
<p> A software-only <a href="http://www.anfyjava.com/anj/anfy3d/anfy3d.html">Java
applet</a> that shows real-time mirror reflection works surprisingly quickly
on fast machines. The trailing accumulation buffer technique for motion blur
can be seen in another <a href="http://www.anfyteam.com/an3d/index2.html">Java
applet</a> using this same package.
<p>Sanchez-Crespo has <a href="http://www.gamasutra.com/features/20030903/crespo_01.shtml">an article about his approach</a> for creating underwater caustics using Cg.
<p>Ingo Wald and Philipp Slusallek have a nice summary of current ray-tracing
research in their <a href="http://graphics.cs.uni-sb.de/Publications/index.html">"State
of the Art in Interactive Ray Tracing" report</a>. Their <a href="http://graphics.cs.uni-sb.de/rtrt/">own
work</a> is also of interest, and see <a href="http://graphics.cs.uni-sb.de/%7Ewald/Publications/RW2001_IDRTHCM/Gallery.html">their
gallery</a> for some impressive results beyond what is in our book. Researchers
at <a href="http://graphics.stanford.edu/papers/rtongfx/">Stanford</a> and the
<a href="http://graphics.cs.uiuc.edu/%7Ejch/papers/rt2/">University of Illinois</a>
are examing hardware ray tracing by using pixel shaders and texturing.
<font color="#c850c8">There is <a href="http://ompf.org/forum">an active research forum</a> on the topic of real-time ray
tracing.</font>
<p><a href="http://freespace.virgin.net/hugo.elias/radiosity/radiosity.htm">Hugo
Elias</a> has a longer one with practical tips, and <a href="http://www.fluidstudios.com/publications.html">Paul
Nettle</a> has another one specifically aimed at games. Paul also has a <a href="http://www.fluidstudios.com/publications.html">radiosity
processor</a> that generates light maps and is highly automated.
Coombe et al. discuss <a href="http://www.cs.unc.edu/~coombe/research/radiosity/">computing radiosity using the GPU</a>. Hart has his <a href="http://graphics.cs.uiuc.edu/~jch/">slides about
global illumination on the GPU</a> on his web site.
There are links
to other <a href="http://tog.acm.org/Software.html#rad">radiosity</a> and
<a href="http://tog.acm.org/Software.html#ray">ray tracing resources</a>
at the ACM TOG site.
<p>Color bleeding takes on a whole new meaning when a classic radiosity test-case is used as a <a href="http://www.sync.dk/~khn/stuff/">game environment</a>.
<p>A new way of simulating radiosity effects that is rapidly becoming popular is the class of "ambient occlusion" or "obscurance" techniques. We mention this idea briefly on p. 284-5 of the 2nd edition. The basic idea is to examine the nearby geometry for a given point on a surface and precompute approximately how much this geometry will affect how much ambient light reaches this point. <a href="http://ima.udg.es/iiia/GGG/UsersDocs/mateu/obscurances.pdf">Iones et al.</a> gives one method of performing this type of computation, <a href="http://www.rhythm.com/~ivan/visMaps.html">Neulander</a> another. ATI's free <a href="http://www.ati.com/developer/tools.html">normal mapper</a> now supports generation of ambient occlusion. This technique is also used for <a href="http://www-viz.tamu.edu/students/bmoyer/617/ambocc/">non-interactive rendering</a> (more information <a href="http://www.andrew-whitehurst.net/amb_occlude.html">here</a> and <a href="http://zj.deathfall.com/depthbasedOcc.htm">here</a>).
<p> <font color="#a043a0">Sub-surface scattering is a phenomena where photons are enter into some medium (e.g., skin or marble), bounces
around inside the media, and then exits at some point other than the entry point. For real-time rendering, many proposals to handle
this effect have been suggested, including <a href="http://www9.informatik.uni-erlangen.de/Persons/Stamminger/Research/Research/tsm"> translucent shadow maps</a>, <a href="http://lumumba.luc.ac.be/~tommertens/itrans/index.html"> Merten et al's technique</a>, and
<a href="http://www.cs.umd.edu/projects/gvil/projects/translucency.shtml">Hao et al's technique</a>.
</font>
<p> <font color="#a043a0">To create depth of field, one can render the scene, build a mipmap, and then sample the
mipmap hierarchy according to the distance the pixel's depth from some focal plane. The closer to the focal plane, the less blur.
Such techniques have been described by <a href="http://ducati.doc.ntu.ac.uk/uksim/dad/webpagepapers/Game-18.pdf">Cant et al.</a> and
by <a href="http://developer.nvidia.com/docs/IO/8230/GDC2003_Demos.pdf">Demers, in the "Ogres and Fairies"</a> presentation from GDC2003.
A (quite) similar technique is presented by <a href="http://homepages.cwi.nl/~mullie/Work/Pubs/Papers/VRST00/dofPaper.pdf">Mulder and van Liere</a>.
An <a href="http://www.cgg.cvut.cz/~zara/papers/KrivanekZaraBouatouch-CGI03a.pdf">algorithm for depth of field for point surfaces</a> has
also been presented.
</font>
<p>At SIGGRAPH 2002 Tim Purcell et alia showed an ATI Radeon 9700 performing
<a href="http://graphics.stanford.edu/papers/rtongfx/">ray tracing at interactive
rates</a>, accelerated by graphics hardware. CPU-side interactive ray tracing
research also continues; for example, visit <a href="http://graphics.cs.uni-sb.de/RTRT/">Philip
Slussalek's page</a> on this topic and for <a href="http://www.openrt.de/">OpenRT</a>.
Realstorm's free <a href="http://www.realtimeraytrace.de/">Benchmark
ray tracing program</a> is also impressive for showing how fast complex scene
ray tracing can be.
<p><a href="http://tog.acm.org/resources/RTNews/demos/overview.htm">Real-time
ray-tracing demos</a> have been around on a small scale since 1995. Picard
gives a fascinating explanation of <a href="http://www.demoscene.hu/%7Epicard/h7/">how
the ray tracing intro "Heaven Seven" works</a>. An amazing thing: a <a href="http://www.pouet.net/prod.php?which=3397">256
<i>byte</i> program</a> that ray traces a tube structure in real-time (and there
is a site <a href="http://www.256b.com/">dedicated to these</a>).
<a name="npr">
<h2> Non-Photorealistic Rendering</h2>
</a>
<p> An excellent <a href="http://www.red3d.com/cwr/npr/">non-photorealistic rendering</a>
(NPR) resources page has been put together by Craig Reynolds. Amy and Bruce
Gooch have a <a href="http://www.cs.utah.edu/npr/">nicely organized NPR page</a>.
Mario Costa Sousa has an <a href="http://pages.cpsc.ucalgary.ca/~mario/npr/bib/">extensive
NPR bibliography</a> available. Stefan Schlechtweg's <a href="http://216.239.63.104/search?q=cache:M--coIjJEKUJ:isgwww.cs.uni-magdeburg.de/~stefans/publi/nprliterature.html+Stefan+Schlechtweg+NPR&hl=en">NPR papers page</a> is less extensive, but has
the excellent feature of including the abstracts of many papers.
<p>More details about ATI's image-based NPR technique are available in
<a href="http://www.ati.com/developer/techpapers.html">ATI's technical papers collection</a>.
<p>Jeff Lander has online <a href="http://www.darwin3d.com/gdm2000.htm#gdm0200">two
articles, executable, and sample code</a> showing one technique for NPR. Later,
related code (without the articles online) can be found at the <i><a href="http://www.gdmag.com/code.htm">Game
Developer</a></i><a href="http://www.gdmag.com/code.htm"> code area</a> under
his name.
<p>Paul Baker has code for <a href="http://www.paulsprojects.net/oldnews.html">performing cel shading and painterly rendering</a>.
<p>The image filtering method for edge detection, developed by ATI, can also be
performed on a GeForce 3 or better: <a href="http://www.delphi3d.net/download/convolve.zip">Tom
Nuydens</a> has a demo. <font color="#c850c8">NVIDIA has sample code showing <a href="http://developer.nvidia.com/object/convolution_filters.html">convolution filtering</a> using OpenGL and Cg.</font>
<p><a href="http://www.cs.princeton.edu/gfx/proj/wnpr/">Princeton and Brown collaborated</a>
to create a system to enable an artist to define a stroke style
and have the system automatically use this for rendering.
<p>Kalnins et al. have a paper in SIGGRAPH 2003 about
<a href="http://www.cs.princeton.edu/gfx/proj/css/">rendering stylized silhouettes</a> with temporal coherence
in real-time. Tom Hall has a demo and paper on <a href="http://www.geocities.com/tom_j_hall/">rapid approximate silhouette tracking</a>.
<p>Paul Heckbert has a collection of old but valuable news posts on <a href="http://www.cs.cmu.edu/afs/cs/user/ph/www/src/edge/">accurate
polygon edging techniques</a>, including code examples.
<p> Even gibbets can be stylized, see <a href="http://www.cs.wisc.edu/graphics/Gallery/NPRQuake/whatIsIt.html">NPRQuake</a>.
<a name="ibr">
<h2> Image-Based Rendering</h2>
</a>
<p>The open-source <a href="http://www.talula.demon.co.uk/allegro/">Allegro</a>
game programming library implements many sprite-related functions (see the <a href="http://www.gamasutra.com/features/19991026/allegro_01.htm">Gamasutra
article</a> for more about this package). <a href="http://sourceforge.net/projects/openptc/">OpenPTC</a>
is an open source library for quick blitting to the screen; Windows, X11, and
Java versions are available. <a href="http://www.gaffer.org/tinyptc/">TinyPTC</a>
is a small subset that is simple and fast.
<p>Décoret et al. present at SIGGRAPH 2003 a method for
<a href="http://www-imagis.imag.fr/Publications/2003/DDSD03/index.fr.html">generating billboard clouds</a>. Wang discusses how <I>Microsoft Flight Simulator 2004</I> does its
<a href="http://ofb.net/~eggplant/clouds/">cloud rendering</a> via a mix of billboard and impostor techniques (<a href="http://jgt.akpeters.com/papers/Wang04/">paper abstract here</a>).
<p>Andrew Glassner has more on <i><a href="http://www.glassner.com/andrew/media/chicken/chicken.htm">Chicken
Crossing</a></i>, a film made using image layers on a Talisman simulator. UNC
Chapel Hill is one research lab with many <a href="http://www.cs.unc.edu/%7Eibr/pubs.html">papers
on IBR related techniques</a>. Paul Heckbert has a somewhat dated set of links
to <a href="http://www-2.cs.cmu.edu/%7Eph/869/www/misc.html">image based rendering
and modeling resources</a>.
<p>Some excellent QuickTime VR
panoramas (including the one shown in the book) are available for viewing on
<a href="http://www.worldserver.com/turk/quicktimevr/index.html">Ken Turkowski's
page</a>. <font color="#c850c8">The <a href="http://ivrpa.org/">IVRPA</a> is a great place to see panorama images and learn about how to make them.</font>
<p>To get a flavor of image based rendering, see the <a href="http://www.virtualcamera.com/">Virtual
Camera site's demos</a>. Though there is little going on here algorithmically,
it shows the power of capturing a scene from many angles at once.
<p>William Damon has an article on <a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/games/20219.htm">impostors
and render to texture</a>, and how to do it if render target textures is unavailable.
<font color="#c850c8">GPGPU.org has a <a href="http://www.gpgpu.org/wiki/FAQ">FAQ</a> on their wiki which includes information
on how to use render to texture.</a></font>
<p>Mark Harris' web page about the use of <a href="http://www.cs.unc.edu/~harrism/clouds/">impostors
for cloud simulation</a> is both educational and beautiful. <a href="http://www.glexcess.com/">GL
Excess</a> is a fun demo showing off a wide range of image-based and special
effects.
<p>Sean O'Neil has an article about <a href="http://www.gamasutra.com/features/20020712/oneil_01.htm">procedural rendering with impostors</a>. This article also has some interesting references and links on related topics, such as terrain and tree rendering.
<p>A <a href="http://www.geocities.com/starlinesinc/index.html">free program</a> to generate a set of textures showing an animated explosion is
available for download.
<p>Particle systems code can be found in the <a href="http://www.gdmag.com/code.htm"><i>Game
Developer</i> magazine code site</a> in the <a href="ftp://ftp.mfi.com/pub/gamedev/src/jul98.zip">July
1998 archive</a>. John van der Burg discusses <a href="http://www.gamasutra.com/features/20000623/vanderburg_01.htm">data
structures for particle systems</a> on Gamasutra. A cool <a href="http://www.anfyjava.com/anj/galaxy/galaxy.html">Java
applet</a> shows particle systems in action. David McAllister has a <a href="http://www.cs.unc.edu/~davemc/Particle/">particle
API</a> available, along with some nice screen shots and links. <a href="http://www.particlesystems.com/">Particlesystems.com</a>
tracks news and information on particle systems in general. <font color="#7a357a">Lutz Latta discusses how to use the GPU to <a href="http://www.gamasutra.com/features/20040728/latta_01.shtml">compute particle
paths rapidly<a/>.</font>
<p>Dean Calver <a href="http://www.beyond3d.com/articles/deflight/">has an article</a> about the pros and cons of using textures storing surface attributes in textures in order to perform deferred rendering.
<p>Related to image-based rendering is image-based modeling, a.k.a. photogrammetry.
One product that reconstruct models from images:
<a href="http://www.realviz.com/products/im/index.php">RealViz</a>; there are undoubtedly others.
<p> For volume rendering information, look at the <a href="http://tog.acm.org/Software.html#vol">ACM
TOG software page</a> for some leads. <font color="#a043a0">The <a href="http://teem.sourceforge.net">Teem Toolkit</a> has many
useful routines for volume rendering.</font> The <a href="http://www.sgi.com/software/volumizer/">OpenGL
Volumizer</a> has some interesting technical information on how SGI is approaching
the volume visualization problem. <a href="http://www.ngrain.com">NGRAIN</a> is a product that uses CPU-side voxel rendering for visualization.
<p>ATI has <a href="http://www.ati.com/developer/techpapers.html">two presentations</a> about
real-time post-processing and video image processing from GDC 2003. <font color="#7a357a">Greg James and John O'Rorke describe how the <a href="http://www.gamasutra.com/features/20040526/james_01.shtml">real-time glow effect</a> for the game <I>Tron</I> was done (this article is excerpted from <I><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321228324?tag=somebooksilike">GPU Gems</a></I>).</font>
<p>A solution in search of a problem (actually,
I just thought it was cool): a <a href="http://www.math.uwaterloo.ca/%7Ewgilbert/Research/HilbertCurve/HilbertCurve.html">3D
space filling Hilbert curve</a>.
<p><a href="http://www.gamasutra.com/features/20010209/evans_01.htm">Alex Evans</a>
has an interesting article about quick ways to do blurs in software and hardware.
<p><a href="http://www.cs.unc.edu/%7Eharrism/cml/">Researchers at UNC Chapel
Hill</a> are using graphics hardware to simulate various physical phenomena
such as cloud formation and reaction-diffusion.
<p>The <a href="http://www.jahshaka.com">Jahshaka system</a> is an open-source project to use graphics hardware to help create and preview video effects and perform editing in real-time.
<a name="speed">
<h2> Acceleration Algorithms</h2>
</a>
<p>The recent book <a href="http://www.amazon.com/exec/obidos/tg/detail/-/1558608389?tag=somebooksilike">Level
of Detail for 3D Graphics</a>, by David Luebke et al., does a good job of discussing level of detail algorithms in depth.
This book has <a href="http://lodbook.com/">a companion web site</a>.
<p><font color="#c850c8">Vaughan Young has an article on Gamasutra <a href="http://www.gamasutra.com/features/20050411/young_01.shtml">summarizing culling techniques</a> for first-person shooter games, excerpted from <a href="http://www.charlesriver.com/Books/BookDetail.aspx?productID=91312">his book</a>.</font>
<p>Scalability is a key idea necessary when building an application for a wide
range of processor and graphics accelerator speeds. <a href="http://www.gamasutra.com/features/19991124/pallistermacri_01.htm">Gamasutra</a> has an introduction to the subject.
<a href="http://home.comcast.net/~tom_forsyth/VIPM_root.html">Tom Forsyth</a>
has talks on this subject, and some additional notes.
<p> Bretton Wade's <a href="http://www.faqs.org/faqs/graphics/bsptree-faq/">BSP
FAQ</a> is somewhat dated, but still a good place to start for binary space
partitioning algorithm information. Adam James' 1999 <a href="http://www.erichaines.com/bsp/aj.pdf">Ph.D.
thesis on BSP tree techniques for rendering</a> is available online. It has
a thorough overview of previous and related work.
Some <a href="http://www.cs.umd.edu/~brabec/quadtree/index.html">applets</a>
for visualizing spatial indexing schemes are available on the web.
<p>An <a href="http://www.nvnews.net/previews/geforce3/occlusion_culling.shtml">in-depth
analysis</a> shows how the GeForce 2 and 3 benefit from drawing objects in a
front to back order.
<p>Michael Abrash has an illustrated account of how the <a href="http://www.bluesnews.com/abrash/">Quake
rendering engine works</a>, excerpted from his (now ancient) <I><a href="http://www.amazon.com/exec/obidos/tg/detail/-/1576101746?tag=somebooksilike">Black
Book</a></I>; he also has a shorter <a href="http://www.gamers.org/dEngine/quake/papers/mikeab-cgdc.html">outline
version</a>. This engine uses an interesting mix of BSP-trees and Z-buffering.
Many other old <a href="http://www.gamers.org/dEngine/quake/">Quake programming
related papers</a> are available.
<font color="#c850c8"><a href="http://www.idsoftware.com/business/techdownloads/">Quakes I through III</a> are
available for download under GPL.</font>
<p> A fascinating, readable overview of the tricks and techniques used in making
high-end flight simulators over the years is available online. Carl Mueller's
"Architectures of Image Generators for Flight Simulators" is available in <a href=ftp://ftp.cs.unc.edu/pub/publications/techreports/95-015.tar.gz>postscript
form</a> from <a href="http://www.cs.unc.edu/Research/tech-report.html">UNC
Chapel Hill's Technical Reports library</a>.
<p><font color="#a043a0">A <a href="http://graphics.lcs.mit.edu/~fredo/PUBLI/surveyTVCG.pdf">survey on occlusion culling</a>
algorithms is available.</font>
<a href="http://graphics.lcs.mit.edu/%7Eseth/pubs/pubs.html">Seth Teller's
publications page</a> has a number of articles on occlusion culling and portals,
including his thesis. <a href="http://graphics.lcs.mit.edu/~fredo/THESE/">Frédo
Durand's thesis</a> has a good in-depth survey of visibility techniques. <a href="http://www.cbloom.com/3d/">Charles
Bloom </a>has a number of demos and articles on practical implementation of
portals, LOD techniques, etc.
<p> If you use SGI's <a href="http://www.sgi.com/software/performer/">Performer</a>
software, you may be interested in David Luebke's <a href="http://www.cs.virginia.edu/~luebke/visibility.html">pfPortals</A>
extension, which does portal and cell culling.
<p> The <a href="http://www.flipcode.com">flipcode site</a> has a set of tutorials
on <a href="http://www.flipcode.com/portal/">portals,</a> <a href="http://www.flipcode.com/harmless/">BSP
trees, and related schemes</a> (and <a href="http://www.flipcode.com/dp/">more</a>). [These links are old,
but are more direct than the main <a href="http://www.flipcode.com/articles/">flipcode articles page</a>.]
<p>Michael Bacik has an article on Gamasutra about <a href="http://www.gamasutra.com/features/20020717/bacik_01.htm">occlusion culling in outdoor
environments</a>.
<p>Hybrid Graphics sells <a href="http://www.hybrid.fi/main/products/devtools.php">dPVS</a>, a system
for accelerating visibility and occlusion testing. The <a href="http://www.hybrid.fi/main/download/docs.php">dVPS manual</a>
includes a 130 page section near the end which details visibility theory and
the algorithms used in their library. <font color="#a043a0">The dPVS system is also described in
<a href="http://www.hybrid.fi/main/research/papers.php#dpvs">an IEEE CG&A paper</a>.</font>
Their <a href="http://www.hybrid.fi/main/download/demos.php">demos</a>
are excellent aids for understanding how these algorithms work. In related work, Aila et al. have <a href="http://www.hybrid.fi/main/research/papers.php#delays">a paper
in SIGGRAPH 2003</a> about how delaying triangles between the vertex and pixel shader can result
in reducing the use of fill rate by performing occlusion culling.
<p>In Feb. 2002 NVIDIA made public its <a href="http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_occlusion_query.txt">extension
to test object visibility using hardware</a>.
<font color="#a043a0">There is also small tutorial on how to use
<a href="http://www.gamedev.net/reference/programming/features/occlusionculling/">occlusion
queries in DirectX</a>.</font>
<p> Anselmo Lastra's talk of <i><a href="http://www.graphics.cornell.edu/workshop/talks/complexity/lastra.pdf">All
the Triangles in the World</a></i> gives a brief overview on the use and blending
of different rendering techniques such as impostors, level of detail, etc.
<p> For information on multiresolution modeling (LODs and more), see <a href="http://www.cs.cmu.edu/%7Egarland/multires/index.html">Garland
and Heckbert's site</a>. There are links here to papers, free and commercial
software, and much else. Note that this page has not been updated since 1997,
but it's a place to start.
<p> Source code and a demo for the point rendering system <a href="http://graphics.stanford.EDU/software/qsplat/">QSplat</a>
is available for download. <a href="http://www.pointstream.net/">Pointstream</a>
also has an interesting renderer that uses a point cloud representation instead
of polygons. <a href="http://graphics.ethz.ch/pointshop3d/">Pointshop3D</a>
is a package that performs interactive editing of point-based surfaces.
<a name="pipeopt">
<h2> Pipeline Optimization</h2>
NVIDIA has a profiling tool called <a href="http://developer.nvidia.com/object/devnews013.html">NVPerfHUD</a>, available to registered developers. John Spitzer's slides about bottleneck detection are <a href="http://developer.nvidia.com/docs/IO/8343/Performance-Optimisation.pdf">available at NVIDIA's site</a>.
ATI has a presentation about <a href="http://www.ati.com/developer/techpapers.html">Direct3D Performance</a>
from GDC 2003. <p><a href="http://www.entechtaiwan.com/ps.htm">PowerStrip</a> is a shareware program
which provides a huge number of controls over a wide range of graphics cards. What's particularly useful for pipeline optimization is that you can reduce
the speed of the GPU and see its effect on performance.
<p>
</a> <a href="http://www.d6.com/users/checker/misctech.htm">Chris Hecker</a> has
written a number of excellent articles on compilers and speed-up techniques for
the PC. For example, his <a href="http://www.d6.com/users/checker/pdfs/gdmcomp2.pdf"><I>More
Compiler Results, and What To Do About It</I></A> article shows how the simple
operation of transforming a set of three vectors by a matrix could be made 3 times
faster by trying different forms of the same code. Haim Barad presented an <a href="http://www.gamasutra.com/features/20000131/barad_01.htm">optimized
matrix library (with source) for the Pentium III.</a> For extensive coverage of
how compilers optimize source code, see the <a href="http://www.nullstone.com/htmls/category.htm">Nullstone
site</a>. Tomas Arce has an interesting article on <a href="http://www.flipcode.com/tutorials/tut_fastmath.shtml">optimizing
a C++ vector class</a>, building and improving upon Jim Blinn's <i>Optimizing
C++ vector Expressions</i> article in IEEE CG&A.
<p> Though dated, the <a href="http://www.west.net/%7Ebrittain/3dsmax2.htm">3D
Studio MAX R2 display architecture</a> page is a fascinating case study (as
is the <a href="http://www.west.net/%7Ebrittain/3dsmax1.htm">R1 page</a>), showing
how a wide range of hardware is accommodated in making a modeler's user interface
fast. It talks about pipeline optimization issues, software vs. hardware acceleration,
Direct3D vs. OpenGL, and much else of interest.
<p>An article on <a href="http://gamasutra.com/features/19991221/barad_01.htm">cleaning
memory and partial register stalls</a> discusses assembly level optimizations
for Intel processors. There are tons of <a href="http://www.azillionmonkeys.com/qed/asm.html">articles
and resources for x86 assembler</a>. Michael Herf has a solid article about <a href="http://www.stereopsis.com/FPU.html">floating
point precision control</a> and in-depth coverage of fast float to int conversion.
Michael has other <a href="http://www.stereopsis.com/graphics.html">nice optimization
tricks</a> on his page. Rob Wyatt has a practical overview of the <a href="http://www.gamasutra.com/features/wyatts_world/19990528/pentium3_01.htm">Pentium
III architecture</a>. Baker and Pallister discuss <a href="http://www.gamasutra.com/features/19990326/katmai_01.htm">optimizing
games</a> on the Pentium III. Zohar and Barad discuss the use of SSE (Katmai)
instructions in <I><a href="http://gamasutra.com/features/19990416/intel_simd_01.htm">Implementing
a 3D SIMD Geometry and Lighting Pipeline</a></I>, and Gross has an article on
<a href="http://gamasutra.com/features/19990730/sse_prefetch_01.htm">Pentium
III prefetch optimizations</a>. The slides and other materials for the SIGGRAPH
courses <a href="http://optimizations.webjump.com/"><I>Aggressive Performance
Optimizations for 3D Graphics</I></a> and <a href="ftp://ftp.sgi.com/sgi/opengl/contrib/cok/s2001/index.htm"><I>Developing
Efficient Graphics Software</I></a> are available online. AMD's <a href="http://www.3dnow.net/">3DNow!
technology</a> speeds a number of common graphics operations. Dr. Dobb's Journal
has an article about <a href="http://www.ddj.com/documents/s=882/ddj0008c/">optimizing
for 3DNow!</a>, with the code listings available online. The <a href="http://msdn.microsoft.com/vstudio/downloads/ppack/default.asp">processor
pack</a> for Visual C++ 6.0 provides support for 3DNow! and SSE instruction
sets. Intel has a free <a href="http://developer.intel.com/design/Pentium4/devtools/">approximate
math library</a>, with source, for fast math function calculation with SSE.
Intel has a tutorial on <a href="http://www.intel.com/software/products/college/sse2_3d/index.htm">optimizing
double-precision 3D transforms</a> using SSE2.
Other assembly language related
information can be found in the <a href="http://directory.google.com/Top/Computers/Programming/Languages/Assembly/x86/FAQs,_Help,_and_Tutorials/">Google
Directory</a>.
<p> An in-depth article on various <a href="http://www.azillionmonkeys.com/qed/sqroot.html">sqrt()
replacements</a> is available on A Zillion Monkeys. See the <a href="http://tog.acm.org/GraphicsGems/">Graphics
Gems</a> series for code for quicker square roots and inverse square roots (search
the <a href="http://tog.acm.org/GraphicsGems/AllGems.TOC">tables of contents</a>
for "square"). On Intel processors, sqrt() takes about 70 cycles, and reciprocal
square root 109 cycles through the FPU (according to <a href="http://developer.nvidia.com/">Huddy's
Scalability talk</a>, which has some other good code optimization techniques).
Richard Huddy of NVIDIA has provided us with their <a href="sqrt.c">improved
fast square root code</a>. It avoids the odd/even exponent headaches of Lalonde's
<I><a href="http://www.graphicsgems.org">Graphics Gems</a></i> approach by using
the low order bit of the exponent as a part of the look up table, too. <font color="#7a357a"><a href="http://www.math.purdue.edu/~clomont/Math/Papers/2003/InvSqrt.pdf">Look here</a> for a paper by Chris Dumont
for an in-depth discussion and comparison of fast inverse square root computation.</font>
<p> Gamasutra has an article about using <a href="http://gamasutra.com/features/19990409/cache_01.htm">cache
memory</a>, something that can make a huge difference in performance. It is
also important to <a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/dc/games/optimization/20410.htm">perform
AGP writes correctly</a>. Hixon discusses <a href="http://www.gamasutra.com/features/20020802/hixon_01.htm">general memory management principles</a> for game consoles.
<p><a href="http://softwire.sourceforge.net/">SoftWire</a> is a tool for compiling optimized
inner loops for software renderers.
<p> Intel's <a href="http://developer.intel.com/software/products/vtune/index.htm">VTune</a>
is a popular inner loop optimization tool, with a <a href="http://developer.intel.com/software/products/global/eval.htm">free 30-day evaluation</a> for Windows and Linux. Andi Smithers has an <a href="http://www.gamasutra.com/features/20021023/smithers_01.htm">article at Gamasutra</a> about the
latest version of VTune.
There are many general code profiling
tools, such as <a href="http://www.compuware.com/products/devpartner/visualc/truetimevc.htm">NuMega's
<I>TrueTime</I></a> and <a href="http://directory.google.com/Top/Computers/Programming/Software_Testing/Software_Testing_Tools/">others</a>.
<a name="polytech">
<h2> Polygonal Techniques</h2>
</a>
<p><a href="http://www.cs.unc.edu/%7Edm/CODE/GEM/chapter.html">Narkhede and Manocha's
polygon tessellator code</a> in <I>Graphics Gems V</I> has been improved to
handle holes. O'Rourke has a <a href="http://cs.smith.edu/~orourke/books/ftp.html">tessellator</a>
available online, from his (wonderful) book <i>Computational Geometry in C</I>,
but it is mostly for educational purposes. <a href="http://www.cosy.sbg.ac.at/~held/publications.html">Held</a>
has a paper on the current state of polygon triangulation research, as well
as his own solution. Or just have <a href="http://www.flipcode.com/tutorials/tut_tesselation.shtml">OpenGL
do your tessellation for you</a>. Incidentally, we've heard it said that the
<a href="http://oss.sgi.com/projects/ogl-sample/">SGI reference implementation
triangulator</a> seems more robust than <a href="http://www.mesa3d.org/">Mesa's</a>.
<a href="http://www.cgal.org">CGAL</a> has a computational geometry bias, but
supports many operations on polygonal models. If you need meshes with various
constraints (e.g., avoiding long, thin polygons), try Jonathan Shewchuk's <a href="http://www-2.cs.cmu.edu/%7Equake/triangle.html">Triangle</a>
software.
<p>There are a number of free modelers available for low-polygon-count models, such as <a href="http://sourceforge.net/projects/aztec/">Aztec</a> (<a href="http://aztec.sourceforge.net/aztec.php">feature set here</a>), <a href="http://www.swissquake.ch/chumbalum-soft/ms3d/index.html">MilkShape 3D</a>, and <a href="http://sourceforge.net/softwaremap/trove_list.php?form_cat=109">many others</a>.
<p> For file format information, start at <a href="http://www.wotsit.org/">Wotsit's
Format</a> or the <a href="http://www.dcs.ed.ac.uk/home/mxr/gfx/index-hi.html">Graphics
File Format Page</a>; for CAD files see the <a href="http://www.cadcamcenter.com/cadcam/toc.htm">CADCAM
Information Center</a>.
<font color="#a043a0">Check out the <a href="http://collada.org/">COLLADA</a> project (involving many large companies),
which is a file format that will include, among other things, some support for programmable shading.</font>
For translating various file formats, 3D Links has a good <a href="http://www.3dlinks.com/software_converters.cfm">list
of available software</a>. If you need large models for testing algorithms,
visit the <a href="http://www.cc.gatech.edu/projects/large_models/">Large Geometric
Models Archive</a>. For particular objects, you might check the free collections
at <a href="http://www.3dcafe.com/">3D Cafe</a>, and <a href="http://www.help3d.com/">Help3D</a>.
<p> Nate Robins has an interesting online document on <a href="http://www.cs.utah.edu/~narobins/smooth.html">surface
smoothing</a>. Gavin Bell describes a bit more about how to get the <a href="http://tog.acm.org/resources/RTNews/html/rtnv7n5.html#art16">normals
to point outwards</a>, along with sample code.
<p>Search <a href="http://developer.nvidia.com">NVIDIA's
developer site for OpenGL vertex array range and fence
extension information, and for DirectX vertex buffer information.
<p>NVIDIA has a number of
<a href="http://www.nvidia.com/object/presentations.html">presentations
from GDC 2003</a> about batching, buffers, and the proposed <a href="http://developer.nvidia.com/docs/IO/8229/Data-Xfer-Store.pdf">superbuffers</a> OpenGL extension.
<p> There are a number of papers summarizing simplification research to date.
<a href="http://www.cs.virginia.edu/%7Eluebke/publications/pdf/cg%2Ba.2001.pdf">Luebke's</a>
is a good one (and the most recent), but there are also summaries by <a href="http://www.cs.cmu.edu/%7Egarland/">Garland
and Heckbert</a>, <a href="http://www.acm.org/crossroads/xrds3-4/levdet.html">Krus
et al.</A>, <a href="http://www.cs.unc.edu/~eriksonc/Research/Paper/Index.html">Erikson</a>
(look for "Overview"), <a href="http://cs.smith.edu/%7Eorourke/papers.html">O'Rourke</a>
("Column 33"), and <a href="http://www.cg.tuwien.ac.at/studentwork/VisFoSe98/msh/">Hadwiger</a>.
<p> <a href="http://gts.sourceforge.net/">GTS</a> is an open-source, LGPL polygonal
manipulation library that does VIPM, stripification, hierarchical bounding box
generation, and more.
<p>For more information on multiresolution modeling and simplification, <a href="http://www.cs.cmu.edu/~garland/multires/index.html">Garland
and Heckbert's site</a> has links to older papers, free and commercial software,
bibliography, and more. Garland's <a href="http://graphics.cs.uiuc.edu/%7Egarland/software/qslim.html">QSlim</a>
is one of the fastest algorithms for simplification (but is GPL). Mark
Duchaineau's free <a href="http://www.cognigraph.com/LibGen/">LibGen</a> has
simplification code buried in it (see the "surf" library and "surftools"
commands). <a href="http://www.melax.com/polychop/index.html">Melax's free demo</a>
does a good job of showing decimation and geomorphs in action. His <a href="http://www.melax.com/polychop/feedback/index.html">feedback
page</a> is also interesting, in that it discusses practical problems and solutions
concerning mesh decimation. Another free mesh simplifier is available at <a href="http://klaudius.free.fr/">The
Klaudius Page</a>. Commercial versions include <a href="http://www.awaron.de/">Awaron's
<i>RXpolyred</i></a> decimator, <a href="http://www.sim.no/">Systems in Motion's
<i>Rational Reducer</i></a>, and <a href="http://www.trianglesoftware.com">Triangle Software's</a>. Intel has tutorials
on <a href="http://or1cedar.intel.com/media/training/anim_mrm/tutorial/index.htm">multi-resolution meshes</a> and <a href="http://or1cedar.intel.com/media/training/detail_level_sds/tutorial/index.htm">subdivision surfaces</a>, for use in <a href="http://www.macromedia.com/software/director/">Shockwave
Studio</a>.
<font color="#c850c8">Martin Isenburg has a <a href="http://www.cs.unc.edu/~isenburg/pmc/pmc.html">benchmark model compressor</a> where you can set the number of bits per coordinate and
view the results of using <a href="http://www.cs.unc.edu/~isenburg/research/polygonmeshcompression/">his algorithm</a>.</font>
<p> <a href="http://research.microsoft.com/~hoppe/">Hoppe's site</a> has a number