$Id: Changes,v 1.169 2022/04/19 04:55:23 johns Exp $ Changelog for Tachyon(tm) Ray Tracer ------------------------------------ 04/18/2022 o Added SBT-local hitgroup geometry flags containing cached/flattened material opacity, texture alpha cutout, and other information useful for short-circuiting frequent high latency data fetches from global memory or textures, particularly those items needed for for any-hit programs. 04/13/2022 o Added a completely flattened closest-hit dispatch approach through bitwise manipulation of the outpus of the OptiX 7 optixGetHitKind() and optixGetPrimitiveType() APIs. 04/03/2022 o Added support for texture alpha channels and cutout transparency 03/29/2022 o Updated build rules adding linux-arm64-thr-optix to support ARM64 hosts such as ORNL's 'wombat' ARM64+NVIDIA A100 testbed system. 03/25/2022 o Implemented a new higher performance octahedron normal vector decoding variant that eliminates GPU SIMD divergence and costs fewer instructions. Added template parameterization to facilitate both [-1.0f,1.0f] and [0,1.0f] encoded planar coordinate ranges. 03/24/2022 o streamlined accumulation buffer and tone mapping buffer staging 03/22/2022 o Added mainstream tone mapping operators and corrected alpha channel handling in colorspace conversions. 03/21/2022 o Added support for OptiX AI denoiser on standard LDR renderings. 03/20/2022 o Added 2-D and 3-D texture mapping to OptiX code 03/15/2022 o Corrected transparent surface crossing counters. Further improvements to per-ray payload register use and naming concistency. 03/13/2022 o Enabled stereo cameras, improved use of OptiX ray payload registers. 03/12/2022 o Optimizations for OptiX accumulation buffer processing 03/11/2022 o Revised OptiX sphere primitive GPU memory layout 03/07/2022 o Added linux-64-thr-optix build target for TachyonOptiX o Added standalone 'parametric' and 'knot' test codes for TachyonOptiX o Added TachyonOptiX build rules to build the TachyonOptiXShaders PTX into the compiled binary. o Added TachyonOptiX::internal_compiled_ptx_src() method to return a compiled-in PTX code string when the build system used provides it. 03/06/2022 o Unified the various camera raygen program alpha transparency code 03/05/2022 o Migrated gradient noise magnitude and associated calculations outside of the ray tracing kernels themselves. 03/02/2022 o Added new conditional compilation macros to force all of the TachyonOptiX geometry subtype helper classes and internal CUMemBuf data to use instantiations of std::vector that use a special host pinned memory allocator backed by cudaMallocHost(), to achieve much higher performance host-GPU DMA transfers. The new code is enabled when compiled with the USEPINNEDMEMORY macro is defined. When not defined all of the std::vector allocations are done using conventional non-pinned memory. Benchmarks show that for large scene sizes, RTRT dynamic scene rendering performance can be increased by as much as a factor of 1.5x, on a PCIe 4.x host machine. o Added compile-time conditional compilation support for CUDA versions older than 11.2, by disabling the use of cudaMallocAsync() and cudaFreeAsync() and using the older synchronous variants. o Added fall-back code paths to the CUMemBuf class to enable fully synchronous operation, and to force full memory deallocation behavior for persistent memory APIs, to assist debugging in complex cases that may arise later on. o Added new method CUMemBuf::clear_persist_allocation() which sets the host-side memory buffer size down to zero, but retains the GPU device side memory allocation. Corresponding changes to the set_size() method now change behavior so that CUMemBuf avoids freeing and reallocating GPU device memory buffers unless the new size is larger than the original. This scheme allows the performance critical parts of the ray tracing engine to maintain small-to-moderate size memory buffers persistently across full scene rebuilds to save a few host-GPU round trips and associated synchronizations on every frame rendering cycle. These optimizations are of particular benefit for higher frame rate RTRT. 03/01/2022 o Implemented enhanced support for soft-persistent GPU device side memory allocations across scene rebuilds, to reduce or eliminate costly GPU memory free and reallocation operations and associated synchronization operations, to improve high frame rate RTRT performance further. 02/28/2022 o Added asynchronous CUDA stream parameters to all of the performance-critical CUMemBuf.resize_upload() method calls and related operations to ensure greatly improved overlapping of CPU/GPU activity during scene construction, acceleration structure builds, and the core rendering loop. Added a generous number of profiling annotations that associate NVTX tags into the performance sensitive portions of the ray tracing engine to enable ongoing real-time ray tracing performance engineering work. 02/27/2022 o Completed implementation and testing of quad mesh primitives in the OptiX 7 renderer. o Corrected quad mesh and OptiX 7.0.0 triangle mesh hit color handling, and eliminated the material index parameter in all of the surface geometry get_shadevars_xxx() routines, since the OptiX 7 implementation has unified all shared shading parameters among surface geometry subtypes in TachyonOptiX GeomSBTHG SBT hitgroup records. The __closesthit__radiance_general() routine now handles fetching materialindex and other common surface geometry parameters, thereby eliminating code duplication and providing a bit more control over placement for better overall register footprint. o Added implicit indexing for quad meshes 02/26/2022 o Reimplemented accumulation buffer handling for OptiX 7 02/25/2022 o Populated the various OptiX normal and color buffer pointers for triangle and quad meshes. o Corrected handling of triangle mesh packed normals in combination with implicit indexing, added and plumbed per-primitive colors for all of the custom primitives and did a bit more cleanup for readability. 02/24/2022 o Added a rough draft implementation of a quadrilateral mesh primitive based on "An efficient ray-quadrilateral intersection test" Ares Lagae and Philip Dutré, Journal of Graphics Tools, 10(4):23-32, 2005. Revised the existing triangle mesh variable names so that both the quadmesh and trimesh primitives use common nomenclature. Did some general tidying of sbtHG data structure accesses using some modern C++ syntactic sugar. o Added necessary plumbing (AABB and GAS acceleration structure builds) for the new quad mesh primitive. o Added host-side quad mesh AABB calculation, and support for both triangle soup and quad soup arrays using implicit per-primitive on-the-fly vertex index generation. 02/23/2022 o Added safety checks for OptiX runtime shader PTX loading failures and similar critical issues during startup phases. We still need fully robust checking of all OptiX API call return values etc. o Corrected a bogus OptiX strideInBytes value in the acceleration structure prep helper method AS_buildinp_AABB(). 02/22/2022 o Added host-side OptiX AABB helper methods for cones, cylinders, rings, and spheres. o Implemented a new unified method for AABB-based acceleration structure build input preparation, and added more exception handling cases. o Removed inline AABB loops in favor of calling host-side helper routines. 02/21/2022 o Eliminated unnecessary OptiX device-side synchronization. o Removed OptiX placeholder APIs using geometry indices, as we'll probably use an external hash table to do this for object groups rather than individual geometric primitives. 02/19/2022 o Unified OptiX GAS (geometry acceleration structure) and BLAS (bottom level acceleration structure) build among the different major types of custom geometric primitives. 02/18/2022 o Updated all core Tachyon source files with current copyright headers and SPDX "BSD-3-Clause" license information. It may be desirable to switch to an Apache-2.0 license in the future. It provides users of code with explicit indemnification from patents, but it apparently doesn't permit direct combination with GPL v1/v2 software, however that may not be a signficant concern in practice. o OptiX: Added initial (partial) implementation of curve rendering using OptiX 7.x built-in intersection programs. Updated OptiX initialization error checking, ray tracing exception handling diagnostic information, and uniformity of all diagnostic console output. Significant code and comment cleanup, improved variable nomenclature in many places. 12/22/2021 o Added runtime CPU instruction set detection and reporting when verbose output is enabled. 11/11/2021 o Updated grid acceleration structure generation logic to avoid integer wraparound when working with scenes containing billions of objects and very large resulting grids. This change is required to permit VMD+Tachyon to render the aerosolized COVID-19 virion scene containing over 1 billion atoms, as shown in the online edition New York Times article "The Coronavirus in a Tiny Drop", by Carl Zimmer and Jonathan Corum, Dec 1, 2021: https://www.nytimes.com/interactive/2021/12/01/science/coronavirus-aerosol-simulation.html The virion models and NAMD/VMD related software advances are described in: "#COVIDisAirborne: AI-Enabled Multiscale Computational Microscopy of Delta SARS-CoV-2 in a Respiratory Aerosol", Abigail Dommer, Lorenzo Casalino, et al., IJHPCA, 2022 (to appear) 03/07/2021 o Ensure use of internally defined x86 CPUID implementation, and corrected a few fctn prefixes. 04/30/2021 o Completed early protototype of new CUDA+OptiX 7.x GPU-accelerated engine for core Tachyon geometry and materials 03/06/2021 o Added support for AO maximum occlusion distance cutoff, for convenient rendering of interior scenes where the "sky" would otherwise be largely or fully occluded. This is a convenient feature for renderings inside enclosed virus capsids and similar structures. Added a purely semantic convenience macro RT_AO_MAXDIST_UNLIMITED, updated rt_ambient_occlusion() to add the new maxdist parameter, and cranked TACHYON_PATCH_VERSION. Also incorporated previous code cleanup related to stereoscopic, DoF-enabled, and equirectangular cameras. o Added parsing of command line -skylight_maxdist and scene file AO light rescaling syntax to add support for user-defined AO distance cutoff 12/15/2020 o Prevent glwin window destruction from killing the parent app in Win32/Win64 builds 11/25/2020 o Added in default GL window processing of shift-state key modifiers required for expected behavior on Windows platforms 11/16/2020 o Updates to ensure 32-bit and 64-bit windows compilation works out of the box. 11/02/2020 o Added notes about AVX/AVX-512 clock capping and false dependencies 10/27/2020 o Basic ARM64 runtime dispatch flags for SVE and NEON 10/22/2020 o Added support for visual studio compilers in the CPU runtime feature detection code 07/20/2020 o Added flags and tests for IEEE 16-bit floating point instruction support 07/19/2020 o Added enumeration and x86 CPUID runtime check for Hypervisor CPU execution 07/16/2020 o Implemented both a short-term scheme for CPU SMT depth determination based on query of x86 CPU features. The current scheme lacks the ability to determine any BIOS or OS limitation on SMT usage or depth, but this is a known issue at least on x86 o Added additional x86 CPUID safety check to determine max allowed function codes before executing CPUID calls that require non-zero function codes o Favor internal CPU identification code vs. compiler-provided functions 07/15/2020 o Reordered local variables and collect sched_dynamic declaration and initialization within conditional compilation macros o Improved x86 CPU identification routine with Intel cross-platform cpuid reference code o Added x86 inline assembly CPU instruction set feature detection code for compilers other than Intel C/C++, such as GCC, Clang, etc. This enables support for runtime dispatch of hand-coded SIMD loops on open source compilers. 07/12/2020 o Added an SSE 4.1 CPU flag check needed by some Intel RT libs 06/13/2020 o Added macros for sincos()/sincosf() handling on MSVC 02/26/2020 o Added special system-scope synchronization barrier for use by VMD in Cave and FreeVR parallel rendering code paths. 10/23/2018 o Added plain-C implementations of 1-D, 2-D, and 3-D low-discrepancy sequences based on the Golden Ratio. 10/19/2018 o Added draft version of a ray-sphere intersection variation intended especially for small spheres far from the ray origin where the normal numerical solution approach encounters significant precision problems. This algorithm is found in the Hearns-Baker Computer Graphics textbooks and other places. 10/13/2018 o Added mono/stereo equirectangular camera o Minor tweaks to use single-precision to please Clang/LLVM o Enable use of C99 sincos() and sincosf() where possibl 08/28/2018 o Added light weight OptiX-based implementation of Tachyon in preparation for a full OptiX-based GPU back-end implementation 01/10/2017 o Updates to support volumetric datasets larger than 32-bit indexing would otherwise allow. 01/08/2017 o Ensure that different accumulation passes get seeded both uniquely, via tea(accumcount), and predictably, for the purposes of increased parallelism in sample space 10/26/2016 o Added basic CPU feature detection API starting point. o Added placeholder SMT API 01/30/2016 o Added Power8 build configurations for the ORNL 'crest' Summit precursor machine. o Added NVIDIA Jetson TX1 target to the build. Waiting for the native 64-bit dev tools to become available for the TX1. 12/19/2015 o Began revising glwin HMD APIs to support direct rendering to displays that are rotated by default, such as Oculus DK2, to eliminate the need for video-driver-based rotation which can incur a small amount of latency that should be avoided when we do this ourselves. 10/07/2015 o Revised lens distortion correction code to include 5 radial terms and to add approximate coefficients for use with the custom DK2 lens design produced by Sun et al. w/ Lens Factory at Microsoft Research. 09/27/2015 o Completed updates and testing of new full-screen implementation, and corrections for resizing of HMD warp meshes, and FBO data structures when the display window is resized. o Very minor improvements to lens warp distortion correction constants and the chromatic aberration constant for the blue channel. The tweaks yield very slight improvement for a properly-fullscreened window without the window border or interference from window manager dock bars or similar. o Updated the HMD rendering APIs to allow user-provided lens distortion correction coefficients to adapt to a variety of HMD makes and models. 09/25/2015 o Started process of adding support for EWMH window management routines related to full-screen windows. 09/20/2015 o Removed buffer swaps from HMD spheremap display and image warping routines and and make this the caller's responsibility. This allows drawing to the front buffer in some cases, and most importantly it prevents unintentional buffer swaps when they should be avoided, making them explicit to the caller. For the case of HMDs is clearly most desirable since they have a potentially profound performance impact. 09/14/2015 o Added draft version of HMD spheremap rendering paths that also apply HMD lens distortion corrections via two-pass OpenGL FBO render-to-texture followed by rendering to the display. 09/08/2015 o Move extension initialization just after the point where the EGL/GLX context has been made current. This is required for correct behavior of runtime feature queries. 09/06/2015 o Began optimization of the spheremap rendering code path by enabling use of a single texture for both eyes, and furthermore by moving the texture uploads out of the core HMD display loop along with one-time init routines. 09/01/2015 o Added code to check for vertical retrace sync at runtime for a given window. Eliminated some duplication of boilerplate window init code for EGL and GLX. Still need to add EGL/WGL variants of vsync routines. 08/30/2015 o Added code to enumerate GL extensions and their associated fctn pointers to be used for HMD display distortion shaders. The implementation is minimalistic and not intended as a full alternative to something more complete like GLEW, but it gets the job done simply without adding another library dependency. 08/24/2015 o Added HMD head post quaternion parameter to the spheremap renderer so that the caller can pass in the latest head orientation data at draw time, thereby allowing the glwin spheremap display code to compute and apply the necessary per-eye view transformation rather than forcing the caller to provide a texture map with the correct view orientation. 08/23/2015 o Added an initial partially functioning implementation of EGL-based window creation logic. Updated the GL rendering code to simplify various interactive RT use cases. o Added sphermap rendering routines for use with equirectangular projections. 05/29/2015 o Updated MacOS X X11 paths per recent versions that no longer have /usr/X11R6/* anymore. 04/22/2015 o Ensure that the RNG code compiles even on old Microsoft compilers. 04/15/2015 o Changed LRESULT to LONG for the Win32/Win64 windowproc to please MSVS2012 04/11/2015 o Correct box normals for non-cubic boxes (sent by Alexander Stukowski) 02/18/2015 o Updated the Xeon Phi compilation flags for the new Intel 2015 compilers. 12/23/2014 o Added linux-icc-64-thr-ogl build target. 12/22/2014 o Moved sched_dynamic flag determination outside of per-thread initialization loop. This reduces overhead and also fixes compilation on old revs of MSVC. 11/05/2014 o Added implementation of TEA encryption algorithms hard-coded for 2 and 4 passes, appropriate for mixing together multiple RNG seed sources. o Correctly reset accumulation counts upon resize events. o First round of changes adding support for progressive rendering with an accumulation buffer to achieve higher interactive frame rates, but still refine the image toward convergence when non-moving. 10/30/2014 o Added #ifdefs to allow compilation of the OpenGL display code into VMD builds, honoring the traditional VMD compilation macros. Added 64-bit MacOS X OpenGL display target. 10/23/2014 o Updated parser to look for "FocalDist" instead of "FocalLength" for DOF scene definitions. o Miscellaneous cleanup and unification of the depth of field implementation vs. the GPU version. Corrected a bug in the camera initialization code that was previously blowing away the aperture radius values. It's probably just as well since the new code uses aperture values that are f/stop ratios. 10/18/2014 o Added runtime checks for Spaceball/SpaceNavigator input devices. Improved window management for close events. 03/31/2014 o Added SIMD-friendly uniform sphere sampler based on Archimedes cylindrical projection scheme. 11/11/2013 o Added an explicit 64-bit MPI linux target. 06/12/2013 o Added a pixel-granularity dynamic scheduler for threads-only runs, using the new lock-free atomic counter primitives based on atomic-fetch-and-increment machine instructions. The pixel-granularity dynamic scheduler is automatically enabled when more than 4 antialiasing samples are taken per-pixel, or when ambient occlusion lighting is enabled. Both of these cases are good indications that we've gone beyond the complexity that can achieve real-time rendering, at least for typical host machines, and that SMP load balance and scaling efficiency are more important than the small amount of additional per-pixel overhead involved. 04/21/2013 o Added the Doxygen build files to the source tree o Massive update to the list of different target platforms. I have removed all of the old build targets that aren't particularly relevant to an average person from the main list, but they are still in the makefiles for those that want to dig into Make-arch and see what is there. o Implemented a new barrier synchronization mechanism for synchronizing the pool of worker threads on each node prior to sending/receiving the image buffer via MPI. This increases the performance of hybrid MPI/threads builds quite substantially on average. Rather than using the higher-cost threadpool barriers on each row/scanline, this implementation uses either lock-free atomic integer operations or a minimalistic mutex-based approach. Tests on the NCSA Blue Waters Cray XE6/XK7 give a performance gain of roughly 3.6x when using the mutex- or fetch-and-add/add-and-fetch atomic counter barriers rather than the condition variable sleeping barriers. o Added support for atomic integer ops for improved performance when mixing threads and distributed memory message passing. o Fixed a couple of bugs in the volume loader code. Added check for successful read, and added a missing call to fclose(). o Added bluewaters-mpi-thr target enabling both MPI and threads. o Replaced hard-coded threading defines in the makefile with inclusion of flags from Make-config similar to what is already done for MPI and other features. This makes it much easier to enable/disable various implementation options, tunings, and machine-dependent, compiler-specific, platform-specific optimizations, and experimental code. 04/20/2013 o Eliminated a small bit of unnecessarily inlined/duplicated code for caching the AO RNG handle in the two main image generation loops. o Added commentary about the costs of the barrier synchronization in the context of mixed threads+MPI builds, and the opportunity to replace it with simpler mechanisms such as a scheme based on fetch-add atomic ops. 04/19/2013 o Integrated bug fixes for the old OpenMP code path and added build targets linux-icc-64-openmp and linux-64-openmp. o Fixed a bug with OpenGL+MPI where all of the non-zero nodes were setting their image output buffers to rgb96f, but node 0 was setting rgb24f. All nodes now set their output buffers to rgb24f if OpenGL is enabled. Added a simple linux-mpi-ogl build target for easy testing. 04/17/2013 o Misc cleanup of the Makefiles, added more comments regarding the need for -DUSE_MPI_IN_PLACE when compiling with MPI 2.x libraries. 04/09/2013 o Changed the double-precision epsilon values to prevent occurence of the "digital zits" problem when rendering VMD scenes of extremely large structures such as the HIV capsid. Reducing the epsilon value by 50 cures this problem for extremely large VMD scenes. In the longer term, Tachyon should be changed to use epsilon differently to avoid this sort of sensitivity. 12/09/2012 o Use the pthread affinity APIs when compiling for Intel MIC 12/07/2012 o Added support native Tachyon builds on Intel Xeon Phi (MIC) compute accelerators 12/06/2012 o Updated CARMA Tegra3 targets to use forced override of the number of CPU cores to prevent offlined CPUs from causing Tachyon to spawn too few host threads. 11/15/2012 o Added new linux-carma-thr and linux-carma-softfp-thr build targets supporting the NVIDIA / SECO Tegra3 development boards. 09/29/2012 o Added workaround to address the problem of varying CPU counts reported by sysconf() on the Android platform. Android varies the number of active CPU cores according to system activity, thermal load, and battery state. Several existing Android versions incorrectly report the number of active processors rather than the number of physical processors when queried with _SC_NPROCESSORS_CONF, so until this is fixed, we work around that problem by reading and interpreting the contents of the file /sys/devices/system/cpu/present. 09/28/2012 o Added special Java JNI wrapper functions and supporting infrastructure that is required in order to call Tachyon from Java, wrapped in an Android application. o Don't call exit() on the Android platform, return instead. o Added new Makefile macros to control the naming of the Tachyon Java JNI wrapper function, and the app/class that it gets embedded into. o Significantly streamlined Android JNI builds by adding new macros to control NDK binary/include/lib/sysroot paths. 09/24/2012 o Updated the Tachyon threads code for MacOS X to avoid using the old Carbon Multiprocessing APIs, which are now deprecated on versions of MacOS X 10.7 and later. 08/27/2012 o Fixed a potential thread handle leak on Windows platforms. 03/14/2012 o Added check for USE_MPI_IN_PLACE macro when compiling Tachyon for platforms based on MPI 2.x, such as the NCSA/Cray Blue Waters system. 04/11/2012 o Fix behavior of non-blocking glwin_handle_events() calls on windows. Updated OpenGL window handling code to process various mouse events and to prevent dropping any events. 02/17/2011 o Revised Tachyon APIs to greatly improve const correctness. 02/15/2011 o Changed the behavior of OpenGL fog such that fog color doesn't override the background color or background sky sphere. OpenGL only applies fog to drawn fragments and not to raster ops or glClear() so this makes it easier to emulate the behavior that OpenGL applications like VMD expect. o Added orthographic sky plane background gradient mode, renamed the background gradient API deprecating the old one, and added copius comments to the Tachyon header file. 02/11/2011 o Updated in-memory texture image definition API, replacing rt_define_image() with rt_define_teximage_rgb24(). 02/06/2011 o Updated various header files to improve doxygen output. o Further progress in automating conversion of the threading code to the WorkForce APIs used in external programs. 02/05/2011 o Misc improvements, added new command line -raydepth parameter to override maximum ray recursion depth setting in the scene file. 02/01/2011 o Added "3fv" versions of most object creation APIs which is more convenient and familiar to OpenGL programmers. 01/31/2011 o Eliminated dependencies on libGLU 01/28/2011 o Greatly expanded range of keyboard input allowed by OpenGL window handling routines on X11 and Win32. 01/24/2011 o Improved Win32 window resizing behavior 01/19/2011 o Added support for interactive fly-throughs using the SpaceNavigator and other devices that send events via windowing system messages. 01/16/2011 o Marked with new version number 0.99 o Updated camera code to allow changes to rendered image resolution independent of other camera parameters. o Added keyboard hotkeys to change the window size and resolution of the ray traced images on-the-fly. o Added code to gracefully handle window resizing and dynamic scaling/centering of the ray tracer output image. o Fixed Win32 OpenGL drawing code to double-buffer by default 01/15/2011 o Added window event handling code for SpaceNavigator/Spaceball and compatible devices. o Eliminated code and build settings related to the Mercury/MSTI i860 and PowerPC builds supporting RTVI framebuffers, circa 1998. 01/12/2011 o Added support for quad-buffered stereoscopic display modes to the OpenGL window management code. Updated the OpenGL display code to handle keypresses and a wide range of other event types. Rewrote the Win32 display code to eliminate global window state variables through the use of user-defined window property data. Added support for both blocking and non-blocking window system event queries. o Fixed scene parser logic for extension-based file type determination o Update const-correctness of various image I/O modules o Updated various source files to eliminate Microsoft compiler warnings 02/10/2010 o Added support for limits on the maximum number of transparent surfaces shown, a related flag to enable or disable shadow filtering for transparent objects, and a new transparency mode flag to enable modulation of surface transparency based on the angle of incidence of the incoming ray and the surface normal, emulating the equation used by Raster3D. 01/18/2010 o Fixed a problem with hybrid MPI+threads builds where thread IDs other than zero were incorrectly being allowed to make calls to the parallel message passing code. 11/05/2009 o Fixed a bug in the handling of transmission and reflection rays in the presence of user-defined clipping planes. The secondary rays were not being properly clipped due to a ray flag not being propagated correctly. 07/15/2009 o Greatly improved efficiency of PPM and Targa image output codes. Image output was making large BlueGene runs I/O bound. The Targa format is costly on BlueGene due to the need to swizzle RGB color channels to BGR order, apparently byte loads and stores perform poorly on this architecture. 05/27/2009 o Updated vertex array primitives to allow the use of volumetric texturing in place of vertex colored smooth triangles, when the color block is not defined. This is used by VMD for rendering of electrostatic potential maps. 05/17/2009 o Added new "shader_mode" scene file block where the rendering quality setting, and ambient occlusion settings can be specified, along with special fog and transparency rendering modes used by VMD. 05/17/2009 o Increased efficacy of the combination of AA and AO samples, such that any combination of AA and AO sample counts will result in a grand total of AAsamples*AOsamples unique AO sample rays for each pixel. 05/16/2009 o Updated X11 OpenGL window event handling to address a problem on some platforms running KDE. o Added additional color range clamping checks on output so that larger-than-unity outline texture values can be used without corrupting image data. 05/15/2009 o Added "outline" texturing feature for use with VMD 04/22/2009 o Added a VMD-specific fog rendering mode to allow renderings to precisely match what is seen in OpenGL, which uses a simple planar fog implementation. Added higher level thread pool/iterator constructs intended to eventually replace hand-coded thread calls in the rendering loops. Various small tweaks to place GCC 4.4.x. Updated the Make-arch configurations for GCC to only use -O3 since the higher optimization levels are now ignored anyway. 03/24/2009 o Added Win32 condition variable implementations and enabled multithreaded builds by default on Windows. 06/01/2008 o Added output image cropping for use by SPEC MPI benchmark suite when rendering very large test images. 03/09/2007 o Correct the handling of cases where degenerate triangles are eliminated from the scene by checking for NULL objects before applying normal fixup mode changes. 02/12/2007 o Implemented a new output stage for high dynamic range image formats. Added support for uncompressed 48-bit color PPM and 48-bit color Photoshop PSD files. Renamed rt_rawimage() to rt_rawimage_rgb24() and added rt_rawimage_rgb96f() for floating point color images. Added new -clamp, -normalize, and -gamma options for post processing floating point image data before output is written. 02/11/2007 o decrease the double precision epsilon values by a factor of twenty to improve rendering of VMD images and other scenes that use a coordinate system with small absolute coordinate values. This should still leave plenty of range for scenes with large coordinate values. 02/09/2007 o Added basic shadow attenuation for transparent surfaces. 02/05/2007 o Added new inline image/volume texture definition feature to the scene description language for use by VMD. 02/04/2007 o Added a new "-normalfixup" command line argument to indicate whether and how Tachyon should attempt to correct surface normals that are inverted relative to the triangle winding order. 01/29/2007 o Added a vertex array primitive to the scene description language, supporting an arbitrary number of subsequent trimesh and tristrip blocks which reference the array. 01/24/2007 o Added a new class of texture mapping routines specifically for the special case of the background texture. Implemented a default solid background texturing routine, and a prototypical sky sphere implementation. 01/23/2007 o Added a "-res" command line argument to override the default image resolution. 01/21/2007 o Added support for Ambient Occlusion lighting. Added comments about the safe use of the limited length cycle-free random number sequence for antialiasing, random ray direction generation, etc. Updated README with current date and contact info. Cranked version number and copyright dates of the package. 03/18/2005 o Updated the Make-arch target list shown by default, and improved the flags used for 32-bit Linux targets. 05/30/2004 o Added first implementation of clipping groups consisting of a set of clipping planes. o Changed version number to 0.97.0 (for use by VMD builds) 05/28/2004 o Miscellaneous code cleanup, makefile improvements, and minor performance tweaks here and there. 03/04/2004 o Significant updates to texture allocation management code 03/01/2004 o Fixed an incorrect string allocation in the command-line argument parsing code 02/02/2004 o Released version 0.96 o added a per-vertex colored triangle primitive intended primarily for use with VMD-generated MSMS and NewRibbons representations. o subclassed textures to reduce memory consumption with large per-vertex colored triangle surfaces exported from VMD. o changed color types to use floats instead of flt to conserve memory. 08/03/2003 o significant documentation updates, including recently added features. 07/29/2003 o added several new compilation targets for Linux running on the 64-bit AMD Opteron platform. o Spaceball flight mode is disabled when running Tachyon on a distributed memory machine, since there isn't code to send camera parameter updates between the nodes presently. 06/06/2003 o Released version 0.95 o added new transparency mode APIs and shader code to enable a new transparency mode that more closely matches the results of real-time renderers that use stipple/screen-door transparency such as VMD. Added -trans_orig and -trans_vmd command line options. 05/29/2003 o added internal tracking of texture objects so they are freed when the scene is deleted, absolving the user from having to do this in their own code. o main program will now render more than one scene at a time, and will generate a numerical sequence of output images. 05/13/2003 o fixed swapped texture mapping constants 03/07/2003 o Released version 0.94 02/16/2003 o Added first implementation of fog 01/27/2003 o New fisheye camera projection code 01/21/2003 o New code for setting the camera view frustum 07/27/2002 o Released version 0.93.6 o Made the shader used for specular highlights globally selectable by the user. o Made the Blinn shader and the fast approximation version faster by eliminating some redundant calculations and by moving normalization calculations around. o Re-worked the MGF and AC3D scene file loaders o Improved the Itanium2 compiler flags on HP-UX. o Added depth of field 07/08/2002 o Added antialiasing code for orthographic scenes o Added directional lighting (non-local) primitives and made the shading system more flexible o Large amounts of const correctness improvements. 07/03/2002 o Added code for rendering orthographic scenes o Added reader/writer locking code 05/10/2002 o Added Make-arch flags to compile on IA-64 versions of HP-UX 03/27/2002 o tachyon.h header updates for C++ and prevent multiple inclusion. 03/26/2002 o Const correctness fixes 03/21/2002 o Added Alphaserver SC configuration 12/12/2001 o Released Tachyon version 0.93.4 o Misc cleanup, updated readme info, prepared for release. 12/03/2001 o Updated for compilation on VMS, with updates contributed by Peter Ljungberg 11/29/2001 o Ported to Linux on Compaq iPaq PDA 10/29/2001 o Ported to Linux on Sony Playstation 2 08/19/2001 o Added spaceball code to main ray tracer control loops, for doing fly throughs etc. The old OpenGL previewer code can now be rewritten more simply, eliminating all of the old special case code for the spaceball etc. o Added Solaris and Scyld Beowulf targets for MPI and OpenGL runtime display. (larger scale parallelism, particularly useful for doing spaceball controlled fly-throughs) 08/18/2001 o Reorganized main loop code to make adding spaceball fly-through code cleaner. 07/27/2001 o Added a Pentium 4 target for gcc. o Cranked rev to 0.93.4 07/26/2001 o Released Tachyon version 0.93.3 o Updated distribution for Siggraph 2001 demos. o Improved usage message printing on MPI builds, fixed some minor initialization issues in printing related startup code. o Fixed a bug that could crash Tachyon when it was trying to do a clean shutdown in MPI, there was a case that could crash if message buffers had not yet been allocated at the time of shutdown. New code checks buffers more carefully. 07/25/2001 o Added support for Sun's ClusterTools 4.0 MPI implementation. 04/06/2001 o New compile flags AMD Athlon chips yield 15% performance improvement. These flags are known to work with the "gcc 2.96" that comes with Redhat 7.x. Older versions of gcc don't have them yet. 04/05/2001 o Added a configuration for Linux Alpha using the Quadrics implementation of MPI. o Reorganized the Linux section of Make-arch by platform o New multithreaded build for MacOS-X with Carbon Multiprocessing detection code. o Added missing documentation for spotlights, distance-based lighting attenuation, and made several corrections to the existing text. o Improved performance of builds on Linux for Athlon CPUs by 15% through the use of better GCC flags. 04/04/2001 o Updated MacOS-X build flags for new version of the system released on March 24, 2001. 04/03/2001 o implemented new -aasamples command line flag to more easily control antialiasing settings without editing files. 03/12/2001 o Released Tachyon "0.93.2" 03/11/2001 o Improved handling of parser errors and debugging information printed. Added line numbers, character offset, expected token, and actual string. Added checks for self-recursive scene include files. Improved default handling of unspecified animation filenames per format. o Added HTMl docs to doc makefile, and to distribution. 03/05/2001 o Redesigned parser data structures and rewrote all of the parser's internal interfaces to use them. This is the first step toward more useful error messages, elimination of static and global data, and making the parser itself multithreaded some time down the road. o Rewrote the texture table code using new parser interfaces, eliminated hard-coded size limits on texture names, number of textures, etc. 03/04/2001 o Added comments about case sensitivity of file names and texture names to docs. Also added info about the behavior of lights with a radius of 0.0 o Changed glwin code to allow specification of the window title so that Tachyon and its OpenGL previewer are more easily differentiated from each other in all cases. 03/03/2001 o Fixed some parser error handling code to print better messages when scene files or include files fail to open. 03/01/2001 o Made some more changes to the Phong specular highlighting code, trying out some other potential implementations etc. 02/28/2001 o Added a more traditional Phong specular highlight shader function. Also clarified the code and renamed the original function to make it clear which one is using Blinn's halfway vector and which one is using the calculated reflection vector. o Added new Windows-specific timer code to make use of millisecond resolution timers. o Updated the Windows project files for recent changes to the code. 02/26/2001 o Added PNG reading and writing support to Tachyon. Currently only does 24-bit RGB files, but may add support for 48-bit RGB PNG files in a later revision. o Changed the tachyon main program and getargs so that users can select what format and what filename/frame format specifier they want to use for their animations, so that users can do things as below on the command line. tachyon .... -format PNG -o /tmp/frame.%04d.png .... 02/25/2001 o Added some rudimentary orthographic camera code, although it is not exposed to user callable APIs yet, a basic implementation is now there. After some more camera models are tried out, I should be able to clean up the camera APIs significantly. 02/23/2001 o Released Tachyon "0.93.1" 02/22/2001 o Fixed AIX multithreaded builds so that they force PTHREAD_SCOPE_SYSTEM scheduling, so we get to use all of the CPUs. The AIX 4.3.x default scheduling scope is unfortunately set for PTHREAD_SCOPE_PROCESS, so we override it now. 02/19/2001 o Camera definitions can now be placed anywhere in a scene file, the last definition overrides all previous definitions in the scene. o Changed the OpenGL "glwin" code to acquire a Z-buffer on Unix systems, so that the OpenGL-based Tachyon "simulator" code can share this code instead of having to use GLUT, which eliminates GLUT as a build requirement, and avoids the limitations it imposes on program structure. o Fixed various incorrect/out-of-date information in the Tachyon docs. Updated for recent changes to scene language etc. o the wood grain procedural texture scale correctly now. o updated test scenes to match changes to wood grain texture code. 02/18/2001 o Added new Make-opengl file which contains make macros to define OpenGL include/link info for all of the major platforms that are supported. o Updated copyright dates again. 02/14/2001 o Released Tachyon version "0.93" o Added better EOF handling into parser, and implemented "include" files. 01/19/2001 o Renamed thread data structures to avoid a small namespace collision with system headers on IRIX in certain circumstances. 01/04/2001 o Updated documentation files. o Added a "#" comment keyword so that people can have comments in scene files. 12/19/2000 o Added build targets for IA-64 machines running Linux, using both GCC and the SGI Pro64 compilers. o Added new targets for the Portland Group compilers. o Added ability to disable the allocation and use of mailbox grid-acceleration data structures at compile time with new configurable option in Make-config. o Fixed Make-arch so it pays attention to the FLT macro, it was a bug that it was not already doing so. o Added scene handle as required parameter for the rt_texture() function. o fixed the -nosave flag so that it disables image saving for single frame renderings as well as animations. 11/22/2000 o Released Tachyon version "0.92" o Changed makefiles to be more IRIX/Tru64 friendly. o made rt_timer_xxx() and rt_rand() publically usable. o added Frames per second display to camfile processing o Rewrote timer code to be more useful. o Added MacOS-X build configuration o Added Linux threaded OpenGL build configuration o updated MSVC project configuration 11/21/2000 o Received a bug report from Osama Youssef, the grid_intersection() code was causing tachyon to step through grid cells starting from the grid boundary rather than from the ray origin in the case where rays originate inside the grid rather than outside. Fixed this problem by changing grid_bounds_intersect() to return a tnear of 0.0 minimum, rather than negative t values from the boundary of the grid. Rendering times for the balls test scene are around 70% faster now due to the large decrease in overhead. 11/17/2000 o Added an build config for UltraSPARC-III machines. The -xarch=v8plusb flag gives a good 10% performance boost. 10/02/2000 o Got rid of unused local variables.. o Added a compile target for Alpha Linux using Compaq's C compiler. 09/26/2000 o Added support for Linux on the Alpha platform, and changed the statically linked Tru64 build flags so that the produced binaries can run on Alpha Linux as well, since Compaq C is much better than GCC still, my tests showed a factor of two speed difference. 09/14/2000 o Released Tachyon version "0.91" 09/13/2000 o Improved camera code and sped up primary ray generation. Minor improvements to make it easier to add new camera models soon. o Updated usage message to only list file formats that are parsable by the compiled code. 09/11/2000 o Several more optimizations to reduce per-pixel overhead for better real-time speed. Removed clamping code for negative color values. o Improved camera ray generation and did some cleanup. o Merged various shared items in tachyon.h and types.h into rtcommon.h 09/04/2000 o Released Tachyon version "0.90" o Nice per-pixel speed increase by overlapping pixel clamping arithmetic and writes, and by changing ray direction normalization to multiply by reciprocal rather than divide, helps speed up by 10% on Sparc, no effect on Alpha. 08/16/2000 o Added a solaris-pthreads-gcc build that works on Solaris 7 X86, used by VMD. o Splite distribution targets into their own Make-distrib file, included by Makefile. 08/15/2000 o Added OpenGL-display multithreaded build targets for Solaris, IRIX, and Tru64 Unix. o Added 24-bit Windows BMP image writing code and new flags to make it one of the available output options. o renamed Tachyon include file to tachyon.h from api.h, update all sources/makefiles correspondingly. 08/14/2000 o Renamed api.h to tachyon.h, and did lots of cleanup, updated distribution makefile and added lots of missing runtime usage message help. o Added build targets for the OpenGL-capable run-time display version on IRIX, Solaris, and Tru64. 07/31/2000 o Added single-threaded BeOS build target to the "Unix" makefiles. Since BeOS's development environment is so tachyon-friendly, there was no need to do anything new or crazy here. 07/25/2000 o Added 64-bit build targets, and new code for eliminating the run-time clearing of the mailbox arrays when running on a 64-bit platform, since the mailbox counters will never overflow with 64-bit integers. Will be a performance win someday :) o Added Linux PPC build target. 07/13/2000 o Finally updated copyright dates etc. 07/07/2000 o Updated Alpha build targets to enable speculation. 05/18/2000 o Ray tracer binary is now called "tachyon" and not just "ray". o rearranged lots of compile targets to be more update with the way newer revs of the OSs are setup or are named now. (i.e. renamed osf1 targets to tru64) o added a pthreads build for AIX 4.x, but it doesn't appear to schedule threads in system scope yet. o updated the makefiles and documentation in the tree to reflect the name "Tachyon" which has stuck pretty well for the last year or two. o Changed hpux-thr build to work for POSIX threads on HP-UX 11.0. o migrated from RCS to CVS for real finally, have been too lazy to get this done for a while. 11/08/1999 o changed the definition of the "medium" quality shader to make VMD users more happy. 09/22/1999 o eliminated unused variables, misc cleanup. o added user selectable output image format code instead of hard-coding to Targa format output. o improve image writers, better correctness etc. o added image I/O routines for SGI RGB, PPM, JPEG 11/29/1998 o Made an important change to the grid code, the grid code caches the value of the ray serial number, and the pointer to the mailbox array, this helps the compiler avoid generating stupid code on some platforms, and helps avoid one level of indirection. o Changed intersection structures within the ray struct, they are no longer arrays in the general case, since CSG is different anyway, it will use the new code for adding intersections specially rather than making the average case performance suffer. o Intersection functions for each object now use a function pointer for "add_intersection" instead of calling a specific function. This makes things much more flexible and helps performance slightly due to the use of special case code for regular rays and shadow rays, instead of using one function for both. o Improved the constants in type.h when building for single precision rather than double precision. Should allow a single precision ray tracer to give good results through the use of customized EPSILON constants etc, while allowing double precision builds to remain maximum quality. Single precision builds run anywhere from 5-20% faster than double precision builds, and they use about half as much ram for the same number of objects. 11/25/1998 o The code now outruns Rayshade for all of the SPD scenes, even on a single processor, even with the overhead of the multiprocessor capable builds, and even with no shadow cache. o Further improvements to the grid traversal code which yield a 50% speed improvement for scenes that end up having a single-level low-res grid, usually with 20-100 objects.. Big decrease in the setup overhead per ray.. o removed unused static functions from several places, and got rid of unused parameters on some shader code. 11/23/1998 o Several critical improvements to grid.c which yield a 30% speed increase on several of the SPD test scenes. (at least on a Sun Ultra 2...) o Added RTVI display code for MSTI's SC'98 show. o Added new i860 MCOS platform support. 09/09/1998 o Added OpenGL support for Windows 9x/NT.. o Added support for MPI on NT, using MSVC and MPI Software Technologies' MPI/Pro for NT. Configurations for both TCP and VIA interconnects. o Added support for the Cygnus Cygwin32 compilers for windows in the standard Unix makefiles. 08/30/1998 o Fresh build on NT with all new MSVC project files o Various small performance enhancements 08/06/1998 o New Platform Support Added: DEC Alphas running Digital Unix (aka OSF1) o new APIs for camera control. o new APIs for querying scene resolution. o new APIs for user interface callbacks. o significant changes to API functions, many now require the scene handle as their first parameter. o improved parallel work decomposition code for multithreaded runs on only 1 "node". Eliminates cache thrashing on CC-NUMA machines like the SGI Origin2000 machines, probably helps others too. Also generally improves memory coherence properties of the entire ray tracing process as a side effect. o completely eliminated limits on the number of lights in a scene. New code is fully dynamic, no fixed size tables. Memory is the only limit. o eliminated old unused code constructs. o Redesign and completely new implementation of all of the top levels of the core rendering loops. The new code caches a lot of setup in order to vastly reduce overhead when rendering animations. o Complete redesign of the multithreaded parts of the rendering code. Entirely new approach, which runs much better when doing animations, and when doing mixed-mode threads and message passing. Worker threads are now long-lived. They live for the duration of a given scene. Future revs may increase thread lifespan even longer. Threads are created in a pool, and the pool is awakened for work when a frame is rendered. After work is complete the threads sleep until they are needed again. This reduces thread creation and destruction. o Changes to surface normal code in all objects more is done in the shader code, less in the objects. Much more of the math is inlined now too. 07/23/1998 o New Platform Support Added: Cray Vector Supercomputers using POSIX Threads Cray T3E Supercomputers using MPI CSPI Multicomputers using MPI/Pro (PowerPC) Linux with POSIX Threads and/or MPI (x86) Mercury Multicomputers using MPI/Pro (PowerPC) Mercury Multicomputers using MPI/Pro (i860) SGI IRIX 6.4 with POSIX Threads o Several Rendering fixes o Complete rewrite of the distributed memory communications routines. New code uses much higher performance MPI constructs than before. o New code no longer needs concurrent I/O in order to perform well on distributed memory machines. o Tremendous amounts of internal restructuring for improved scalability on both shared memory and distributed memory machines. o New code provides much higher performance for rendering fly-through type animations. o Added MIP Mapping capabilities to texturing code. o Added Spotlights. o Added controls for lighting falloff equations. o Automatic shader/quality determination based on scene contents. o Multiple shader support for user specified rendering quality levels. o Fixed memory leaks. o Greatly improved antialiasing code o Added many new command line parameters for additional control over the rendering process. 03/17/1998 Fixes to distribution directories, renderering bug fixes here and there. 01/07/1998 New code uses a hierarchical grid based efficiency scheme to accelerate ray tracing. Runs as much as 25 times faster for some of the SPD scenes, runs *incredibly* fast for huge scenes containing upwards of 1.5 million objects. (can render a 1.5 million object SPD teapot scene in 86 seconds on a 4 processor Sun ES3000) New code has several improved APIs for texturing, and global scene settings. Future revisions will include extensive changes to the external APIs which will make future implementation of new features much cleaner and better organized. New image reader API for loading texture map images. New image readers for JPEG, Targa, and PPM replace old PPM-only code. Easily extensible to support new image formats. 11/02/1997 A complete overhaul of many aspects of the ray tracing system has been done. Many improvements have been made to its reliability. The ray tracing API has changed to enhance extensibility and improve organization. Overall execution speed has been improved by approximately ten percent over previous versions, especially for simple scenes. Internal library reorganizations have reduced the code size, and improved orthogonality within the implementation. Enhancements have been made to the image map code to allow reading targa files as well as ppm files. A new image loading and saving API will allow support of new image formats such as JPEG for texture maps. Extensive command line overrides are now available on the ray tracer application. Display enabled builds of the ray tracer should be the default from now on, since run-time display can be enabled and disabled on demand. 10/20/1997 Now reads NFF files (ala SPD) directly. Initial implementation of AC3D model file reader. Rewrote the regular parser in entirety. All of the old statistics which used to be kept in the parsers have been removed. In the next few distributions, the geometry parsing systems will be reworked so that a much greater variety of models may be loaded from foreign 3D file formats. This version is the first major step in that direction. 3D Studio files are next on the list for implementation. Quite a bit of code housekeeping has been done recently as well, removing all warnings I'm aware of. I'll be adding support for a number of new image file formats for both reading and writing, as well as the ability to load files over the network from WWW servers. The OpenGL scene previewer will also be getting a makeover in the near future. 10/02/1997 New solaris-gcc-thr-x11 target, with some further cleaning applied to the source code. Also added support for 24 bit TrueColor X visuals in the X11 code. The TrueColor support code still needs a few tweaks, but does work on Suns and SGIs. The X11 code will probably reverse the Red and Blue channels on x86 machines, but I'll be adding code for plane masks etc soon, which will also allow it to work for 16 bit TrueColor displays.. 10/01/1997 New solaris-gcc-thr-x11 target for building the multithreaded version correctly with gcc on suns.. This problem was reported by Lars Rzymianowicz, and should be cured now. This release also includes various syntactic and semantic cleanup using lint-like compiler flags. 09/25/1997 This version includes quite a number of changes to the OpenGL scene previewer. The previewer now has greatly improved shading, uses display list for much faster rendering, and includes support for the "SpaceOrb 360" spaceball controller for use with real-time fly-throughs of scenes. Recorded fly-throughs can now be rendered by the ray tracer for creating animations. The new distribution also includes a lot of new experimental codes for creating OMF files, PPM files and supports several new extensions in the ray tracing library. 03/06/1997 98% of the basic functionality found in the raytracer now exists in the OpenGL previewer. Cylinders, spheres, triangles, smoothed triangles, infinite planes, and rings are all supported. Volume rendering is not supported, and neither is texture mapping at this time.(after all, its only a previewer!) The previewer can be linked with a program much like regular raytracing library can. At the present time, the previewer code does not have a way to be invoked multiple times, and can't run without a display of some kind. As I have time I'll be trying to merge the features of the ray tracer and previewer so they are relatively seamless. Eventually I plan to implement a polygon rendering library that will not depend on having a display. So in the future there will be a "quality level" between 0 and 100%, with 0 being non-shaded polygons, 100% being fully antialiased raytracing etc.. Now to write some animation code :-) 03/03/1997 More functionality added to the OpenGL scene previewer. It now writes out PPM files (in addition to rendering them) in the same way that the raytracer writes TGA files. The new version can be built using either the AUX lib, or the GLUT library (both are helper libraries for interacting with the windowing system, and input devices) Display performance on this version is probably 10 times faster than the previous version. 03/02/1997 Major functionality has been added to the OpenGL previewer. It will render 70% of the objects supported in the raytracer. It has a slightly simplified lighting model. The OpenGL camera should now behave just like the ray tracer's does. One minor fix was made in the fractal landscape generator code, to orient the normals correctly for use with systems that only want to render the front facing polygons/triangles (OpenGL). (This version requires the AUX OpenGL toolkit) 02/23/1997 Fixed some prototypes/compilation warnings, cleaned up the unix makefiles, trying out some new compiler optimizations for UltraSPARC machines with the Sun 4.x tools. Updated all of the example models so output goes to /tmp rather than /cfs/johns/... (my old work area on a parallel computer :-) Added a simple model file parameter to command line parsing. Hopefully this will *not* cause problems with MPI builds, since MPI likes to take the first shot at parsing command line parameters. Getting ready to add more code into the OpenGL scene previewer, hopefully the camera model will be completely fixed shortly :-) The OpenGL code should now work with Mesa as well as vendor supplied OpenGL libraries. 02/05/1997 Added threads and multiprocessor support for Microsoft Windows platforms. Added a 'renderapp' to the msvc directory. Renderapp is a first hack at doing a windows GUI front end for the raytracer. The GUI compiles for Windows, Mac, and PowerMac, but at this time its incomplete and has poor event handling. The Windows threads seem to run great on multiprocessor Pentiums. I'm assuming that all of this code will also work for the DEC Alpha's running NT, and the PowerPC version of NT. Only minor minor changes would be needed, mainly the byte swapping order for the big endian machines (copy from Pmac and 68k configs). 11/17/1996 Cleaned up all extra/unneeded variables, added lots of typecasts, and added a new 'makefile.msvc' for compiling with Microsoft Visual C/C++. Also has Macintosh targets in the makefile.msvc for people with the cross compilers. 11/10/1996 Removed 90% of globals, removed 90% of hard coded limits on numbers of threads etc, now does thread spawning totally dynamically. Runs 10% faster with new intersection structures, should run much much faster on SMP machines, got rid of some cases of 'false data sharing' which would cause MP cache thrashing unnecessarily. All intersection info is now created and destroyed within each thread, and eliminates false sharing due to memory addresses being too close together. 04/11/1996 Updated parvol code, matches extvol at the moment. Decided to write a distribution tar after fixing a long standing bug in cylinder normal code. Added polycylinder code to the api.. 04/09/1996 New extvol rendering code does much better voxel shading. Next version will have the parvol rendering code in place, and will allow the use of the gridmap code and new RPC's 04/01/1996 Reworked API function names, first rev of the new volume rendering code (extvol). First rev of the irregular grid mapping code. Updated the source for Solaris 2.5 and UltraSparcs. 01/27/1996 Updated the thread code to autodetect the number of available CPUs. It will spawn as many threads as there are available CPUs. Tested on Sun SparcCenter 2000 at WU. 01/21/1996 Major performance improvement on triangle related objects.. Runs about 2 times as fast as it did. Minor cleanup and some performance improvements when rendering simple scenes. 01/08/1996 New util (tgatoyuv) for converting tga's to YUV files for MPEG compressed animations. Extensive performance tuning of existing code. 01/01/1996 Bugfixes and cleanup 07/13/1995 Fully multithreaded version (Sun && Paragon) Vastly improved support for shared memory machines. Still needs threads for other platforms but the foundation is complete. Improved load balancing for threads is in place. Haven't extensively tested on other platforms, mainly Sun, iPSC/860, and Paragon. 07/05/1995 MPI+Multithreaded version Intel Paragon XP/S only. 1994-1995 Many many versions, all experimental quality only... Change logs for these versions only exist in the revision control system.