<<Back To Release History
Krakatoa 126.96.36.199376 as of 2010/09/24
For an expanded discussion of the new features, see here.
- (2010/05/06): Added support for 3ds Max 2011 using the 2010 plugin.
- (2010/05/06): No attempts to locate the user's plugin.ini file will be made anymore. You must have Administrator rights to install and the main plugin.ini in the root of 3ds Max will be modified regardless of OS and Local User settings.
BUGS FIXED SINCE V1.5.1
- (2009/11/10): An old property for "Use Lighting" was still used deep inside the renderer. The property still exists at UI level for backwards compatibility and is being set by the "Ignore Scene Lights" button, but it could get out of sync under some circumstances, causing particles to render without illumination. This has been fixed.
- (2009/11/24): Fixed support for the 3ds Max Volume Select modifier. In previous versions, it was not selecting correctly.
- (2009/11/26): Added a popup message at loading time when the Helium DLX is not loaded. In the past, Krakatoa would fail to load with lots of MAXScript errors in the Listener, now the loading of the respective modules will be skipped.
- (2009/11/26): Global Channel Override KCMs were evaluated top to bottom instead of bottom to top. This has been fixed.
- (2009/11/30): Fixed a bug in the motion blur calculations where the wrong units were used for the time value.
- (2009/12/02): Fixed support for Cebas Thinking Particles 4 by compiling against the latest TP SDK.
- (2009/12/03): PRT Loader was producing an empty native channel map when the stream contained no particles, causing problems with PFlow. This has been fixed to always return the correct channel map even when the PRT file is empty.
- (2009/12/07): Voxel Mode + DOF could cause a crash when voxels were behind the camera. This has been fixed.
- (2009/12/10): Matte Object Rasterization was wrong in Perspective views. This has been fixed.
- (2009/12/10): Fixed the crash when saving attenuation maps in Max 2009 and earlier (this worked in the 2010 build). This was caused by compiler settings and wasn't directly related to the Krakatoa code.
- (2009/12/17):Fixed wire color support on streams that don't have a color or material. (e.g. PFlow which was showing as white instead of wirecolor)
- (2009/12/17): Added flags for Absorption and Emission channels so caching them does not force their use. Previously, caching these channels then turning off the Use Absorption or Use Emission caused the data to still be used. Now, the options control whether the channels will be used. If unchecked, they will be ignored even if already in Cache.
- (2010/01/29): Fixed an instability causing KCMs to crash 3ds Max randomly while changing Input values.
- (2010/02/09): Picking a new object in the Krakatoa Geometry Test was not causing a kd-tree update (the old geometry was used) due to notification issues. This has been fixed.
- (2010/02/09): Colors in the Krakatoa Material were not animatable. This has been fixed.
- (2010/02/10): The function FranticParticles.MakePartitionFilename() was not handling directories with periods correctly. This has been fixed.
- (2010/02/11): Attenuation Maps Saving is now supported in Voxel mode.
- (2010/03/04): Shadow Casting from Matte Objects onto Voxels was not working. This has been fixed.
- (2010/03/04): Camera Clipping Planes were previously ignored in Voxel mode. This has been fixed.
- (2010/04/23): MagmaFlow was not updating the host modifier when changing to another modifier with >AUTO off. This has been fixed.
- (2010/04/29): The MtlIndex channel of Particle Flow was not supported correctly and was saving a default value of 0 for all particles. It is now fixed and will save the correct particle material index which can be processed and loaded back into Particle Flow, or used to assign a Multi/Sub Material to a PRT Loader or PRT Volume to define different Color values per particle.
- (2010/07/29): A network rendering error where Deadline complained about a "Krakatoa OFF" dialog preventing it from starting has been fixed.
- (2010/07/30): A crash when loading a KMF preset via the KCM UI with MagmaFlow Editor closed has been fixed.
- (2010/07/30): When submitting a Krakatoa Rendering job via Submit Max To Deadline (SMTD), the Comment was taken from the Krakatoa Partitioning rollout instead. Now the comment and job name will be assigned just when a partition job is submitted and will not override the SMTD settings.
BUG FIXES SINCE PREVIOUS BETA BUILDS
- (2010/07/01): Backgrounds were being added up incorrectly in Beta 6 when using Motion Blur and multi-threading, resulting in brighter color than expected. This has been fixed.
- (2010/07/01): PRT Volume handled modifiers incorrectly when no default selection existed. This has been fixed.
- (2010/08/04): PRT FumeFX was causing 3ds Max to hang when a deformation modifier was added. This has been fixed.
- (2010/08/04): PRT FumeFX and PRT Volume crashed 3ds Max when the viewport Limit was set to 0 and there was a modifier on the stack. This has been fixed.
- (2010/08/04): Changing the Subdivisions and Count spinners in the PRT FumeFX UI did not cause an update. This has been fixed.
- (2010/08/19): A line for handling the creation of the Geometry input node was missing from the MagmaFlow code, causing serious crashing. This has been fixed (a patch for the Beta 8 build was posted, too).
Beta 10 (RC1)
- (2010/08/23): Copying and Pasting of KCMs caused scene corruption due to incorrectly duplicated sub-controllers. This has been fixed.
- (2010/08/25): The Emission Strength controls were incorrectly hooked up in the Voxel Renderer. This has been fixed.
- (2010/08/25): Warnings were incorrectly prefixed with "ERR" in the Log Window.
- (2010/08/25): The Krakatoa Delete modifier was spamming the Log Window with warnings when in Delete by ID mode and no ID on the stack. It will now complain only once.
- (2010/08/26): A Memory Leak in Krakatoa Render Elements has been fixed.
- (2010/08/27): Fixed partition naming which was losing the base file name.
- (2010/08/27): Fixed single frame partitioning on Deadline to actually submit a range of two frames based on the current Time Slider value. This used to render the wrong frame in the previous builds.
Beta 11 (RC2)
- (2010/08/30): Selection channel from KCM in PRT Loader wasn't affecting modifiers correctly. Now it works.
- (2010/08/30): Matte Objects Segments were not respected, Particle Segments were always used. This has been fixed.
Service Pack 1
- (2010/09/08): Thinking Particles would cause particle evaluation to hang at render time if there were more than one TP objects in the scene. This has been worked around.
RENDERING AND RENDER ELEMENTS
- (2010/01/29): When SuperSampling is greater than 1 and >Save Multiple Layers is OFF, pseudo-anti-aliasing will be performed to smooth out the edges of the matte object. Previously, increasing the SuperSampling value had no effect unless two layers were saved.
- (2010/02/04): The Memory Management of Krakatoa v1.5.1 and earlier did not like procedural particle sources like PRT Volume or CSV files where the final particle count is unknown. This has been improved by providing a user-defined minimum amount of particles to allocate memory for.
- In typical scenes where each particle source reports the correct particle count, memory will be allocated like before.
- In scenes containing particle sources with unknown final particle count, Krakatoa will ask the source for an estimate.
- If the source cannot provide an estimate, Krakatoa can now query the user-defined Pre-Allocation particle count found in the Channels and Memory rollout and allocate memory for the specified number of particles.
- If the pre-allocated memory is still not enough to accommodate all particles, the memory pool will be grown as needed (which is a relatively expensive operation).
- The following chart shows the loading time in seconds of 1 to 50 Million particles in the v1.5.1 (blue line) vs. 1.5.2 (red line) - with 50 MP, it takes only 17.5 seconds to load the particles vs. 11+ minutes in the old build. This is over 38 times faster and the speedup gets more pronounced as the particle count increases.
- (2010/03/15): Added Krakatoa Render Elements to the Render Elements tab of the 3ds Max Render Dialog:
- Currently there are three types of Render Elements that can be configured to output various types of data:
- KrakatoaRendererElement - output data calculated by the renderer. Currently outputs last light's Lighting and Shadow data and world space MatteZDepth pass taken from the Matte Rasterizer.
- KrakatoaShaderElement - output data calculated by the shader. Currently only Phong Surface - Specular and Diffuse. More to come in the future.
- KrakatoaDataElement - output arbitrary data available at render time via a custom MagmaFlow.
- (2010/03/17): Added buttons for adding and removing Shader Render Elements from the Shader Parameters Rollout.
- (2010/04/07): The Final Pass Drawing in Particle is now multi-threaded, resulting in pure Drawing performance gain between 6 and 7.5 times on an 8 core machine.
- (2010/04/09): The Matte ZDepth Image generation is now multi-threaded, resulting in pure rasterization performance gain of up to 8 times on an 8 core machine (excluding the geometry preparation). For example, processing 104 million polygons from 100 Teapots with 64 segments and one Iteration TurboSmooth took 39.578 seconds in the old version including 7.4 seconds updating objects, while the new multi-threaded version took 7.421 seconds to update and 4.125 seconds to draw, or 11.546 seconds total. The pure drawing time was thus 7.795 times faster, the total Matte Objects calculation was 3.42785 times faster.
- (2010/04/20): The processing of Matte Objects has been improved by allowing the decoupling of the Matte Segments from the Particle Segments to evaluate the Matte Objects transformations or geometry less often.
- (2010/04/27): Adding a KrakatoaDataElement without opening the MagmaFlow Editor was creating an empty flow that would cause a crash. This has been fixed to prevent the crash, but you have to open MagmaFlow and set up a valid flow to get meaningful output.
- (2010/04/27): WorldXYZ and ObjectXYZ coordinates are now supported correctly in TextureMaps used in Materials or KCMs.
- (2010/04/30): MtlIndex channel is now correctly saved from Particle Flow and is correctly supported by PRT Volume and PRT Loader objects to pick the color and density of Multi/Sub Materials' sub-materials (no other channels will be acquired though). The MtlIndex will be also loaded back correctly using the Krakatoa PRT Loader Update operator. See here for details.
- (2010/05/25): Attenuation Map generation performance has been improved by multi-threading the drawing portion. This was the last major sub-system of Krakatoa that was still single-threaded. Raw drawing speed is up to 5 times faster, overall rendering speed increase can range from 2 to 4 times depending on the scene content and the number of lights and particles in it.
- (2010/06/11): A crasher bug introduced in Beta 5 by the multi-threaded drawing code when rendering 250+ million particles was fixed. Loading, lighting and rendering of half a billion particles from a PRT file took 5 min. 45 sec on an 8 core machine vs. 13 min.30 sec. in v188.8.131.52002.
- (2010/07/20): The CustomData Render Element can now access more channels than just those requested by the Renderer itself. Thus accessing a channel like Mapping2 or Age will now cause that channel to be cached in memory and the data will be available for outputting to a Render Element image. This does not apply to custom-made channels that are not on the Memory Channels list.
- (2010/07/28): The CustomData Render Element will now default to the same Color->Output flow as regular KCMs.
- (2010/07/28): The list of render elements has been expanded to include Normal, Tangent, Velocity, ZDepth and SpecificLight elements, as well as separate elements for shader components, currently Diffuse and Specular from Phong Surface.
- The SpecificLight element can be used to extract the lighting (including particle and light color, attenuation and specular highlights from Phong Surface) of a single light to a Render Element image. The ability to extract separate light and shadow info from the first light only has been removed for now.
- (2010/08/09): FumeFX 2.0 is finally supported by the PRT FumeFX Object, wavelets and all.
- (2010/08/10): New Emission Strength controls have been added to decouple the use of the Emission channel from the Density channel's influence.
- The Emission Strength will affect only the Emission channel, thus allowing the Density to go down to 0 for example in order to suppress the Volumetric Smoke from FumeFX while still rendering the Fire as Emission.
- When set to the same value as the Final Pass Density, the rendering will match previous versions of Krakatoa where the Density affected the Emission.
- (2010/08/13): The saving of the Background particles is now handled by a dedicated "Krakatoa_OccludedLayer" render element.
- When the existing >Save Multiple Layers option is checked, the Render Element will be added and activated.
- When the option is unchecked, the element will be turned off (but not deleted).
- In prior versions, the saving of the background particle layer was performed by internal code and was thus limited to OpenEXR only. Now the output can be any file format supported by 3ds Max.
- (2010/08/19): The Voxel Renderer will now support the Shadow Density value of 3ds Max lights. Previously, only the Particle renderer supported this.
SHADOW CASTING AND MATTE OBJECTS
- (2010/03/04): Finished implementing a new approach to casting shadows from Krakatoa particles on Geometry in other renderers that support standard 3ds Max shadows (except mental ray renderer and VRay lights).
- A new Krakatoa Shadows type has been added to the list of shadow generators in 3ds Max lights.
- When rendering in Krakatoa with >Save Attenuation Maps checked, Attenuation Map data in a Deep Opacity Maps form will be saved as layered OpenEXR file for each light and each frame of the animation to the path specified in the Krakatoa Shadows generator.
- The Map will contain a z-depth channel and one or more attenuation samples at a user-defined step to capture the attenuation within the volume when working with geometry intersecting with particle clouds.
- When rendering in Scanline or VRay, the data from the Attenuation Maps will be combined with a Geometry-To-Geometry shadow generator specified within the Krakatoa Shadows rollout and will produce correct shadowing from both particles and geometry objects.
- The Krakatoa Shadows will respect Absorption values and produce correct colored shadows from particles onto geometry.
- (2010/03/04): Replaced the Krakatoa Shadows On Geometry Utility with a new Krakatoa Shadows Explorer Utility which provides a list of all supported lights in the scene together with their light and shadow casting status, the shadow type and, in the case of Krakatoa shadows, the secondary type, samples, step, map size and shadow file name.
- The tool allows for quick switching of one or more lights' shadow generators to and from Krakatoa Shadows as well as the selecting of lights and the mass-adjusting of Krakatoa Shadows parameters.
- (2010/03/25): The Krakatoa Shadows Generator in Beta 3 was not updating the Attenuation Maps if the scene had no animated objects (not counting Cameras). This is an old optimization from 3D Studio DOS days to allow fast rendering if lights and geometry are no animated by caching the shadow maps. This has been fixed.
- (2010/03/26): Krakatoa Shadows Generator in Beta 3 was performing out-of-order checks which could cause error messages in some cases. This has been removed, trusting the sorting to have produced correct order anyway.
- (2010/03/30): Krakatoa Shadow Generator was enhanced to support two paths:
- The Save Path can be absolute or can be defined using $renderdir and $objectname as placeholders for the current Render Output path and Light name.
- The Load Path will be absolute and can be set either manually or automatically whenever the save path is written to. An Auto Update On Save option controls whether the path will be dynamically update to the latest saved EXR or frozen at the specified path.
- (2010/03/30): Added a Krakatoa Shadows Manipulator which can be used to visualize the Sampling Ranges and manipulate them directly in the viewports.
- (2010/03/31): Added an option to use Exponential Sample Spacing (default is on) or the old Linear Spacing. Exponential produces better results with low Sample Count.
- (2010/04/28): The default path for Krakatoa Shadow Maps is now a \Shadows subfolder of the output folder (like in previous releases of Krakatoa).
- (2010/04/28): Krakatoa will now try to create the path before saving the Shadow Map so it is possible to assign a non-existent path to the Shadow Generator and the renderer will attempt to make that path when saving.
- (2010/06/21): If a matte object is set to "Cast Shadows" OFF, it won't cast shadows.
- (2010/07/15): Added a new Matte Objects Explorer to Krakatoa to determine which Matte Objects specified in the Krakatoa GUI will end up affecting the rendering. It will take into account properties like Hidden, Hidden By Layer, Frozen with Hide Frozen enabled, Renderable, Visible To Camera etc.
- (2010/08/05): Matte Objects with large faces crossing the image plane would cause holes in the Z-Depth data due to some vertices being behind the camera. This has been addressed by clipping all faces by the 6 sides of the view frustum to allow for correct rasterization of the visible portion.
PARTITIONING AND SAVING PARTICLES
- (2010/01/29): Fixed incrementing of Box #3 operators' seeds in local and network partitioning due to changes in the Name access syntax on the side of Orbaz Tech.
- (2010/02/22): The saving code was changed to perform the PRT file generation locally in a temp. folder and then copy the resulting file to the network. This is to avoid potential orphaned locked files in the case of a crash, but it might also improve performance depending on the network setup.
- (2010/02/22): In the past, the saving code would request one particle at a time, making the saving process practically single-threaded. This has been changed to request a pool of 50,000 particles at once before saving them to the PRT file, thus allowing for parallel processing of mutli-threaded portions of the process. For example, Materials with procedural maps and complex KCMs will see a significant speed up from this change. The actual percentage will depend on the complexity of the performed operations - the heavier, the faster the new version will perform compared to previous builds.
- (2010/04/28): When using the [M] button to set the Save Particles file name, an underscore will we appended to the end of the file name to ensure version numbers or other digits won't interfere with the frame numbering.
- (2010/04/30): When saving to RealFlow BIN files, the particle data will be transformed automatically into RealFlow's left-handed Y-up coordinate system. When loading RealFlow BIN files using PRT Loader objects, the data will be assumed to be in RealFlow's space and will be converted into right-handed Z-up coordinates automatically.
Beta 11 (RC2)
- (2010/08/30): Changing PRT Volume's Base Object Random Seed was not supported on Deadline. This has been fixed.
- (2010/08/30): Changing PRT FumeFX' Base Object or Modifiers Random Seed was not supported at all. Added both Local and Deadline support.
Service Pack 1
- (2010/09/07): The TP Partitioning code was tweaked to allow Input Helpers containing "*RandomSeed*" in the name to be incremented just like regular "RandomSeed" properties. This can be used for example to adjust the Random Seed of MatterWaves by connecting an Input Helper node to the RandomSeed property which is otherwise not exposed to MAXScript.
- (2009/11/23): The Volume Select modifier is now supported (except in Mesh mode) as a selection source on the Stack. It can be used to quickly select particles inside a box-shaped, spherical or cylindrical gizmo with support for Soft-Selection and Selection by Texture Map.
- (2010/04/28): Added an options menu to the PRT Volume to perform various operations on the Volume Object like Hiding/Unhiding, Freezing/Unfreezing, BBox on and off, Selecting, setting up default behavior on creation etc.
- (2010/05/04): Added the ability to the PRT Volume to acquire the Vertex Selection channel of the Volume Object if a TurnToMesh modifier is added to the Volume Object's stack to pass the Vertex Selection while remaining at Object level.
- (2010/05/04): Added a checkbox to the PRT Volume's UI to disable processing in the Viewport.
- (2010/05/21): Added a PRT FumeFX object which can be used to convert a FumeFX system to particles without intermediate saving to disk. This object can be transformed, modified using KCMs and Deformation Modifiers and rendered or saved to disk. The FumeFX system will not render directly anymore.
- (2010/05/21): A new "Jitter Position" option in the PRT Volume lets you randomize the positions of the particles created using the Regular Grid option. This is faster than "Random In Cube" but does not ensure equidistant distribution over the volume. The Randomness controls exposed control both the Jitter and Random In Cube modes.
- (2010/06/02): Added support for partitioning the PRT Volume via its own Random Seed field - the Partitioning rollout option now reads ">PRT Volume and Modifiers" and will look for both the base object and modifiers of a PRT Volume.
- (2010/06/04): Changed the Particle Counts rollout to be rolled up by default and to disable count updates when rolled up - when loading multiple sequences from the network, updating the counter can be slow.
- (2010/06/08): Changed the file names in the PRT Loader's sequence list to display #### instead of the selected frame number to denote it is replaced with the current time. When "Load Single Frame Only" is checked, the real frame number will show up again. This does NOT apply to the File Sequence Manager which will always list the selected frame with number instead of hashes.
- (2010/06/18): PRT FumeFX now shows "Mtl" next to the particle count in the viewport if a material is assigned (this will be added to the other PRT objects later)
- (2010/06/21): PRT FumeFX now supports a custom PRTViewportVector channel which can be created using a KCM to display any vector value in the viewport.
- (2010/06/30): Added new menu options to the PRT Loader's File Sequence Manager to load all PRT's from a folder, or recursively from a folder structure. All sequences will be added as disabled in viewport regardless of preferences to avoid surprises.
- (2010/07/01): The PRT Volume UI has been changed to resemble the PRT FumeFX object's UI.
- (2010/07/06): Added Out-Of-Range Type controls to the context menu of the Graph value in the PRT Loader.
- (2010/08/03): An empty PRT Loader, or one using Blank before/after Custom Range behavior, or loading an invalid particle file, would cause excessive memory allocation. This has been fixed.
- (2010/08/19): A new PRT Source object was introduced to handle particle streaming from 3rd party sources implementing the IMaxKrakatoaPRTSource interface.
- (2010/08/20): If a KCM was set to Selection channel output, it was resetting the Selection everywhere on the stack. This has been fixed.
Beta 10 (RC1)
- (2010/08/25): PRT objects will now ignore the Volume Select modifier if it is set to Mesh Object mode. This mode used to crash 3ds Max to desktop.
- (2010/08/26): The PRT Source will be considered a PRT Loader and will respect the state of the ">PRT Loaders" source option.
- (2010/08/26): The PRT Loader now exposes the IMaxKrakatoaPRTSource Interface so it can be used as test particle source of the PRT Source object (mostly for internal testing purposes).
Service Pack 1
- (2010/09/02): Deformation Modifiers were inverting the Velocity Channel in PRT Loaders. This has been fixed.
- (2010/09/07): PRT FumeFX was causing a crash when FumeFX 2.0 simulation was switched to Post cache. This has been fixed.
- (2010/09/07): PRT FumeFX wasn't loading all voxels correctly due to incorrect handling of Adaptive Bounds. This has been fixed.
- (2010/09/07): PRT Volume, PRT FumeFX and PRT Source now expose an Icon Size spinner to the UI.
- (2010/09/24): Unchecking the Viewp.Spacing and changing the Spacing spinner did not update the PRT Volume's viewport cache. This has been fixed.
- (2009/10/05): Added a dedicated SquareRoot Operator node which is faster than the Power Operator.
- (2009/10/19): Added Quaternion Operators
- ToQuat converts three Vector inputs to a Quaternion.
- FromQuat converts a Quaternion to one of the three axis vectors based on second Integer input.
- TransformByQuat transforms a Vector or another Quaternion by a Quaternion.
- (2009/10/28): Added a button to manually refresh Exposed Parameters from the KCM's UI.
- In v1.5.1, copying a PRT Loader or PRT Volume with one KCM updated the Exposed Parameters would update them correctly, but if there were two or more KCMs to update, their flows would get mixed up due to the Editor being closed.
- Fixing this automatically would be tricky, so we let the user fix it with a click. Opening the Editor will also fix the current modifier's exposure if needed.
- (2009/11/23): Added the ability to fully specify type and arity of custom Output channels in MagmaFlow.
- If an existing channel is selected, only the data depth can be changed (type and arity will be preserved).
- When an Input in later KCM references that channel, the type of the channel will now be shown as [Custom] as it cannot be easily determined by the UI, but the compiler will handle it correctly.
- (2009/11/23): Changed the behavior of Input Nodes Drag&Drop - when a new Input is dropped, the existing selection will be removed to allow the Input's Parameters to be displayed immediately. This does not apply to Keyboard creation where existing selections will be preserved to allow for faster flow auto-connecting.
- (2009/11/26): Added Notes Node for adding general notes to the flow that are visible without selecting a node.
- (2009/11/26): Added the ability to display the notes of any node (except for the Notes node) as a popup by holding Ctrl while rolling over.
- (2009/11/26): Fixed a bug that prevented the storing of the Depot width setting to the INI file.
- (2010/01/21): The Connect button in Input Nodes will now show the correct connection expression.
- (2010/01/21): A connected Input will attempt to reconnect if the connection expression is valid in the context of the current scene when loading a saved flow.
- (2010/01/21): Added interactive updates support for Script Inputs containing $ node references. If $Box01.pos is referenced by a script, moving the box will cause the Script Input and the MagmaFlow to reevaluate if the Editor is open or >Interactive Mode is enabled in the KCM.
- (2010/01/21): Added support for saving and loading of texture maps used by a KCM through a material library with the same name as the MagmaFlow .KMF file.
- When loading a flow, if the KCM already contains enough maps to satisfy the flow, a prompt will be issued about replacing or reusing the existing maps. In the latter case, the saved maps will be appended to the list so they can be switched to later if desired.
- (2010/01/21): A new "Explore Presets Folder..." button was added to the KCM's UI. A new File menu item "Explore Flows Folder..." was added to the MagmaFlow editor.
- (2010/01/25): Added two new MacroScripts to the Krakatoa category: SaveModStack and LoadModStack. The former saves the modifiers of one selected object to disk. The latter loads a selected saved file onto one or more selected objects. This can be used to move KCM setups and other related modifiers around.
- (2010/01/26): Implemented the exploding of BlackOps nested within other BlackOps (previously, only top-level BlackOps could be exploded).
- (2010/01/27): Fixed duplicated IDs problem when merging objects containing KCMs on their modifier stack. This could lead to two or more KCMs with different flow definition referencing the same tracks. On Save or AutoSave, the one KCM could request the clean-up of "unused tracks", causing the other one to lose its tracks. To solve this, incoming KCMs are now forced to regenerate a unique ID on merge.
- (2010/01/29): Added a preview thumbnail to the TextureMap Input node's rollout.
- (2010/02/05): Added ATan2 Operator to the Trigonometry category.
- (2010/02/05): Added (Natural) Logarithm Operator to the Arithmetic category.
- (2010/02/10): Added LogB and Log10 BlackOps.
- (2010/03/19): When opening from KrakatoaDataElement, the Input Node Channel List will contain the Lighting channel.
- (2010/03/25): Output node will default to "RenderElement" channel when used in a KrakatoaDataElement.
- (2010/03/25): Added pan and zoom info to Output nodes. When switching BlackOps editing levels up and down, each level will remember its pan and zoom settings.
- (2010/04/19): The ability to draw a graph showing the Output value based on varying Input values has been added.
- (2010/04/23): Added tooltips to Exposed Inputs (visible in 3ds Max 2009 and higher when rolling over the spinner's arrows).
- (2010/04/23): Added color swatch representation of Exposed Vector Inputs.
- (2010/04/27): Updated the Interactive mode to support preview when scrubbing the time slider by forcing an update of the KCM via an animated track.
- (2010/05/04): Added ToView and FromView nodes to convert Points, Vectors or Normals to and from the current view at render time. This does not work reliably in the viewports though and requires manual Update to refresh as the viewport changes. These operators are meant mainly for view transforms inside KrakatoaDataElements and Global Channel Overrides.
- (2010/05/07): Added Ceil node to complement the existing Floor node.
- (2010/05/07): Added Two-Stroke-Shortcut keyboard accelerators like [C]onvert, [L]ogic, [T]ransform and Channel [I]nputs. [U] opens Value Inputs. Pressing the first key opens a context menu with node names. Pressing the underlined letter creates the node. Alternatively, use the mouse for second stroke. The Depot shows the underlined letters of the category letters.
- (2010/05/17): Added TextureMap Input Node modes: Color, Mono and Perturb.
- (2010/05/27): Improved the Switch Operator's Auto-Connect behavior
- If a single Logical operator is selected, it will connect into its 3rd socket instead of the first.
- If the selection contains two nodes and one of them is a Logical Operator, it will go into the 3rd socket.
- If the selection contains three nodes and at least one of them is a Logical Operator, it will go into the 3rd socket.
- (2010/05/27): Added button to convert an Integer Value or Channel Input to Float by inserting a ToFloat node after it.
- (2010/05/27): Added 3 buttons to convert a Vector Value or Channel Input to Float by inserting a ToScalar node with second Integer input of 1,2 or 3.
- (2010/05/27): Changed the Backspace key to preserve all output connections of a removed node, not just the first one.
- (2010/05/28): Added ToScalar - X/Y/Z Component options to the [V] two-stroke keyboard shortcuts menu for quickly converting a selected Vector node to X, Y or Z component.
- (2010/06/15): New Geometry Input Node which stores names of scene objects as sources for the new RayIntersect and NearestPoint Surface operators.
- (2010/06/15): New VTree reordering mode - nodes with one input will continue down instead of using the parent's angle.
- (2010/06/17): Added DensityGradient as a valid input channel. It is currently generated by the PRT FumeFX object and can be inverted and normalized to produce a normal vector.
- (2010/06/17): Added the option to collapse a sub-tree when a node is collapsed via double-click. All down-stream nodes will be hidden to simplify the view.
- (2010/06/18): Swapping of inputs using Ctrl+W and Shift+Ctrl+W was somewhat broken. It now uses the correct function to get the number of node inputs.
- (2010/06/24): Added To World and To View buttons to relevant Inputs (Position, Velocity, Acceleration, Normal and Tangent Channel and Vector Input nodes) for faster insertion of transform operators.
- (2010/06/24): The Transform Type (Point/Vector/Normal) will now be shown as (P), (V) or (N) next to the Output socket's name.
- (2010/07/06): Fixed shading of connected nodes in BlackOps - previously, some nodes were shaded as unconnected even when connected due to incorrect assumptions about the root node.
- (2010/07/07): In order to work around a new bug in Autodesk 3ds Max 2011 which prevents custom tracks from changing their controllers, the MagmaFlow controllers had to be reworked to use List Controllers hosting the keyframe and the connect to track controllers. Instead of replacing controllers, MagmaFlow now just changes their weights, which has the nice side effect of preserving keyframe animation after connecting and disconnecting from a scene track.
- Added an option to the File menu of MagmaFlow to "Bake Controllers" for use in Krakatoa v1.5.x - this removes the list controllers and makes the 3ds Max scene usable with older versions of Krakatoa - for example if you want to give a scene to a person with an older version.
- (2010/07/13): Updated the right-click Node Creation menu and reworked the shortcuts to make more sense.
- (2010/07/14): Added Convert To Vector button to Float Channels and Float Input Nodes.
- (2010/07/15): Changed MagmaFlow to create a single Undo record for a whole node creation and auto-connect operation. In the past, a separate undo record was created for the node creation and for each auto-connect operation.
- (2010/08/03): The >Interactive Mode (SLOW!) option in KCMs UI was not detecting dependencies on Connected Tracks using the new List controllers approach (the same code in the MagmaFlow Editor was working ok). This has been fixed.
- (2010/08/04): Added a "FumeFX Channels Only" filter mode to Input and Output nodes' channel list sorting options to make MagmaFlow editing of FumeFX data easier.
- (2010/08/05): Copying and Pasting nodes between KCMs caused most input nodes to stop working due to the second (Available) track of the source being copied as second controller in the target List Controller. This has been fixed.
- (2010/08/05): The right-click menu hit testing precision was off in XP/Vista/Win7 as it was hard-coded for the Windows Classic (Win2K) theme. This has been fixed by querying the height of the dialog's border, title bar and menu to produce pixel-exact mouse position in Helium control space regardless of the Windows theme used.
- (2010/08/05): The redrawing of the expanded Depot in MagmaFlow had issues with the pan offset when switching between modifiers. This has been fixed.
- (2010/08/13): Under some circumstances, orphaned orange "Node" nodes could appear in the MagmaFlow due to incorrect Depot redrawing calls. This has been fixed.
- (2010/08/18): Added "Save Channel As Output" button to Input Channel nodes to quickly switch to the same channel as the Output node.
- (2010/08/19): A new Output channel PRTViewportColor allows the display of custom color in the viewports using KCMs. It will not affect the renderer and can be used together with PRTViewportVector to visualize data.
Beta 10 (RC1)
- (2010/08/26): The MagmaFlow NearestPoint Surface Operator complained about a missing third input due to a code regression. This has been fixed.
- Copying and Pasting a whole KCM would cause 3ds Max scene corruption on save due to the copying of the "Available" track's standin class instance as actual controller. This has been fixed.
- (2010/08/26): The Auto-Opening Log Window on Error was causing the MagmaFlow editor to lose focus after inserting an operator with more than one input due to the Unconnected error message. The error handling has been tweaked not to output to the Log Window when the error is in the modifier currently being edited in MagmaFlow since the error is shown in the bottom of the editor anyway.
- (2010/08/26): Added "Convert To Float" to the UI of all Logical Operators except for Switch to quickly turn the Integer value (stand-in for Boolean) to a Float, e.g. when feeding directly into the Selection Channel Output.
Beta 11 (RC2)
- (2010/08/30): The node testing code has been further improved to work correctly with all Windows Schemes (incl. Classic, XP, Vista, Win7 etc.)
Service Pack 1
- (2010/09/09): Undo/Redo wasn't restoring the Input Nodes' value correctly. This has been fixed. Please note that if the track is keyframed, performing Undo/Redo can affect the complete curve as the animation state at the time of Undo creation is not stored and there is no way to store/restore the complete controller. This fix also improves the Macro Recorder playback.
- (2010/09/09): The ">Interactive Mode (SLOW!)" option in the Krakatoa Channels Modifier wasn't handling Geometry objects used in Surface Operators. This has been fixed.
- (2010/09/09): Added conversion buttons to the SurfDataValue Operator to quickly turn the output value from Integer to Float, from Float to Vector, extract X,Y and Z components of Vector or transform Vector From World to Object space or into View Space.
- (2010/09/13): Added an explicit INSERT/BRANCH mode displayed in the title bar of the MagmaFlow Editor and controlled by the Insert key in the Numeric Keypad.
- When set to Branch and a single node is selected that has an output socket connection, creating a new operator will not insert into the existing connection but branch into a new output connection.
- Once the node is branched, the mode will revert to INSERT automatically, since it makes more sense most of the time.
- In previous versions, this was done with the SHIFT key, but it could collide with some keyboard shortcuts that use the SHIFT key as a modifier key.
- (2010/09/13): Fixed the mouse hit testing when the MagmaFlow Editor is docked as Extended Viewport.
PARTICLE INPUT STREAM AND PARTICLE DATA VIEWER
- (2010/02/05): A new KrakatoaParticleIStream MAXScript Value can be created using a new method in the FranticPaticles interface to acquire particle data from a PRT Loader or PRT Volume object. It provides methods to read the channels layout, particle count and particle data from the stream, skip over a number of particles and close the stream.
- (2010/02/05): A Krakatoa Particle Data Viewer scripted utility based on the Particle Channel Input stream was added.
- It can be used to visualize the render-time (top of the stack) data of PRT Loaders and PRT Volume objects on the current frame using a ListView.
- Selecting particles in the ListView highlights the corresponding particles in the viewport.
- Only a user-defined sub-range is displayed at once, with the ability to show every Nth particles, filter by the selection channel or by custom filters.
- The min, max and average values of each channel will be calculated for the the displayed range.
- (2010/05/21): Changed the Particle Data Viewer to allow multiple instances of the utility to be opened and used in parallel.
- (2010/06/24): Changed the >AUTO checkbutton in the Particle Data Viewer to a drop-down list with 3 options: Manual (previously AUTO unchecked), Auto (previously AUTO checked) and Stats (new, shows only the averages in the bottom list without updating the detailed particle data). The Stats mode is up to 8 times faster to update when only the averages of large particle counts are needed.
Beta 11 (RC2)
- (2010/08/30): Added support for PRT Sources.
- (2009/10/28): Using InterActive Mode and Resize Output from the the extended VFB would cause a FULL version of the rendering to be generated instead. This has been fixed.
- (2010/03/18): Updated most buttons in the bottom panel of the VFB extension to point at the new floaters and rollouts.
- (2010/03/30): Added [Automatic] modes to the Last Frame, Cached and Memory display in the bottom right corner. The display will change units to fit better, e.g. instead of 1,024 Thousand it would display 1 Million when the count increases. Manual display modes are still supported.
- (2010/04/20): Moved the Motion Blur, Depth Of Field and Particle Sources controls around to accomodate the new Matte Segments spinner and the corresponding Use option.
- (2010/04/27): Added the cache indicator to the Extended VFB and fixed the LCache to enable PCache when checked.
- (2010/06/16): The FFX button in the Extended VFB was doing nothing. It is now correctly hooked up.
- (2009/11/27): Updated Schematic Flow to display info dynamically, added the ability to highlight nodes on roll-over and fixed some descriptions.
- (2010/03/15): Added display of Render Elements. Right-click menu can be used to toggle all Render Elements on and off or toggle individual Render Elements on and off.
- (2010/04/01): Added option to open Render Elements dialog from the RCmenu of the Render Elements.
- (2010/04/20): Added the ability to set Depth Of Field Sample Rate and Motion Blur Segments, Shutter, Bias and Matte Segments via the Preset menus called from the Schematic Nodes' right-click menus.
- (2010/04/20): Added Clear LCache and Clear Both Caches options to the right-click menu of the MEMORY POOL/PARTICLE CACHE node.
- (2010/07/15): Fixed crash in Schematic Flow when using VRay lights without an .ON property.
- (2010/07/15): Matte Objects node will now turn red of one or more scene objects won't render due to properties or layer settings. Added display of the objects to context menu with the reason for not rendering and an option to open a new Krakatoa Matte Objects Explorer dialog to figure out the issues. Similar options added to the Krakatoa GUI's Matte Objects rollout.
- (2010/07/15): Sped up the Schematic Flow updates in production scenes with thousands of geometry objects - the right-click menu of Geometry Vertices node attempted to add thousands of entries, now all scene object menus will be limited to the first 40 entries. Update time with 1800 objects went from 40 seconds to 0.5 seconds.
- (2010/07/16): Improved the subjective speed of the Schematic Flow by speeding up the rollover highlights redrawing. Previously, the whole tree was rebuilt when moving the mouse away from a node, now only the nodes will be redrawn. To actually rebuild the tree, either left or right click in the view or use the Update menu item.
- (2010/07/27): Removed all callbacks for updating Schematic Flow, since a single click anywhere in the flow will cause a fast update. Changes to the Krakatoa GUI will still be reflected correctly, but changes to the scene like hiding/unhiding/creating/modifying/deleting objects will not cause an automatic update. This is to speed things up when working in heavy production scenes with thousands of objects.
- (2010/08/16): Removed the Background Image node since it is now handled by a Render Element.
- (2010/08/18): If Force Additive Mode is checked, Render Elements will produce no meaningful output. Changed Schematic Flow to display the Render Element nodes in red and show warning about that situation.
Beta 11 (RC2)
- (2010/08/30): The node testing code has been further improved to work correctly with all Windows Schemes (incl. Classic, XP, Vista, Win7 etc.)
Service Pack 1
- (2010/09/14): Added support for Schematic Flow as Extended Viewport, including correct right-click handling.
- (2009/11/24): The Iterative Mode would cause Save Particles To File Sequence to save a single file in Max 2009 and higher. Now Iterative mode will be turned off when switching to Save Particles mode to avoid this.
- (2009/11/27): Added Presets Management to the Save Channels list, allowing the saving and loading of channel configurations and the setting of a default set of channels to save. It also respects the channel depth.
- (2009/11/30): Moved the Shader Parameters to a dedicated dynamic rollout which will change depending on the Phase Function selected in the Main Controls rollout.
- The new rollout can be docked, floated and will load and save as all other rollouts and will allow more complex shaders to be exposed in the Krakatoa GUI in the future.
- Supported property types currently include
- Channel with Allocate checkbutton and Float or Color/Vector type.
- Boolean Property (Checkbutton)
- Float Property (Spinner)
- Integer Property (Spinner)
- Color/Vector Property (Color Picker)
- String Property (Drop-Down List)
- Group Control (no property connection)
- Label Control (no property connection)
- (2009/12/01): Added RenderTime and SaveTime comparison to the Presets and History rollout - if two records contain a time stamp, the difference will be shown in brackets next to the absolute time.
- (2009/12/01): Added tooltips (3ds Max 2009 and higher) to the drop-down lists in the Presets and History with the full file name and data since it is often too long to see.
- (2009/12/15): Added Left and Right Strips for browsing multiple thumbnails at a time and fast scrolling through the history.
- Left-clicking a strip thumbnail will load the corresponding record in the left or right slot.
- Right-clicking a strip thumbnail will open the original image.
- (2009/12/15): Added thumbnail caching to the History rollout.
- In the past, the left and right thumbnails of the rendered image were using a rescaled version of the saved rendered image.
- With the new cache, a JPG rescaled version will be saved the first time a thumbnail is requested and used for future display of the history record. The same cached JPG will be used for faster display in the Left and Right Strips (see above).
- (2009/12/17): Fixed display problems of thumbnails with white pixels which appeared transparent by providing a correct custom mask with no transparency.
- (2009/12/18): Created a new icon set that is better visible in both light and dark UI color schemes.
- (2010/02/09): Implemented a Krakatoa menu under the 3ds Max Main Menu with all important features normally accessible through the Krakatoa Toolbar icons.
- When 3ds Max is launched for the first time after Krakatoa installation, the Krakatoa menu will be added automatically to the Main Menu.
- In the Preferences rollout of Krakatoa, a new option >Show Krakatoa Menu Item in Main Menu will be checked by default.
- Unchecking this new preference option will instantly remove the Krakatoa menu.
- Checking the preference option will add the Krakatoa menu to the end of the Main Menu.
- Note that the actual location of the menu might might change because the number of menu items at startup time might be different due to plugin and scripts loading order.
- (2010/02/09): Added a new "F!" MacroScript to bring the Krakatoa GUI floaters and dialogs to front.
- (2010/02/12): Split the Motion Blur and Depth Of Field group of controls into two groups to break the apparent but incorrect visual connection between buttons on the left and spinners on the right.
- (2010/02/12): Renamed the >Allocate... buttons in the Shaders rollout to >Per-particle... to better reflect what they do.
- (2010/03/): Reduced the number of rollouts shown in the Krakatoa GUI by moving some secondary ones to dedicated floaters or stand-alone dialogs:
- Scene Particles, Particle Loaders and Thinking Particles rollouts are now consolidated under Krakatoa Explorers accessible via a button in the Main Controls, MacroScript icon and Krakatoa Menu.
- Properties, Notes and About rollouts are now stand-alone floating dialogs accessible via buttons in the Main Controls, MacroScript icons and Krakatoa Menu.
- (2010/03/05): Accelerated the opening of the Krakatoa GUI (in addition to the benefits of the above rollouts reduction) by changing the opening logic - rollouts will be added as closed and opened if needed as opposed to adding as opened and closing if needed.
- (2010/03/15): Added buttons to the Main Controls rollout and bottom VFB Extended panel to open the Log Window.
- (2010/03/16): When an object is added to a Matte NSS group, it is also marked in its user properties. This lets Krakatoa restore NSS after a merge of objects that have this property set.
- (2010/03/17): Expanded the Preferences dialog to a Floater with 3 rollouts: System, UI and Color Preferences.
- (2010/03/17): Added options to open Common and Render Element tabs from the RENDER button RC menu in Main Controls rollout.
- (2010/03/25): Added new Camera and FumeFX Modifier MacroScripts and exposed them to the Krakatoa Menu.
- (2010/03/25): Added Preferences for behaviors when restoring paths on switching the renderer.
- (2010/03/25): Changed the Camera Modifier to default to DOF f-stop override and added arrow icons.
- (2010/03/29): Added Preferences for the behavior when creating a PRT Volume - source geometry can be left untouched, switched to bbox, bbox and non-renderable, just not-renderable, or hidden.
- (2010/04/16): Added Krakatoa Toolbar icons to clear the LCache and Both Caches.
- (2010/04/19): Reordered the Motion Blur and DOF controls in the Main Controls rollout to accommodate the new Use/Matte Segments controls, while the Deformation Motion Blur was renamed to >Sub-Sample Geometry.
- When Motion Blur is on but >Sub-Sample Geometry is off and >Use is off, the transformations of the Matte Objects will be evaluated once per Particle Pass. This mode is equivalent to the old >Deformation Motion Blur mode unchecked.
- When the >Use option is checked, the additional Matte Segments value will control the number of segments to be performed (default is 1, which produces one sample in the beginning and one at the end with the transformations interpolated between the two). This is a new faster mode that wasn't previously available.
- When the >Use option is checked and the >Sub-Sample Geometry is checked, the geometry (incl. deformations from modifiers etc.) will be sampled according to the Matte Segments value - in the default case of 1 segment just twice at the beginning and the end of the segment. Higher values will add more samples and the vertex deformations will be interpolated between samples as long as the topology is consistent. This is a new faster mode that wasn't previously available.
- When the >Use option is not checked and the >Sub-Sample Geometry is checked, the geometry will be sampled once per particle pass, producing the highest quality matte objects sampling but at cost of speed. This is equivalent to the old >Deformation Motion Blur mode.
- (2010/04/20): The Motion Blur and DOF controls will be grayed out unless the >Enable Motion Blur / >Enable Depth Of Field options are checked - this makes the UI appear less crowded in its default state.
- (2010/04/30): Added preset buttons to the Render Limit, Viewport Limit and View % Of Render spinners in the PRT Loaders rollout of the Krakatoa Explorers floater.
- (2010/05/03): Added a Threads record to the History file to display the number of threads that were used when sorting/rendering.
- (2010/05/03): Added a speed factor entry to the Time display of History records - in the past the difference in seconds was shown, now the speed up/slow down factor will also be shown. E.g. if one frame took 100 seconds and another one 50, the factors "2.0x" and "0.5x" will be shown next to the time values because the first one was two times slower than the second, and the second was half of the first.
- (2010/05/03): Switching to and from Krakatoa using the MacroScripts could cause Gamma/LUT dialog popups in 3ds Max 2010 because Render Presets are a form of a MAX file. This has been fixed by toggling Quiet Mode on and off and storing all Gamma/LUT settings before loading the preset and restoring them after the preset has been loaded, thus preserving them.
- (2010/05/06): Fixed a bug in Matte Objects Selected Count display which was always displaying the Total Count and was not updating on list selection change.
- (2010/05/21): Added Frame to the Scene Info section of Render History records. Double-clicking the entry will set the Time Slider to that frame.
- (2010/05/25): Added Particle Cache Count and Memory data to Scene Info of Render History records.
- (2010/06/10): Updated the F! (Focus) MacroScript to restore minimized floaters and dialogs in addition to bringing them into focus.
- (2010/07/15): Added a color indicator and a button to the Matte Objects rollout to display validity info about the currently specified Matte Objects.
- (2010/07/20): Changed the "Bytes/Particle" label to a button that can be used to force an update of the channels display, added more channel names to the list to support the new Render Elements that can request channels to be cached at render time.
- (2010/08/09): Added "Test Renderable State" mode to all PRT object Explorers which displays OK or a reason why a PRT Loader, Volume or FumeFX object wouldn't render.
- (2010/08/11): When Krakatoa is assigned as a new renderer directly via the Render Scene Dialog's controls, the Krakatoa GUI will now open automatically.
- (2010/08/13): When "Save Compressed" is checked in the Customize>Preferences>Files dialog in 3ds Max 2010 and higher 64 bit, Render Presets could save incorrectly (Autodesk bug). In these cases, the Krakatoa MacroScripts will switch to using a memory slot for storing the last renderer settings. Note that this does NOT store Render Elements though!
- (2010/08/18): Added support for all Render Elements when switching between renderers using the Memory Storage system due to "Save Compressed" being on. With this, the only limitation remains the lack of persistence between sessions.
- (2010/08/19): The Krakatoa Log Window will now remain on top of 3ds Max. The Auto-Open Log Window option will now only open on Warnings and Errors.
Beta 10 (RC1)
- (2010/08/25): A separator was added between Copy and Clear in the Log Window Edit menu to avoid picking the wrong one.
- (2010/08/26): The FumeFX source button was moved down to the 3rd row of the source options and renamed to PRT FumeFX, while Geometry Vertices is now on the second row. Same in VFB Extensions.
Beta 11 (RC2)
- (2010/08/30): The Secondary Floater's height will be linked to the Primary Floater's height when the Lock option is enabled.
- (2010/08/30): The KCM icon/menu MacroScript now supports PRT Source objects.
- (2010/08/30): Added option to partition PRT Volumes to the Partitioning rollout.
- (2010/08/31): The icons of all PRT Objects were replaced with ones containing the type of the object, and the MacroScripts for PRT Volume and PRT FumeFX will now adjust the size of the icon to the size of the source object.
Service Pack 1
- (2010/09/02): Fixed the MAXScript call for saving all rollouts to presets.
- (2010/09/02): Fixed a crash when trying to load a Save Channels Preset.
- (2010/09/02): Added support for saving and loading the Channels To Save list.
- (2010/09/02): Added the keyboard shortcut names to the right-click menu of the Float/Dock icons.
- (2010/09/02): Added all rollouts to the right-click menu of the Float/Dock icons with a check mark for visibility. Selecting will toggle visibility, holding SHIFT will navigate to the rollout.
- (2010/09/03): Changed the navigation buttons throughout the UI to unhide hidden rollouts before navigating to them.
- (2010/09/03): Added right-click handling to all "Back To Main Controls..." buttons in addition to the left-clicking.
- (2010/09/07): Reworked all MacroScripts to disable themselves and avoid any crashes if the Krakatoa path is removed from the plugin.ini.
- (2010/09/08): Optimized the "Load From History" dialog to use the History Cache instead of scanning the files from disk. With 8281 History files on disk, the old code was taking 47 seconds to update the first time the dialog was opened, and 10 seconds in consecutive attempts. With the new code, the time to open the dialog went down to 0.078 seconds!
- (2010/09/08): The Rollout Preset files were not restoring the visibility of the "Shader Parameters" rollout correctly - even if saved as hidden, it would be displayed because the update of "Main Controls" rollout's Shading Mode list was forcing it to appear. This has been fixed by processing the "Main Controls" before "Shader Parameters".
- Render Elements cannot be generated in Iterative mode in 3ds Max 2009 and higher because the Krakatoa Iterative Mode also enables the 3ds Max Iterative Mode which in turn disables the rendering of Render Elements. A possible manual workaround is to enable Krakatoa Iterative Mode and then disable 3ds Max Iterative Mode using the Render icon fly-out in the Main Toolbar. This will remain a known limitation and cannot be fixed.