We are extremely proud to release the final version of Clarisse iFX 3.5 (Daedalus)!
Note: Clarisse iFX 3.5 is VFX Reference Platform CY2017 compliant.
For more information on VFX Reference Platform please refer to: http://www.vfxplatform.com/
What's new in 3.5:
New Features and Enhancements
General
- The Property Editor is a new widget introduced in Clarisse 3.5. It is meant to display the list of geometric properties available in selected geometries, particles, volumes. It allows editing properties on Particle Containers that are used to paint particles and particle properties. For more information please refer to the user documentation: http://clarissewiki.com/3.5/using_the_p ... ditor.html (#6245)
- Added a new script to bake the content of a scatterer for further editing. You can find this script in the Scattering section of the application shelf. (#6663)
- The Explorer widget has been improved to display the overridden attributes of items in references. The selection process has been fixed so that attribute rows (localized or overridden) are really selected instead of being highlighted. When an attribute is selected, its parent object is selected in the widget. Pressing the 'Del' hotkey now reverts overrides and/or unlocalizes as appropriate on selected attributes. (#6477)
- The overriding engine has been rewritten from ground up. It is now faster and the engine allows users to clear overrides (from references or local edits in non-referenced contexts) at the attribute, object and context level. For more information please refer to: http://clarissewiki.com/3.5/clearing_overrides2.html
- It is now possible to clear OIIO texture cache from the Input Output section of the Application Preferences. (#4059)
- It is now possible to drive an Alembic item with an expression. By default it is bound to $F. This feature requires a special license of Clarisse.(#3133)
- When opened with "..." button from Attribute Editor and Material Linker, the text editor now displays 2 extra buttons Cancel and Ok. Ok applies the last modifications, whereas Cancel ignores them (just like the top-right close button). The modal Text Editor opened from the Shading Layer Editor has only 2 buttons: Cancel and Ok (formerly named 'Apply and Close'). (#4536)
- In the Material Editor, it is now possible to create a link from an attribute to output of an item. You just need to click on an attribute plug, and drag the link to the desired node's output plug. This feature comes with another change in the workflow: to disconnect (either source or destination), you must click on the extremity of the link next to the plug and no longer on the plug itself. While dragging it is possible to plug the disconnected extremity to another node. When several links are connected to an attribute plug (typically on a list), you can now choose which one to disconnect (its used to be the first one). When the mouse is over a link extremity, the extremity is drawn thicker to notify the user that it can be disconnected. A link that doesn't highlight its extremities cannot be deleted (for example a link to a locked attribute). (#3675)
- It is now possible to unload resources of selected items. This can be done from the Edit menu or from the contextual menu in the browser. (#1973)
- It is now possible to export combiners when exporting alembics. If enabled (default behavior), combiners will be exported as pivots with their sub-objects as direct children. Nested combiners are exported recursively. (#5248)
- You can now set the default color space of an image by file extension by using Image > Edit File Format/Color Space Mapping... (#4316)
- In the Alembic exporter, added a new Bounding Box mode for scatterers. In this mode, scattered instances are exported as bounding boxes instead of actual geometries. (#5215)
- The Alembic exporter now supports scatterers (they are exported baked). A New option is available for this, "Export Scatterers" in the "Scatterer" category. (#5212)
- Improved Hierarchy View widget performances when adding or creating a large number of objects. (#5674)
- It is now possible to choose the compression mode to use when saving images in EXR format. It can be set in the application Preferences (in the Input Output section) or directly on images and layers. (#4313)
- Improved the speed and reduced the memory overhead when saving images in EXR format. (#5543)
- It is now possible to write custom metadata in EXR files. They can be specified in output attributes of images and layers. (#5386)
- HUD display can be tuned in the application Preferences for both the 3D View and Image View. Alternatively you can Shift + Click on the HUD button in the toolbar gives also access to these options through a small dialog. (#6282)
- Application Preferences panel readability has been improved thanks to the introduction of collapsible tabs. (#6408)
- The Timeline widget now accepts sub-frames. To enable this feature, go to the Animation section of the Application Preferences and enable Timeline Sub Frames. When enabled, the Timeline accepts as input floating point numbers. (#4329)
- Added a search filter feature in Clarisse menus. It allows to filter dynamically the menu content based on what the user types which is very handy to find out items more quickly. To Use it just start typing on the keyboard while a menu is opened so it automatically adapt its content based on what you type. (#5115)
- Floating windows now display tabs. Floating windows are saved in the layout presets and restored when loading a project. (#5246)
- Added a button that re-synchronizes the global selection from a sticky selection of a widget. For more information please refer to http://clarissewiki.com/3.5/sticky_selection.html (#4619)
- It is now possible to deactivating items in a list of references during a multi-selection. (#5309)
- The user interface of Clarisse has now a entirely new set of icons.
- The Import ABC Scene script in the General tab of the application shelf is now referencing Alembic files instead of importing them. (#6264)
- It is now possible to add and remove custom attributes on items in references which are stored as overrides. (#5385)
Rendering
- The 3D layer is now supporting OSL Light Path expressions. For more information, please refer to http://clarissewiki.com/3.5/using_light ... sions.html (#4888)
- Added an new image filter that allows to detect NaN values.(#4094)
- In order to improve the visibility of particles in the 3D View, the default color of particle is now set to blue.
- Two new textures are now available: minimum and maximum. (#0001564)
- It is now possible to choose from the application preferences how the displacement is evaluated (Rendering/Displacement Storage Mode). "Favor Memory" mode (default) corresponds to the old behavior whereas the "Favor Speed" mode allows to evaluate the displacement faster at the cost of more memory usage. (#2930)
- Animated attributes (focal length, aperture, field of view) in perspective cameras are now properly supported by the motion blur. (#2661)
- A new triplanar texture node is now available. For more information please refer to http://clarissewiki.com/3.5/triplanar.html (#5708)
- Improved the ray-tracing speed of alembic bundles when they contain sparse geometries (#3466)
- Raytrace offset attribute is now animatable. (#6409)
- Added various means of defining the mean free path of the SSS diffusion, and improved energy conservation of sub-surface scattering (#6258)
- The raytracer and the pathtracer have now by unified into a single class: the raytracer engine.
To switch between the different previous renderer, you must change the integration model attribute of the engine. Please note that it is now also possible to switch between integration models directly in the 3D View. (#5761) - Extended sub-surface scattering with the cubic diffusion profile and renamed the normalized diffusion into empirical. (#6357)
- It is now possible to control the quality of the shading from an image using the Shading Quality attribute. While Shading Quality attribute works like Sampling Quality, it doesn't affect anti-aliasing. (#6919)
- Improved sampling strategy of scattered points in subsurface scattering material (#6530)
- Added the possibility to set the diffuse component of the iridescent material to a Lambertian or an Oren-Nayar BRDF (#6257)
- Added the Oren-Nayar BRDF to the physical diffuse material (#6185) (#6441)
- Added range/falloff support for PBR lights akin to the legacy mode (#6123)
- A new physical standard material is now available. It matches the interface of the widely used alSurface material. (#6039)
- Added support for low light threshold in the path tracer as well as an override attribute for each light source. It defines the unshadowed illumination below which a light is assumed to be occluded, hence bypassing the calculation of its actual visibility. (#2017)
- It is now possible to specify how displacement triangles are generated on geometry bundles with the Displacement Triangulation Mode attribute. (#6785)
- Added various texture nodes: black body, sampled curvature, multi-blend, object switch, side switch, scope (#6698)
- It is now possible to output Cryptomatte AOVs. Cryptomatte AOVs are automatically outputted when adding the Cryptomatte sub-pixel filter in a 3D layer. (#6559)
- Added a new output to the Utility Texture: "P (Local Space)" which outputs the local position of the geometric intersection. (#6498)
- Improved greatly the precision of the raytracing in order to avoid holes that could occur around edges. (#6496)
- Improved the precision of the shading in order to remove issues due to self-shadows known as surface acne. (#5489)
- The default mode of the gradient texture is now "Input" instead of "Incidence". (#6874)
- Added a new integrator Ambient Occlusion, available in renderers and 3D Views. For more information please refer to http://clarissewiki.com/3.5/ambient_occlusion2.html (#7026)
- It is now possible to texture the "diffuse_sss_mix" attribute in the physical standard material. (#7123)
- Enabled the color/gain/offset modifiers for the output of the mean and Gaussian curvature modes (akin to the sampled curvature) (#7009)
- Added a new integrator Utility, available in renderers and 3d Views. For more information please refer to http://clarissewiki.com/3.5/utility2.html (#7025)
Image View
- Added a keyboard shortcut to switch AOVs in the Image View: Ctrl+Pg Up/Pg Down and Ctrl+Shift+Pg Up/Pg Down to go to the first/last AOV. (#4275)
- The contents of the overscan is now displayed in the Image View. The overscan display opacity can be modified in the Image View section of the Application Preferences. (#1961)
- The Image View can now display image files in background and foreground plates. (#1967)
- In Image View and 3d View, added an option (enabled by default) to use the file format and color space mapping when saving an image. If disabled, the image is saved using the current color space set in the 3D View. (#5094)
- Background and foreground plates now have Opacity and Fit Mode controls. Also, the background color (when the checkerboard is disabled) can now be modified. These new options are available in a new Image View Options widget, that can be displayed using the new Options button on the toolbar ("tools" icon). (#6241)
- Added new toolbar buttons to play, pause and refresh evaluation. Play: evaluation is enabled, and the image reacts to changes triggering a render (default state). Pause: evaluation is disabled and the image isn’t updated. Refresh: available only when paused, it forces an evaluation of the image needing a render and keep its paused state afterwards. (#4811)
CNode
- Added a new command line argument -rendering_log_tick to both CNode and CRender. This argument forces regular updates in the command line to display the current render progression, even if there is no change. By default it is set to 0, so that the display is only updated when the rendering percentage actually increases.
- CNode has been improved to return a specific error code when it failed on exit. Status 0 means success and all others codes define a specific error: 1 FATAL ERROR, 2 LICENSING ERROR, 3 ARGUMENTS ERROR, 4 PROJECT NOT FOUND, 5 SCRIPT NOT FOUND 6 SCRIPT RUNTIME ERROR
Material Editor
- Added new modes to display nodes in the Material Editor. The expanded mode displays the node and all its attributes the way it was in previous versions. The second mode displays only connected attributes and the master input if any. The last mode will collapse the node to display only its header without attributes. When connecting a link, the node expands automatically to reveal attributes. When disconnecting a link, unlinked attributes vanish on mouse up. Furthermore, each node has a button in the top right corner showing its current mode state. It behaves as a vertical slider: click on it and drag up or down to change modes. If several nodes are selected, shift-click and drag any mode button will apply the current mode to selected nodes. Finally, you can find actions to change modes on a selection in the right click contextual menu. (#4658)
- The Material Editor introduces dots which allow to break regular node-to-node connection. They allow more layout flexibility, better readability and a more flexible workflow. Dots are saved with the scene and are visible and editable in the Attribute Editor. To create a dot, choose NodalItemDot from the TAB menu or from the contextual menu New > Nodal Item > Dot. To insert a dot in an existing link, double-click the link at the desired position. You can also drag an existing dot (without any link) onto the link (provided the auto-insert option is checked in the toolbar). To remove a dot, proceed as for any other item. (#3673)
- It is now possible to drop materials in the Material Editor even when the view is not locked. (#5009)
- When fitting the view to a selection, the view travels gracefully to the new position improving greatly the readability of the network. (#5131)
- Performing an auto-layout on a whole graph now also autofits the view. (#5158)
- It is possible to enable or disable smooth transition (travels) and node auto zoom in the Nodal View section of the Application Preferences. (#5131 5132)
- When you create a new node, it is now automatically linked the currently selected node. When connecting from an attribute, pressing the TAB key before releasing the mouse button displays a filtered creation menu displaying only the list of nodes that can be connected to the attribute. This works the same way when disconnecting the attribute from an existing node. (#5101)
- It is possible to control the default collapse state controlling the display state of newly created nodes in the Nodal View section of the Application Preferences. The list button found in the viewer toolbar allows user to locally override this application setting. Please note that the application preference applies to all new viewers. It has no influence on an already opened viewer, unless it is set locally in 'Use Preferences' mode. (#5132)
- To improve readability, node labels are now automatically removed when their size is too large. (#5100)
- It is now possible to activate a new magnet mode to snap nodes on implicit guidelines generated from the neighboring nodes. To enable/disable the magnet snapping, use the button in the toolbar or press the M key. (#6014)
Shading Layer
- In the Shading Layer Editor, the "Replace" feature now only applies to the selection. It can be used to replace a material, a texture or a displacement object, as well as rules or shading variables. (#5899)
- It is now possible to add groups (of Shading Layers) as children of Shading Layers. This allows to build dynamically master shading layers content using rules in groups. (#5274)
- The drag and drop in the Shading Layer Editor has been improved to accept textures and displacements. It has also been improved to allow assignments of several rules altogether: when dropping on selected cells, the Shading Layer Editor figures out automatically which dropped objects can be assigned to which selected cell. When dropping on a unselected cell, it assigns dropped items to highlighted rows only, and ignores current selection. (#5311, #4719)
- It is now possible to perform drag & drop within cells of the Shading Layer Editor. Dragging a full row (by clicking on left column displaying the row number) copying all references, shading variables, and visibility values to the target row (the row highlighted during mouse drag). If the dragged cell is selected, all selected values of dragged row will be copied to the target row. If the dragged cell is not selected, the selection is ignored and only the dragged cell's value is copied to the dropped row. Note there is a special case when dragging an active or visible flag: the value of the clicked cell is switched on mouse down, then all rows being crossed while dragging are set to the same flag value until mouse up.
- It is now possible to double click on the column separator to fit columns to their content size in the Shading Layer Editor. It is also now possible to shift-click on the delete button in the toolbar to remove all shading layer rules. The new Clear button no longer removes all rules, it clears selected cell values instead. Pressing Del key on selected cells will perform the same thing. (#5899)
- Shading Layers now support world based search paths. World based path are paths based on kinematic (parenting) hierarchy. They start with the prefix world://. Relative world based paths are also supported by prefixing the rule with "world:./" (#5684)
- It is now possible to define shading layer rules that work as well for referenced Alembic and for Alembic bundles. (#3688)
- In the Shading Layer Editor, rules can be reordered via mouse drag. Select the row(s) to be moved by clicking on the row number and drag. Moved rows are gathered to the drop location. (#5899)
- In the Shading Layer Editor, added 2 new buttons in the toolbar and 2 actions in the contextual popup menu to duplicate selected rule(s) above the first selected row or below the last selected one. (#5655)
- It is now possible to copy/paste cell(s)/row(s) within the same Shading Layer Editor or between two different ones. To copy and paste selected cell(s) or row(s), press Ctrl+C then select target row(s) and press Ctrl+V. If the source selection contains several rows, they will be pasted starting on the target row (eventually the last rows will be omitted if they don't fit).
When the pasting area (target selection) has more rows than the source, source's row values are cycled to fill the target. If the source selection has holes (for ex. 2 rows fully selected except the clip_map column), only corresponding cells in the target area will be modified. If the source selection contains a blank value (for ex. an unassigned material cell), the corresponding value in the target will be erased. (#1888)
Geometry
- Pixar’s OpenSubdiv library has been integrated to Clarisse. It is now possible to choose whether the subdivision of meshes is done with our native implementation or with Pixar’s OpenSubdiv library. (#4063)
- Improved the construction of geometry bundle acceleration structures for displaced shading groups. (#5666)
- Added a new "Support Space" attribute to scatterers which allows to choose the space in which the geometry support is considered. (#5760)
- Names of shading groups in Alembic bundles now reflect the kinematic hierarchy of objects when the file is imported or referenced. (#5685)
- Added a new "Shading Groups Naming" parameter to Alembic bundles which allows to specify if shading group names reflect Alembic path or kinematic path in Clarisse. (#3688)
- Added a new attribute to the scatterer (Collision Scale Multiplier) allowing to globally scale bounding volumes of instances used for collision detection. (#6963)
- Improved the distribution of time samples over instances in a scatterer
- Added a new attribute Collision Seed to control the random insertion during collision detection.
- It is now possible to change per instance time distribution by changing the value of Variance Seed when using time variance. (#6984)
- It is now possible to scatter generated fur with time variation. It is also now possible to create a point cloud on a scatterer that has time variation. (#6985)
- Geometry bundles are now creating UV slots automatically. (#2640)
- Added a new Scatter Position Variance Step and Scatter Scale Variance Step attributes to Scatterer, allowing to scale random position and random scale respectively into multiples of the specified value. (#5953)
- It is now possible to apply a time offset on each instance of a scatterer. 3 new attributes allow to control the time distribution. Scatter Time Offset attribute offsets the time of geometries being scattered (in seconds). It is possible to control the time for each instance by using a texture. Scatter Time Variance attribute adds randomness to the time offset of instances being scattered. Scatter Time Variance Samples attribute specifies the number of generated time samples when the time variance is greater than 0. (#2019)
- It is now possible to decimate instances of a scatterer via per instance collision detection. When Collision Mode is set to something different than Off, per instance collision is performed by using either instances bounding boxes or ellipsoids constrained within bounding boxes of instances. For more information please refer to http://clarissewiki.com/3.5/collision.html For each scattered objects, it is also possible to specify an alternative custom collision object for which the bounding box is used instead for the collision detection. For more information please refer to http://clarissewiki.com/3.5/custom_coll ... bject.html (#5757)
- It is now possible to define a frame of reference on all scene items. For geometries, it allows specifying which frame is the reference for the base geometry which is used during implicit projection texture computations and geometry sampling (point cloud generation). (#6094)
- When the Geometry Mode is set to Local Base, Geometry Point Cloud does not sample any more the points at each frame update if the geometry support is animated. (#4983)
- Added a new Decimation Space attribute to the Scatterer. When set to Reference, decimation texture and collisions are evaluated on the base geometry at the reference frame. When set to World, decimation texture and collisions are evaluated on the deformed geometry at the current frame. The projection used during the evaluation of the decimate texture is also forced to be in Object Space when the Decimation Space is set to Reference. (#6554)
- Indexed properties are now read correctly from Alembic point clouds (#6890)
Tool
- A new Particle Paint tool is now available. It allows to add/remove particles in an editable cloud (GeometryParticleContainer). It works in the 3D View only. (#4309)
3D View
- It is now possible to change the gamma of the 3D View and the Image View. (#4328)
- It is now possible to to save renders directly from the 3D View. (#4325)
- Added a new option to control the way selected items are highlighted (none / bounding box / wireframe / both). (#5166)
- 3D View and Image View now display a bounding box when a group or a context is selected. This bounding box includes all scene items contained in the group or context. (#5165)
- Added Highlight Mode, a new attribute in scene objects which tells how object is highlighted in 3D View when selected. This flag cumulates with the option in the 3D View in such way that, for example, the bounding box of a selected item is displayed only if the 3D View requires it. (#5166)
Texture View
- When viewing a texture and hovering the mouse on it while the texture is being evaluated, the color information HUD now shows a black color and the text "evaluating texture...". As soon as the evaluation is completed the HUD is properly updated with the corresponding color value. (#4926)
- Added progress bars to the different evaluation steps to improve feedback. Known limitation: loading UV map names is not multi-threaded at the moment. (#5793)
- Texture Uv View has been renamed to Texture View. (#6060)
Attribute Editor
- The attribute pop-up menu has now 2 ways to reset attributes. Reset Attribute (formerly Reset) which restores the attribute value to the source value and eventually unlocalizes the attribute if the item is an instance. Revert Value which restores the attribute value to the default one. If the item is an instance, then attribute is kept localized. If the item is in a reference and the attribute is overridden, the attribute override is then removed. (#4447)
- Drag & drop has now been implemented for attributes of type string or script. One or more items may be dragged onto a string field in the Attribute Editor or into the text editor sub-widget (opened with '...' button).
- If item(s) are dragged from the Hierarchy view, the resulting string when dropped is the kinematic path of the item, otherwise, it's its context path.
- When the target is a simple string, the cursor shows the dropped location while dragging, the dropped path(s) is inserted into the existing value using a space as separator.
- When the target is a multiline string (for ex. group rules), the dropped path(s) will be appended to the existing value, using a semicolon separator.
- When the target is a script, the edit field won’t accept drops.
- When target is a text editor (for ex. group rules), the cursor shows the dropped location while dragged, the dropped paths are appended after the current line if cursor is at end of line or before the current line if the cursor is at the start or in the middle of the line.
- when target is the text editor of a script (for ex. OSL shader script), the cursor shows the dropped location while dragging and the dropped path(s) are inserted using a space as separator. (#4334) - Introduced a new way to quickly edit object and reference list flags. Click the eye icon on the first item then drag vertically. The value of the clicked row is switched on mouse down, then all rows being crossed while dragging are set to the same flag value until the mouse button is released. You may cancel while dragging with the ESC key.
- Scatterers now have a dedicated custom interface in the attribute editor to display geometry attribute content. (#6124)
- Added a new button in the toolbar to create custom attributes. (#6462)
Groups
- Groups have been completely revamped from the ground up making them way more flexible than before. They can now mix inclusion items, inclusion rules, exclusion items and exclusion rules. The result is dynamically deduced from included items and excluded ones. Group contents can now also be baked using the Update Mode attribute and setting it to Manual. When in Manual mode group content isn’t updated even if it has dynamic rules. To trigger an update of the group content you may click on the refresh button. Groups can also reference other groups (in all inclusion/exclusion items and rules fields), for which content will be brought back recursively into the group final reference list. For more information please refer to http://clarissewiki.com/3.5/understanding_groups.html (#4781)
- Groups allow to chose multiple class filters using a tag-list menu. A new filter option has been added in Groups just before the result, allowing a final filter to be applied on the final list of items using local rules. For more information please refer to http://clarissewiki.com/3.5/result_filter.html (#6710)
SDK Changes
General
- New callback "cb_declare_custom_ui" has been added and can be used in modules to declare a custom ui for an object. The .cid files just have to declare an attribute of type custom_ui (custom_ui "my_attribute"), then the callback will be called with the attribute name, allowing to declare a custom UI for it. (#1885)
- It is now possible to pass a progress bar to IOHelpers::import_scene() (#4030)
- Added the ability to specify from CID a custom order for attribute groups in Attribute Editor.
New double property in cid: ui_weightcode>. Default order (definition range) if property is omitted. The lower the value, the upper the group will be displayed in Attribute Editor. Syntax:
attribute_group "less_important" { doc "not very useful set of attributes" ui_weight 100 color "color" { value 1 1 1 } #... }
attribute_group "most_important" { doc "set of attributes to be displayed first" ui_weight 0.001 #... }
attribute group collapsed, ui_weight and doc properties are inherited through OfClass hierarchy. They can be overridden at any level.New methods on OfClass:
bool is_group_ui_weighted(const CoreString& group_name, double& weight, const bool &recursive=true)
const void set_group_ui_weight(const CoreString& group_name, double weight)
void unset_group_ui_weight(const CoreString& group_name) (#1831) - OfTime has a new boolean attribute to enable sub-frame and a new method double OfTime::get_current_floating_frame() which returns either the rounded value (as get_current_frame would) or the exact value computed as current time*fps, depending on sub-frame status. Default value is false. Changing sub-frame status raises a EVT_ID_TIME_UI_SUBFRAME_CHANGED. Related "timeline_sub_frames" attribute has been added to Clarisse Application Preferences, Animation section. (#4329)
- MaterialEditor: new command SetItemsNodalProperties to set node's expand state as well as node's location. Old command CreateSetItemPositionCmd has been kept for compatibility but is now obsolete. (#4658)
- OfContext::reference_file now handles empty filename argument. CreateFileReferenceCmd now handles empty array of filenames: it creates a single empty reference with default name.
- IOHelper: Added 2 methods to edit custom point clouds: add_particlesdecimate_particles
ResourceProperty: added optional arguments to ResourceProperty::set_item_values to specify how many contiguous values are to be set (default=1)ModuleParticle: added method to retrieve internal cloud
const ParticleCloud* get_particles() const (#4309) - Light API has been reworked, physical and legacy lights are now stored in same containers. The ModuleLight class is now inherited by both ModuleLightPhysical and ModuleLightLegacy, and all legacy callbacks (particularly illuminate ones) are now defined in ModuleLightLegacy.
- OfReferenceContextEngine class has been split into several classes to separate overrides management from file referencing management. The new classes are OfOverrides, OfOverrideContextEngine and OfFileReferenceContextEngine. (#3772)
- Added a new attribute for SceneObject: 'highlight_mode', which tells how object is highlighted in 3D View when selected. Related method is ModuleSceneObject::get_highlight_mode(). (#5166)
- Added a new callback ModuleWidget::display_items(const CoreVector<OfItem *>& items). Intended to fine-tune Quick View and associate window (the one opened when double-clicking a item or dragging it in a tab or using OpenWith menu item). (#3846)
- Added a new command BakeParticle to create a GeometryParticle object baking the point clouds of all specified geometries, and new command ClearParticle to empty specified GeometryParticle object(s).
- Added a new method in ModuleParticle to retrieve internal properties: const GeometryPointPropertyCollection* get_properties() const
- Fixed a bug in the referencing of objects by class for the deferred shading.
- Added a new command AddParticle in ModuleParticle, to feed a GeometryParticle with some geometries (positions & optionally normals), new command RemoveParticle to decimate specified particles from a GeometryParticle.
- Added a new command JitterParticle in ModuleParticle to randomly modify positions in GeometryParticle object(s), according to a variance vector expressed in world, object or local space (local space relies on normals and velocities found in the cloud: y=particle normal, z=particle velocity)
- Added new options AppDialog::STYLE_OK_APPLY_CANCEL, new AppDialog::VALUE_APPLY. Used by Clarisse::inspect widget. When user clicks 'apply', ClarisseApp raises an EVT_ID_CLARISSE_INSPECT_WINDOW_APPLY, and the dialog is kept running.
- Added a new command MoveParticle in ModuleParticles to edit a Particle cloud, that either:
- translates some particles, applying to the particles whom ids are provided a given amount of translation, expressed either in world, object or local space (local space relies on normals and velocities found in the cloud: y=particle normal, z=particle velocity)
- sets new positions for the particles whom ids are provided, according to specified locations.
Added new methods IOHelpers::move_particles_relative (the translate case described above) and IOHelpers::move_particles_absolute (the set case above) - The pick_vertices method interface in ModuleWidget has been modified, to handle a new type of vertex gathering.
- A new method has been added on the attribute dynamic evaluators, to retrieve string shading variable as references.
- It is now possible to retrieve the value of a string typed shading variable as reference in the OfAttrDynEvaluator.
- In the SDK/API section of the documentation, there's now a topic introducing CID syntax
- CtxTransmittance structure doesn't clear opacity and absorption samples upon compilation anymore. Both arrays are also now accessible. (#5365)
- GeometryDeferredShadingGroup: added the set_custom_data() function that allows to attach custom data to the group and renamed alloc_data, free_data and get_data to alloc_shading_data, free_shading_data and get_shading_data. (#5302)
- ModuleMaterial: added a new callback for the deferred shading that is called before gathering the data of a shading group: pre_deferred_shading_group. The size of the deferred shading data is not specified anymore to the enable_deferred_shading function and the shading data must be allocated from the pre_deferred_shading_group callback instead. (#5302)
- Improved the way object and intersection filters are working: it is now possible to apply the remaining filters from an executed filter and ensure that all filters are called once. (#5494)
- In the SDK/API section of the documentation, there's now a topic regarding CMA and cmagen
- Fixed SetCurveKeyValue command that did not fix the value properly. (#5687)
- ModuleProjectSearchPath class has been renamed into ModuleSearchPath. It now supports project and world paths. (#5684)
- Fixed OpenEXR configuration headers that were not taking in account all platforms.
- - Enhanced ShaderHelpers::raycast to specify a list of objects to pick or exclude from picking. Default behavior is exclude (as before).
- Enhanced CtxHelpers' SceneItem filters to specify a list of objects to be considered or excluded. Default is "exclude" mode (as before). Renamed {Frustum,Raytrace,RayFrustum} ExcludeSceneItemData to {Frustum,Raytrace,RayFrustum} SceneItemData and the static callbacks accordingly.
- ModuleWidgetQuery updated accordingly. - TextureSpace has a new ComputationMode attribute which specifies if projection transformation must be computed or not before UV transformation when the texture is evaluated. (#4505)
- TextureSpace projection attribute can now specifies if the texture is evaluated on the base or the deformed geometry in object space. (#5805)
- GeometrySceneInfo now stores all items kinematic paths.
GeometrySceneInfo::build_shading_group_names() may now take one argument which specifies if shading group names are generated according to item names or kinematic paths. (#5685) - MoveShadingLayerRules command has an extra optional boolean argument to move several rules to an absolute rank. By default, it is true (relative) to behave as before and shift all rules the same amount. BTW, the command no longer needs you to care about order when specifying ids to move, and it handles a relative shift greater than +- 1. (#5899, #5928)
- GeometrySceneInfo does not store anymore all the shading group names of the bundle. The method build_shading_group_names() now needs to be called if you want to retrieve all shading groups. (#3688)
- Fixed functions ix.application.select_next_outputs() and ix.application.select_next_inputs() to return proper result in all cases.
- OfOverridesContextEngine has been updated to provide minimal reloading of referenced project.
Custom context engines that inherit OfOverridesContextEngine now have to implement the 'update_content' framework.
These virtual methods need to be implemented:
virtual void on_update_content(const OfSerialOptions& overrides_options) // override this method to specify your custom content
virtual bool can_update_content() const // returns true if the update process can be done right now
virtual void update_content(const OfSerialOptions& overrides_options) // performs the update content process if possible (according to can_update_content) and manages reapplying overrides
virtual int get_override_kind(const OfObject& object, const CoreString& attr_name) const // queries the kind of the override according to the specified attribute, returns OfOverrides::OverrideKinds enum value regarding if the override needs to update the content of the context (eg. override on 'filename' attribute)
As known limitations, OfOverrides class is now exposed but the API needs to be enhanced. - Minor change for method ImageMapTile::write_data(...), it now returns a boolean value to indicate whether the tile is now 'clean'.
- Added a new virtual method to ModuleSceneObject returning the number of shading groups for a specified sub object.
3rd Parties
- Clarisse is now VFX Platform 2017 compliant. (#7042)
- 3rdparty libraries version:
- Alembic 1.6.1
- Boost 1.61.0
- c-blosc 1.5.2
- HDF5 1.8.14
- JPEG 6b
- OpenImageIO 1.7.14
- OpenSubdiv 3.1.1
- OpenVDB 4.0.1
- OpenShadingLanguage 1.8.8
- OpenColorIO 1.0.9
- OpenEXR 2.2.0
- png 1.6.14
- tiff 4.0.3
- zlib 1.2.8
- Alembic 1.6.1
- Compilers
- Linux: gcc (4.8.2 with bugfix)
- Windows: cl (Microsoft Visual studio 2017)
- MacOS: clang (Apple LLVM version 6.0)
- Linux: gcc (4.8.2 with bugfix)
Rendering
- CtxSample now provides a get_eye_direction() method returning the normalized direction of the ray that has generated the sample. (#6283)
- AppObject is now raising two new events, one when all modules are loaded and one when the preferences are loaded.
- The whole PBR interface is now available in the SDK:
- A whole new kind of object class has been added: Integrator. This object is in charge of each camera sample integration and allows to customize the whole shading loop.
- The material inheritance tree has been reworked:
- The Material base class is now a lightweight object with only one default shading fallback method.
- The old Material interface has been moved inside the MaterialLegacy class.
- The PBR material interface is now exposed (MaterialPhysical), including a set of fully customizable BxDFs.
- The management of the deferred shading has been moved into the MaterialPhysical class, it's not available anymore in the legacy engine.
- Materials are now able to declare flags which ease type checks and allows to have masks of flags at the level of the SceneObject in order to know what kind of materials are linked to it.
- Two new classes are now available: MaterialDefault and MaterialSwitch. The first one is just a place holder that needs to be detected by integrators in order to replace it by its own default material. The second one allows to dynamically switch the material according to the current intersection during the raytracing process.
- The PBR light interface (LightPhysical) is now exposed, allowing to define your own ones. (#5761) - Added examples of physical light and material into the SDK. (#6374)
- Added examples of integrators into the SDK : utility and ambient occlusion. (#6375)
- It is now possible to partially customize the ModuleIntegratorPathtracer by defining :
- a custom random number generator (inheriting from PbrSampler)
- a custom per fragment light integrator (inheriting from PbrIntegrator)
- a custom recursion data structure (inheriting from PbrRecursionData) (#6946) - Fixed a bug in the rendering loop : pre/post packet methods on sub pixel filters and integrators are now called even if the camera is not generating rays. (#7097)
Attribute Editor
- Added a new flag (promote_attribute yes) which can be used in CID files to specify that the attributes of an embedded object attached to attribute of type OBJECT should be promoted. This means that they will be displayed as actual attributes of the parent object instead of being part of the embedded object (with an indirection to see them). (#5814)
Geometry
- Modified the scene instancer module in the SDK examples so it works with the new API of the ModuleSceneObjectTree class. (#6573)
- Added a new callback to ModuleSceneObjectTree (get_instances_time) which allows specifying a time offset per instance in seconds. (#2019)
- Split cb_get_instances callback of ModuleSceneObjectTree into three new callbacks :
- cb_get_instances now computes only the index of the base object to scatter for all the points of the support before any decimation is applied.
- cb_decimate_instances takes the array of all these indices and computes all the indices of points used on the support to scatter the geometries after all the decimations are applied.
- cb_get_instances_matrices takes the array of these support point indices and computes the world matrices for each instance. (#6085) - ModuleSceneItem has 3 new methods: get_reference_frame() allows to retrieve the reference frame of the object, get_reference_time() and get_reference_global_matrix() allow respectively to get the time and the global matrix of the object at the reference frame. (#6094)
- A new structure named SupportDeformedDescriptor has been declared in the GeometryPointCloud class. It is supposed to store a pointer of the deformed geometry, and the matrix of a sub-object of the support geometry of the point cloud. GeometryPointCloud has a new init_geometry() method taking in parameter an array of this structure. (#4983)
- OfAttr::DIRTINESS_GEOMETRY has been split into OfAttr::DIRTINESS_GEOMETRY_BASE and OfAttr::DIRTINESS_GEOMETRY_DEFORMED. The first one is propagated when changes occurred on base geometry at the reference frame (for example if changing the filename of an Alembic, or changing the reference frame of the object). The second one is propagated when only the animation of the geometry is changing for the current frame, (#6286)
- It is now possible to specify an array of indices to the GeometryPointProperty class that allows to remap the values. (#5460)
- It is now possible to add empty items in the ResourceBundleManager and the data of ResourceBundleItem can now be locked and modified. (#6672)
- Introduced a new class GeometryResourceOverride allowing to store overridden resource links. It is used by the scene object module when asking for a resource with geometric override (get_resource_override()).
Added 3 new callbacks to ModuleSceneObject :
- cb_get_geometry_override : It returns a GeometryResourceOverride for the caller module based on the geometric overrides defined in the GeometryOverrideConfig given as parameter.
- cb_get_geometry_attributes_override : Given a GeometryOverrideConfig, it specifies the overridden attributes with their new values.
- cb_create_resource_override : It returns the resource corresponding to the given resource ID, by taking into account geometry overrides. (#7059) - It is now possible to disable the compression algorithm on scene object tree matrices. (#7055)
Object Framework
- Within a referenced project, we can now prevent an attribute to be overridden when its value changes. To do this, simply call the set_saveable(false) method on it. Of course, the value will be lost when the project will be saved. (#6712)
SDK
- It is now possible to specify a unit system per class attribute in CID files. ex: distance "sss_scale" { value 1 ... unit_system "metric" } (#6797)
Groups
- Groups interface had a lot of modifications with the Groups 2.0 update. You can and should now achieve all the group API accesses using the group module rather than using the OfObject directly. All groups functionalities are exposed there.
- Those new groups used a "mode" to specify whether to use a rule (or a set of rules) to find the list of objects, or directly a specified list of objects. They also allowed to specify other groups which content was excluded from the group results.
- New Groups allow to combine inclusion and exclusion information to dynamically resolve group contents. The group mode is no more involved: rules and objects list are both used at the same time. It's the same for exclusion rules and exclusion list.
- Major things to remember on those new groups: - (Inclusion Rules + Inclusion Objects) - (Exclusion Rules + Exclusion Objects) = Final list of objects
- Class filter will filter the final list to match the specified class. This is unchanged
- Groups specified in Inclusion Rules & Objects and Exclusion Rules & Objects will get their content resolved. That means that groups are not directly referenced by other groups, but their content are and this dynamically.
- Since group content resolution is now always dynamic, a GroupUpdateMode has been introduced in case you want your group content to be baked which means that its content doesn’t change even if its content should be updated (with the exception of items being removed from the project).
Here is a brief presentation of most common ModuleGroup methods:- add_inclusion_object // add an object in the group inclusion list
- add_exclusion_object // add an object in the group exclusion list
- set_inclusion_objects // set the list of included objects
- set_exclusion_objects // set the list of excluded objects
- get_inclusion_objects // get the list of inclusion objects
- get_exclusion_objects // get the list of excluded objects
- get_inclusion_rule // get the inclusion rule
- get_exclusion_rule // get the exclusion rule
- set_update_mode(GROUP_UPDATE_MODE_AUTOMATIC) // the group is in automatic mode and its content will be updated when needed.
- set_update_mode(GROUP_UPDATE_MODE_MANUAL) // the group content is baked. It can be updated manually through a specific button in the attribute editor, or using the force_update_references function[/i]
- force_update_references() // asks the group to update its content.
- g[i]et_objects() // get the actual group list of objects. It may not be accurate if group is not in AUTOMATIC_MODE or if it’s dirty
- get_updated_objects() // get the updated list of object. Update it now if the group is in AUTOMATIC_MODE. It may not be accurate if group is in AUTOMATIC_MODE.