Happy December!

We have tagged "v2.3.10.0" as the latest supported production release, and 
updated the "release" branch marker to that point. This is API/ABI/link 
back-compatible with prior 2.3 releases.

This is an unusually large release for the stable branch! It's quite rare to 
have this many new features, but we just happened to have a lot of new things 
land in 'master' that were not compatibility-breaking and seemed low-risk to 
backport, and it seemed a shame to wait until summer for them to be in a 
supported release.

I'll remind you that "master" is also totally production worthy (in the sense 
of being rock solid software), and in fact is used in demanding production at 
many places, but it does not guarantee API or ABI stability until it becomes a 
release branch next summer.



Release 2.3.10 (1 Dec 2021) -- compared to 2.3.9
--------------------------------------------------
New (non-compatibility-breaking) features:
* TextureSystem: add feature for stochastic mipmap interpolation. This adds
  new interpolation modes "StochasticTrilinear" and "StochasticAniso", which
  in conjunction with the "rnd" field in TextureOpt, will stochastically
  choose between bracketing MIPmap levels rather than interpolating them. This
  reduces texture lookup cost by up to 40%, but it's only useful in the
  context of a renderer that uses many samples per pixel. #3127
* maketx/make_texture() now supports options to store Gaussian forward and
  inverse transform lookup tables in image metadata (must be OpenEXR textures
  for this to work) to aid writing shaders that use histogram-preserving
  blending of texture tiling. This is controlled by new maketx arguments
  `--cdf`, `--cdfsigma`, `--sdfbits`, or for `IBA::make_texture()` by using
  hints `maketx:cdf`, `maketx:cdfsigma`, and `maketx:cdfbits`. #3159
* `oiitool --oiioattrib` can set "global" OIIO control attributes for
  an oiiotool run (equivalent of calling `OIIO::attribute()`). #3171
* `oiiotool --repremult` exposes the previously existing `IBA::repremult()`.
  The guidance here is that `--premult` should be used for one-time conversion
  of "unassociated alpha/unpremultiplied color" to associated/premultiplied,
  but when you are starting with a premultiplied image and have a sequence of
  unpremultiply, doing some adjustment in unpremultiplied space, then
  re-premultiplying, it's `--repremult` you want as the last step, because it
  preserves alpha = 0, color > 0 data without crushing it to black. #3192
* `oiiotool --saturate` and `IBA::saturate()` can adjust saturation level of a
  color image. #3190
* When building against OpenEXR >= 3.1.3, our OpenEXR output now supports
  specifying the zip compression level (for example, by passing the
  "compression" metadata as "zip:4"). Also note than when using OpenEXR >=
  3.1.3, the default zip compression has been changed from 6 to 4, which
  writes compressed files significantly (tens of percent) faster, but only
  increases compressed file size by 1-2%. #3157
* Improved image dithering facilities: When dithering is chosen, it now
  happens any time you reduce >8 bits to <= 8 bits (not just when converting
  from float or half); change the dither pattern from hashed to blue noise,
  which looks MUCH better (beware slightly changed appearance); `IBA::noise()`
  and `oiiotool --noise` now take "blue" as a noise name, giving a blue noise
  pattern; `IBA::bluenoise_image()` returns a reference to a stored periodic
  blue noise iamge; `oiiotool -d` now lets you ask for "uint6", "uint4",
  "uint2", and "uint1" bit depths, for formats that support them. #3141
* New global OIIO attribute `"try_all_readers"` can be set to 0 if you want to
  override the default behavior and specifically NOT try any format readers
  that don't match the file extension of an input image (usually, it will try
  that one first, but it if fails to open the file, all known file readers
  will be tried in case the file is just misnamed, but sometimes you don't
  want it to do that). #3172
* Raise the default ImageCache default tile cache from 256MB to 1GB. This
  should improve performance for some operations involving large images or
  images with many channels. #3180
* IOProxy support has been added to JPEG output (already was supported for
  JPEG input) and for GIF input and output. #3181 #3182
* `oiiotool --maxchan` and `--minchan`, and `IBA::maxchan()` and `minchan()`
  turn an N-channel image into a 1-channel images that for each pixel,
  contains the maximum value in any channel of the original for that pixel.
  #3198

Bug fixes:
* Fix `oiiotool --invert` to avoid losing the alpha channel values. #3191
* Fix excessive memory usage when saving EXR files with many channels. #3176
* WebP: Fix previous failure to properly set the "oiio:LoopCount" metadata
  for animated webp images. #3183
* Targa: Better detection/safety when reading corrupted files, and fixed
  bug when reading x-flipped images. #3162
* RLA: better guards against malformed input. #3163
* Fix oiiotool bug when autocropping output images when the entire pixel data
  window is in the negative coordinate region. #3164
* oiiotool improved detection of file reading failures. #3165
* DDS: Don't set "texturetype" metadata, it should always have been only
  "textureformat". Also, add unit testing of DDS to the testsuite. #3200
* When textures are created with the "monochrome-detect" feature enabled,
  which turns RGB textures where all channels are always equal into true
  single channel greyscale, the single channel that results is now correctly
  named "Y" instead of leaving it as "R" (it's not red, it's luminance).
  #3205

Build fixes and developer goodies:
* Update internal stb_printf implementation (avoids some sanitizer alerts).
  #3160
* Fixes for MSVS compile. #3168
* Add Cuda host/device decorations to TypeDesc methods to make them GPU
  friendly. #3188
* TypeDesc: The constructor from a string now accepts "box2f" and "box3f"
  as synonyms for "box2" and "box3", respectively. #3183
* New Strutil::parse_values, scan_values, scan_datetime, parse_line. #3173
  #3177
* New `Filesystem::write_binary_file()` utility function. #3199
* New build option `-DTIME_COMMANDS=ON` will print time to compile each module
  (for investigating build performance; only useful when building with
  `CMAKE_BUILD_PARALLEL_LEVEL=1`). #3194


--
Larry Gritz
l...@larrygritz.com




_______________________________________________
Oiio-dev mailing list
Oiio-dev@lists.openimageio.org
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to