Fixed the "Search & Replace" feature of the Path Manager that was not working anymore on paths containing variables (such as "$PDIR/../render/$5F.exr") (#9310)

Fixed a bug that occurred in shading variables that were using built-in variables (such as $F, $PDIR, etc.) (#9313)

Fixed a bug when setting an attribute of type string containing variables (like $PDIR, $F, etc.) and editing it again through the Attribute Editor. (#9306)

General

Fixed a bug where surface constraints on USD meshes were lost upon project reload. (#9370)

General UI

Added individual file filters for each file format to the dialog box used to reference files (File > Reference > File), in addition to the existing filter that contains them all. (#9318)

Fix several bugs that occurred when Application > Project > Load User Interface Preferences was turned off. The current layout now remains unchanged when a project is loaded/reverted (it used to be reset to the default layout) and any opened Browsers now properly react to selection changes. (#9326)

Fixed a potential crash when using surface constraints on USD references. (#9301)

Improved rebuild performance of scatterers when transforming a geometry that is used as input. (#9317)

IO

Fixed a dirtiness issue on Alembic object instances causing instances to remain static in the Image View and clipped in the 3D View. (#9259)

Reverted the read strategy to the legacy one for Ogawa Alembic files on MacOS. The new one ("Memory Mapped Files" introduced in Alembic 1.7.9) was causing crashes when files were read from a network drive that was unmounted. (#9339)

Licensing

Fixed a bug in Clarisse, CNode, and Licman that caused the application to set the server port to 0 instead of the default value 40500 if the environment variable ILISE_SERVER didn't specify the port number. (#9234)

Fixed a crash that occurred when CNode was quitting while the PythonScripting engine wasn't initialized properly. (#9395)

Fixed and harmonized Clarisse and CNode licensing behavior (command line args, clarisse.env, clarisse.cfg).Settings priority, from highest to lowest:1. Command line arg "-license_server [<address>[:port]]" :- It overrides the license mode in clarisse.cfg ("floating_license") and forces the mode to floating.- It overrides the command line arg "-license_path".- If used without value: the settings will use the ILISE_SERVER environment variable value (system's or clarisse.env).- If used with value: will use the given server address and port. The default port is 40500 if not specified.2. Command line arg "-license_path <license_file>" :- It overrides the license mode in clarisse.cfg ("floating_license") and forces the mode to nodelocked.- Uses the given file license (file path is required).3. clarisse.cfg file: this is the default behavior when there are no command line args :- Reads the license mode ("floating_license") from the config file: floating ("yes") or nodelocked ("no").- In floating mode: uses server address and port from the environment variable ILISE_SERVER (system's or clarisse.env).- In nodelocked mode (default mode on the first run): uses the "license_path" config entry (empty by default on the first run).Compared to 3.6 the behavior has changed: forcing the floating license mode is now required if you want to use the system environment variable ILISE_SERVER. To do so you must use the command line argument "-license_server". However, specifying the server address and port isn't necessary if they are already set in the environment variable ILISE_SERVER (new since 4.0 SP1). (#9385)

Material Editor

Fixed an issue with the TAB key shortcut that stopped working after docking a floating Material Editor. (#9311)

Rendering

Receive Self Shadow option now works on combiners and scatterers (#9212)

Fixed several issues in the Disney principled shader regarding reflections and transmissions which were broken. (#9372)

Fixed potential occurrence of erroneous shadows in seemingly-random tiles of the image view in the presence of shadow groups. (#9232)

Removed upper bound on density of volume box and volume surface to accommodate for backward compatibility of density scale compensation at large scales. (#9314)

=> Known limitations:- Only the frame variable $F is supported in paths, other variables aren't evaluated. For example, the path "/full/path/image_$F.exr" will be evaluated correctly but "$PDIR/image.exr" or "$PDIR/image_$F.exr" won't because $PDIR isn't evaluated. (#9217)

Shading Layer

Fixed an issue that caused shading layers to be evaluated twice. (#9337)

ModuleSceneObjectTree class now stores data into resources. Therefore, the API for all modules inheriting from it has been modified:- The data of the scene object tree is now stored inside 4 resources: RESOURCE_ID_BASE_OBJECTS, RESOURCE_ID_TOPOLOGY, RESOURCE_ID_MATRICES and RESOURCE_ID_TREE. See module_scene_object_tree.h for more information.- As any other module dealing with resources, init_class() callback has to be implemented, and it must specify attribute dependencies for each resource.- All the following methods of ModuleSceneObjectTree have been removed: dirty_raw_instances(), dirty_decimated_instances(), dirty_time_instances(), and dirty_tree().- It is still possible to finely control the dirtiness of the topology, matrices or the tree of the module, based on the current dirtiness information or the current attribute value. See scene object instancer module in the SDK examples for more information. (#8323)

SDK

SceneObjectInstancer SDK example is now compiling with the new 4.0 API (#9242)