Custom renderer lets you create your own shader that uses RayTK operators from your code!
Lots of new features and improvements to existing operators.
New addons framework for extra packages of functionality that are released separately from the main toolkit.
For now these will be available through Patreon, though there may be other options in the future.
The first of these are raytkVolumes and raytkAbstractions
The raytkVolumes addon lets you flow between RayTK and 3D textures (like with Josef Pelz’s T3D) and supports volumetric raymarching!
The raytkAbstractions addon provides a bunch of new operators that make common workflows easier and more user-friendly.
Details
Improvements / additions
New OPs
customRender - create your own renderer with a custom shader using RayTK operators as functions (#1220)
(raytkAbstractions) enhancedWaveField - adds features to the waveField operator to make it easier to use, including animation, more wave types, and value scaling.
(raytkAbstractions) helixWarp - applies offsets to warp space in a helix pattern
(raytkAbstractions) spin - rotate with built-in animation
(raytkAbstractions) twistedRingsSdf - similar to mobiusRingSdf but with multiple interwoven rings
(raytkVolumes) assignDensity - assign density to a volume for use in 3D textures and volumetric rendering (#1230, #637)
(raytkVolumes) texture3dRender - renderer that produces 3D textures by sampling SDFs or fields (#1237)
(raytkVolumes) fieldVolume - constructs a volume using a field to provide the density
(raytkVolumes) sdfVolume - constructs a volume with the filled region defined by an SDF
(raytkVolumes) texture3dVolume - constructs a volume from a 3D texture
(raytkVolumes) volumetricRaymarchRender3D - renderer that uses volumes instead of SDFs and supports cloud-like renders (#1230)
New OP features
chainSdf - axis setting
chopField, chopFn - CHOP inputs as an alternative to using parameters
helixSdf - offset parameter
magnet - input fields for amount, radius, fade
noiseField - gabor noise type
pointMapRender / render2D - Use surface color when no material is assigned to an SDF
pointMapRender - density output (requires raytkVolumes)
polarCoordField - coordinate input so it can be used as a converter for fields
renderSelect - show buffer names in opImage (#753)
shadingProperty - show property name in opImage (#753)
textSdf2d - option to pass text as a parameter, so it doesn’t change the code
texture1dField, texture3dField, textureField, dataTextureField - TOP inputs as an alternative to using parameters
torusGridSdf - option to only have rows or columns (#1231)
Fix broken previews in inspector related to missing output buffer selector
Fix missing palette thumbnails (#1217)
Prevent negative light levels which cause problems with multiple lights (#1213)
Hide irrelevant editor actions on renderers (#1201)
Changes (potentially breaking)
helixSdf - remove alternate coordinate type support for field inputs
raymarchRender3D - make limit box disabled by default
Restructured how multiple lights are handled. Materials are now responsible for looping through the lights and combining the results, rather than the renderer doing it. This allows modularMat to correctly handle shading elements that aren’t based on lighting. There may be some differences in how material shading behaves, but hopefully they should be fairly minor. (#1213)
radialClone - variable for current rotation amount (#1176)
rangeTransform - uniform scale (#1206)
sphereGridSdf - axis parameter (#1178)
terrainNoiseField - FBM noise, useful for surface offsetting (#1183)
XOR combine mode for all OPs that support SDF combination
Editor tools (#1201)
New action to merge float fields into a vector field
New action to add functionGraphRender
New actions for locking/unlocking switcher-based menu parameters
Snippets
New translate snippet
Misc improvements
In documentation, show source parameters for parameter-based inputs
Fix ranges for parameters in pointLight
Clarify confusing input label in worldPosMap (#1207)
Fixes
Fix incorrect pixel format in renderers related to shaderExecutor
Fix incorrect input validation in moduloPolar
Fix broken limit box handling in raymarchRender3d (#1202)
Fix broken primary value mode in exposeValue (#1205)
Fix runtime bypass in combineFields when in optimized mode
Fix duplicate parameter errors in rectangleSdf, polarCoordField
Fix UV output in render2D
Fix broken parameter processing when using separate uniforms mode
Fix shadow direction handling in directionalLight (#1210)
Fix 3D texture output in pointMapRender
Changes (potentially breaking)
Remove deprecated fieldMat
Remove alpha aexionSdf
Deprecate addFields
Move lots of ROPs from beta to default status (#1200)
Reduce default speed for speedGenerator
Make max dist a runtime parameter in raymarchRender3d (#1202)
Remove support for inlining parameter aliases in generated shaders
Infrastructure / internals
Migrate portions of opDefinition into an extension and refactor infrastructure to use it
Move param definitions, op elements into RopState
Consolidate and strip down parts of opDefinition, inputHandler, multiInputHandler, etc. to reduce per-ROP overhead
Support marking inputs as prohibited based on current ROP settings
Migrate build process to use TDAsyncIO
Remove support for combined snippets tox builds
Standardize access to output buffers
v0.39
Highlights
This release is primarily infrastructure and internal improvements, preparing for upcoming features.
Details
Improvements / additions
New OPs
cameraTransform - transform a camera’s position and orientation
New OP features
curlNoiseField - simplified float version (#1184)
dogBoneSdf2d - option to specify endpoints and have different end radii
skyLightContrib - added rotation parameters, field inputs for color, rotation, direction
Editor tools
Action to add a modularMat
Fixes
Fix output channels for stepMap (#1164)
Changes (potentially breaking)
Remove deprecated blend operator (replaced by switch)
Remove deprecated sceneState component
Selectively detach depth input in raymarchRender3D
Infrastructure / internals
Include supported variables / variable sources in generated documentation
Include parameter handling modes in generated documentation
Shader execution encapsulation, related to engine support (#1158)
Consolidate multi-input handling
New logo and branding
v0.38
Highlights
New snippet format - separate tox files in a zip instead of one massive tox file with all of them. These will load much faster than the old format.
New 2D text SDF!
Reduced build tox file size.
Details
Improvements / additions
New OPs
chamferRectangleSdf2d - rectangle with chamfered corners
sphereGridSdf - latitude/longitude bars around a sphere
textSdf2d - basic 2d text SDF
New OP features
bandField - center, width, blending field inputs
bend - option to only bend one side (#1129)
instance - added scale CHOP support (#1151)
knife - support using both parameter and field input for offset
logPolarRepeat - rho / theta field inputs
rescaleFloatField - support applying to vector fields, where it does the same thing to all vector parts
stepField - blending field input
textureField - texel coordinate mode
Editor tools
New action to map a float field to a color range
New actions to create waveFields
New action to assign color to an SDF
New snippet structure - separate tox files in a zip instead of one massive tox file with all of them (#132, #1082)
Fixes
Fix error in Customize Shader Config action (#1147)
Fix error in triangleSdf2d when using read-only parameters (#1148)
Fix removal of annotations during the build process - reduces build size
Fix license check when choosing default resolution for new renderers (#1149)
Fix missing buffer selector that was breaking preview in the inspector (#1153)
Fix broken plane parameter in ringsSdf (#1154)
Changes (potentially breaking)
Deprecate the sceneState component
variableReference can no longer be manually created. Use the editor tools menu instead.
Infrastructure / internals
Removed unused dispatch table system
Initial infrastructure for MATs
Support for passing separate uniform arrays per ROP for parameters (#907)
Update to TD 2023.11340
Remove annotations in infrastructure components - improves stability in development tools
Avoid using custom instances of popMenu when possible for stability
Support for hidden ROPs, which can be created but are not shown in the palette
v0.37
Highlights
Compatibility with TD 2023 experimental builds
New applyTransform op makes it easier to transform field values, uv coordinates, etc
Stability improvements and bug fixes
Details
Improvements / additions
New OPs
applyTransform - to apply a transform filter to field values, uv coordinates, etc (#1019)
modifyDistance - use a field to modify the distance values from an SDF (#1139)
rectangleRepeat - repeat space in tiles arranged on the sides of a rectangle (#1126)
New OP features
almostIdentityFn - threshold, base value field inputs (#1124)
bandField - reverse parameter
cubicPulseFn - phase, width field inputs (#1124)
easeFn - exponent field input (#1124)
extrude - 2D height / offset field inputs (#1134)
flipFn - flip 0..1 modes as well as positive/negative (#1127)
gainFn = exponent field input (#1124)
parabolaFn - exponent field input (#1124)
positionField - pixel uv and pixel coordinate modes
prismSdf - rounding (#1130)
Editor tools
Fixes
Fix widget compatibility issues with TD 2023 experimental builds
Fix angle handling in magnet (#1138)
Fix return type limiting in circularRepeat
Changes (potentially breaking)
Infrastructure / internals
Stop syncing files within clones in devel source
Use the new input list parameter instead of dynamically wiring up texture inputs in renderers
Move op-specific code out of shared libraries to improve compile speeds
v0.36
Highlights
New SDFs: isoscelesTriangleSdf2d, vesicaSegmentSdf
Improvements and customization in modulo and cloning operators
New editor actions
Details
Improvements / additions
New OPs
isoscelesTriangleSdf2d - specialized version of triangleSdf2d with more field inputs
texture1dField - specialized TOP input for things like color ramps (#1112)
variableList - define a sequence of variables for use in upstream operators, similar to provideVariable but designed for more complex scenarios (#1116)
vesicaSegmentSdf, vesicaSegmentSdf2d - similar to line segments but with tapering (#1104)
New OP features
assignAttribute - previous value variable to allow modifying existing attributes (#1046)
assignAttribute/getAttribute - got rid of the defineAttribute operator to treat attributes more like variables (#1046)
boxSdf - automatically produce an “edge distance” attribute, as a test case for this type of feature (#1113)
fisheyeCamera - toggle for look at position
gridClone/linearClone/radialClone - blend radius field inputs (#1119)
knife - smoothing like in slice (#1108)
limitField - smooth clamping
modularMat - expose sdf surface as a variable
modulo1D, modulo2D, modulo3D - shifted cell index variables that counteract the shift parameter
multiLight - automatically disable lights when level is zero
pausingWaveFn - field inputs for low and high width
petalSdf - field inputs for width and wrap
roundedRectangleSdf2d - option to scale rounding based on size (#1107)
Editor tools
Indent names for param parts in expose param menu
New action to create a worldPosMap
New action to simplify rotate to axisRotate (when possible)
New action to set up positionField input for custom transform on iteratedTransform
New action to create attribute references from ops that produce them (#1046)
Fixes
goochShadingContrib - fix shader error (#1105)
lfoGenerator - fix channel names not updating when changed
moduloPolar - fix angle conversion when using optimized mode (#1101)
boxSdf - remove the “box type” option since the “cheap” mode wasn’t useful or beneficial
Infrastructure / internals
Change to implicit definition of attributes, with declarations in variables tables and references in the references tables. Effectively this treats attributes like a type of variable but without explicit references to a source operator.
v0.35
Highlights
Palette usability improvements including placing new operators with the mouse!
Holographic materials!
Cool S SDF!!!
Details
Improvements / additions
New OPs
archSdf2d
coolSSdf2d!
hologramContrib - for depth-based hologram materials (#463)
knitPattern
New OP features
axisLight/pointLight - position field input
archSdf - field inputs
arrange/combine/etc - improve handling of offsets for stair/column combine modes when offset is not driven by a field (#692)
adjustColor - support use on Sdf surface color
colorRampField - endpoint mode and easing function (#1094)
crossSdf - limited length option (#1091)
helixSdf - spread input (#1088)
polygonSdf2d - option arbitrary number of sides (#1083)
rampField - easing functions
spiralZoom - variables
stepField - easing functions
vectorToFloat - sum modes
Editor tools
simplify rescaleField when possible (#1086)
swap chain order
indent parameter part names in animate menus
Use placeOPs in the palette! (#22, #23)
Documentation for various ops
Fixes
Fix input variable settings and reorder inputs to match availability in many operators
Fix rectangleSdf handling of float input for scale (#1085)
Fix accidental required input in rampField
Fix errors for optimization on parameters on many operators (#993)
Changes (potentially breaking)
Infrastructure / internals
Infrastructure to support arbitrary suface attributes (#1046)
v0.34
Highlights
Cloning improvements including gridClone and enhancements to radialClone
Helpers for simplified access to data from renderers including nearHitMap and stepMap
Bug fixes and lots of internal cleanup
Fixed major crash related to textureField
Details
Improvements / additions
New OPs
gridClone - mergeable cloning on a grid
nearHitMap - convenience accessor for near hit render output (#289)
rescaleFloatField - simplified version of rescaleField (#1071)
stepMap - helper for accessing step count output buffer (#289)
truncatedPyramidSdf
triPlanarCombine - combine fields based on surface normals, similar to triPlanarTextureField (#1079)
New OP features
axisRotate - default to Z axis
crossSection - offset field input
fieldRender - pixel format parameter
goochShadingContrib - color field inputs
nearestRingPointField - index variables and rotate parameter
pointMapRender - 3d texture output (#1072)
radialClone - radial and angle offset field inputs
rampField - added endpoint mode as an alternative to axis (#752)
rimContrib - angle variable
ringLight - color field input
transform - field inputs (#720)
Snippets
rimContrib
Fixes
Fix input variable settings and reorder inputs to match availability in many operators
Fix default settings for 2D render in inspector (#1073)
Fix scaling for angle variable in nearestRingPointField (#1074)
Fix crashes caused by textureField issue with nvidia error for branched calls to texture() (#1034)
Fix input label in waveField
Changes (potentially breaking)
Some inputs have been reordered, so updating OPs may cause inputs to become disconnected
Infrastructure / internals
Documentation for internals (ROP structure, shaderBuilder)
Remove unused global prefix code feature in shaderBuilder
v0.33
Highlights
Palette improvements: reorganized palette into more descriptive categories, ui styling, show which operators are new/updated
New light operators
Field instancing
Details
Improvements / additions
New OPs
ambientLight
instanceField (#774)
limitArea (#1056)
moduloLine (#1054)
nearestRingPointField (#1055)
radialSlice
rampField
ringLight (#1064)
subsurfaceContrib (#945)
New OP features
axisLight / directionalLight / pointLight - light direction variable
blackbodyColorField - unit option
extend - axis selection
hashField - clarified function labels (#1057)
onion - option to limit to inside/outside/both (#1051)
provideVariable - support for capturing primary input
modularMat - fix shadows not being activated when shading elements are not directly connected to modularMat (#982)
pointDistanceField - fix table buildExclude bug
Changes (potentially breaking)
adjustColor - separated out the hue/saturation and brightness/contrast field inputs
remove editor tools related to parameter locking
Infrastructure / internals
Operator tags which allow operators to indicate features that they depend on (e.g. lighting) (#982, #971)
v0.28
Highlights
Core improvements - Vulkan specialization constants improve the performance of changes to menu parameters. Not all operators have been updated but many have.
New operators including 4D rotation, hilbert curves, circular fill repetition, and more!
New field inputs for lots of operators!
Details
Improvements / additions
New OPs
circleWaveSdf2d
circularRepeat (#962)
hilbertCurveTransform (#963)
rotate4D (#966)
New OP features
bandField - faster axis/blending/reverse changes, allow selecting axis for coordinate input field
gridSdf - thickness and spacing field inputs (#693)
petalSdf - thickness and radius field input (#693)
polyhedronSdf - radius, face radius, segment radius, segment size, vertex radius, vertex size, uvw field inputs (#693)
prismSdf - variable support (#950), arbitrary side count (#951), UV coordinates (#952)
raymarchRender3D - faster changes for max dist, surface dist, step limit, near hit, pass counts (#970)
solidAngleSdf - radius, angle field inputs (#693)
stepField - faster axis/blending/reverse changes, allow selecting axis for coordinate input field
sweep - path Sdf / position variables
uvField - auto coord mode
waveField - faster axis changes, allow selecting axis for coordinate input field
Snippets (#132)
assignColor
assignUV
moduloSpherical
Editor actions (#772)
show fields in variable reference menu
Fixes
directionalLight shadow distance bug (#960)
impulseFn error (#959)
lfoGenerator channel count bug (#955)
pointMapRender coord type error for SDFs (#956)
pointMapRender macro error
pyramidSdf fix broken height field
variableReferences broken during snippet build (#954)
variableReference default value error
variable typedef macro error (#957)
Changes (potentially breaking)
mobiusRingSdf - remove support for 1D coords in thickness field (same thing can be done with variables), and stop combining the thickness parameter with the field (it now only uses field or parameter).
moduloSpherical - swap the x and y axes for the input, so it makes more sense (Y = outward)
Infrastructure / internals
Remove code filtering pragmas since they weren’t helping (#710)
Remove incomplete support for using separate uniforms for parameters (#863)
Vulkan specialization constants! (#970)
Type-prefixed symbols to share things like menu option names across instances within a scene
Use opState approach for variables (#939)
v0.27
Highlights
Internal overhaul that should improve performance when creating / editing / deleting operators
Lots of new OP snippets
Optimized mode for some operators (especially composeSdf)
Updated to TD 2022.25370 Vulkan build. The toolkit will no longer be compatible with pre-Vulkan TD builds.
Remove deprecated light and camera parameters in raymarchRender3d. The Light parameter is no longer supported. To get similar functionality use a linkedLight.
Remove deprecated ops
goochMat - replaced by goochShadingContrib / modularMat
smoothUnion - replaced by combine
Fixes
Fix incorrect selection of default param page after palette creation and in toolkit editor (#109)
Fix merge type bug in flip (#892)
Fix param enable states in generalizedPolyhedronSdf (#896)
Fix handling of float fields in assignColor (#894)
Fix defaultExpr being set to invalid expression when geodesicSdf is created (#895)
Fix normals output in pointMapRender (#904)
Fix error tolerance in variableReference menu sources
Fix render2d erroring when no input is attached (#911)
Fix default alignment for render2d (#911)
Fix coord type menu labels in noiseFIeld (#913)
Fix error with camera / light return types in switch
Fix coord mode handling in chopField (#914)
Fix outdated TD palette components (#912)
Infrastructure / internals
Add development-only network boxes in infra components
Replace all remaining uses of old param list tables, and param opDef settings
Incomplete changes to how parameters are collected into vectors, current inactive (#907)
Cleaning up lots of tests
Reduce use of opFind DATs in ROPs and development tools
v0.24
Highlights
Parameter optimization. For many parameters, if they’re marked as read-only, RayTK will bake them into the shader.
This significantly improves performance, but means that if they change the shader has to recompile.
The new sceneState component helps with switching scenes between a “locked” optimized state and an “unlocked” editing state.
Changes to variable type handling may cause compatibility issues for variableReference operators. To fix this, re-create them, which will assign the correct types.
The scale operator no longer rescales float values, only coordinates (#840)
Removed deprecated operators
ggxMat, orenNayarMat, sdfToFloat (replaced with sdfField)
Mark operators as deprecated
normalField
phongMat
uvField
Fixes
matCapContrib should have been included in the previous release but wasn’t (#798)
scale operator should not rescale float values (#840)
Infrastructure / internals
v0.22
Highlights
Faster enable/disable for lots of filters
New 2D and 3D SDFs
Details
Improvements / additions
New ops
arbitraryPolygonSdf2d (#816)
cutDiscSdf2d / cutSphereSdf (#817)
matCapContrib (#798)
moonSdf2d
stairSdf2d (#815)
New field inputs (#812)
bend - shift
curlNoiseField - coordinates (#829)
elongate/extend - size, center
fold - distance
mobiusTransform - center, point
reflect - shift, offset
waveletNoiseField (#829)
New parameters
transformSequence - reverse order (#819)
Runtime bypass - faster enable/disable for filters (#755)
Instead of automatically using axis-based rotation when the input is 2d, instead use the mode parameter to choose between types (like for 3d). For 3d, only the Z axis rotation is used.
Fix coord type resolution in coordTo2D and coordTo3D (#717)
Fix 1D coord support in modulo1D (#823)
Fix compile error in simpleIntersect
Fix for version error in raymarchPreviewPanel (#827, #436)
Infrastructure / internals
Part way through migration to yaml-based ROP definitions (#76)
v0.21
Highlights
Editor actions are contextual actions available in a menu using the new ALT+SHIFT+R shortcut. They include things like:
Add common material elements when a modularMat is selected.
Add a lookAtCamera or pointLight when a raymarchRender3d is selected.
Combine selected SDFs or fields.
Navigating to the source of a variableReference.
Converting a vector field to a float field, and vice versa.
Exposing and binding parameters on the parent COMP.
Adding animation to parameters.
Transform sequences are a new way to apply groups of transforms to spatial coordinates or uv coordinates, including support for repeating the transforms in a loop! It’s like a much more flexible version of iteratedTransform.
Standardized SDF combine options across various ROPs that combine SDFs. This means that the full features like stair union with offset control are available in ROPs like flip or radialClone.
Standardized wave function options across various ROPs. This means that waveField, waveFunction, lfoField, etc all have the same wave shape options.
Control utility components are a set of general-purpose tools that can be used with RayTK or non-RayTK operators. Most of them have associated editor actions, including:
lfoGenerator which can be applied to any numeric parameter using the “Animate with LFO” action.
speedGenerator which can be applied to any numeric parmaeter using the “Animate with Speed” action.
Details
Improvements / additions
Variables (#574)
arcSdf2d
discSdf
mandelbulbSdf
provideVariable - support Sdf values
New ops
crossSection (#214, #759)
lfoGenerator (#788)
speedGenerator (#788)
transformSequence (#791)
New field inputs (#588, #693, #806)
arcSdf2d - orientation, aperture
cellTileField - coords
diffuseContrib - roughness, albedo
horseshoeSdf2d - angle, radius, length
linkSdf - length, radius, thickness
mandelbulbSdf - shift
mirrorAxes - flip sides (#641, #668)
onion - iterations, thickness
provideVariable - value
specularContrib - shininess, roughness, fresnel
tetrahedronSdf - scale
trapezoidSdf2d - height, width, points
New parameters
mirrorAxes side flipping (#641, #668)
torusSdf capped mode - note that UVs and variable scaling may be incorrect for capped mode (#221)
Standardized SDF combining across the toolkit, with new modes and parameters (#784)
arrange
combine
flip - compatiblity warning: this changes the menu options for the Merge Type parameter, so updates may reset it
instance
polyhedronSdf
radialClone - compatiblity warning: Merge Type parameter opions changed
Standardized wave functions across the toolkit, with new shapes and parameters (#787)
lfoField
waveField
waveFn
waveVectorField
waveWarp
additive square waves
wave shape function inputs
Editor actions (#772)
Append null (works for ROPs or regular CHOP/DAT/etc)
Inspect
Update OPs
Convert SDF to float
Convert vector to float for various parts
Rescale field
Rescale field with conversion to vector
Add diffuseContrib/specularContrib for modularMat
Add lookAtCamera/pointLight for raymarchRender3d
Extrude/Revolve 2D SDF
Colorize 2D SDF
Combine 2 SDFs
Combine 2 fields
Reference variable
Animate param with speedGenerator/lfoGenerator
Expose parameter on parent COMP
Customize shader config
Add render2D for 2D SDFs
Go to
Variable source
Variable references
Control utility components (#788)
lfoGenerator
paramFilter
speedGenerator
Custom and debug output buffers in render2d
Transform sequences / loops (#791)
bend
fold
kink
mirrorAxes
mirrorOctant
mirrorQuadrant
rangeTransform
reflect
rotate
scale
transform
twist
waveWarp
Vector output for lfoField when wave function input returns a vector
Fix bug with filter text and shortcuts in palette (#795)
Fix 2d support in mirrorAxes (#799)
Fix broken field input in scale (#805)
Infrastructure / internals
Move most columns out of the definition tables passed between ROPs (#758)
Help support for variables (#763)
v0.20
Highlights
Thumbnail images in the palette!
The palette now has a toggle to enable showing thumbnail images next to each type of operator. These make it easier to find the operators you’re looking for, and see what’s available. Not all operators have thumnbnails (e.g. it’s hard to represent things like floatToVector in an image).
Shortcuts in the palette.
Common operators now have shortcuts that can be typed into the palette for quick access.
Shortcuts are shown in the palette next to operator names.
Variables are a whole new way to control and vary the behavior of operators.
These will eventually replace Iteration.
They use more explicit connections and support multiple levels of values. For example, you can repeat a shape radially using modulorPolar, then repeat that in a grid using modulo2d, and the input shapes can be based on both the grid cell and the radial slice.
Operators that support them have a “Variables” parameter page with buttons to create references to them which can be used by upstream operators.
Details
Improvements / additions
Variables (#574, #712)
bend
bezierSdf
bezierSdf2d
capsuleSdf
cylinderSdf
extrude
flip
flowerSdf2d
helixSdf
instance
iteratedTransform
logPolarRepeat
mirrorOctant
mirrorQuadrant
mobiusSdf
modularMat
modulo1d
modulo2d
modulo3d
moduloDistance
moduloPolar
pieSdf2d
providePosition
provideVariable
quadTreeRepeat
radialClone
reflect
revolve
starSdf2d
torusSdf
variableReference
Helper buttons to create references
Validation for references
New ops
exposeValue (#499)
flowerSdf2d (#748)
mirrorAxes (#641)
moduloSpherical
provideVariable
variableReference
wedgeSdf2d
New field inputs (#588)
bezierSdf and bezierSdf2d point field inputs (#726)
blend seprate source field parameter (#413)
blobbyCrossSdf2d
crossSdf2d
dogBoneSdf2d
flowerSdf2d
parabolaSdf2d
parallelogramSdf2d
pieSdf2d
planeSdf2d
quadSdf2d
spikeSdf2d
starSdf2d
switch (#413)
vesicaSdf2d
New parameters
cellTileField coord types (#766)
headSdf blinking (#116)
spikeSdf2d direction and center
reflect blending (#53)
Picker improvements
Thumbnail images (#62, #751)
Help text improvements
Help tooltips
Improve type handling in compositeField (#743)
Add help to some operators
Show thumbnail images in the doc site
Surface normal output in render2D (#560)
Shortcut parameters to create renderSelects similar to the variable shortcuts
Shortcuts for common operators in the palette (#764)
Changes (potentially breaking)
Move spikeSdf2d to the correct category. This will break Update OP for those operators.
Reflect handling of Offset changed, resulting in slightly reduced offsets.
Remove 1D coord support in cylinderSdf, since variables do the same thing (#521, #574)
renderSelect menu handling has changed a bit, so updates may break operators. Use the “Select…” shortcuts on the renderer to create replacements. (#598)
Fixes
Fix broken help in palette (#731)
Fix broken color output in pointMapRender (#757)
Fix height field input in cylinderSdf (#767)
Fix compile error in adjustColor (#775)
Fix parameter ordering in fieldRender
Fix compile error in quantizeValue
Fix compile error in waveletNoiseField
Don’t show an error on combine when only first input is connected (#777)
Detach inspector when target op is destroyed or window closes.
Fix issues with output buffer menu in renderSelect (#598)
Infrastructure / internals
Support for variables and references (#574, #712)
Refactoring and cleanup of token replacement in opDefinition
Support for alternate styling for ops (used for variableReference) (#753)
Clean up prototypes
Thumbnail images (#62, #751)
Generate thumbnails from tests
Log files for builds with verbosity settings (#732)
Consolidate input name columns in op definition tables (#299)
Standardize use of type aliases for primary function declarations
v0.19
Highlights
New 3D bezierSdf to create arbitrary curved paths
New headSdf based on tdhooper’s model
New polyhedronSdf with lots of controls and support for custom SDFs on vertices, similar to geodesicSdf
Lots of new field inputs to customize various filters and SDFs
Various optimizations
Details
Improvements / additions
New ops
3D bezierSdf (#726)
backgroundFieldContrib (#733)
constantSwitchField
headSdf based on tdhooper’s model (#116)
logPolarRepeat (#738)
polarCoordField (#699)
polyhedronSdf (#715)
quadTreeRepeat (#725)
sdfNormalField
spikeSdf2d
New field inputs
Face offset input field for geodesicSdf (#693)
Smooth radius and size in crossSdf (#693)
Scale in ellipsoidSdf (#693)
Offset in planeSdf (#693)
Radius and thickness in discSdf (#693)
Shift and offset in modulo1D (#722)
Blend radius in instance (#721)
New parameters
Reverse parameter in helixSdf (#704)
Expand to vec4 / collapse to float in rescaleField
Enable toggle in bandField (#724)
Logarithmic conversions in cartesianToPolar (#738)
Optimization
Skip material processing, property blending when it isn’t needed (e.g. in shadow checks and calculating normals)
Fixes
Fix missing translate parameters in arrange (#709)
Fix hidden built-in parameters in panel comps (#708)
Infrastructure / internals
Code filtering, which reduces the amount of shader code sent to the GPU, which should help with recompile times. Currently disabled by default. (#710)
Improved test handling in toolkit editor
Simplification and optimization in shaderBuilder
Clean up buffer/texture table format
Reduce build / tox size
Remove unnecessary copies of shared python
Python code cleanup
Remove unnecessary data and copies of operator tables
Clean out internal metadata during build
Strip out full help DATs during build
Support for variables / references, as a more flexible alternative to iteration values (#574, #712)
v0.18
Highlights
Easier workflows with CHOPs, including instance positioning, easier indexing in chopField, and CHOP input in constantField
Cel-shading for modular materials with toonShadingContrib
Easier coordinate mapping of pattern operators
New noise types in noiseField
New field inputs to customize SDFs and filters
Convenience operators for managing scene elements, like arrange, mergeToggle, and toggleSwitch
Details
Improvements / additions
New ops
arrange (#655)
axisLight (#663)
magnetField (#680)
mergeToggle (#666)
polarVectorField (#676)
toggleSwitch (#658)
toonShadingContrib, for cel-shading in modular materials (#465)
waveVectorField (#671)
New field inputs
Coordinate fields in all pattern ops (#254, #691)
Edge in stepField
Offset in combine (#684)
Radius and thickness in torusSdf (#693)
Radius in octahedronSdf and generalizedPolyhedronSdf (#693)
Size, shift, offset in modulo1D, modulo2D, modulo3D (#695)
New parameters
Flip option in planeSdf (#679)
Limiting options for modulo2D and modulo3D (#660)
Mirroring support in modulo3D
Normal calculation exclusion for restrictStage (#667)
Optional coord type in iterationField (#672)
Pivot in moduloPolar (#681)
Repeat option in bandField (#687)
Replace mode in modifyNormals (#673)
Ring mode in pieSdf2d, for pie chart-style shapes (#669)
Zoom and offset in render2d
Better index support in chopField (#613, #659)
New noise types in noiseField using the Wombat library
Added CHOP-based transforms in instance (#613)
Added CHOP input in constantField for a quick way to get up to 4 values into a field (#682)
Added new pattern variants to hexagonalTruchetPattern (#255)
Support for proper iteration for upstream fields in iteratedTransform (#705, #94)
Changes (potentially breaking)
Mark combineChamfer, combineColumns, combineStairs as deprecated since their features are all supported in the combine op.
Fixes
Fix swapped inputs in pbrMat
Fix underside of pyramidSdf (#677)
Fix bypass indicator in opImage (#700)
Fix type handling bugs in mergeFields
Infrastructure / internals
Replaced all inputHandlers with new implementation
Improvements to multiInputHandler
Improvements to aggregateCodeGenerator
Support for compute shaders
Added build / test support for experimental builds (#674)
Reduced lots of redundant copies of python modules, decreasing tox size (#701)
Remove deprecated type settings in opDefinition
Support for experimental builds (#674)
v0.17
Highlights
PBR Materials (#636)
Volumetric lighting (experimental) (#637, #11)
Simple raymarch preview panel (#543)
Compile speed optimizations
Details
Improvements / additions
Improved runtime menu switching (#571, #586)
assignUV
cartesianToPolar
cornerSdf2d
octahedronSdf
planeSdf2d
polarToCartesian
polygonSdf2d
prismSdf
sweep
triangleSdf2d
Auto-disable Inspect/Updateop parameter when unavailable (#630)
New fields/functions
colorSwitchField (#647)
pausingWaveFn
Specialized UV support in SDFs
sphereSdf (#526)
Consolidate edgeEngrave, edgeGroove, edgePipe into a single edgeCombine op (#635)
Faster switching for menu parameters with optional optimization for parameters marked as read-only.
New field inputs to control lots of operators.
Keyword searching in palette: palette searches now show ops matching keywords in addition to matching names / initials. Try searching for “ring”, and torusSdf will show up!
Updated to TD v2021.14360.
Breaking change: Fixed handling of the Period and Phase parameters in waveField. This may change the behavior and scaling of the field.
Breaking change: Added “Iteration Type” setting to moduloPolar, which replaces the previous “Iterate on Cells” toggle. Updating OPs will default to iteration being switched off, regardless of original toggle setting.
Details
Improvements / additions
Show bypass indicator in opImages (#599)
Added “Customize Shader Config” to renderers (#594)
Option to change the palette shortcut and manually trigger the palette (#552)
Improved runtime menu switching (#571, #586)
combine
combineChamfer
combineColumns
combineFields
combineStairs
compositeFields
coneSdf
diffuseContrib
specularContrib
waveField
waveFn
New filters / combines
addFields (#606)
adjustColor (#587)
kink (variation on bend)
fieldFunction
modifyNormals (#403, #620)
New SDFs
arrowSdf2d (#612)
quadSdf2d
New fields
domainColorField (#401)
Added field inputs to operators (#588)
capsuleSdf
circleSdf
chamferBoxSdf (#627)
moduloPolar (#624)
noiseField (#619)
polygonSdf2d
rhombusSdf2d
roundedRectangleSdf2d
starSdf2d
superQuadSdf2d
New parameters in operators
colorizeSdf2d phase (#608)
rescaleField multiplier and post-add
Automatic coord/context type settings for operators
timeField (#141)
Keyword support in palette and generated docs (#378)
New convenience operators, which simplify common operations
spin
waveWarp
Changes
Fixed handling of the Period and Phase parameters in waveField (#604).
New iteration type setting in moduloPolar replaces toggle (#622)
Update to TD v2021.14360
Fixes
Workaround for color banding issue in reflections (#579)
Fixed breakage and incorrect SDF output in fieldRender (#611)
Possible fix for feature support detection for AMD GPUs (#589, #34)
Pass surface attributes through from input SDF in geodesicSdf (#615)
Fixed 2D handling in flip (#609)
Fixed edge discontinuity with textureFields (#617)
Remove workaround for parameter page issue now that TD has fixed the bug (#487)
Fixed parameter defaults and state handling in scale (#623)
v0.15
Highlights
Materials in 2D rendering
2D SDFs can now be rendered using materials, instead of with conversions like colorizeSdf2d.
The sampledPointMat can be used with 2D shapes similar to how it works with pointMapRender.
Not all materials work for 2D shapes, and things like surface normals and lighting are not available.
Surface UVs
Surfaces can now have UV coordinates, which can be used by materials for things like texture lookups.
Some SDFs have a “UV Mode” option to generate shape-specific UVs, such as boxSdf and sphereSdf, as well as some 2D SDFs including rectangleSdf.
There’s a “UV” output from renderers that accesses the UV coordinates for each surface point in the rendered output. This can be used for things like applying textures using post-processing with TOPs.
UV coordinates can be assigned to any surface using assignUV, and modified using uvTransform.
UV coordinates can be accessed within materials using operators like uvField.
Surface colors
Surfaces can now have a “Color” attribute, which can be assigned using assignColor, either with a constant color or using a field.
Surface colors can be used by various types of materials.
Within modular materials (modularMat), the surfaceColorContrib operator provides access to the surface color values.
Background fields
The raymarchRender3d operator now has a “Background Field” parameter which can be assigned to certain types of fields.
The background field is used to calculate a color for rays that don’t hit any surface before they give up.
The atmosphereField is designed for use with the “Background Field” feature. It produces a simulation of a sky with a sun, including some advanced atmosphere-based coloration. It’s great for creating sunsets.
The texture3dField also supports being used as a background field. It can be used to apply environment lighting with cube-maps and other types of 3D textures.
The background color is used for reflection-based rays as well as primary rays, so the background colors will show up on reflective surfaces.
The rayField operator can be used within background fields to access the direction of the ray that hit the background, as well as in materials where it uses the ray that hit the surface.
Details
Improvements / additions
Material support in 2D rendering (#531)
Surface UVs (#526, #2, #345)
uvField
assignUV
UV support in:
boxFrameSdf
boxSdf
circleSdf
ellipseSdf2d
extrude
jointSdf2d
planeSdf
quadSdf
rectangleSdf
render2D
roundedRectangleSdf
sphereSdf
starSdf2d
torusSdf
UV output in raymarchRender3D and render2D (#345)
uvTransform
UV field input in triPlanarTextureField (#370)
CHOP-based buffers
New SDFs
chainSdf
ellipsoidSdf (#533)
segmentedLineSdf (#119)
trapezoidSdf2d
New fields
atmosphereField (#402)
rayField
stepField (#547)
Added offset parameter in sampledPointMat (#549)
Added field inputs
revolve (#556)
extrude (#567)
rectangleSdf (#588)
New filters
modifyNormals (#403)
mirrorQuadrant (#558)
Added normal smoothing in raymarchRender3d and pointMapRender (#559)
Expose iteration value in extrude and revolve (#556, #567)
Added assignable color attribute (#553)
Added background fields in raymarchRender3d (#580)
Added shadowContrib that can be used in modular materials to customize the coloration of shadows (#576)
Added troubleshooting guide (#336)
Changes
Fixes
Fixed “Create camera” bug in linkedCamera (#536)
Fixed context type handling
blend (#568)
many other operators (#564)
reorderField (#555)
rotate (#164)
Lower default surface distance in raymarchRender3d (#563)
Fixed axis display in inspector (#217)
Fixed reflection support in modular materials with reflectionContrib (#575)
Fixed some reflection banding issues (#579)
Fixed parmaeter handling and other issues in fieldExpr (#102)
Infrastructure / development
Standardize processing of output buffers (#489)
Added support for parameter-based inputs (#565)
v0.14
Highlights
Volumetric point map rendering
Reflection material and reflection support in modular materials! (#9, #481)
Lots of new SDFs
Details
Improvements / additions
Added invert option for slice (#461)
Added 2D SDFs:
parallelogramSdf2d
arcSdf2d
heartSdf2d
horseshoeSdf2d
bezierSdf2d (#472)
blobbyCrossSdf2d (#476)
planeSdf2d (#513)
ellipseSdf2d (#524)
jointSdf2d (#525)
quadSdf (#532)
Added 3D SDFs:
segmentedLineSdf (#119)
archSdf (#510)
Added hsvColorField (#464)
Add spotLight! (#47)
Add option to switch off color rendering in raymarchRender3d, which can improve performance when only using other types of output like depth (#477)
Added 1D support in coordTo2D (#475)
Added reflectionContrib (#9, #481)
Added field inputs in iteratedTransform (#480)
Added axis parameter in colorRampField
Added color field input in directionalLight
Added period and phase parameter in colorPaletteFn (#486)
Added object ID output in pointMapRender (#491)
Added material support in pointMapRender (#492)
Added bandField (#500)
Added unidirectional limits in modulo1D (#309)
Added restrictStage (#417, #503)
Added field inputs in cylinderSdf (#508)
Added invert in stepFn (#507)
Added axis limiting in pointDistanceField (#506)
Added sdfField for converting SDFs to fields (#516)
Added rainbowFn (#517)
Added offset parameter in combineColumns (#391)
Added shapedCombine (#444)
Added infinite height option in cylinderSdf (#520)
Changes
pointMapRender’s SDF output will no longer contain material identifiers. The RGB channels will all contain the distance, with A indicating whether the point existed in the input. (#541)
Fixes
Fix inspector support for inputs 5-8
Fix errors in blend (#469)
Fix issue with normal directions for reflectMat (#9, #481)
Fix parameter handling issues in customOp (#297)
Fix logic around enabling and disabling shadows
Fix bugs in 2D support in transform, iteratedTransform, and rangeTransform
Fix axis normalization in rotate
Fix coordinate handling in helixSdf
Fix translate in boxFrameSdf (#490)
Fix parameter enabling in bend (#493)
Fix 2D issues in magnet (#494)
Fix depth compositing issue with antialiasing (#502)
Fix attenuation issues in linkedLight (#504)
Fix axis bug in mobiusRingSdf (#514)
Infrastructure / development
Large-scale restructuring of how data types are handled throughout the toolkit. Operators can now support multiple variations of coordinate, context, and return types, which downstream operators can restrict and eventually resolve to single concrete types.
The main user-facing result is that fields don’t need to specify their context type since whatever they’re fed into can automatically switch it to the right type.
v0.13
Highlights
Whole new modular material system!
Create customized combinations of different parts of materials.
Lots more options for filters, texturing, and field-based variation.
Improvements to support for 2D SDFs and ways to use 2D SDFs in 3D scenes.
Lots more documentation.
NOTE: The way that shadows are handled has changed. Shadows are no longer specified at the material level.
Instead they are attached to the “Shadow” input on raymarchRender3d.
Materials now have a “Use shadow” setting to opt them in/out of shadows.
Details
Improvements / additions
Added remapCoords (#379)
Added 2 axis support for crossSdf (#324)
Added pivot support to rotate (#175) and rangeTransform (#389)
Added 2d spiral SDF
Added sweep operator (#382)
Added chamferBoxSdf (#383)
Added field inputs for boxSdf (#385), sphereSdf (#386), boxFrameSdf (#433)
Added sphericalMobiusTransform (#387)
Added easing function support for rangeTransform (#390)
Improve how validation errors are aggregated (#388)
Added iteration support for modulo3d (#317)
Added 2D support
pointMapRender (#166)
reflect (#439)
Added axis setting
pyramidSdf (#394)
positionField (#422)
spiralSdf (#451)
Added mergeFields operator (#313)
Added field inputs to control pointLight (#406)
New materials
Added orenNayarMat (#407)
Added goochMat (#409)
Added modular material system (#410)
Added specularContrib
Added diffuseContrib
Added skyLightContrib
Added goochShadingContrib (#409)
Added option to control use of light color in fieldMat
Added normalField (#293)
Added texture3DField (#430)
Added rotateNormals (#430, #410)
Added support for switching based on field input in blend (#413)
Added reshapeValues (#414)
Added compositeFields (#415)
Added extendFn (#419)
Added lineSegmentSdf2d (#424)
Added support for 8 inputs in switch, iterationSwitch, simpleIntersect (#101)
Added option to show axes in functionGraphRender (#447)
Added documentation for lots of operators
Added colorPaletteFn (#399)
Added multi-step support in onion (#457)
Changes
Restructure the whole shadow system. (#445, #427).
NOTE: This is a breaking change. Shadows are no longer specified at the material level. Instead they are attached to the renderer.
Removed the deprecated customFilter and customGen
Disable the “Camera” parameter on raymarchRender3d. Instead, create a linkedCamera and connect it to the Camera input on the renderer. (#436)
Fixes
Fix performance issue with shader support detection (#418, #34)
Fix iteration values not working for material field inputs (#397)
Fix cameras and lights not working with blend and switch (#421)
Fix transform errors for 2D (#425)
Fix 1D support for colorRampField, scale (#428), floatToVector (#429)
Fix range issues for 1D field inputs for mobiusRingSdf so that the period is now from 0..1 (#287)
Fix line thickness issues in functionGraphRender (#49, #447)
Use 2D renderer for 1D fields that return vector values, shown as a color gradient (#450)
Infrastructure / development
Improved support for nested ROPs in the build process (#436)
Improvements to toolkit editing tools, build process, and testing system
v0.12
Highlights
Fix bug when attaching a camera input in raymarchRender3D! (#185)
Improve detection of support for #include, which should help for some older AMD GPUs (#34)
Show validation errors directly on the ops where they occur, making debugging easier (#319)
Support inspecting 2D/3D value fields using instanced geometry. (#148)
There was an issue with the “Update OP” tool, so for this release it won’t work. For future upgrades from 0.12 and later to newer versions, it will work.
Details
Improvements / additions
Added toolkit viewer image with version info. (#284)
UV map option for render2D (#261)
Option to output normals from pointMapRender (#290)
Added more noise functions in noiseField
Added curlNoiseField, though it is very very costly for performance (#292)
Added horizontal/vertical bar option in gridSdf (#291)
Added flashing help message about palette shortcut on toolkit load
Added documentation for customOp
1D support for positionField
Added offset field input for mirrorOctant (#307)
Added documentation about iteration (#42)
Added rangeTransform (#282)
Added documentation for various operators
Added field inputs for radius/height in prismSdf (#326)
Added “reverse” parameter in lfoField (#327)
Added documentation for iteration (#42)
Clean up instance op and remove beta tag (#279)
Support 2+ inputs in iterationSwitch, add more extend modes (#335)
Clean up fieldRender and move to beta (#148, #7)
Add location position support for basicMat and fieldMat (#341)
Add extend modes to colorRampField
Add axis and thickness parameters for discSdf (#352)
Palette filter improvements, including search by initials (#347)
Add support for separate textures in triPlanarTextureField (#349)
Added uniform scale options in transform and iteratedTransform (#325)
Changes
Separate custom parameters from customOp instances (#297). This may cause problems for instances of customOp from older versions.
Cleanup and redesign of iteration value handling throughout toolkit (#310)
Inverted the meaning of the Bulge parameter on dogBoneSdf2d to match the name
Fixes
Fix build error in TD2021.10330 related to op.parTuple (#288)
Attempted fix for #include error for older AMD GPUs. (#34)
Fix bugs in limitField (#305)
Fix broken “clear filter” button in opPicker (#308)
Fix bug in the “smooth diff” mode in combine (#321)
Fix missing descriptions for parameter menu options in doc site (#322)
Fix missing op status tags in doc site (#329)
Fix extend mode bugs in chopField / chopFn (#231, #331)
Centralize Updateop logic, which will help for updates to the next toolkit version (#332)
Fix errors after renaming ROPs (#295)
Fix coordinate handling issues in render2D (#342)
Fix extend mode issue in triPlanarTextureField (#348)
Fix broken default expression in round (#356)
Fix keyboard navigation in palette (#357)
Fix duplicate typedef macro bug in shaderBuilder (#358)
Fix input handling in addFn (#363)
Fix parameter handling in rescaleField (#360)
Infrastructure / development
Documentation for infrastructure and shared components (#98, #100)
Documentation about ROP code, build process (#31)
Added create ROP type dialog in toolkit editor (#6, #151)
Lots more automated testing.
Improve error details in automated testing.
Clean up handling of texture inputs.
Improved developer tool support for non-ROP COMPs (#107)
v0.11
Improvements / additions
Feature guide (#192)
Rotate axis field input for mirrorOctant (#201)
Added wave type parameter to lfoField (#205)
Added joinFn
Added offset and amplitude parameters to noiseField (#215)
Axis parameters for cylinderSdf and coneSdf (#209, #210)
Added period field input to waveField (#218)
Added origin distance mode to waveField (#212)
Added directional light (#48)
Added axis parameters to various SDFs (#219, #246, #263)
Added helixSdf (#222, #223)
Texture-based camera switching in splitCamera (#144)
Pixel format settings for renderers (#230)
LinkedLight, still in beta (#183)
UV field input for textureField (#2)
Triplanar texture mapping (#233)
Reflection support, still in beta (#9)
bunnySdf! (#241)
waveletNoiseField (#243)
dogBoneSdf2d (#253)
Added a new category of 2D pattern generators (#254, #255, #256, #277, #278)
spiralZoom still in beta (#258)
mobiusTransform still in beta (#259)
Added coordinate controls in render2D still in beta (#179, #260)
More documentation for value fields (#35)
Added uniform scale option in scale operator, which preserves SDF properties (#267)
More controls for behavior of raymarch near hit output (#268)
cornerSdf2d
Added instance op still in beta (#279)
Changes
Colorization settings have been removed from render2D. To use that feature, insert the new colorizeSdf2d operator before the render2D. (#18)
Fix swapping issue in simpleDiff (#220) - this could be a breaking change if relying on the old behavior.
Fixes
Fix issues in timeField (#202, #203)
Fix parameter enable states in noiseField (#216)
Fix rescaling in splitCamera (#224)
Fix resolution issues (#230)
Fix raymarch step count output (#72)
Fix raymarch near hit output (#268, #11)
Infrastructure / development
New development editor system (#151)
New component test editor system (#151)
Ability to set minimum required inputs for multi-input ops (#225)
Added op icons for viewers in networks (#235, #41)
Added “Update OP” parameter to ops, that can be used to upgrade ops to a newer toolkit version. still in beta ( #19)
Added macros tab in inspector (#248)
v0.10
Improvements / additions
Improve customOp initialization (#71)
Distance modulo is now ready for use (#59)
Added thickness field for mobiusRing (#120)
Improved documentation site
Documentation for parameters integrated with site (#121)
Documentation for inputs integrated with site (#122)
Added documentation for many ops
Launch help from any op (#106)
Added color and shine settings to phongMat (#33)
Added metaballField (#137)
New time OPs for efficient access to time entirely within the shader (#146)
Documentation for data types and vector fields (#37)
New palette for creating ops, replacing old createMenu, featuring integrated help, pinning, collapsible categories ( #160)
Added linkedCamera and swap it into raymarchRender3d (#?????)
Support for marking ops as deprecated (#125)
Differentiate between required and optional inputs (#153)
Added sphereFbmSdf
Changes
Got rid of Usefield param for round, combineChamfer, combineColumns, combineStairs, edgeEngrave, edgeGroove, edgePipe, rotate, scale, translate (#40). Note that this could change behavior if there’s a round with a field connected but that parameter is switched off.
Fixes
Fix twist operator: got the shift parameter working (#114)
Fix antialias changing depth values (#103)
Fix tetrahedron scaling (#124)
Fix input handling issue in layoutGrid (#128)
Fix unnecessary spikes in geodesicSdf
Fix radius offset in radialClone (#149)
Infrastructure / development
Added splash screens to tools (#110)
Updated documentation processing systems (#39, #91, #86, #121, #122)
Cleanup and standarization of macros (#73, #87)
Reset parameters to defaults when creating ops from palette (#142)