Angel 0.7 (c)I Stephenson - 2003 This is the seventh release of Angel: A RenderMan compatable render. The main limiations are: a) Varying shader parmeters are not supported. b) UV space for poly's is incorrect. 0.7 adds global illumination. Its a bit slow in places, and has limitations, butit basically works, and produces some impressive results. 0.6 incorporated lots of fixes, and the like, but the most obvious new features are depth of field (very slow for large blurs!), and support for the RiCurve primitive. Coordinate systems are now properly handled in SL, and I've FINALLY added support for holes in general polygons. I also fixed matte and illuminate. 0.5 added programmable projections, shadow support, motion blur, and area lights. Motion blur works through a form of interlacing, and hence to improve motion blur quality, increase the Y pixel samples. Area lights are currenly only supported for parametric surfaces. SL's can be compiled using either my own compiler "Giles" or the standard BMRT compiler "slc". If you're using "slc" please comply with BMRT licensing. I've always considered Giles to be a bit (lot) flakey, but the latest version has taken some moderatly tough soak testing, and handled most things OK - Anyway the source code is available for download if you'd like to fix it! The Illuminate call, which is designed to turn lights on and off, has been extended. Rather than taking a boolean value, it now requires a float, which allows the brightness of the light to be scaled. This is backward compatable with the standard implementation, but allows greater flexability. If you set the hider to stereo, then two images will be rendered giving a left and right eye view. Seperation is controlled by the parameter "seperation" which has a default value of 1. The RiGeometry call is implemented by calling a shader of type geometry - this can read u,v,du and dv and must calculate P and N. eg: geometry superquad( float east=1; float north=1; ) { float uu,vv; float cv,cu; float sv,su; uu=(u-0.5)*2*PI; vv=(v-0.5)*PI; cu=cos(uu); cu=(cu<0)? -pow(-cu,east) : pow(cu,east); cv=cos(vv); cv=(cv<0)? -pow(-cv,north) : pow(cv,north); su=sin(uu); su=(su<0)? -pow(-su,east) : pow(su,east); sv=sin(vv); sv=(sv<0)? -pow(-sv,north) : pow(sv,north); P=point (cu*cv,su*cv,sv); N=calculatenormal(P); } (if you use slc just make it of type displacement so you can compile it). In addition to the standard projections, user defined projections can be written as transformation shaders. For example Perspective could have been implemented as: transformation myPerspective(float fov=90) { float fovFix=1/tan(fov/360*3.14159265); P=point( xcomp(P)*fovFix/zcomp(P), ycomp(P)*fovFix/zcomp(P), zcomp(P)); } This release includes Linux, freeBSD, Irix, and WIN32 binaries. I'm constanlt reviewing the platforms I support, so any feedback would be appreciated. I'll build for any machine I can get my hands on, provided that someone actually wants to use it! This sofware is provided "as is", and I can accept no responsibility for its performance and behaviour. This release may used without charge, on an as is basis provided you inform me of who you are, and provide feedback on how its being used. ian@dctsystems.freeserve.co.uk http://www.dctsystems.freeserve.co.uk FIXES/FEATURES IN 0.6 RELEASE Holes in General Poly's RiCurves Improved splitting of Parametric surfaces Depth of Field "attenlight" light source type for Houdini compatability Coordinate Systems handled better Matte now works Illuminate now works Numerous bug fixes FIXES/FEATURES IN 0.5 RELEASE Improved X11 output driver Programmable projections Catmull-rom filter, and Powerbasis correctly parsed parsing of TrimCurves, and new style variable declarations (for Maya). Shadow map support Motion Blur Area Lights (Parametric surfaces only) Better handling of Orientation FIXES/FEATURES IN 0.4 RELEASE Improved deriviatives Splitting Jpeg support Gamma correction of WIN32 display Progress fixed and improved Improved accuracy in 2d drawing routines (major quality improvements) Improved clipping/culling, Better avoidance of numerical overflows Seperation control in stereo hider FIXES/FEATURES IN 0.3 RELEASE Display Driver for Win32 and OpenStep Handling of Parameter lists on Shaders A Prototype implementation of Blobby Objects (buggy) Shading of Poly's (UV/ST incorrect) Correct handling of Concave Poly's FIXES/FEATURES IN 0.2 RELEASE Instanced objects are now "correctly" shaded Limited support for Opacity (as best can be done using Z-Buffer) ScreenWindow partially implemented A very basic progress meter Exposure now works properly Improved AntiAliasing of colour Writing of 8, 16 and 32 bps files (Quantize) Curves, and SubDivs parsed correctly but not fully rendered Points now supported Better handling of Normals and Orientation (still has problems) writing of z-buffer data. Procedural shading (SL!) Dynamic Tesselation Stereo Rendering Procedural Geometry An (almost?) complete rib parser, so all ribs should be renderable KNOWN LIMITATIONS NURBS are invisible to secondary rays Parameter lists to primitives are largely ignored U/V's of Poly's are wrong ScreenWindow doesn't support off-centre windows Opacity sucks! The TIFF I/O library used by Angel is: Copyright (c) 1988, 1989, 1990, 1991, 1992 Sam Leffler Copyright (c) 1991, 1992 Silicon Graphics, Inc. The RenderMan (R) Interface Procedures and RIB Protocol are: Copyright 1988, 1989, Pixar. All rights reserved. BMRT is (c) Copyright 1990-1999 by Larry I. Gritz. All Rights Reserved. RenderMan (R) is a registered trademark of Pixar. More great code was begged, borrowed, and stolen from: "Tessellation of NURB Surfaces" by John W. Peterson, jp@blowfish.taligent.com in "Graphics Gems IV", Academic Press, 1994 "Testing the Convexity of a Polygon" by Peter Schorn and Frederick Fisher, (schorn@inf.ethz.ch, fred@kpc.com) in "Graphics Gems IV", Academic Press, 1994 "Point in Polygon Strategies" by Eric Haines, erich@eye.com in "Graphics Gems IV", Academic Press, 1994