forked from karelp/sunflow
-
Notifications
You must be signed in to change notification settings - Fork 2
/
CHANGELOG
545 lines (528 loc) · 28.2 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
v0.07.5
* Added procedural scenes
* Added box type
v0.07.4
* Updated janino version to 2.7.8
* Allow changing shading cache parameters for a quality/speed trade-off
* Fixed missing TriangleMeshLight shader in PluginRegistry
* Fixed self-intersection bias
* Fixed infinite loop in bih caused by small triangle
v0.07.3
* Fixed bump mapping to correctly treat black as the lowest point in the map
* Added command line override for samples paramter (affect bucket and multipas samplers)
* Added cubic bspline filter to multipass image sampler (via warp function)
* Fixed "usage of init" statistic report in BIH
* Added cubic bspline filter
* Fixed counting of secondary rays clipped by ray depth limit
* Added lattice sampling routines (experimental)
* Fixed CornellBox light source sampling
* Fixed all image readers/writer to use buffered I/O
* Added motion blur syntax for instances and objects in .sc files
* Added shutter parameter to camera to allow motion blur of scene objects even when the camera is static
* Camera and Instances are now controlled by moving matrices and may be motion blurred
* Added MovingMatrix4 class
* Removed eye/target/up syntax for describing camera transform (parameters only - not .sc syntax)
* Added total rays to statistics output
* Fixed filtering in y direction for BucketRenderer
* Fixes to QMC sigma table - no longer requires precomputation
* Implemented low sampling density for ImageBasedLight in fixed mode
* Added PerlinModifier
* Bug fix to writeVerbatimString() in binary scene writer
* Added sampler choice to image block in .sc parser
* Small bugfix to command line sampler choice
* Moved shading cache into new image sampler
* Added a new image sampler (MultipassRenderer - not multipass yet)
* Added statistics to count number of rays cast
* Removed "robust" intersection code for triangles and bezier patches
* Added sphereflake primitive
* Moved Nan/Inf check into LightServer, demoted to warning severity
* Fix to allow LDR images in IBL
* File browser in SunflowGUI remembers previous directory
* Modified Matrix4 class to only accept affine transformations
* Added cylinder primitive
* Removed getUniqueName method from SunflowAPI
* Fixed more potential locale issues with case conversion by forcing the ENGLISH locale to be used
* Renamed get/setCurrentFrame to currentFrame in SunflowAPI
* Renamed parse to include in SunflowAPI
* Added reset keyword to new scene file format
* Fixed access levels on certain classes in org.sunflow package
* Fixed spelling of absorption in glass shader - left backwards compatibility in SCParser
* Added reading/writing of Indigo's IGI file format
* Added GenericBitmap format for simple debugging tasks
* Added more robust file extension detection
* Refactored Bitmap loading/saving with plugin system
* Bug fix when reading interpolation types on non-english operating systems
* Added -translate command line parameter
* Added translate() method to convert any file format into the new ones
* New ascii/binary file formats (sca/scb)
* Added new colorspace options for color parameters (blackbody/spectrum)
* Changed the way colors are specified to SunflowAPI
* Upgraded to Janino 2.5.6
* Added camera shift option to pinhole and thinlens camera lenses
* Updated examples
* Moved scene parsers to plugin system
* Moved photon maps to plugin system
* Replaced object factories with PluginRegistry lookups
* Updated all parsers
* Added PluginRegistry and modified SunflowAPI to create objects through it instead of requiring users to create objects themselves
* Changed cornellbox primitive into the light block in the .sc parser
* Light objects can now specify their geometric represtentation at runtime
* Particle point positions can now be specified inline in the scene file
* Particle data files can now be scene relative (via include paths)
* Improved motion blur sampling
* Moved shaderOverride to an option
v0.07.2
* Filled in and corrected javadoc comments in org.sunflow.core package
* Upgraded to Janino 2.5.5
* Added experimental Ant build file
* Removed hard coded sRGB curve
* Fixes to bucket renderer anti-aliasing
* Camera motion blur
* Added bezier patch meshes to parser
* Added normal smoothing to FileMesh
* Implemented BVH2 case properly in BoundingIntervalHierarchy (needs benchmarking)
* Added binary STL format to FileMesh
* Upgraded to Janino 2.5.4
* Improvements to Geometry class to handle tesselation failures
* Created FileMesh class for on-demand loading of meshes (supports RA3/OBJ)
* Tweaks to Benchmark class for third parties
* Small bugfixes
* Added little_endian option for particle files
v0.07.1
* Added Modifier concept - used to implement bump/normal mapping at the moment
* Added bucket dumping debugging option to bucket render - saves out unfiltered buckets as they are rendered
* Fixed jitter option - added to SCParser image block
* Added basic absorbtion model to GlassShader
* Added ngon sampling to ThinLens for bokeh effects
* Renamed MeshLight to TriangleMeshLight
* Updated LightSource interface - lights must now do their own loop to take mutltiple samples
* Spherical triangle sampling for triangle lights
* New wireframe shader (-quick_wire command line option)
* Added calls to get triangle vertices
* Added camera space utility functions
* Upgraded to Janino 2.5.3
* Upgraded to Janino 2.5.2
* Added sun light to SunSkyLight - modified LightSource interface slightly
* Added support for "noinstance" keyword
* Unified instance handling in .sc parser
* Added -pathgi command line argument
* Added basic animation support
* Added SunSkyLight
* Added QuadMesh primitive type (using bilinear patches)
* Added real sphere lights
* Console display now outputs to stderr to allow stdout to be used for output redirection
* Added fisheye lens to .sc parser
* Added imgpipe display compatible with mental ray imgpipe protocol
* Experimental fix to light bleeding problem
* Removed -accel command line option
* Deprecated use of accel keyword in .sc files - the default is usually best
* Moved accel into an option parameter
* Added -filter command line option
* When baking a lightmap without viewdep, a camera is not required in the scene
* Added -bakedir command line option
* Added baking.viewdep option to control lightmap baking style
* Lightmap baking can now either be view-dependent (to the current camera) or orthographic (perpendicular to the point being shaded)
* Added XYZColor class to represent colors with CIE coordinates
* Rengereated golden images for Benchmark data
* Fixed a subtle problem with float/int constructors for the Color class
* Added lightmap baking - only triangular meshes are supported at the moment
* Renamed DLASurface to ParticleSurface
* SCParser: Made all the options in the image block optional
* Added fake spherical lights (approximated by point lights - using the trick from the Lightcuts paper)
* Bug fix to RA2Parser (was passing fov argument to camera incorectly)
* Added a method to dump Mesh objects to .obj files (usefull for procedural geometry debugging)
* Added DLASurface for efficient rendering of large sets of spheres
* Split Camera into CameraLens (which is an interface to generate rays in camera space) and an internal Camera class which rotates the rays into world space
* Upgraded to Janino 2.5.1
* Upgraded to Janino 2.5.0
* Parser now generates bezier patch primitives intead of triangles is the subdivs/smooth parameters are ommited
* Added exact Ray/Bezier-patch intersection code
* Added Teapot and Gumbo primitives, both using bezier patch descriptions
* Added Bezier patch mesh, which generates a triangle mesh at runtime
* Added janino-tesselatable primitive
* Added on demand tesselation of primitives
* Added a parser for hair curve data as export by Shave and Haircut (http://www.joealter.com)
* Added a hair curve primitive
* Implemented parameter system for all render object creation
* Textures are now loaded on demand, when they are first accessed
* Modified bucketOrder call in SunflowAPI to create inverted bucket orders
* Added InvertedBucketOrder
* Added RandomBucketOrder
* Added Box primitive
* Removed SimpleShader from parser classes
* Added SimpleShader which shades using facing ratio
* Modified IDShader to be based on instance ID only, and to use facing ratio for better shading
* Added -quick_id option on the command line to override using IDShader
* Slight simplification of KDTree traversal
* Added ParameterList class to store arbitrary name/value pairs
* AccelerationStructure's are now built on demand for each geometry
* Added verbosity control to the UI system. Accessible on the command line using "-v n".
* Modified Scene to use an InstanceList
* Converted Janino invocations to use the default system compiler
* Upgraded to Janino 2.5.0
* Modified Mesh class to implement the AggregateTraceable interface
* Added AggregateTraceable interface
* Implemented Instance/Traceable combination
* Added checks for black diffuse/specular components
* Added PerlinVector which produce vector valued noise
* Renamed ImprovedNoise to PerlinScalar and added renderman-like calls
v0.06.4
* Upgraded to Janino 2.4.7
* Regenerated golden benchmark files
* Implemented BanchoffSurface primitive (from RJii's submission)
* Implemented Torus primitive (from RJii's submission)
* Added robust quadratic and quartic solvers
* Improved uv calculations on Sphere
* Added Matrix parsing to SCParser
* Rewrote Sphere to use a Matrix4 transformation instead of center/radius positioning
* Added getCorner() to BoundingBox
* Added Matrix4 class
* Upgraded to Janino 2.4.6
* Minor tweaks to the benchmark mode
* Upgraded to Janino 2.4.5
* Improved the built-in benchmark mode
* Minor optimizations
* Optimized the traversal for KDTree and BoudingIntervalHierarchy a little
* Upgraded to Janino 2.4.4
* Initial implementation of the Bounding Interval Hierarchy paper
* Small fix to TexturedWard and TexturedPhong shaders (null check)
* Created UberShader with individual diffuse and reflection components
v0.06.3
* Moved texture search path functionality out of TextureCache and into SunflowAPI
* Fixed missing text in progress bar during KDTree build in the GUI
* Leave \ in paths when opening files in the GUI. This avoids problems with windows network paths.
* Fixed quantization issues in the SRGB conversions
* Deprecated "glossy-samples" and "light-samples" settings
* Each light and each glossy shader now accepts their own number of samples in the scene file
* ward and phong shader types now parse an optional argument: samples which sets the number of glossy rays
* Added TexturedWardShader (texture applies to diffuse component)
* Added TexturedPhongShader (texture applies to diffuse component)
* Disable computation of glossy reflections if samples are set to 0 (even for secondary bounces)
* Moved diffuse and specularPhong light integration into ShadingState for easy re-use
* Minor optimization to light iterator
* Changed all lights to be parsed as a color/intensity so that color LUTs may assume [0,1] components
* Added a mechanism options for specifying color space in .sc files
* Non HDR images are now automatically converted into linear space by the application of an inverse SRGB LUT
* Added sRGB curves to Color class
* Removed all gamma correction code
* Moved getNextColor/Point/Vector out of Parser and into SCParser
* Fixed fresnel calculations in GlassShader
* Added ambocc gi engine
* Fixed cube grid inside/outside classification for ray coming from outside the surface
* Fixed basis inversion in all shaders - added facefoward method to ShadingState
* Fixed javadoc comments that refered to outdated methods
* Added javadoc comments to SunflowAPI
* Fixed use of deprecated constructor for scanner
* Upgraded to Janino 2.4.3
* Fixed bug in UniformGrid which could lead to missing cells
v0.06.2
* Fixed timing issue with tiling windows on startup
* Added -resoluton w h command line option
* Maximize if resolution is not sufficient
* Added includepath support
* Added include search path support
* Added SearchPath class to abstract search path functionality
* Fixed missing basis vector for non-textured triangles
* Added quick_ambocc command line option
* Default for exr output is now float/zip
* Changed sphere intersection to >=
v0.06.1
* Public release
v0.06.0
* Removed -kd command line option
* Made KDTree3 into KDTree and KDTree into KDTreeOld - the new algorithm is stable enough to be the default
* Upgraded to Janino 2.4.2
* Fixed texture search path caching and added option to add texture search paths in the scene file
* Upgraded to Janino 2.4.1
* Optimizations to KDTree3 leading to reduced memory usage
* Added version number into FastDisplay title bar
* Removed KDTree2
* Increased resolution limit for uniform grids to 256
* Allow meshes to be built without triangle indices - for meshes which just contain raw triangles
* New KDTree algorithm based on KDTree2 - produces the same trees about 2x faster
* New KDTree algorithm implemented as KDTree2 - produces better trees
* Removed all serialVersionUID's
* Moved Render and IPR buttons into image panel
* -buildonly now exits with error code 0
* Allow gamma correction on the command line for all display types
* Seperated gamma correction from toRGB() method
* Merged IrradianceCache classes together
* Added parameter to getIrradiance() to take into account the diffuse reflectance of the surface. Allows for importance tracking and other optimizations
* Instant GI method introduced (with bias correction options)
* Photon maps can classify the types of bounces they wish to allow
* Photon tracing takes place per-map
* Multi-threaded IPR
* Changed sigma table to be 128 pixels wide
* Added -nogi command line option
* Added generalized PhotonStore interface
* Fixed photon distribution bug in CornellBox primitive
* Changed UI.print* methods to use printf formatting and refactored all print* calls
* Created seperate method to load caustic samples into light sample list
* Removed interpolation of normals from BucketRenderer
* Require all light shaders to trace shadow rays themselves - allows for selective shadow tracing
* Modified LightSample to store only a shadow ray and diffuse/specular contributions
* LightSample iteration in shaders now makes use of the extended for loop syntax
* Light server doesn't warn about disabling photon mapping if photon mapping was not enabled
* SCParser adds the directory of the scene being loaded to search paths
* Added texture search paths
* Changed most output statements to use String.format for number display
* Replaced single trace depth with individual settings for diffuse, reflection and refraction depths
* Fixed IBL to use shorter shadow rays so it won't self shadow
* traceShadow returns a colored opacity
* Added Color.blend with the blend factor as a Color
* Removed adaptive shadow testing for area lights (not a huge win for transparent shadows)
* Removed special case for intersection with shadow rays
* Added -gamma option to the command line
* Extra info about the scene bounding box is displayed before rendering begins
* Added IDShader which uses a constant color per primitive
* Fixed incorrect handling of specular/glossy rays behind diffuse bounces
* Added TextureShinyDiffuseShader and corresponding parser construct
* Gamma correction menu in GUI
* Removed epsilon for SmallTriangle intersection test
* Only displays which need to be synchronized are. Most can be safely written to by multiple threads
* FastDisplay updates the BufferedImage all at once on imageEnd
* Added BucketThread into BucketRenderer instead of abstract class
* Removed an extra level of function calls from bucket based renderers
* Moved CamParser into RA2Parser
* Added Color constructor for greyscale colors
* Optimized FakeGI to not use Math.acos
* More SCParser cleanups
* Fixed bug in adaptive AA for background sampling
* Added option to view adaptive AA sampling in BucketRenderer
* New parameter to KDTree generation: SMALL_PROBABILITY which indicates when to cull nodes of very small size. 1e-6 seems to be a good default
* Default leaf size is now 0 to allow potential empty space cutoff in leaves
* Fixed serious bug in KDTree generation
* Option to dump KDTree as an obj
* Renamed -norender command line option to -buildonly
* Fixed small bug in uv setting method
* More SCParser cleanup
* Fixed handling of /* */ for peekNextToken
* Upgraded to Janino 2.4.0
* Moved Bucket and Progressive renderers into their own package
* Removed TriangleMesh, Mesh now has enough functionality that this is no longer needed
* Timer displays ms if the measured time is below 10 seconds
* Added RA2Parser and CameraParser for RTCore comparison benchmarks
* Broke up SCParser into several methods
* Added peekNextToken function to parser
* Added C style block comment handling to parser
* Added an irradiance cache which works without photons
* Removed old GUI
* Added Janino detection to GUI
* Removed texture messages from parser
* Simpler KDTree traversal algorithm
* KDTree stores nodes in breadth first order (children are always next to each other)
* KDTree now builds compressed tree directly
* Created IntArray utility class for fast growable arrays of integers
* Removed KDTreeOld and KDTreeHavran
* Precompute AA base threshold
* Removed unecessary calls to Color.copy() and Color.black()
* Added an init message to QMC precomputation
* Halved the size of the QMC tables
* Removed stack allocation on each intersect by re-using scratch space inside IntersectionState
* Split RenderState into IntersectionState and ShadingState
* Fixed a small bug in the photon emission code for triangle lights. Thanks to lynx for pointing it out.
* Renamed SunflowGUI3 to SunflowGUI
* Renamed SunflowGUI to SunflowGUIOld
* Moved command line operation into new GUI
* Switched to JDesktopPane style for GUI
* Fixed canceled task exit for photon tracing
* Fixed cancel task logic
* Created SunflowGUI3 - script based UI
* Removed unused IrradianceCache from core package
* Removed unused methods from Ray
* Removed special handling for incorrect smooth normals from light sampling code
* IntersectonAccelerators are built from an ArrayList to avoid allocating an extra array if it isn't needed
* Filters have size only, not width and height
* Removed procedural demos from root package
* Added -norender flag for scripts which call render() themselves
* FrameDisplay won't open a window larger than the current resolution
* Enhanced image panel is now shared by SunflowGUI and standalone FrameDisplay
* Zoom image using mouse-wheel
* Added String based methods in SunflowAPI for built-in types
* Fit image using Ctrl+middle mouse button
* Reset image using middle mouse button
* Reset/Fit image menu options
* Dim image by modifying colors to 50% instead of clearing alternate scanlines
* Pan/Zoom rendered image in the GUI using left/right mouse buttons
* Procedural scene creation - run with a java file which implements a build method
* Flag to avoid rebuild acceleration structure if no geometry changed
v0.05.5
* Added customizable leaf size in kdtree builder (-kd n on command line)
* Added SmallTriangle to reduce memory usage when loading really large meshes (-smallmesh at the command line)
* Basic bump and normal mapping support
* Tangent space computation on meshes that have valid uvs
* Background color support
* Added texture support to amb-occ2 shader type in the parser
* Support for multiple shaders per mesh
* Removed gamma correction
* Renamed KDTree to be the most recent code. Old code is accesible as: KDTreeOld (-accel kdtree_old on the command line)
* Renamed [BSP] to [KDT]
* Minor speedups and reduce mem-usage in UniformGrid
* Optimized build process for KDTree
* Switched to enhanced for loop where appropriate
* Minor tweaks to kdtree builder
v0.05.4
* Removed Memory.sizeof for Object[]. This was printing the wrong information on 64bit systems.
* Bitmap constructor now throws its exceptions instead of silently catching them
* Added support for picking the channel type for OpenEXR files
* Added support for picking the compression type for OpenEXR files
* Removed unused snippets from OpenEXR code
* Refactored OpenEXR code to make it fit inside one Display class
* Added OpenEXR display driver (submitted by RJii)
* The Display interface now expects its image data to have (0, 0) be the top-left corner
* Added ImprovedNoise code from Ken Perlin
* Proof of concept janino shader support allows arbitrary shaders to be created on the fly
* Parser supports grabbing code blocks
* Fixed a bug in photon shader override process
* Shader table is now stored by the API instead of the parser
* Removed colormap support from TGA loader
* Added -lopri and -hipri command line settings for thread priority
* Added thread priority option
* Added -accel command line option
* Optimization to the bounding box test in each accel struct
* Improved the robustness of the KDTree intersection
v0.05.3
* Added some basic documentation to the README
* Minor quantization tweaks
* Can save any type of bitmap from framedisplay's or the gui (PNG or TGA)
* Added proper command line handling to SunflowGUI. Run with -h to see a list of options
* Added option to control the number of rendering threads (used for bucket processing and photon tracing)
* Moved intersection acceleration and primitive storage into Scene to unclutter LightServer
* Split primitives into regular and bounded primitives to avoid having to seperate the two in each intersection accel
* Don't allocate any memory for empty cells in UniformGrid
* Protected GridPhotonMap with a read/write lock
* Protected IrradianceCache with a read/write lock
* Added "Save Image" to the GUI to save rendered frames
* Basic drag and drop support for scene files into SunflowGUI (submitted by RJii)
* TGA read/write support. Reading support is not complete, but should handle the most common file types (submitted by RJii)
v0.05.2
* Include keyword for scene files. Allows seperating large meshes from the scene.
* Parser supports grouping tokens together by using quotes. This allows filenames with spaces.
* Parser supports comments starting in the middle of a line (after keywords for example)
* Removed point set surfaces
* Introduce Mesh and MeshLight and got rid of Triangle/Triangle light and Vertex classes
* Default glossy samples is now 4
* Phong shader has customizable number of rays
* Fixed sampling of adaptive lights through diffuse bounces. This improves path tracing performance.
v0.05.1
* Public release
v0.05.0
* Added ConstantShader
* Added a path tracing gi engine
* Bug fixes to parser around deprecated statements
* More error checking before photon tracing
* Added helper methods to Parser for colors, points and vectors
* Better error checking in SceneParser
* Introduced GiEngine class as a way to abstract the global illumination engine
* Split parser out of SunflowAPI into SceneParser
* Split non-image methods out of Display and into UserInterface
* Multi-threaded photon tracing
* deprecated options are now flagged as such by the parser
* shader override feature
* refactored photonmap package + new photon emission style
* fixed potential bug in PhotonMap when rendering with multiple threads
* synchronized TextureCache
* imagePrepare method in Display
* Javadoc Ant build file
* Lights are now responsible for generating their own sampling pattern
* Moved ConsoleDisplay into org.sunflow.core.display
* Moved Display interface into the core package
* Progressive rendering mode
* Method in display drivers to fill area with a flat color
* Programmable bucket ordering
* Added KDTree intersection accelerator
* Added TriangleFilter
* Added BlackmanHarrisFilter
* Added SincFilter
* Added LanczosFilter
* Added filter keyword to scene format
* Made the sigma sampling table as large as the maximum resolution (16k)
* Moved the case for light facing away from geometric normal into the light server
* Inverted bucket order so first bucket start in the upper left corner of the image
* Adaptive sampling for light sources (experimental - disabled for now)
* Console display can now show preview window if no filename is given
* Moved to Java 5, made all appropriate containers parameterized
* Fix for percentage display on large tasks in ConsoleDisplay
* Added low memory FlatTriangle for large triangle meshes
* Moved .sc file parser into api
* Removed RenderOptions class, merged all settings into light server
* Improved DOF lens sampling - concentric map disk sampling
* Moved TriMesh code into core, native support for large triangle meshes
* Computation of tangent vectors for spheres
* Added storage for a surface orthonormal basis inside RenderState
* Implemented Ward BRDF shader
* GUI now dims the previous image when re-rendering an image of the same resolution
* Synchronized writes of tile regions to Display
* Added preview of tile region before rendering the tile
* Added SphericalCamera to parser
* Added ShinyDiffuseShader, a combination of diffuse and perfect mirror shader
* Precomputed exponents for RGBE decompression
* Corrected flipping of HDR images on load
* Added options to lock samples inside IBL
* Moved shadow computations outside the shader, this simplifies the shader API a little
* Changed LightSample to use a linked list
* Switched QMC computations back to doubles as well as all sampling operations
* Added optimized calculation of base 2 halton points
* Added other radical inversion methods to QMC class
* ImageBasedLight: improved sampling using the histogram technique presented on the PBRT webpage
* Fixed internal reflection issue on glass shader
* ImageBasedLight: infinite sphere surrounding scene which can be mapped with angular probes or lon/lat environment maps
* .hdr image loading
* Added option for picking intersection accelerator in api and in .sc file format
* Fix to irradiance caching when number of samples is 0 (cache disabled)
* Cornell box primitive
* RainbowTest for motion blur
* Moving camera
* Thinlens camera
* Depth of field and motion blur super sampling
* Added Re-open option to GUI to quickly reload the same scene for tweaking
* Fix to final gather QMC - was missing instance number
* Fix to BVH for infinite extent geometry
* Removed path tracing shader and traceDiffuse call in LightServer
* Image filtering with programable filters
* Made main bucket rendering multi-threaded
* Made light samples a parameter of each individual light
* Added gamma correction option in GUI
* Fixed thread synchronization issue with cancel dialog in GUI
* Moved shader methods into RenderState
* Changed Shader an interface for easier integration with third party software
* Timer class for better time display in statistics
* ProgressDisplay class renamed to Display
* Display driver interface - Scene no longer stores output bitmap
* Hilbert tile scan order
* Arbitrary image resolution (not rounded to step sizes)
* Custom tile sizes and bug fixes to tile-rendering
* SunflowAPI frontend for scene creation
* Spherical camera shader
* Menger sponge example using cube grid
* Added cube grid primitive
* Large mesh rendering example
* Added maximum distance option for ambient occlusion computation
v0.04.0
* Fixed light server info display when using photon grids
* Bug fix in Vector3.encode
* Rewrote UniformGrid accelerator
* Switch from double to float throughout the code to save memory
* Faster ray/triangle intersection
* Experimental point cloud tracing
* BVH acceleration structure
v0.03.0
* Experimental photon grid algorithm
* Path tracing shader
* Glossy phong shader
* Fully deterministic rendering (no more calls to Math.random()) - removed unused QMC sequence code
* Ambient occlusion shader
* Adaptive over and under sampling
v0.02.2
* Added scene format description to README
* Changed Color class to use doubles instead of floats
* Moved light sampling book-keeping into RenderState instead of LightServer
* Seperated out PhotonMap class into GlobalPhotonMap and CausticPhotonMap
* Reduced memory usage in global photon map after irradiance computation
* Reduced memory usage in Bitmap class
* Fixed variance calculation on adaptive AA
* Added madd (multiply and add) operator to Color class
* Irradiance Gradients
* Changed QMC sequence interface to include multi-dimensional sequences.
v0.02.1
* Initial public release