home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / info / rtnews / rtnv5n2 < prev    next >
Encoding:
Text File  |  1994-10-16  |  87.9 KB  |  1,866 lines

  1.  _ __                 ______                         _ __
  2. ' )  )                  /                           ' )  )
  3.  /--' __.  __  ,     --/ __  __.  _. o ____  _,      /  / _  , , , _
  4. /  \_(_/|_/ (_/_    (_/ / (_(_/|_(__<_/ / <_(_)_    /  (_</_(_(_/_/_)_
  5.              /                               /|
  6.             '                               |/
  7.  
  8.             "Light Makes Right"
  9.  
  10.               August 26, 1992
  11.             Volume 5, Number 2
  12.  
  13. Compiled by Eric Haines, 3D/Eye Inc, 2359 Triphammer Rd, Ithaca, NY 14850
  14.     erich@eye.com
  15. All contents are copyright (c) 1992 by the individual authors
  16. Archive locations: anonymous FTP at princeton.edu (128.112.128.1)
  17.     /pub/Graphics/RTNews, wuarchive.wustl.edu:/graphics/graphics/RTNews,
  18.     and many others.
  19. UUCP archive access: write Kory Hamzeh (quad.com!avatar!kory) for info.
  20.  
  21. Contents:
  22.     Introduction - SIGGRAPH roundtable, etc
  23.     New People, New Addresses, etc
  24.     BSP Traversal Errata, by Kelvin Sung
  25.     The Art of Noise, by Steve Worley
  26.     Ray Tracing Roundup, by Eric Haines
  27.     Graphics Gems III Residency Mask errata, by Joe Cychosz
  28.     Any Future for Efficiency Research?, by Eric Haines
  29.     NuGrid Update, by Mike Gigante
  30.     ======== USENET cullings follow ========
  31.     Spline Patch Ray Intersection Routines, by Sean Graves
  32.     Xdart, from Mark Spychalla
  33.     4D Space Viewing Software, by Steve Hollasch
  34.     BYU Modelling and Visualization Package - Free Demo, by Stacey D. Son
  35.     New Radiosity Program Available, by Guy Moreillon
  36.     Optics Lab Information, by Anthony Siegman
  37.     Ray Tracing (or Casting) Applications, by Tom Wilson
  38.     Goofy (?) Idea, Gary McTaggart
  39.     Constant Time Ray Tracing, by Tom Wilson, Eric Haines, Brian Corrie, and
  40.     Masataka Ohta
  41.     VLSI for Ray Tracing, by Kenneth Cameron, George Kyriazis, Peter De Vijt,
  42.     Jon Leech, Sam Uselton, Thierry Priol, and "Dega Dude"
  43.     The Moon Revisited, by Tom Duff
  44.     Soft Shadow Ideas, compiled by Derek Woolverton
  45.     Book Announcement: Multiprocessor Methods for Computer Graphics Rendering,
  46.         by Scott Whitman
  47.  
  48. -------------------------------------------------------------------------------
  49.  
  50. Introduction
  51.  
  52. Before you hit that "next article" key, at least check out Steve Worley's
  53. article "The Art of Noise".  This is one of the better articles that's been in
  54. the Ray Tracing News, full of interesting bits of advice on using the noise
  55. function effectively for texturing.
  56.  
  57. As usual, SIGGRAPH was fun this year.  Ray tracing is becoming fairly common,
  58. with many rendering packages having it available.  The idea of saving each ray
  59. intersection tree at each pixel is spreading:  Intergraph has had this for
  60. years, and now TDI has added it to their renderer (see Sequin & Smyrl,
  61. SIGGRAPH '89, for the basic technique).  We'll undoubtedly see more of this in
  62. years to come, given that main memory is increasing much faster than screen
  63. resolution.
  64.  
  65. My favorite product was Fractal Painter, which is the most paint-like paint
  66. program I've seen yet.  Nothing to do with ray tracing, but it was cool...
  67.  
  68. One interesting business has arisen in the past year or so:  selling digitized
  69. models.  Viewpoint Animation Engineering has a nice glossy catalog of models
  70. ranging from pterodactyls to spinal cords to eighteen wheelers (and I dare you
  71. to render a scene with all three).  At the show they were giving out demo
  72. disks of Al Capone related datasets:  a '32 Packard, a violin case, a
  73. tommygun, an antique lamp, and a cartoon Al.  No normals per vertex (it's
  74. unclear if their other models have these or not) and no normal per polygon
  75. (most polygons were consistently one way, though I found a few were reversed -
  76. ugh).  Prices listed are in the hundreds of $$$, but these seem fairly
  77. variable, partially depending on your use:  one folder puts various vehicles
  78. at $300-$500 a piece, but another folder offered 20 vehicles for $395 total.
  79. You figure it out:  call them at 1-800-DATASET.  They also do custom
  80. digitizing, running around $1000 per model.  Another company that sells 3D
  81. models (primarily architectural related items, geographic data, and people)
  82. and does digitizing is Acuris at 415-329-1920.
  83.  
  84. Graphics Gems III is out, and contains some nice tidbits on ray tracing and
  85. many other topics.  I particularly like Ben Trumbore's gem for computing tight
  86. bounding volumes for quadrics and tori.  There are some truly gem-like, sharp
  87. thoughts, like Andrew Woo's clever method of avoiding epsilon problems when
  88. using shadow maps.  Plus lots of other great stuff.  And at last, you can find
  89. out what the Gems III code on princeton.edu:/pub/Graphics/GraphicsGems/GemsIII
  90. actually does!  Gems IV will be edited by Paul Heckbert, and is due out in two
  91. years.  Academic Press would like to have one out every year, but the editors
  92. felt that this might lead to diminishing overall quality.
  93.  
  94. One of my recent discoveries in Graphics Gems II (reprinted in Gems III) is
  95. Steve Hollasch's set of macro routines for vector manipulation.  They're easy
  96. to overlook, but quite compact and useful:  two of them (Vec2Op and Vec3Op)
  97. replaced dozens of macros in our old vector manipulation macro library.  Check
  98. them out!  The Gems series is interesting in that there is a lot of knowledge
  99. crammed into each book, and it sometimes takes a little exploration to find
  100. (or stumble upon) some of the wonderful ideas and tricks therein.
  101.  
  102. Two nice things have been happening in ray tracing over the past year.  One is
  103. that wuarchive.wustl.edu:/graphics/graphics has become a good collection site
  104. for various graphics information.  It includes Radiance, a good chunk of the
  105. NCSA programs, many object databases, 31 megs of ray-tracing stuff and the
  106. milton.u.washington.edu virtual worlds archive.  wuarchive recently got a new
  107. drive, which allowed the graphics archive to hop to over 300 megs.  Write to
  108. George Kyriazis <kyriazis@rdrc.rpi.edu>, who is maintaining the graphics
  109. area, if you see something that's old or missing.
  110.  
  111. The other trend is that Rayshade is becoming a testbed for other researchers'
  112. efficiency schemes.  Erik Jansen (fwj@duticg.tudelft.nl) and Wim de Leeuw have
  113. made their BSP traversal code publicly available (see RTNv5n1), Mike Gigante
  114. plans on releasing his NuGrid code as soon as his research paper is accepted,
  115. and there is one researcher who has implemented Arvo & Kirk's 5D scheme using
  116. Rayshade as a base.  This is a wonderful development, in that good code for
  117. various efficiency schemes for one ray tracer are becoming available and so
  118. can be used as the basis for meaningful timing tests.  Such things as
  119. simulated annealing may become easier to explore, since a variety of
  120. interchangeable efficiency schemes will become commonly available.
  121.  
  122. To wrap it up, here is the first paragraph of the Acknowledgements of David
  123. Jevans' interesting Master's thesis (which uses nested grids for efficiency),
  124. "Adaptive Voxel Subdivision for Ray Tracing," Dept. of Computer Science,
  125. Univ. of Calgary, 1990:
  126.  
  127.     As a young, overfunded graduate student, I would often pass idle
  128.     hours drinking medicinal alcoholic concoctions, and firing shotgun
  129.     blasts at pieces of paper nailed to the side of the university's
  130.     orgone accumulator outhouse.  Imagine my surprise when I discovered
  131.     that the performance graphs of my ray tracing algorithms exactly
  132.     matched the patterns blasted into those pellet ridden sheafs!
  133.     Seeing this as a sign of divine acceptance, of some kind of grand
  134.     conjunction of information, I collected my results into the volume
  135.     of forbidden knowledge that you hold before you.
  136.  
  137. -------------------------------------------------------------------------------
  138.  
  139. New People, New Addresses, etc
  140.  
  141. Rob LaMoreaux
  142. 907 Wisconsin Ave.
  143. St. Joseph, MI 49085
  144. (616)-982-3187 work
  145. (616)-983-1743 Home
  146. r.lamoreaux@mi04.zds.com
  147. Raytracing Interest: Creating pictures and eventually short animations
  148.  
  149. I'm using POV to create scenes, and would eventually like to create short
  150. animations.  I try not to program much, but I have been thinking about a
  151. Visual basic front end to launch POV (depends on time (not much available),
  152. ambition and whether someone does it first).  Interested in object files and
  153. object creation utilities (I'm too lazy and impatient to hand assemble things
  154. out of triangles).  Some of the objects I am interested in are:  Cars
  155. (especially racing), houses, landscaping, bicycles, sailboards, a sewing
  156. machine, and anything else interesting to look at.
  157.  
  158.  
  159. # Abe Megahed - interested in issues of scene complexity,
  160. #  global illumination, ray tracing data structs in animation
  161. # University of Wisconsin
  162. # 1413 Mound St
  163. # Madison, Wisconsin 53711
  164. # (608) 256-6306
  165.  
  166. -------------------------------------------------------------------------------
  167.  
  168. BSP Traversal Errata, by Kelvin Sung (ksung@cs.uiuc.edu)
  169.  
  170. The Gem we wrote for GemsIII ("Ray Tracing with The BSP Tree", pp.  271-274)
  171. did not reflect enough credit from Erik Jansen's past work.  Erik Jansen
  172. pointed out to me that the algorithm (in our Gem) is exactly the same (except
  173. for some small details) as the method suggested in Jansen(1986) and therefore
  174. the sentence on page 272 (of GemIII):
  175.  
  176.    (...) the recursive ray traversal algorithm introduced independently by
  177.    Jansen (1986) is a different implementation of the same tree walking idea.
  178.  
  179. should be removed. The sentence on page 271 should be read as:
  180.  
  181.    It is straightforward to implement the Recursive Ray Traversal Algorithm as
  182.    proposed by Jansen(1986) and Arvo(1988) on a BSP tree.
  183.  
  184. I thought the date of the work (Jansen 1986 vs Arvo 1988) shows that Erik
  185. Jansen was the one who first introduced the algorithm.  The fact that his work
  186. was referenced later than Arvo's in that Gem may cause confusion and thus may
  187. not reflect enough credit from Jansen's past work.  This is a mistake and
  188. should be corrected.
  189.  
  190. [Note:  Erik Jansen and Wim de Leeuw have made their BSP code for Rayshade
  191. publicly available.  Write fwj@duticg.tudelft.nl for details. - EAH]
  192.  
  193. -------------------------------------------------------------------------------
  194.  
  195. The Art of Noise, by Steve Worley (spworley@netcom.com)
  196.  
  197. Using Perlin style 3D solid textures for algorithmic generation of surfaces
  198. can be very effective.  (The Perlin paper in '85 SIGGRAPH is the only
  199. reference you really need to implement them.)  Perlin describes an algorithm
  200. for fractal noise generation, the basis of MANY types of surfaces.  The big
  201. advantage of this method is that it is U-V independent:  it is a solid texture
  202. that takes (object) absolute coordinates.
  203.  
  204. Implementing this algorithm is really quite easy, but there are some small
  205. tweaks that can enhance the quality of the surface.  Assuming you have a
  206. noise-generation function (a smooth 3D interpolator given a lattice of values
  207. and derivatives:  Graphics Gems II has the code for a routine by Greg Ward to
  208. do just this) you will often want to make "fractal" noise by summing over many
  209. scales of the noise function.  By decreasing the characteristic size of each
  210. scale as well of the amplitude of those summed scales, after about 5 or 6
  211. scales you'll have a function that will have details on many different size
  212. ranges.  This function (when expressed as a greyscale or even thresholded)
  213. has a cloudy appearance:  there are blobs of diffuseness with soft, ragged
  214. edges.
  215.  
  216. How to use these noise fields to make textures is pretty straightforward:
  217. Perlin gives many examples and there was even an entire course at '92
  218. SIGGRAPH.  I've implemented nearly 50 textures that use fractal noise, and
  219. I've learned some tricks.
  220.  
  221. The biggest problem with the algorithm described above is that there are
  222. artifacts.  You are interpolating over a cubic lattice, and you'll be able to
  223. SEE that lattice especially if you look at just one scale function.  One trick
  224. I use to remove these artifacts is to make the fractal noise more isotropic by
  225. rotating each summed scale to a random orientation.  Since the lattices of the
  226. different scales don't line up, the artifacts will at least be uncorrelated
  227. and a lot less noticeable.  I do this by rotating each scale with a random,
  228. precomputed, rotation matrix.  If you want to return derivatives (for bump
  229. mapping) you'll have to post-multiply the result from each scale with the
  230. appropriate inverse rotation matrix before you add them.
  231.  
  232. I made these matrices by generating random rotation matrices, and taking only
  233. those that point inside a single octant of a sphere.  Since a 90 degree
  234. rotation (or 180 or 270) will still let the lattices match up, a single octant
  235. is the most rotation that is necessary.  [Note that these are full 3D
  236. rotations, not 2D, but you know what I mean.]  Keeping the rotations to this
  237. smaller angle lets you see that there are not two similar rotations for
  238. different scales.  (Remember this is a one-time precompute:  you can manually
  239. sort through about 10 of these and you're done.)  To test what octant a
  240. rotation matrix maps to, just pump the vector (1 0 0) through the matrix and
  241. look for a vector with all positive components.  You can generate the rotation
  242. matrices using the algorithm(s) in Graphics Gems III by Ken Shoemake and Jim
  243. Arvo.
  244.  
  245. This rotation trick is most useful when bump mapping, since the
  246. differentiation really exposes the lattice artifacts:  there are sharp
  247. discontinuities of the second derivatives along the lattice lines.  When you
  248. differentiate for bump mapping, these second derivatives become FIRST
  249. derivatives and are visible.
  250.  
  251. ----
  252.  
  253. When you are summing the scales, each scale will have a size and amplitude
  254. which is a fixed ratio of the scale size and amplitude of the previous scale.
  255. The natural scale to use is 0.5, but DON'T USE THIS.  Better to use
  256. 0.4857463537 or 0.527849474673 which will give you the same effective ratio.
  257. A ratio of exactly 0.5 will help the different scales "register" more
  258. effectively (the small scale repeats exactly twice on top of the larger
  259. scale,) so artifacts can appear periodically.  By using the odd number, the
  260. periodicity is broken.
  261.  
  262. ----
  263.  
  264. A couple of other tricks also makes more useful noise.  MAKE A SPECIAL CASE.
  265. Half of the time when you use noise, it is on a flat surface, like woodgrain
  266. on a table top.  If you make a 2D version of fractal noise, it will be over
  267. twice as fast as a 3D version (which basically computes two "layers" of noise
  268. and interpolates.)  I have a special case that checks for the Y (vertical)
  269. component to be 0, and branches off into a special case subroutine.  If you're
  270. clever, you can even make the 2D special case be a perfect subset of the 3D
  271. case:  that is, the SIDES of the tabletop will call the 3D noise routine but
  272. they will mesh up with the 2D version which is called for the TOP of the
  273. table.  [Easiest way to be clever:  take your original code, globally replace
  274. the variable "Y" with 0, then have fun in Emacs removing all the terms that
  275. vanish.  This guarantees that your special case will match up with your
  276. general 3D routine, but you won't have to think too hard about how to
  277. implement it.]  Only one disadvantage to this technique:  the rotation
  278. matrices (from the previous idea) will make even a flat tabletop have Y!=0.
  279. You can either change your rotation matrices to be only 2D (spins around the Y
  280. axis), live without the rotation enhancement, or live with the slower
  281. computation.  Your call.  My implementation let the user decide, with the
  282. default being NOT to use rotations.
  283.  
  284. ----
  285.  
  286. Yet another trick.  NORMALIZE your noise.  Ideally, you want the fractal
  287. noise, no matter how many scales or what scale size or ratio you use, to
  288. return a value over the same range.  This is easy to do:  just divide the
  289. final sum by the square root of the sum of the squares of all the amplitudes
  290. of the scales.  This makes it a lot nicer when you are tweaking textures:  the
  291. relative amounts of colors or size of the bumps won't be affected when you
  292. change the scale or amplitude ratio or number of summed scales.
  293.  
  294. ----
  295.  
  296. For user convenience, you might even want to make another type of
  297. normalization.  One common use of the fractal noise value is to feed the value
  298. into a color spline.  If a user sets the "levels" of the color spline, it can
  299. be VERY difficult for them to set the levels right in order to get the
  300. "coverage" they need.  If they want to make white clouds on a mostly blue sky,
  301. what value does they choose for the threshold where white starts being added?
  302. I solved this problem by computing 25,000,000 values of noise and making a
  303. probability distribution (just a histogram.)  By recording the different
  304. percentiles (5% of the noise values are under this number, 10% under this
  305. one....  95% under this one..)  I was able to get a PERCENTAGE mapping of the
  306. distribution.  When a user wants the sky to be 90% blue, they say that the
  307. white color should be added starting at 0.90.  The program maps this value
  308. 0.90 back into the corresponding noise value, and the user gets the 90%
  309. coverage they asked for.  (I have noise that returns a value from -1 to 1, but
  310. most values are clustered around 0.  90% corresponds to a value of 1.442 in my
  311. implementation.)  This convenience is no real computational load, but for the
  312. user, it makes using the texture a LOT more intuitive.
  313.  
  314. Using Perlin fractal noise is an art, but it is a very effective way to make
  315. complex surfaces.  Good luck!
  316.  
  317. And for the curious, my textures are a commercial product, sorry, I can't give
  318. you the code.  :-)
  319.  
  320. -------------------------------------------------------------------------------
  321.  
  322. Ray Tracing Roundup, by Eric Haines
  323.  
  324. The computer graphics archive that is resident on iear.arts.rpi.edu is being
  325. moved to wuarchive.wustl.edu.  The FTP directory is graphics/graphics.  In
  326. that directory there is a CONTENTS file that gives a roadmap of the
  327. directories, and also an ls-lR file giving exact pathnames.  Note that a book
  328. errata directory has started here - authors, please send George your errata.
  329. Currently errata for "An Introduction to Ray Tracing" and "Digital Image
  330. Warping" are available, with more expected.  In case you don't know, you can
  331. NFS mount the wuarchive directories if you'd like.  Right now there are more
  332. than 500 systems mounting it.  Contact:  George Kyriazis
  333. <kyriazis@rdrc.rpi.edu>.
  334.  
  335.  
  336. The fabled POV v1.0 ray tracer (a.k.a. son of DKBtrace) is finally available,
  337. being released just before SIGGRAPH.  It's available on alfred.ccs.carleton.ca
  338. [134.117.1.1]:pub/pov-ray, on the BBS 'You Can Call Me Ray' in North Chicago
  339. suburbs (708-358-5611), and on Compu$erve.
  340.  
  341. There is also a mailing list for POV and DKBtrace.  To subscribe, send a mail
  342. containing the body:
  343.     subscribe dkb-l <Your full name>
  344. to listserv@trearn.bitnet  (yes, that's in Turkey).  You will then be added to
  345. the list, and every mail that you send to
  346.     dkb-l@trearn.bitnet
  347. goes to anyone else subscribed on the list.
  348.  
  349.  
  350. GIF and JPEG images of the SPD databases and some of my old thesis images are
  351. stored at ftp.ipl.rpi.edu [128.113.14.50] sigma/erich, nic.funet.fi (somewhere)
  352. and at gondwana.ecr.mu.oz.au [128.250.70.62] pub/images/haines.
  353.  
  354.  
  355. Lee Butler is attempting to create a texture library at his FTP site.  His
  356. interest is in 2 and 3 dimensional textures of materials suitable for surface
  357. texturing.  He is mostly interested in photographic quality textures and
  358. bump-maps.  He accepts data in most popular formats (TIFF, GIF, JPEG, etc),
  359. but may convert data in order to conserve disk space.  He'd like a little
  360. descriptive text to go with any textures you send, i.e.  just enough to
  361. identify what the subject matter is, what the image dimensions are, etc.
  362. Please make sure what you send is in the public domain (e.g.  scanned in
  363. pictures from books are not allowed, including Brodatz's well-known "Textures"
  364. book, which is copyright).  (contact Lee A.  Butler <butler@BRL.MIL>)
  365.  
  366.  
  367. On hanauma.stanford.edu is a 720x360 array of elevation data, containing one
  368. ieee floating point number for every half degree longitude and latitude.
  369. [This is quite nice! - EAH] (from Ken Chin-Purcell <ken@msc.edu>)
  370.  
  371.  
  372. Some scanned in Brodatz textures are available from cicero.cs.umass.edu:
  373. /texture_temp.  They are 512x512 grayscale.  (from Julien Flack
  374. <julien@scs.leeds.ac.uk>).
  375.  
  376.  
  377.  
  378. Colby Kraybill has placed texture maps from Hans du Buf
  379. (dubuf@ltssun1.epfl.ch) on pioneer.unm.edu [129.24.9.217]:  pub/texture_maps
  380. (from Colby Kraybill <opus@pioneer.unm.edu>) [these include aerial swatches,
  381. Brodatz textures, and synthetic swatches. - EAH]
  382.  
  383.  
  384. The Chapel Hill Volume Rendering Test Datasets, Volumes I and II are available
  385. for FTP from omicron.cs.unc.edu in pub/softlab/CHVRTD.  These include a 3D
  386. volume set for two heads, a brain, a knee, electron density maps for RNA and
  387. other molecules, etc.
  388.  
  389.  
  390. T3DLIB (the TTDDD model conversion package) is now at version 34 and is at
  391. hubcap.clemson.edu [130.127.8.1]:pub/amiga/incoming/imagine/TTDDDLIB.  There
  392. are 3D models in .../imagine/objects.  The converter now supports DXF format
  393. output.
  394.  
  395.  
  396. Version 4 of the collection of ray tracing abstracts is ready.  I've put it in
  397. several ftp sites (wuarchive.wustl.edu:graphics/graphics/ray or maybe bib).
  398. To get it, do the following:  get rtabs.11.91.shar.Z using binary mode,
  399. uncompress it, and then unshar it (sh rtabs.11.91.shar).  Then read READ.ME.
  400. The abstracts (RTabs) can be converted to two forms:  Latex (preferred) or
  401. troff -me.  The filters I've included may help you write your own if you need
  402. something else.  A second file (RTnew) contains just the added abstracts if
  403. you don't want to print the whole thing again.  There are now 306 abstracts.
  404. (from Tom Wilson <wilson@cs.ucf.edu>)
  405.  
  406.  
  407. After listening in on the fast rotation / wireframe discussion in
  408. comp.graphics.  I decided to release a simple 3D wireframe viewer that I wrote
  409. myself that runs under X11.  It is available via anonymous ftp at
  410. castlab.engr.wisc.edu (128.104.52.10) and is found as /pub/x3d.1.1.tar.Z .
  411. MIFF files of rendered objects are on castlab in /pub/rendered_objs.  More
  412. objects are on castlab in /pub/more_objs.  (from Mark Spychalla
  413. <spy@castlab.engr.wisc.edu>)
  414.  
  415.  
  416. The shadow buffer algorithm is now implemented in the SIPP rendering library.
  417. Version 3.0 is available from isy.liu.se (130.236.1.3), pub/sipp/sipp-3.0.tar.Z
  418.  
  419.  
  420. As part of Guy Moreillon's diploma project (Interactive Radiosity), he has
  421. created a scene made out of objects in OFF format.  It represents the inside
  422. of a house, with one big room and a smaller one, stairs going up, a couple of
  423. armchairs, a table, a kitchen chair, a fridge, and so on.  He uploaded it on
  424. gondwana.ecr.mu.oz.au as well as cs.uoregon.edu in the incoming directory
  425. (file house.tar.Z).  (from Guy Moreillon <moreillo@disuns1.epfl.ch>)
  426.  
  427.  
  428. fractint v17 will output a few raytrace formats (dkb/pvray, vivid, raw
  429. triangle mesh) from the 3d mapping function.  fraint17.exe will be on
  430. wuarchive.wustl.edu. (from Tony Audas <taudas@ais.org>)
  431.  
  432.  
  433. There is an enhanced version of Rayshade available at weedeater.math.yale.edu:
  434. incoming/ray406enh2.tar.Z.  It adds new blobbies, swept spheres, and all sorts
  435. of other things to the original (from Larry Coffin
  436. <lcoffin@clciris.chem.umr.edu>)
  437.  
  438. An Amiga version of Rayshade 4.0.6 is up for FTP at ab20.larc.nasa.gov
  439. (/incoming/amiga/Rayshade) and at weedeater.math.yale.edu
  440. (/incoming/AmigaRayshade).  Bug reports to me and I'll see who they originally
  441. belong to.  If they're mine, I'll fix'em, eh? (by Colin DeWolfe,
  442. <dewolfe@ug.cs.dal.ca>)
  443.  
  444. A distributed version of Craig Kolb's Rayshade 4.0 is available
  445. on ftp site princeton.edu as pub/Graphics/rayshade.4.0/etc/rayshade-rrlib.tar.Z
  446. It makes raytracing very much faster by dividing a frame or animation into
  447. squares, which are distributed on a unlimited number of servers. (from
  448. Wilfried Koch <bj030@aix370.rrz.uni-koeln.de>).
  449.  
  450.  
  451. The "art" raytracer has undergone some changes and now includes the addition
  452. of heightfields (as output by programs such as fracland), some additional
  453. capabilities for rendering algebraic surfaces, several new textures, a couple
  454. of speed ups and the usual collection of bug fixes.  Contributed scenes are
  455. available in pub/contrib/artscenes on gondwana and /graphics/graphics/echidna
  456. on wuarchive.wustl.edu.  Anyone wishing to contribute can place files in
  457. incoming on gondwana.  (from Eric H. Echidna <echidna@ecr.mu.oz.au>)
  458. [wuarchive.wustl.edu has this in graphics/graphics/echidna]
  459.  
  460.  
  461. There are new versions of the RTrace ray-tracer (version 7.3.2) and the scene
  462. translator SCN2SFF (version 1.3) at asterix.inescn.pt [192.35.246.17] in
  463. directory pub/RTrace.  Some bugs were fixed and new features added:
  464.     - 3D text (fonts, orientation, spacing, etc - high quality)
  465.     - CSG objects
  466. An MS-DOS version for use with DJGPP DOS extender (GO32) is in
  467. pub/RTrace/PC-386/rtrace.zip.  The pub/RTrace directory has been reorganized.
  468. There are new subdirectories with new images (medical, molecular, etc), scene
  469. converters and other tools.  [There have been further bug fixes and new
  470. features since then, but you get the idea - EAH] (from Antonio Costa
  471. <acc@basinger.inescn.pt>)
  472.  
  473.  
  474. Some more notes on reaction-diffusion textures (see last issue, this column):
  475. do a lint on Greg Turk's code before you run it, and you might also want to
  476. make sure your "random()" function works as he thinks it does (mine didn't - I
  477. changed to drand48()).  Note that Witkin & Kass's equation #5 also has a typo:
  478. it should be C(t+ delta t) - C(t) on the left side of the equation.  Also,
  479. Andrew Witkin says section 6.1's R function is a bit unstable.  I haven't got
  480. it to work, but Greg Turk's code does pretty much the same thing in a
  481. different way.
  482.  
  483.  
  484. Other new things (later in this issue) include spline patch ray intersection
  485. routines, 4D space viewing software, a distributed ray tracer, a free trial
  486. version of a modelling and visualization package from BYU, and a new radiosity
  487. program.
  488.  
  489. -------------------------------------------------------------------------------
  490.  
  491. Graphics Gems III Residency Mask errata, by Joe Cychosz
  492.     (3ksnn64@ecn.purdue.edu)
  493.  
  494. The following is a correction to "Use of Residency Masks and Object Space
  495. Partitioning to Eliminate Ray-Object Intersection Calculations"
  496.  
  497. Page 285 should read:
  498.  
  499.   By updating the ray mask as it passes from cell to cell, a quick
  500. determination of whether an object within the cell needs to be intersected can
  501. be made by simply ANDing the residency mask of the object with the (not the
  502. complement of) residency mask for the ray.
  503.  
  504. The process goes something like this:
  505.  
  506. ray_mask = 0
  507.  
  508. foreach (cell the ray passes through) {
  509.     foreach (object in the cell) {
  510.     if  (ray_mask & object_mask == 0) {
  511.         compute the ray-object intersection
  512.     }
  513.     }
  514.     update ray_mask marking for cell
  515. }
  516.  
  517. The important thing here is to mark the cell after it is processed.
  518.  
  519. -------------------------------------------------------------------------------
  520.  
  521. Any Future for Efficiency Research?, by Eric Haines
  522.  
  523. As far as the SIGGRAPH papers committee is concerned, efficient ray tracing
  524. seems to be pretty much a solved problem (i.e. no efficiency papers have been
  525. accepted in years).  To be fair, SIGGRAPH tends to present papers which break
  526. new ground; lately there haven't been any radical breakthroughs in efficiency
  527. research.  The research in this area has taken on more of an engineering feel,
  528. where there are incrementally better methods developed over time.
  529.  
  530. On one level, I tend to agree that efficiency is "solved":  grids,
  531. octrees/BSP, and automatic bounding volume hierarchy are all in the same
  532. ballpark.  However, Mike Gigante points out that raw speed is not the best
  533. qualification for a scheme.  Yes, if you tweak grid placement and run it at a
  534. variety of resolutions, you'll usually find that scheme is very fast, possibly
  535. faster than any other scheme.  The problem is that a typical user does not
  536. want to deal with efficiency tweaking at all, and so the best efficiency
  537. scheme may not be the fastest, but rather something near optimal that is
  538. automatic and will work in a wide range of environments without serious
  539. degradations in speed or memory usage.
  540.  
  541. As far as future research goes, I've yet to see much work on Jim Arvo's idea
  542. of simulated annealing applied to efficiency schemes (see the RTNews/RTNews1
  543. file).  His idea is that sometimes one scheme is significantly better than the
  544. others for a particular scene or part of an environment (see Kirk & Arvo's
  545. "Ray Tracing Kernel" paper from Ausgraph '88 for using multiple efficiency
  546. schemes).  For a single 1280x1024 image it may not be worth doing much
  547. analysis to determine which is the best efficiency scheme, but if you're doing
  548. an animation or an extremely high resolution image it may be worth spending
  549. more time up front to save time later.  Hybrid approaches may be the best
  550. overall solution, where objects or volumes have different efficiency schemes
  551. depending on predicted performance.  There's an interesting paper:
  552.  
  553.  H. K. Choi, C. M. Kyung, "PYSHA: a shadow-testing acceleration scheme for ray
  554.  tracing", Computer-aided design, vol. 24, no. 2, Feb. 1992
  555.  
  556. which talks about deciding which efficiency scheme to use on the fly by having
  557. a cost function approximate which will be cheaper.
  558.  
  559. It seems that the way in which space is filled is the main determinant of
  560. which scheme is most efficient.  Grids, for example, excel when the
  561. distribution of primitives is uniform.  Being able to quickly characterize how
  562. space is filled could allow choosing the best efficiency scheme.  Determining
  563. what the correlation between some distribution statistics and which scheme is
  564. fastest is probably trickier than characterizing the space itself.  There is
  565. also the problem of platform independence and attempting to determine what
  566. "fastest" means in a general sense (minimizing the number of intersection
  567. tests is a good start, but the costs of each scheme needs to be factored in).
  568.  
  569. Some interesting work is being done on speeding up ray-tracing for animation by
  570. using temporal coherence.  For example, Jevans paper in Graphics Interface '92:
  571.  
  572.     %A David Jevans
  573.     %T Object Space Temporal Coherence for Ray Tracing
  574.     %J Proceedings of Graphics Interface '92
  575.     %I Canadian Information Processing Society
  576.     %C Toronto, Ontario
  577.     %D May 1992
  578.     %P 176-183
  579.  
  580. is one of the latest in this area of research.
  581.  
  582. Another topic of interest which has not been explored much is efficient
  583. ray-casting for non-rendering related tasks.  Saul Youssef (see the ray
  584. tracing bibliography on the net) has researched shooting rays for high energy
  585. physics work, John Wallace and I wrote a paper about ray-casting for radiosity
  586. visibility testing, and there has been some work done for volume visualization
  587. ray tracing.  The assumption has been that "what's good for ray tracing is
  588. good for everything else" and that the current popular efficiency schemes are
  589. sufficient.  In our work on radiosity we have seen different sources of
  590. coherence which can be exploited in interesting ways.  If someone is doing a
  591. mass-properties study of an object by casting rays the problem can be
  592. restructured to minimize ray-object testing that is not normally available to
  593. a ray tracer, since we know in advance where all the rays will be traveling.
  594.  
  595. -------------------------------------------------------------------------------
  596.  
  597. NuGrid Update, by Mike Gigante (mg@godzilla.cgl.citri.edu.au):
  598.  
  599. Since I last sent you all mail about the performance tests on NUgrid [see last
  600. issue. -EAH], I have been burning the midnight oil and made some significant
  601. new developments (IMHO of course).
  602.  
  603. I was actually writing a paper (for SIGGRAPH) with the results as well as a
  604. better criteria for building the NUgrid (rather than the end of the bbox),
  605. when I worked out a technique for the totally automatic construction of
  606. NUgrids.  That is right -- even tho' NUgrid was much much less sensitive than
  607. grids in the selection of the grid resolution, it now builds a close to optimal
  608. NUgrid automatically.  In fact in many cases, the result is better than the
  609. best case performance in previous NUgrid versions.  All this was absolute last
  610. minute stuff!  Since we are so far away, the damn couriers wanted 4 working
  611. days to get it to pixar!!!  I only came up with the method 3 days before the
  612. paper had top leave (as I was starting to write up the previous stuff!!!).  I
  613. actually managed to crank all the code out and do a set of test cases.  I had
  614. the courier waiting by while I pasted in the results!!  Why do ideas come at
  615. awkward times?
  616.  
  617. I have spent the last couple of days cleaning up the paper and stuff, even
  618. tho' it won't get to the siggraph committee, I wanted to finish it off now
  619. while it was all fresh in my mind.  I am disappointed that the copy I sent
  620. was fairly rough, but boy were the results good!  I am now working on making
  621. the automatic method work even better.
  622.  
  623. I have included a couple of tables below.
  624.  
  625. BTW, we actually got the Octree stuff implemented also, it uses Samet's
  626. neighbour following stuff so traversal is very fast.  NUgrid still whips it in
  627. most cases and is very competitive in the other cases.  From these results,
  628. the uniform grid should be a dead duck.
  629.  
  630. BTW, I have tested over 60 datasets with each of the methods below, ranging
  631. from a few dozen polygons up to 880,000 independent phong triangles.
  632.  
  633. I plan to make all the code available after I know what is happening with the
  634. paper, if the results don't make up for the rather hurried nature of the
  635. paper, then I already have in my hands a very publishable newer version and I
  636. have no doubt it will get in somewhere.
  637.  
  638. Here are some results, all this was in rayshade, with
  639.  
  640. 1) Uniform grid (as per vanilla rayshade)
  641. 2) NUgrid 1 (as described in Ausgraph 90 paper, but with ray counter and
  642. raybounds optimizations (which rayshade's uniform grid had))
  643. 3) NUgrid 2 (as described in my paper submission - a different
  644. criteria for where to drop the dividing planes)
  645. 4) AutoNUgrid
  646. 5) Octree.
  647.  
  648. the first 3 were tested with resolution 4x4x4 -> 36x36x36 in increments of 2,
  649. AutoNUgrid had only 1 test config of course, Octree was tested with
  650. subdivision depth 2 (equiv to 4x4x4 grid/NUgrid) through to depth 10 (where we
  651. didn't run out of memory!!!).
  652.  
  653. Some of the bigger cases are still finishing their timings now, so within
  654. another week or so I can complete the tables.  Even so, the trend is very
  655. clear from the plots I have done of all the tests.  I am completing the test
  656. cases for completeness only.
  657.  
  658. Anyhow, here are the tables...
  659.  
  660. Best and worst case performance for SPD model Balls:
  661.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  662. Best  |    1286.75 |      476.09   |      421.30   |    737.32 | 21695.24
  663. Worst |   10510.54 |      2755.95  |      2895.47  |           |   895.49
  664.  
  665.  
  666. ... for SPD model Gears:
  667.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  668. Best  |    1935.06 |       2225.37 |     2129.30   |  2475.14  |  1844.92
  669. Worst |   25870.45 |      12116.60 |     7039.23   |           | 68208.26
  670.  
  671.  
  672. ... for SPD model Mount:
  673.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  674. Best  |     505.69 |      455.84   |     436.91    |  512.24   | 451.99
  675. Worst |    2059.52 |      1479.85  |    1326.74    |           | 9281.84
  676.  
  677.  
  678. ... for SPD model Rings:
  679.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  680. Best  |    799.76  |      918.94   |      767.40   |  811.32   |    760.52
  681. Worst |   4852.32  |     5376.37   |     4284.81   |           |  13688.93
  682.  
  683.  
  684. ... for SPD model Teapot:
  685.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  686. Best  |    345.39  |      344.60   |      336.09   |  491.06   |   357.74
  687. Worst |   3617.02  |     2492.49   |     2672.95   |           | 17756.98
  688.  
  689.  
  690. ... for SPD model Tetra:
  691.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  692. Best  |    79.13   |      77.45    |      75.45    |    98.29  |  123.64
  693. Worst |   348.72   |     242.01    |     245.11    |           | 1699.55
  694.  
  695.  
  696. ... for SPD model Tree:
  697.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  698. Best  |    5013.27 |      667.20   |    502.07     |    833.47 |   565.85
  699. Worst |   18763.96 |     5019.25   |   3670.67     |           | 25418.44
  700.  
  701.  
  702. ======== USENET cullings follow ===============================================
  703.  
  704. Spline Patch Ray Intersection Routines, by Sean Graves (sean@cs.tamu.edu)
  705.  
  706. I wrote some routines for raytracing patches.  They are based on a paper by:
  707.  
  708. Levner G, Tassinari P, Marini D (1987) A simple method for ray tracing bicubic
  709. surfaces.  In: Kunii TL (ed) "Theoretical Foundations of Computer Graphics and
  710. CAD", 1987, Springer, Tokyo, pp 805-814.
  711.  
  712. These routines can work with any bicubic patch such as a bezier, b-spline,
  713. cardinal, beta-spline, etc.  These are the routines that are in the library:
  714.  
  715.  *     NewPatch - Allocates the patch data structures and returns a pointer.
  716.  *     DefPatch - Defines a patch, given a patch pointer.
  717.  *     IsectPatch - Intersects a ray and a patch. Returns u, v, t, pnt.
  718.  *     NormalPatch - Given a patch and a u, v position, returns the normal.
  719.  *     FreePatch - Deallocates a patch.
  720.  *
  721.  *   Additionally, there is one useful routine not specific to patches:
  722.  *     BoxIntersect - Given a ray and a box, returns the intersection point.
  723.  
  724. These should give you the capability to raytrace a patch.  I have used them
  725. successfully in a raytracing package I wrote.  You can use them as is or
  726. use them as an example for your own code.
  727.  
  728. [these are in wuarchive in the ray subdirectory, spline-patch.tar.Z]
  729.  
  730. -------------------------------------------------------------------------------
  731.  
  732. Xdart, from Mark Spychalla (spy@castlab.engr.wisc.edu)
  733.  
  734. xdart, a distributed raytracer that runs under X11, is available via anonymous
  735. ftp at castlab.engr.wisc.edu (128.104.52.10) The clients are distributed as
  736. binaries and C source.  The servers are distributed as binaries ONLY for the
  737. following systems:
  738.  
  739.    DECstation
  740.    SPARCstation
  741.    NeXT
  742.    HP Snake (710)
  743.  
  744. You MUST have one of the above machine types in order to run the program.  I
  745. wrote the client and encourage anyone who wishes to modify the source and
  746. experiment with it.  Abe Megahed wrote the raytrace engine and does not wish
  747. to release its source code; thus, source for the server will not be
  748. distributed.
  749.  
  750. -------------------------------------------------------------------------------
  751.  
  752. 4D Space Viewing Software, by Steve Hollasch (hollasch@kpc.com)
  753.  
  754.     I'm releasing to the public domain two packages for 4D viewing.  These
  755. packages were developed in conjunction with my master's thesis at Arizona
  756. State University, entitled "Four-Space Visualization of 4D Objects", written
  757. May 1991.
  758.  
  759.     wire4 is a 4D wireframe package that takes geometry information from input
  760. files, and has such features as PostScript output, colored edges, depth-cued
  761. edges, real-time 3D and 4D rotations, and other little features.  wire4 uses
  762. the GL interface, so it runs on most GL platforms and quite a few others that
  763. support the GL interface.
  764.  
  765.     ray4 uses 4D raytracing to render hyperspheres, hypertetrahedra,
  766. hyperplanes, and hyperparallelepipeds.  ray4 runs on any platform that
  767. supports C with floating-point arithmetic, but the current package only has
  768. the display program for SGI workstations.  I have a display program for the
  769. Amiga, but it's not ready for release yet (I haven't yet uploaded it to work).
  770. In addition, Mark Craig has written a sunraster output file display program; I
  771. hope to release that soon also (let me know if you're interested).  The
  772. software is available by ftp from ftp.kpc.com /pub/graphics/holl91,
  773. /pub/graphics/ray4, /pub/graphics/wire4.
  774.  
  775. -------------------------------------------------------------------------------
  776.  
  777. BYU Modelling and Visualization Package - Free Demo, by Stacey D. Son
  778.  
  779. CQUEL.BYU (pronounced "sequel") is a brand new modelling and visualization
  780. package for the UNIX workstation.  Some of it's features include:  animation,
  781. raytracing, scientific visualization, interactive modelling and editing,
  782. quadric primitives, Bezier and NURBS surfaces, constructive solid geometry,
  783. texture mapping, graphical user interface, and free-form deformation to name a
  784. few.
  785.  
  786. The Engineering Computer Graphics Laboratory at Brigham Young University is
  787. offering a 30-day demonstration of this new software.  CQUEL.BYU will run on
  788. the following workstations under X-Windows:  SGI 4D, DEC Station 3100/5000,
  789. HP9000 700/800 series, SUN4/Sparc Station, and IBM RS6000.  Just send a tape
  790. or a $20 (US dollars) check to:
  791.  
  792.     Engineering Computer Graphics Laboratory
  793.     Brigham Young University
  794.     368 Clyde Building
  795.     Provo, UT  84602
  796.     PHONE:  801-378-2812
  797.     E-Mail: cquel@byu.edu
  798.  
  799. Also, please specify your machine type and operating system.
  800.  
  801. Stacey D. Son                           459 Clyde Building
  802. Operations Manager                      Provo, UT 84602
  803. Brigham Young University                Voice:(801)378-5950 FAX:(801)378-6586
  804. College of Engineering & Technology     Email: sson@ee.byu.edu
  805.  
  806. -------------------------------------------------------------------------------
  807.  
  808. New Radiosity Program Available, by Guy Moreillon (moreillo@disuns2.epfl.ch)
  809.  
  810.     There is a new radiosity program available on the network (one of the
  811. very few... radiosity seems to be less popular than ray-tracing...).
  812.  
  813.     Rad (as it is called) allows real-time walkthrough and interactive
  814. modification of the scene during computation. Textures are supported when
  815. hardware allows. The computation algorithm is based on progressive radiosity,
  816. and uses automatic patch subdivision to refine the solution.
  817.  
  818.     There is one small catch though: Rad only runs on SGI Workstations.
  819. Sorry about that, but I wasn't gonna rewrite a whole GL for X11.
  820.  
  821.     Rad is currently available on the following anonymous ftp sites:
  822. gondwana.ecr.mu.oz.au    in    pub/rad.tar.Z
  823. wuarchive.wustl.edu    in    pub/rad.tar.Z
  824.  
  825. -------------------------------------------------------------------------------
  826.  
  827. Optics Lab Information, by Anthony Siegman (siegman@EE.Stanford.EDU)
  828.  
  829. >Does anybody know of any public domain ray tracing program
  830. >i.e. for simulation of image formation through a user definable
  831. >lens.
  832.  
  833. "Optics Lab", an educational program available for about $35 from
  834.  
  835.     Intellimation Library for the Macintosh
  836.     P. O. Box 1530
  837.     Santa Barbara  CA  93116-1530
  838.  
  839.     800-346-8355
  840.     805-968-8899 (fax)
  841.  
  842. is not a super-high-powered lens design program but might be adequate for your
  843. application.  Includes a "lens cabinet" of user adjustable lenses, mirrors,
  844. and stops; click and drag to position elements on screen; use the mouse to
  845. launch individual rays or ray bundles, and see them propagate or bounce on
  846. screen.
  847.  
  848. -------------------------------------------------------------------------------
  849.  
  850. Ray Tracing (or Casting) Applications, by Tom Wilson
  851.  
  852. I'm curious about the number of areas that ray tracing can be used. Here's
  853. an initial list of applications that I know. Please add to it if you can.
  854. I've stuck to papers/research that I know about.
  855.  
  856. Image Synthesis (Rendering)
  857.   Advertising
  858.   Film Production
  859. Lighting Design
  860. Medical Imaging
  861. Molecular Modeling
  862. Relativity
  863. Acoustic Simulation
  864. Seismic Simulation
  865. Simulation and Training (flight/tank simulators, etc.)
  866.  
  867. ----
  868.  
  869. Howard Lo (hlo@orca.dallas.sgi.com) adds:
  870.  
  871. Antenna analysis
  872. Radar Cross Section analysis
  873.  
  874. ----
  875.  
  876. Davyd Norris (daffy@vaxc.cc.monash.edu.au) adds:
  877.  
  878. Attenuation and Multiple Scattering corrections for Neutron Diffraction
  879.  
  880. ----
  881.  
  882. Eric Haines adds:
  883.  
  884. Monte Carlo simulation of particle interactions in High Energy Physics -
  885.     Saul Youssef has a number of papers related to this topic.
  886.  
  887. ----
  888.  
  889. Steve Hollasch (hollasch@kpc.com) comments:
  890.  
  891. > Lighting Design
  892.  
  893.     Raytracing is only of limited use in lighting design.  It's good for
  894. casting shadows and dealing with reflections of light sources, but it
  895. fails for diffuse interreflection.  For this reason, radiosity is usually
  896. a better approach for lighting design, since it propagates light more
  897. realistically than raytracing.  The "best" approaches that I've seen
  898. attempt to marry the methods of ray tracing with radiosity.
  899.  
  900. > Medical Imaging
  901. > Molecular Modeling
  902. > Simulation and Training (flight/tank simulators, etc.)
  903.  
  904.     In my opinion, these areas are NOT best met with ray tracing, since
  905. they are better implemented in a dynamic fashion.  In fact, I don't
  906. believe I've _ever_ seen a simulator that uses a ray tracing method.  If
  907. you've got one up your sleeve, we'd LOVE to see it.  =^)
  908.  
  909. > Relativity
  910.  
  911.     This is a very good one.  Ray tracing has the advantage that of all
  912. other methods, it (IMHO) extends most easily to alternate geometries.
  913. This in fact is a good area to explore further.  I used ray tracing to
  914. render 4D geometry for my thesis, and was surprised by how straight-
  915. forward the implementation was.  Implementing the display of 4D objects
  916. with scanline (scanplane?) methods is anything but trivial, but raytracing
  917. 4D is delightfully simple.
  918.  
  919.     Other possible areas include:
  920.  
  921.     Rendering Translucent Densities
  922.     (clouds, gasses, liquids, etc.)
  923.  
  924.     Simple Optic Design
  925.     (using the refractive capabilities of raytracing).
  926.  
  927.     Mathematical Graphics
  928.     Since it is often easier to just intersect a surface via implicit
  929.     equations, rather than to tessellate some sort of representation of
  930.     the object.
  931.  
  932. ----
  933.  
  934. Iain Sinclair (axolotl@socs.uts.edu.au) comments:
  935.  
  936. Greg Ward's Radiance software does raytracing with diffuse interreflection,
  937. doesn't it?  It all depends on what you're trying to light (or design).
  938.  
  939. Straight radiosity looks strange in some circumstances, or simply
  940. isn't suitable. As you say, combinatory approaches are probably best.
  941.  
  942. >In fact, I don't
  943. >believe I've _ever_ seen a simulator that uses a ray tracing method.  If
  944. >you've got one up your sleeve, we'd LOVE to see it.  =^)
  945.  
  946. There are real-time auditory simulators which use raytracing.
  947.  
  948. -------------------------------------------------------------------------------
  949.  
  950. Goofy (?) Idea, Gary McTaggart (gmt@cis.ufl.edu)
  951.  
  952. Here's a really goofy brainstorm I had for distributed raytracing:
  953.  
  954. Why not incorporate into the proprietary communication programs that are used
  955. for such online services as Prodigy a simple raytracer which can calculate a
  956. very small number of pixels/frame?  First, when users first log on, you could
  957. upload a scene description to their computers.  While they are online, you
  958. could send escape codes to them for viewpoint changes and object
  959. repositioning, and have them return the value of a pixel or a small group of
  960. pixels.  The computers at the Prodigy-like company could shell out the scene
  961. information and collect the results to make for a very fast distributed
  962. raytracer.  This is assuming that the time spent sending scene information is
  963. not too substantial.
  964.  
  965. -------------------------------------------------------------------------------
  966.  
  967. Constant Time Ray Tracing, by Tom Wilson, Eric Haines, Brian Corrie, and
  968.     Masataka Ohta
  969.  
  970.  
  971. Tom Wilson posted to comp.graphics.research:
  972.  
  973. This is something that has been bugging me for a long time, but I'm glad I
  974. waited until now to bring it up. Whilst writing a paper and reading old issues
  975. of the RTNews (or is that RTOlds 8-), I was reminded of it.
  976.  
  977. Constant Time Ray Tracing: Theory OR Practice?
  978.  
  979. Two things I will refer to are:
  980.  
  981. OHT87 "Ray Coherence Theorem and Constant Time Ray Tracing Algorithm"
  982.       Masataka Ohta and Mamoru Maekawa
  983.       Computer Graphics 1987, Proc. of CGI '87, p. 303-314.
  984.  
  985. OHT90 "Algorithm Order Discussion"
  986.       Masataka Ohta and Pete Shirley
  987.       Ray Tracing News, Vol. 1, #4, 1990
  988.  
  989. You might also read the Intro. to Ray Tracing by Glassner, et al., for a
  990. summary of OHT87. I'm hoping Ohta may be reading, but I thought I would post
  991. it for all to read.
  992.  
  993. THEORY
  994.  
  995. In theory, is constant time ray tracing as in OHT87 possible? Sure. Given a
  996. sufficient 3D subdivision and a fine enough division of ray directions, each
  997. list in the structure will contain fewer than some constant number of objects.
  998. For a given ray, mapping the origin to the grid is constant time, mapping the
  999. ray direction to one of the subdirections is constant time, and intersecting
  1000. the ray against a constant number of objects is constant time.
  1001.  
  1002. In theory, is constant time ray tracing on a 3D grid possible? Yes, given a
  1003. very huge grid. Suppose the grid is so large that tracing a ray through it
  1004. will result in less than a constant number of ray-object intersections, then
  1005. yes, right? Wait! What about the traversal of the grid? Well, if the grid
  1006. size is not a function of the number of objects, then the traversal time is
  1007. constant. Well, this can't be done. Even if you scale the grid size as a
  1008. function of the screen resolution, it can't be done. You can always make a
  1009. scene that will cause some rays to cause a lot of intersections.
  1010.  
  1011. OHT87 - yes
  1012. 3D grid - no
  1013.  
  1014. What does the OHT87 method do that the 3D grid doesn't? Perhaps the answer
  1015. lies in the preprocessing. The ray tracing is constant time, but is the
  1016. preprocessing? Of course not, but maybe that's still ok. I'll discuss that in
  1017. the next part.
  1018.  
  1019. REALITY
  1020.  
  1021. How much preprocessing is allowed? SUPER-SILLY EXAMPLE: Preprocessing consists
  1022. of computing all shade trees, and the ray tracing process consists of a table
  1023. look up based on the primary ray! Talk about asking a lot! Well, the ray
  1024. tracing sure is constant time, but the preprocessing isn't. Any technique that
  1025. processes the objects to build a data structure, won't be constant time, of
  1026. course. However, that still leaves the question of how much is allowed.
  1027.  
  1028. Consider this example: A scene consists of many parallel polygons that are
  1029. parallel to the image plane (like a stack of paper). These aren't run of the
  1030. mill 4-sided rectangles. They have holes in them. A lot of the holes line up
  1031. with rays through the view plane and they are really small. Now, suppose we
  1032. preprocess using the OHT87 algorithm. *I* think that no matter how many ray
  1033. directions you allow, you might not be able to eliminate enough objects to
  1034. make the list for that direction be smaller than a constant number. Remember,
  1035. we're not talking theory here, you can't have billions of ray directions.
  1036. There is some limit on the number of ray directions. I'm pretty sure this
  1037. falls under the no-coherence clause 8-) (p. 308 - "Because the algorithm
  1038. utilizes the coherence of the image, the efficiency of the algorithm heavily
  1039. depends on the coherence of the image. If there is no coherence, no
  1040. performance will be gained."). So ---> it's not constant time then!
  1041.  
  1042. FURTHER DISCUSSION
  1043.  
  1044. Now I'm not trying to shoot down the work done in OHT87. I don't know how it
  1045. compares to other schemes in implementation either. The problem I have is one
  1046. of terminology. Ray tracing has very little theory behind it. In the early
  1047. 80's, it seemed most algorithms we're "hacked together implementations" done
  1048. at the terminal (I hope that doesn't sound demeaning, since I don't mean it
  1049. that way). Of late, research is turning toward some theory since most of the
  1050. "good ideas" have been done already 8-): meaning we need to analyze what
  1051. exists to see what's wrong with it. However, there is still little theory
  1052. supporting the field. So "Constant Time..." is misleading since you can't
  1053. really do it, and who wants to generate theoretical images.
  1054.  
  1055. A somewhat unrelated thought arises from a comment in OHT90: "My algorithm
  1056. may consume possibly long and computationally complex pre-processing time to
  1057. analyze a scene. But, the important fact is that the time for pre-processing
  1058. is dependent only on the scene and not on the number of rays."
  1059.  
  1060. My first reaction is "GNNNAAARRRR?" The number of rays in a scene is bounded
  1061. above by a constant: total number of pixels * maximum size of a ray tree
  1062. (unless we assume an infinite ray tree -> unrealistic). Neither of these
  1063. factors is a function of the number of objects. Preprocessing is dependent
  1064. upon the scene and THAT is what is important. How much preprocessing of the
  1065. scene is ok? My SUPER-SILLY EXAMPLE does too much preprocessing.
  1066.  
  1067. Suppose we make a super-general assumption that preprocessing time can be no
  1068. greater than k% of the ray tracing time. Make k whatever you want, but in
  1069. OHT87 preprocessing is O(f(N)) (i.e. some function of N) and tracing is O(1).
  1070. So the preprocessing demands are too high using this k% assumption. Maybe it's
  1071. a bad assumption, but it's the one I see in the literature.
  1072.  
  1073. Finally this leads me to another point, support of a claim via testing.
  1074. Too often assumptions are made about the scene which are just too convenient.
  1075. Not only in this case, but in many, a sphere is just too simple an object to
  1076. support a proof. Again, I don't doubt the theory here (the proof itself is
  1077. sufficient), I doubt the reality. In this case, the reality is supported by
  1078. convenient scenes, which make it appear that the reality is sound (and thus
  1079. constant time). What I'm getting at is, give me some really ugly objects,
  1080. e.g. GEARS database.
  1081.  
  1082. Depending upon the response to this article, I might post another about
  1083. assumptions for algorithm testing. If I get flamed badly or there are no
  1084. followups, then I won't.
  1085.  
  1086. A little something to think about: No computer in the world, no matter what
  1087. its word size, no matter its memory size, no matter what its architecture, can
  1088. prevent overflow <--> no ray tracer in the world, no matter what the internal
  1089. data structure, can perform in constant time (you just can't ignore
  1090. preprocessing, as in the case of the SUPER-SILLY EXAMPLE).
  1091.  
  1092. I would like to reiterate that I am not claiming that the work in OHT87 is
  1093. incorrect. I just think that a theoretical concept is misleading in a
  1094. realistic research world. No mudslinging, and keep name-calling to four letter
  1095. words 8-).
  1096.  
  1097. ----
  1098.  
  1099. Eric Haines responds:
  1100.  
  1101. >REALITY
  1102. >
  1103. >How much preprocessing is allowed? SUPER-SILLY EXAMPLE: Preprocessing consists
  1104. >of computing all shade trees, and the ray tracing process consists of a table
  1105. >look up based on the primary ray!
  1106.  
  1107. I agree, "constant" time is a provocative, fun thing to say (and Ohta is not
  1108. the first to say it, Kaplan's "Space-Tracing, A Constant Time Ray-Tracer" from
  1109. SIGGRAPH 85 course notes is the first instance I know).  If your efficiency
  1110. scheme can, in theory, guarantee that given a ray, you know exactly which
  1111. object is hit by just performing some simple (non-recursive) look-up, then
  1112. you'll have constant time ray tracing.  The problem with such "in theory"
  1113. statements are that they can't be backed up in practice.  Either the scheme
  1114. takes an infinite amount of memory, or finding the actual object to intersect
  1115. in the efficiency structure takes O(log n) time, or some other catch.  So,
  1116. getting "near constant time" is more interesting in practice.
  1117.  
  1118. Many people make use of this kind of thing for rays from the eye:  do a hidden
  1119. surface preprocess (which is much faster than ray tracing in most situations,
  1120. and is constant with the number of objects) to find what is at each screen
  1121. sample.  This truly is "constant time" ray tracing because we know exactly
  1122. where all the rays are going to go (through the pixels in the screen), so we
  1123. can indeed store all these directions in a grid and easily walk through them
  1124. to find what's visible.  The look up time is constant, and there is at most one
  1125. object at each pixel.  The preprocess time is O(n) with the number of objects.
  1126.  
  1127. The intersections of rays from the eye then need just a look-up to get what's
  1128. hit.  Ohta & Maekawa, Arvo & Kirk's 5D idea, and my own shadow buffer try to
  1129. further this directional preprocessing.  Arvo & Kirk have a nice table
  1130. comparing the three in their chapter of "An Intro to RT".  From my own
  1131. experience it's impossible to solve the problem of, given an arbitrary ray,
  1132. doing an immediate look-up (i.e.  we don't have to traverse a hierarchy to
  1133. find our object, we just translate the ray information into a table index)
  1134. combined with always having at most a single object on the list.  By being
  1135. willing to not have all three elements we can often come up with schemes that
  1136. do the other two perfectly and the third fairly well.
  1137.  
  1138. Like the shadow buffer, Ohta creates grids containing candidate lists.  The
  1139. lists are not bounded in size, so the testing time is not a constant.  In his
  1140. defense, Ohta's scheme gives almost constant times for his sparse spheres case
  1141. and near constant for his dense spheres case.  It's impressive that it can do
  1142. so well, and this was back in 1987.  The cost is that you need a direction
  1143. cube structure for _each_ object in the scene, which is costly in
  1144. preprocessing time and memory.
  1145.  
  1146.  
  1147. >Consider this example: A scene consists of many parallel polygons that are
  1148. >parallel to the image plane (like a stack of paper). These aren't run of the
  1149. >mill 4-sided rectangles. They have holes in them. A lot of the holes line up
  1150. >with rays through the view plane and they are really small.
  1151.  
  1152. I agree, this case will make preprocessing schemes no longer constant.
  1153. You can do LOTS of preprocessing to try to resolve the indeterminate
  1154. areas, and you may have to get down to a ridiculous resolutions to attempt to
  1155. resolve these, and you still will have places where things fall apart.
  1156.  
  1157. Another approach is to work from the objects themselves to split up 5D space
  1158. and determine what object is visible for what set of positions and directions.
  1159. I recall seeing some computational geometry paper on doing something like
  1160. this, where you preprocess all 5D space into volumes, each of which is
  1161. associated with one object.  Aha, found it:
  1162.  
  1163. %A Marco Pellegrini
  1164. %T Stabbing and Ray Shooting in 3 Dimensional Space
  1165. %J Proceedings of the 6th Annual Symposium on Computational Geometry
  1166. %I Berkeley, CA
  1167. %D June 1990
  1168. %P 177-86
  1169.  
  1170. Since you were interested in theoretical papers, this is an interesting one to
  1171. check out.  To quote:  "The result presented in this paper, although not yet
  1172. practical because of the huge constants involved, is the first example of a
  1173. ray shooting algorithm with a sublinear cost per ray, for any set of triangles
  1174. and rays."  He proves that given a ray one can determine in O(log n) worst
  1175. case time which is the first triangle hit, with O(n^5) preprocessing (truly
  1176. the record for preprocessing time).  His results are interesting in that the
  1177. best he claims is O(log n), not O(1), because he knows pathological cases can
  1178. kill all the other schemes out there.  His bias is towards worrying about the
  1179. worst case performance, which most of the rest of us blithely ignore.  What's
  1180. interesting about his scheme is that he could maintain it's constant in
  1181. intersection testing time (in fact, the constant is zero), since he never
  1182. tests any rays against any triangles:  the scene is entirely encoded in a
  1183. structure, and he gets a ray and merely looks up what triangle (if any) is hit
  1184. by that ray.  It's accessing the structure and finding where the ray is in it
  1185. that takes O(log n).
  1186.  
  1187. Another good pathological case is the shell database (Introduction of Ray
  1188. Tracing News, volume 3, number 3).  Try it on your favorite ray tracer
  1189. sometime and see what happens:  many overlapping spheres bring most ray
  1190. tracers to their knees (mine included).  Most efficiency schemes are good
  1191. overall, but when a large number of the surfaces of complex objects overlap a
  1192. given volume of space, preprocessing that space well is impossible or very
  1193. costly.  It would be interesting to see how Ohta's scheme works on the shell
  1194. data, since it's entirely spheres.  Ohta's ray tracer is at various FTP sites,
  1195. though I haven't tried it out.
  1196.  
  1197.  
  1198. >Suppose we make a super-general assumption that preprocessing time can be no
  1199. >greater than k% of the ray tracing time. Make k whatever you want, but in
  1200. >OHT87 preprocessing is O(f(N)) (i.e. some function of N) and tracing is O(1).
  1201. >So the preprocessing demands are too high using this k% assumption. Maybe it's
  1202. >a bad assumption, but it's the one I see in the literature.
  1203.  
  1204. Good point - no matter what k% you assign, if tracing is really O(1) then you
  1205. can never in theory fulfill the k% ratio, since the number of objects can be
  1206. arbitrarily high.  The "k%" is just a rule of thumb working assumption in the
  1207. literature, not some theoretical limit that cannot be exceeded ("it'd be nice
  1208. if the preprocessing time was some percentage less than the ray tracing time"
  1209. is all "k%" is, after all).
  1210.  
  1211. What's interesting about preprocessing schemes is that once they're done you
  1212. can reuse them.  If you're making an animation of flying around a static
  1213. scene, that's a heck of a lot of pixels to compute, which massively amortizes
  1214. the cost of the one-time preprocess.  Because of this I think we'll see more
  1215. time spent preprocessing as the years go by (though if CPU speed increases
  1216. faster than memory size, then it might not be possible to store the preprocess
  1217. structures around for a large scene...).
  1218.  
  1219.  
  1220. >A little something to think about: No computer in the world, no matter what
  1221. >its word size, no matter its memory size, no matter what its architecture, can
  1222. >prevent overflow <--> no ray tracer in the world, no matter what the internal
  1223. >data structure, can perform in constant time (you just can't ignore
  1224. >preprocessing, as in the case of the SUPER-SILLY EXAMPLE).
  1225.  
  1226. Yep, "constant time" is an attention grabber, and saying "near constant time"
  1227. would be a bit more realistic.  If your efficiency structure has any hierarchy
  1228. in it, then you're not constant.  If you have a simple lookup structure like
  1229. an evenly spaced grid or somesuch, you're constant time lookup, but short of
  1230. infinite resolution you won't get a single object to test at _every_ spot in
  1231. the structure.
  1232.  
  1233. Well, that was certainly long-winded!  Anyway, I thought it was worth
  1234. mentioning the Pellegrini paper, since it's pretty obscure and one of the few
  1235. I've seen that really tries to tackle the theoretical aspects.  Hopefully I
  1236. didn't say anything too stupid here...
  1237.  
  1238. ----
  1239.  
  1240. Brian Corrie responds:
  1241.  
  1242. >Suppose we make a super-general assumption that preprocessing time can be no
  1243. >greater than k% of the ray tracing time. Make k whatever you want, but in
  1244. >So the preprocessing demands are too high using this k% assumption. Maybe it's
  1245. >a bad assumption, but it's the one I see in the literature.
  1246.  
  1247. I have just run into an interesting result similar to this.  I am working on a
  1248. MIMD parallel machine made by Fujitsu, the AP1000.  It has 128 processing
  1249. nodes, each processor being a SPARC chip running at 25 MHz.  Needless to say,
  1250. this thing is fast.  I have just gone through the process of parallelizing my
  1251. Ray Tracer on this machine.  Let me clarify that, I parallelized the
  1252. rendering, NOT the preprocessing.  I use Glassner's Space Subdivision
  1253. acceleration technique.  Guess what, in some cases, the preprocessing actually
  1254. takes longer than the rendering on this architecture.  Giving a demo just
  1255. isn't too satisfying when the boss is looking over my shoulder saying:
  1256.  
  1257. Boss: "whats it doing now?"
  1258. ME:   "Oh, preprocessing."
  1259. Boss: "Whats it doing now?"
  1260. ME:   "Still preprocessing.. ahhhh, now its rendering, oh there, its done."
  1261.  
  1262. This certainly doesn't fit the k% model that you state above.  It always
  1263. seemed that the preprocessing stage was insignificant compared to the
  1264. rendering time, but it really isn't.  You just need some strange circumstances
  1265. or some serious thought to see that the preprocessing time can not be ignored.
  1266.  
  1267. ----
  1268.  
  1269. Masataka Ohta responds:
  1270.  
  1271. >I would like to reiterate that I am not claiming that the work in OHT87 is
  1272. >incorrect. I just think that a theoretical concept is misleading in a
  1273. >realistic research world. No mudslinging, and keep name-calling to four letter
  1274. >words 8-).
  1275.  
  1276. Well, at the presentation of OHT87, I received silly questions from those
  1277. who can not understand the difference between realtime and constant time.
  1278.  
  1279. But it is not my problem. Any paper is misleading to those who can not
  1280. understand basic terminologies in it.
  1281.  
  1282. Constant timeness is a purely theoretical property. Remember it.
  1283.  
  1284. >THEORY
  1285.  
  1286. >OHT87 - yes
  1287. >3D grid - no
  1288.  
  1289. I agree.  Note that implicit simplification is that multiplication, addition
  1290. and address arithmetic are all O(1).
  1291.  
  1292. When I wrote OHT87, many (including me) believed 3D grid is O(log(N)) and
  1293. some even claimed O(1) without knowing what O(1) means.
  1294.  
  1295. >REALITY
  1296.  
  1297. >Remember,
  1298. >we're not talking theory here, you can't have billions of ray directions.
  1299. >There is some limit on the number of ray directions.
  1300.  
  1301. It is pointless.  Constant timeness is a purely theoretical property.
  1302. Theoretically, you can have billions of ray directions.  There is no limit on
  1303. the number of ray directions.
  1304.  
  1305. >I'm pretty sure this
  1306. >falls under the no-coherence clause 8-)
  1307.  
  1308. No.  Constant timeness of your case is covered by a sentence (p. 308) "It is
  1309. worthwhile to note that nearly all images can be calculated in this very fast
  1310. manner, if we can use unlimited pre-processing time and space".
  1311.  
  1312. >(p. 308 - "Because the algorithm
  1313. >utilizes the coherence of the image, the efficiency of the algorithm heavily
  1314. >depends on the coherence of the image. If there is no coherence, no
  1315. >performance will be gained."). So ---> it's not constant time then!
  1316.  
  1317. No, of course.  What my no-coherence clause means is that with insufficient D
  1318. (the number of directions) or M (the number of origins) it's not constant
  1319. time.
  1320.  
  1321. With large enough D and M determined by the coherence of scene, it will be
  1322. constant time again.
  1323.  
  1324. >FURTHER DISCUSSION
  1325.  
  1326. >A somewhat unrelated thought arises from a comment in OHT90: "My algorithm
  1327. >may consume possibly long and computationally complex pre-processing time to
  1328. >analyze a scene. But, the important fact is that the time for pre-processing
  1329. >is dependent only on the scene and not on the number of rays."
  1330.  
  1331. I said "analyze a scene", not "generate an image". OK?
  1332.  
  1333. >My first reaction is "GNNNAAARRRR?" The number of rays in a scene is bounded
  1334. >above by a constant: total number of pixels * maximum size of a ray tree
  1335. >(unless we assume an infinite ray tree -> unrealistic). Neither of these
  1336. >factors is a function of the number of objects.
  1337.  
  1338. You misunderstand basic terminologies.
  1339.  
  1340. An image have fixed number of pixels, but a scene itself has no resolution.  A
  1341. scene can be rendered into images with various resolutions and various
  1342. quality.
  1343.  
  1344. The number of rays to generate an image depends on required resolution and
  1345. quality (if you need antialiased but precise RGB value, you often must fire
  1346. large number of rays within a pixel), and not limited by any constant.
  1347.  
  1348. >Too often assumptions are made about the scene which are just too convenient.
  1349. >Not only in this case, but in many, a sphere is just too simple an object to
  1350. >support a proof. Again, I don't doubt the theory here (the proof itself is
  1351. >sufficient), I doubt the reality.
  1352.  
  1353. I used spheres in measurement because it is most unfavourable to the
  1354.                                  ^^^^^^^^^^^^
  1355. implementation of my algorithm. If you use complex shapes, possible
  1356. startup time for constant timeness might be masked. Implementation of
  1357. my algorithm might have required large constant time comparable to
  1358. ray bicubic patch intersection, which could have been masked if I
  1359. used a scene with bicubic patches.
  1360.  
  1361. See Fig. 4 for unbelievably small overhead (nearly equals to the time for ray
  1362. sphere intersection) of the implementation.
  1363.  
  1364. >In this case, the reality is supported by
  1365. >convenient scenes, which make it appear that the reality is sound (and thus
  1366. >constant time). What I'm getting at is, give me some really ugly objects,
  1367. >e.g. GEARS database.
  1368.  
  1369. Then, we can have beautiful but theoretically meaningless images.
  1370.  
  1371. What I want to show is constant time property.  To do so, we must be able to
  1372. control the number of objects in the scene up to several hundreds (or more,
  1373. see Fig. 8).
  1374.  
  1375. ----
  1376.  
  1377. and further comments from Masataka Ohta:
  1378.  
  1379. >This certainly doesn't fit the model that you state above. It always
  1380. >seemed that the preprocessing stage was insignificant compared to the
  1381. >rendering time, but it really isn't. You just need some strange circumstances
  1382. >or some serious thought to see that the preprocessing time can not be ignored.
  1383.  
  1384. When tracing state-of-the-art realistic scenes with state-of-the-art
  1385. complex shading, anti-aliasing and so on, tracing and shading time become
  1386. much much longer than when tracing sphere-only simply-shaded non-anti-aliased
  1387. scenes.
  1388.  
  1389. Hints for serious thought:
  1390.  
  1391.     1) the preprocessing time to achieve constant time property
  1392.        is constant once a scene is fixed.
  1393.  
  1394.     2) the preprocessing time to achieve constant time property
  1395.        is less than or nearly equal to tracing time for sphere-
  1396.        only images in my paper.
  1397.  
  1398.     3) the preprocessing time to achieve minimal total (preprocessing
  1399.        +tracing+shading) time to render an image of a scene need not be
  1400.        the preprocessing time to achieve constant time property for the
  1401.        scene. With the increase of the tracing+shading time, the trade-off
  1402.        shifts toward increasing tracing time complexity and reducing
  1403.        preprocessing time complexity.
  1404.  
  1405. ----
  1406.  
  1407. Brian Corrie responds:
  1408.  
  1409. It is true, once the scene is fixed, then pre-processing is fixed, so multiple
  1410. frames can be produced without that overhead in certain situations.  That is,
  1411. if the camera moves, lights go on and off, attributes change, then the
  1412. preprocessing does not need to be re-computed.  Only if the geometry changes
  1413. is this step needed.
  1414.  
  1415. It is also true that if I render complex images with complex shading and
  1416. scene interaction (reflection/refraction), the preprocessing time can
  1417. rapidly become insignificant again. Insignificance is all in the eye of
  1418. the renderer I suppose.
  1419.  
  1420. -------------------------------------------------------------------------------
  1421.  
  1422. VLSI for Ray Tracing, by Kenneth Cameron et al
  1423.  
  1424. Kenneth Cameron <kc@dcs.ed.ac.uk> asks:
  1425.  
  1426. I'm currently trying to get my Honours project sorted out for next year.
  1427. The idea is to produce some kind of raytracing/radiosity rendering chip.
  1428. Yup, thats right, put the whole rendering system on a single piece of
  1429. silicon. I've been trying to track down any past work on this. So far the
  1430. only mention I've found is that of Ullner's work in "An Introduction to
  1431. Raytracing".  Can anyone suggest any papers I should be looking for?
  1432.  
  1433. ----
  1434.  
  1435. George Kyriazis (kyriazis@rdrc.rpi.edu) writes:
  1436.  
  1437. Oh boy..  I'll be a bit negative on this.  This is only my opinion, so
  1438. I'd like to get some feedback from other people to see how much this
  1439. makes sense..
  1440.  
  1441. Ray-tracing and radiosity is a VERY computational intensive job.  Additionally,
  1442. it's a bit unhomogeneous.  What I mean by that is that there are lots of
  1443. different algorithms that need to be done:  Traversing the space subdivision
  1444. hierarchy, various intersection algorithms, (possibly) various shading
  1445. algorithms, etc.  Not to mention the immense amount of data that has to be
  1446. fed in those poor processing elements.
  1447.  
  1448. In the past the market tried to provide special-purpose hardware that is
  1449. perfect for just one problem, but has REAL trouble for others..  For example,
  1450. the Pixel Machine was great doing ray-tracing, but it had problems with
  1451. interactive graphics.  An SGI-style graphics pipeline is perfect for
  1452. interactive 3-D applications, but it just was not designed for ray-tracing
  1453. or radiosity-type applications.  On the other hand, general-purpose floating
  1454. point accelerators are getting faster and faster..  So, my guess is that
  1455. a whole bunch of fast, general purpose machines will eventually win, 'cause
  1456. the can provide more functionality and a smaller overall design cost.
  1457.  
  1458. Now, let's try to be constructive a bit here..  As I said before, doing
  1459. raytracing the traditional way is unstructured.  You are tracing a ray
  1460. who knows how many levels of reflections deep, but you don't really know
  1461. what type of primitive you are going to hit, so the rendering algorithm
  1462. should be ready for anything.  There has been some work a couple of years
  1463. ago (I could be mistaken, but I think at UIUC) about using an SIMD machine
  1464. for ray-tracing.  Now, if you think of normal ray-tracing as a depth-first
  1465. algorithm (we go as many levels deep as possible on the first pixel, then
  1466. go ahead on the next pixel, etc.), you can think of the SIMD work as
  1467. implementing ray-tracing in a breadth-first kind of way.  Finish up the
  1468. first level of intersections for all pixels in the image, then the ones
  1469. who survive go on to the second level of reflection, etc.  This brings
  1470. some more structure into the algorithm.
  1471.  
  1472. ----
  1473.  
  1474. Peter De Vijt (devijt@imec.be) writes:
  1475.  
  1476. A number of people did some studies on implementing a part of the algorithm
  1477. (the intersection calculations) in silicon.  No real silicon has been
  1478. demonstrated upto now.  Here are some refs.
  1479.  
  1480. %A Ron Pulleyblank
  1481. %A John Kapenga
  1482. %T The Feasibility of a VLSI Chip for Ray Tracing Bicubic Patches
  1483. %J IEEE Computer Graphics and Applications
  1484. %V 7
  1485. %N 3
  1486. %D March 1987
  1487. %P 33-44
  1488. %O also appears as "A VLSI Chip for Ray Tracing Bicubic Patches"
  1489. in Advances in Computer Graphics Hardware I, W. Strasser (ed.), 1987,
  1490. p. 125-140 and in
  1491. Tutorial: Computer Graphics Hardware: Image Generation and Display,
  1492. Computer Society Press, Washington, 1988, p. 328-339
  1493.  
  1494. %A Kadi Bouatouch
  1495. %A Yannick Saouter
  1496. %A Jean Charles Candela
  1497. %T A VLSI Chip for Ray Tracing Bicubic Patches
  1498. %J Eurographics '89
  1499. %I Elsevier Science Publishers
  1500. %C Amsterdam, North-Holland
  1501. %D Sept. 1989
  1502. %P 107-24
  1503.  
  1504. %A Alle-Jan van der Veen
  1505. %T Intersection Test for NURBS
  1506. %B Proc. of the IEEE Symp. on Computer Architecture & Real Time Graphics
  1507. %D June 1989
  1508. %C Delft, The Netherlands
  1509. %P 101-14
  1510.  
  1511. Implementing a complete raytracing/radiosity algorithm on one chip is IMHO not
  1512. possible.  The problem is that the algorithm itself is quite complex.  You'll
  1513. have to calculate intersection points for various primitives, reduce the
  1514. search space for the primitives you are going to calculate the intersections
  1515. with, do shading calculations, ...
  1516.  
  1517. Given the huge amount of work you'll have to perform, you will still need a
  1518. multiprocessor solution to get the images at a reasonable rate (After all
  1519. you've put a lot of effort in it, so you want some performance back) You need
  1520. a very good scheduling mechanism to get more than an impressive number of
  1521. Mythical FLOPS.
  1522.  
  1523. The basic algorithm for ray-tracing is pretty simple.  The intelligent
  1524. implementation isn't.  If you put the basic algorithm in silicon, an
  1525. intelligent software version will easily outperform your system.  A good vlsi
  1526. implementation will have to implement the more elaborate and complex
  1527. algorithm.  (Yeah such is life)
  1528.  
  1529. The kind of parallelism you need for vlsi is different than the one you need
  1530. for software.  On a general purpose multiprocessor system you can use all
  1531. kinds of parallelism, in vlsi you can't.  An ASIC can only be better than a uP
  1532. if it can take advantage of some specific aspects of an algorithm.  If the
  1533. algorithm is too complex, you can not take advantage of that, and the ideal
  1534. implementation looks pretty much like an ordinary general purpose uP.  (We
  1535. better leave that to the big R&D teams).  So forget about doing it on one
  1536. chip.
  1537.  
  1538. The only thing you can do is to break the algorithm apart and implement each
  1539. part or only the most interesting parts (= inner loops ) that will give you a
  1540. performance gain (such as the intersection calculations).
  1541.  
  1542. Here at IMEC we're doing just that as a sort of design exercise.  We're
  1543. planning to implement a part of the algorithm on a couple processors.
  1544.  
  1545. The algorithm is split in three big pieces:  rendering, narrowing the search
  1546. space for the intersection calculations and the intersection calculations
  1547. themselves.  The rendering will be done on general purpose processors for
  1548. flexibility.  Data base search and spline intersection calculations on two
  1549. custom processors.  The other intersection calculations will again be done on
  1550. GP uP's for flexibility.  Also a special processor is being built for
  1551. scheduling the operations in a multiprocessor environment.
  1552.  
  1553. The whole system is designed in such a way that each of these processors can
  1554. be replaced by a general purpose one and that some operations can be modified
  1555. (eg.  more primitives than we planned a specific processor for).  This way we
  1556. can build the system in different stages (first the intersection processor,
  1557. the scheduler, the data base searcher, and last an optional MMU) First
  1558. versions of the intersection processor and the scheduler should be ready
  1559. around july.
  1560.  
  1561. I must agree with George Kyriazis that eventually a GP machine will win, but
  1562. again this is only a design exercise and it's FUN.
  1563.  
  1564. ----
  1565.  
  1566. Jon Leech (leech@cs.unc.edu) writes:
  1567.  
  1568.     I think the original poster would be better off doing some regular part of
  1569. a rendering kernel, perhaps a ray-tracing hierarchy traversal chip.
  1570.  
  1571. ----
  1572.  
  1573. Sam Uselton (uselton@nas.nasa.gov) writes:
  1574.  
  1575. Two comments to add on the previous discussion.......
  1576.  
  1577. (1) the SIMD parallel ray tracing I know of, was done at Thinking Machines on
  1578. a Connection Machine by Hubert Delaney, who recently was kind enough to send
  1579. me 2 tech reports, which I haven't had time to read yet.
  1580.  
  1581. (2) Gershon Kedem (and probably some other folks) were working on VLSI support
  1582. for ray tracing of CSG defined objects several years ago.  The work was being
  1583. done at Duke University, although other NC Research Triangle entities were
  1584. probably involved.  I discussed the project with him in his office something
  1585. like 3 years ago.  Sorry, I don't have a reference.  [Cornell is also involved.
  1586. See ray tracing bibliography under Kedem or Ellis. - EAH]
  1587.  
  1588. ----
  1589.  
  1590. Thierry Priol (priol@irisa.fr) writes:
  1591.  
  1592. I agree with you, ray-tracing is so irregular (data driven) that designing a
  1593. VLSI processor for ray-tracing algorithms is a hard task.  We have done some
  1594. works on MIMD machine.  General purpose parallel MIMD machines are able to
  1595. produce very high efficiency for ray-tracing algorithms especially if you are
  1596. using a shared virtual memory on these kinds of machines!  (see "Ray Tracing
  1597. on Distributed Memory Parallel Computers:  Strategies for Distributing
  1598. Computation and Data" in "Parallel Algorithms and architectures for {3D} Image
  1599. Generation", ACM Siggraph'90 Course 28).
  1600.  
  1601. ----
  1602.  
  1603. From: rkaye@polyslo.csc.calpoly.edu (Dega Dude):
  1604.  
  1605. I would suggest to approach the problem from a different angle.  While it
  1606. would be an extreme job to implement an entire ray tracing/radiosity system in
  1607. silicon, you could implement some generic routines that usually take a lot of
  1608. CPU time quite easily.
  1609.  
  1610. You could code intersection and normal calculation routines for the basic
  1611. primitives you would like to have in your system.  Some other things to code
  1612. would be generic routines required by your acceleration techniques, such as
  1613. voxel-object intersection routines or bounding volume routines.
  1614.  
  1615. There are many 'generic' CPU intensive routines that can be implemented in
  1616. silicon.  The software can then adapt around the chip's capabilities, giving
  1617. you the flexibility to change the system.
  1618.  
  1619. -------------------------------------------------------------------------------
  1620.  
  1621. The Moon Revisited, by Tom Duff (td@alice.att.com)
  1622.  
  1623. zap@lysator.liu.se (Haakan Andersson) wonders about the moon's reflection
  1624. function, and why Phong shading doesn't render it well.  (I won't quote any
  1625. details.)
  1626.  
  1627. The most important thing to remember about the moon is that while it is
  1628. spectacularly un-specular, it is by no means a Lambertian reflector -- this is
  1629. why Phong shading can't model it well, contrary to hollasch@kpc.com (Steve
  1630. Hollasch @ Kubota Pacific Computer, Inc.).
  1631.  
  1632. An ideal full moon is equally bright everywhere -- its brightness does not
  1633. drop off toward the edges!  (The real moon differs from the ideal moon only in
  1634. that its albedo is non-uniform.  For example, the maria are darker than the
  1635. mountains.)
  1636.  
  1637. A model that works well for the moon is to think of it as covered in a dust of
  1638. microscopic Lambertian reflectors.  When viewed from the light source
  1639. direction, the dust particles will reflect light equally, regardless of the
  1640. direction of the moon's surface normal.
  1641.  
  1642. When viewed from some other direction (i.e. when the moon is not full), the
  1643. dust particles still reflect light equally, but some of them are shadowed by
  1644. others.  Shadowing increases when the angle between the light and the viewing
  1645. direction increases so that the reflected light travels through more dust, and
  1646. when the angle between the surface normal and the light direction increases,
  1647. so that the incident light travels through more dust.  Of course, the total
  1648. light reflected from the dust particles varies with viewing angle as well
  1649. because they are only lit on one side.
  1650.  
  1651. There are many ways to convert this qualitative description into an analytic
  1652. model, depending on exactly how you model self-shadowing of dust.  Jim Blinn
  1653. has a paper on illumination functions for clouds of dust (in 1979 Siggraph
  1654. proceedings, I think -- I don't have the precise reference at my fingertips)
  1655. that describes this in fair detail and gives a lunar reflection model that
  1656. works really well.
  1657.  
  1658. I suspect that even people without my astigmatism have trouble telling by
  1659. looking at its shape whether the moon is exactly full or one day away from it.
  1660. The difference in shading, however, is fairly dramatic.  When its full, the
  1661. moon looks like a silver dollar in the sky.  Even one day away and still looks
  1662. like a perfect circle, it shades off to one side or the other by a noticeable
  1663. amount.
  1664.  
  1665. -------------------------------------------------------------------------------
  1666.  
  1667. Soft Shadow Ideas, compiled by Derek Woolverton (woolstar@gumby.cs.caltech.edu)
  1668.  
  1669.    Could anyone suggest any open solutions (i.e. ones that I could implement
  1670. without owing royalties, I heard that the Pixar noise algo. was patented.)
  1671.  
  1672. [Derek sent me his responses, some of which are below. - EAH]
  1673.  
  1674. --------
  1675.  
  1676. From Samuel P. Uselton (uselton@wk207.nas.nasa.gov)
  1677.  
  1678. I'm pretty sure that general Monte Carlo evaluation of an integral of a
  1679. function is a general, well known mathematical idea, and as such not
  1680. patentable.  If the PIXAR patent is valid, it must patent some particular
  1681. method (=implementation) for doing this evaluation.  I assume it is the jitter
  1682. sampling idea presented in papers by Cook, et al.
  1683.  
  1684. I think our implementation of the integral evaluation is sufficiently
  1685. different that it is OK.  See Redner, Lee, Uselton, "Statistically Optimised
  1686. Sampling for Distributed Ray Tracing", SIGGRAPH '85.
  1687.  
  1688. Sorry I can't supply code.  The original source code we wrote (actually mostly
  1689. written by Lee) belongs to Amoco, and is in Fortran for an IBM 3090 anyway.
  1690. There is a plan to create a "liberated" version, but it is not available
  1691. at least from us.
  1692.  
  1693. If you, or anyone, wants to convince me I'm wrong and that we really DO
  1694. infringe the patent, or that an arguable case could be made, please let me
  1695. know, because we ARE extending our results.
  1696.  
  1697. --------
  1698.  
  1699. From Lawrence Kesteloot (lkestel@gmuvax2.gmu.edu)
  1700.  
  1701. The method you describe can be easily modified to make the lamp a rectangle
  1702. instead of a sphere.  This makes the light into a fluorescent tube.
  1703.  
  1704. This method is quite good and realistic but, as you said, the noise is fairly
  1705. bad for low n's (<64).  Another way which I thought about (and I don't know if
  1706. anyone's done it yet), but haven't actually implemented yet, is to use some
  1707. kind of approximation formula.  For example, if you've got a sphere sitting on
  1708. a surface and you're trying to evaluate the darkness of that shadow at some
  1709. point below the sphere, you can run a ray from the point on the surface to the
  1710. light, find the two roots of the intersection, and use the DISTANCE between
  1711. the two roots, in some kind of formula which would involve the radius of the
  1712. sphere and lamp and distance to the lamp and surface, to determine the
  1713. darkness at that point.  It is not scientific, but points that intersect close
  1714. to the edge of the sphere will get two roots that are close together and this
  1715. would make that shadow lighter.  I haven't even implemented this or thought of
  1716. a formula, but if you get any kind of results with it please let me know.  It
  1717. would be very fast, as you can imagine.  It will most likely fail in strange
  1718. circumstances such as points that are shadowed by two objects at once.  I
  1719. guess that's the penalty for getting away from pure ray-tracing...
  1720.  
  1721. I can also think of another way to do it, but much harder to explain in
  1722. writing.  It is similar to yours but would probably reduce the noise.  Imagine
  1723. that you run a ray from the point in question to the light center.  You then
  1724. find a circle, centered at the light, radius of the light, which is
  1725. perpendicular to the ray.  You then pick <n> equidistant points on the edge of
  1726. that circle and run rays through them.  This will give you good soft shadows
  1727. and low noise (because there is no randomness), but might turn the shadow into
  1728. "rings" of shades (this would depend on the number of points, obviously).
  1729. Also, the process of finding that circle might be quite slow.  Maybe an
  1730. approximation to the angle of the circle in 30 degree increments could be done
  1731. (30 degrees would be enough I suppose).  But that might make the "ring" effect
  1732. worse.
  1733.  
  1734. [This was tried by Brigitta Lange, and is in her paper "The Simulation of
  1735. Radiant Light Transfer with Stochastic Ray-Tracing", Second Eurographics
  1736. Workshop on Rendering, Barcelona, Spain, May 1991.  Proceedings should be
  1737. published by Springer-Verlag realsoonnow.  Anyway, her results were mixed,
  1738. giving "ring" artifacts as I recall.  - EAH]
  1739.  
  1740. Let me know what you think.
  1741.  
  1742. Oh!  I almost forgot.  This is very important:  Don't sent <n> rays from
  1743. every point on the surface.  Before you start the picture, use the
  1744. position of the light and the spheres to make rectangles on the surface
  1745. where the shadow is likely to fall for each object.  Then send 1 or 2
  1746. rays outside the rectangles, and <n> inside any rectangle.  If you need
  1747. the formula for finding that rectangle I can send you that piece of code
  1748. from my tracer.
  1749.  
  1750. ----
  1751.  
  1752. John responds:
  1753.  
  1754. > You then pick <n> equidistant points on the edge of that circle
  1755. > and run rays through them.  This will give you good soft shadows
  1756. > and low noise.
  1757.  
  1758.    And very visible banding.  Oh well.  What I am looking for is finding the
  1759. plane perpendicular to the ray at the light, and using a pre-computed table of
  1760. random offsets with a poisson distribution.
  1761.  
  1762.    I still don't have a quick and elegant system of finding the plane and two
  1763. basis vectors.
  1764.  
  1765. --------
  1766.  
  1767. From: philip@bigben.dle.dg.com (Philip Gladstone)
  1768.  
  1769. The standard trick is to do adaptive sampling.  In my ray-tracer, I shoot a
  1770. number of rays through each pixel, and then randomly select a point on the
  1771. surface of the light source to for shadow calculations.  After a few rays have
  1772. been cast, the standard deviation of the values returned is calculated to see
  1773. if more rays need to be cast.  [This is oversimplifying quite a lot, as the
  1774. points are not really chosen at random as there is a nearness check.  Further,
  1775. subsampling only takes place in an area of high standard deviation.]
  1776.  
  1777. This also buys you antialiasing on edges etc.  This gives a very nice output
  1778. for very little increase in cost -- I start out with four rays per pixel
  1779. (though this should probably be increased somewhat) with a limit of 200 rays.
  1780. This givs an average number of rays per pixel of a reasonable picture of about
  1781. 6, with a few pixels having 200!
  1782.  
  1783. --------
  1784.  
  1785. From: shirley@iuvax.cs.indiana.edu (peter shirley)
  1786.  
  1787. Just like pixel sampling, light source sampling works better is the "random"
  1788. points are replaced by "quasi-random" points.  Quasi-random points can be
  1789. generated by making sure no two points are too close, or by hand generating
  1790. them for storage in lookup tables.
  1791.  
  1792. See the ray tracing book under jittering or Poisson disk sampling for further
  1793. details.
  1794.  
  1795. PS- I think you'll have better luck choosing points on the projected area
  1796. of the light source.  Choosing from within the sphere would be correct if
  1797. the light originated throughout the sphere.
  1798.  
  1799. -------------------------------------------------------------------------------
  1800.  
  1801. Book Announcement: Multiprocessor Methods for Computer Graphics Rendering,
  1802.     by Scott Whitman (slim@tazdevil.llnl.gov)
  1803.  
  1804. Multiprocessor Methods for Computer Graphics Rendering, by Scott Whitman,
  1805. Jones and Bartlett Publishers, March 1992.  ISBN 0-86720-229-7.
  1806.  
  1807. The book can be ordered by mail directly from Jones and Bartlett Publishers,
  1808. 20 Park Plaza, Boston, MA 02116, or by phone, 1-800-832-0034 or by e-mail,
  1809. kpeters@math.harvard.edu.  Prepaid orders (MC, VISA or check) will not be
  1810. charged postage or handling.
  1811.  
  1812. The problem of quickly generating three-dimensional synthetic imagery has
  1813. remained challenging for computer graphics researchers due to the large amount
  1814. of data which is processed and the complexity of the calculations involved.
  1815. This book involves a thorough investigation into the problem of using a
  1816. massively parallel computer to perform three-dimensional computer graphics
  1817. rendering.  The algorithms which are analyzed in this monograph present
  1818. several alternative approaches to image space decomposition as well as remote
  1819. memory access.  A number of pointers are given so that researchers intending
  1820. to develop their own parallel rendering algorithm will be able to obtain high
  1821. performance and good speedup from a variety of multiprocessor architectures.
  1822.  
  1823. Table of Contents:
  1824.  
  1825. 1. Introduction
  1826.     1.1. Problem Description
  1827.     1.2. Overview of Accelerated Rendering Techniques
  1828.     1.3. Research Context
  1829.     1.4. Document Overview
  1830. 2. Overview of Parallel Methods for Image Generation
  1831.     2.1. Criteria for Evaluation of Parallel Graphics Display Algorithms
  1832.     2.2. Taxonomy of Parallel Graphics Decompositions
  1833.     2.3. Conclusions
  1834. 3. Issues in Parallel Algorithm Development
  1835.     3.1. Architectural Choices
  1836.     3.2. Comparison of MIMD Methodologies
  1837.     3.3. The BBN Programming Environment
  1838.     3.4. Summary
  1839. 4. Overview of Base Level Implementation
  1840.     4.1. Design of the Basis Algorithm
  1841.     4.2. Testing Procedures
  1842.     4.3. Performance Analysis
  1843.     4.4. Summary
  1844. 5. Comparison of Task Partitioning Schemes
  1845.     5.1. Data Non-Adaptive Partitioning Scheme
  1846.     5.2. Data Adaptive Partitioning Scheme
  1847.     5.3. Task Adaptive Partitioning Scheme
  1848.     5.4. Conclusions
  1849. 6. Characterization of Other Parameters on Performance
  1850.     6.1. Shared Memory Storage and Referencing
  1851.     6.2. Machine Parameters
  1852.     6.3. Scene Characteristics
  1853.     6.4. Conclusions
  1854. 7. Conclusion
  1855.     7.1. Summary
  1856.     7.2. Future Work
  1857. References
  1858. Appendix
  1859.     A. Information on Test Scenes
  1860.     B. Data for Various Algorithms
  1861.     C. Supplementary Graphs
  1862. Index
  1863.  
  1864. -------------------------------------------------------------------------------
  1865. END OF RTNEWS
  1866.