v4.0.0-alpha.1 (2023-08-11)
It's been quite a while since our last release of v3.2.3 at the end of 2020. For this cycle, we've tackled a load of significant backlog items, including rewrites of much of our underlying code. As always, the primary idea isn't to provide the best or most optimal implemntation, but instead to put out simple, sometimes crude first approximations of the main components of writing a ray tracer.
Highlights include large rewrites and expansions of the book text, a large refactoring of our camera class, folding moving_sphere
functionality into sphere
, adding a new interval
class for use in multiple contexts, creating a new general quad
primitive to replace the old *_rect
primitives, and the addressing of hundreds of issues and requested features. The line-item changes below should give you an idea of v4 includes.
In order to drive this release to resolution, we're releasing our alpha.1 version to coincide with the start of SIGGRAPH 2023. We've pretty much finished with book one, though there's a fair amount left for books two and three. Our plan is to keep crunching for a final v4.0.0 release by the end of 2023.
Since this is an alpha, we would greatly appreciate any feedback you might have. Let us know by creating issues up on the GitHub project.
Common
- Fix - CSS fix for cases where code listing overflows; change to fit content (#826)
- Fix - Enabled compiler warnings for MSVC, Clang, GNU. Cleaned up warnings as fit (#865)
- Fix - Remove redundant
virtual
keyword for methods withoverride
(#805) - Fix -
rect
hit returning NaNs and infinities (#681) - Fix - Add
\mathit
to italic math variables to fix slight kerning issues in equations (#839) - Fix - Fixed issues in Bib(La)TeX entries.
- Change - Use
class
instead ofstruct
throughout for simpler C++ (#781) - Change - Moved all class method definitions inside class definition (#802)
- Change - Class public/private access labels get consistent two-space indents (#782)
- Change - Updated classes to use private access for class-private variables (#869)
- Change - Made our code
inline
clean. We now useinline
in all header function definitions to
guard against copies in multiple C++ translation units (#803) - Change - Retired the
src/common/
directory. Each book now has complete source in one directory - Change - Significant rewrite and expansion of the
camera
class - Change -
aabb
class constructor treats two params as extreme points in any orientation (#733) - Change -
hittable:hit()
methods use new interval class for ray-t parameter - Change -
interval::clamp()
replaces standaloneclamp
utility function - Change -
aabb
class uses intervals for each axis (#796) - Change -
hittable
member variableptr
renamed toobject
- Change - general rename of
mat_ptr
tomat
(material) - Change -
hittable::bounding_box()
signature has changed to always return a value (#859) - Change - replaced random vector in
isotropic
withrandom_unit_vector
- Change - Use std::clog instead of std::cerr to log scanline progress (#935)
- Change - Updated figures throughout for improved clarity when possible
- Change - Generated images are now output gamma-corrected rather than in linear space
(#980, #1033) - Change - The
camera
class now handles images with width or height of one (#682, #1040) - New - Introduce new
interval
class used throughout codebase (#777) - New -
rtw_image
class for easier image data loading, better texture file search (#807) - New - 2D
quad
primitive of arbitrary orientation (#756) - New -
box()
utility function returnshittable_list
of newquad
primitives (#780) - Delete -
box
,xy_rect
,yz_rect
,xz_rect
classes. These are replaced with newquad
primitive (#292, #780, #681)
In One Weekend
- Change - Updated all rendered images in text
- Change - Significant update to the diffuse reflection section (#696, #992)
- Change - Updated and clarified text around ray generation and the camera model
- New - More commentary about the choice between
double
andfloat
(#752) - New - Software context around the shadow acne listing
The Next Week
- Fix - Fixed
bvh_node
constructor definition signature (#872) - Fix - Fixed scaling for final Perlin noise texture (#896).
- Change - Rearranged the texture-mapping presentation. The three types (solid, spatial, image)
are now sequenced in that order, and the checker texture presented more explicitly as
an illustration of a spatial texture. - Change - Broad rewrite of time management for moving objects, primarily
camera
and
sphere
, but also impacting the API forhittable::bounding_box()
(#799) - Change - The
sphere
class now includes animation capability originally inmoving_sphere
(#1125) - New - Add listing to use new
bvh_node
class in therandom_spheres
scene (#715). - Delete - The
moving_sphere
class is deprecated, and functionality moved tosphere
(#1125)