Banner

Getting Started

Pixelpart is an application that helps you design visual effects, which you can either use directly in game engines using various plugins or export to sprite sheets, videos and animated images.

Visual effects are rendered using particles, the basic visual elements in Pixelpart. You can control how particles move and look and even simulate natural forces like gravity, wind and collisions acting on them. Particles are created by emitters that determine where and how particles are spawned. By combining multiple emitters it is possible to create complex effects with particles that have different appearances and behaviors. A typical workflow for creating new effects starts by adding emitters from the large collection of presets in the object list, but you can also start off from one of the complete effect examples via the main menu. Then, modify the properties of emitters and particles to achieve the desired look. You can also add force fields and colliders to the effect to influence the motion of particles.

After you have created an effect, you have two options to use it outside of Pixelpart:

  • Render the effect to a sprite sheet, an image sequence, an animated image or a video and import the resulting animation into other programs.
  • Save the effect and directly import it into game engines using the provided runtime plugins.

User Interface

User Interface

The user interface of Pixelpart is composed of five elements:

  1. The effect preview showing the effect in action.
  2. The object list, a list of all objects (particle emitters, force fields, ...) in the scene.
  3. The property panel showing the properties of the selected object.
  4. The keyframe editor, which allows you to animate object properties.
  5. The main menu and the toolbar.

Effect Preview

The interactive effect preview shows the effect in motion. Each object you add shows up in the effect preview. If you select one of those objects, its properties are shown in the property panel. The preview is interactive, so may move and manipulate objects while the effect is playing.

Particle Emitters

Particle emitters are shown with a white box in the center that is used to reposition the emitter. Use the small circular knobs on the edges of the emission area to change its size.

Preview Emitters

Force Fields

Force fields are shown in red, either as a circle for point forces or as a rectangle for area forces. You can reposition a force field using the small circle in the middle. For area forces, the arrow points in the primary force direction. Use the small circular knobs to change the size of the force area.

Preview Force Field

Colliders

Colliders are shown as yellow lines. To manipulate the position of colliders, drag the vertices between the line segments.

Preview Collider

Sprites

Similar to particle emitters, sprites can be repositioned by moving the small box in the center. In order to change width and height, use the knobs at both edges.

Preview Sprite

Motion Paths

With motion paths you can control how emitters, particles, force fields and sprites move over time. Motion paths are defined by waypoints, which you can add, remove and move as you like. To start editing a motion path, select the corresponding Position property in the property panel.

To manually add waypoints, right-click on an empty spot in the effect preview. Right-click to remove it again. Waypoints can be repositioned by moving them in the effect preview. To change the timing of each waypoint and the path interpolation, use the keyframe editor.

Motion paths can be drawn as well. Click next to the Position property and then move the mouse over the effect preview while holding the left mouse button. This automatically adds waypoints along the path you draw.

Motion Path

Shortcuts

ActionEffect
Mouse Wheel (Scroll)Adjust the zoom.
Mouse Wheel (Hold down)Move the viewpoint.
SpacePause/Resume the simulation.
SHIFT+SpaceRestart the simulation.
WMove the viewpoint down.
SMove the viewpoint up.
AMove the viewpoint to the right.
DMove the viewpoint to the left.
RZoom out.
TZoom in.

Object List

The object list shows all objects in your scene, i.e. the particle emitters, sprites, force fields and colliders. Select an object in the list to edit its properties in the property panel.

Objects can be added by clicking in the toolbar or the context menu. Many emitter presets are available to quickly get you started. Having selected an object, the toolbar and the context menu offer options to...

  • Duplicate the object with
  • Remove the object with
  • Hide the object with
  • Change the object's name (only in the context menu)

To create complex effects it is often necessary for particles to be spawned after one another, e.g. a smoke particle being created from a fire particle. In the object list, drag & drop an emitter onto another to make it a sub-emitter of the latter.

Object List

Property Panel

The property panel is the place where you can change the behavior and look of the selected object, which can be a particle emitter, sprite, force field or collider. For properties that may change over the lifetime of an object, select the property name to animate it using the keyframe editor. Such properties are marked with .

The property panel is divided into four categories:

  • General: General settings, available for all object types
  • Visual: Settings that affect the appearance of an object
  • Motion: Settings that influence the position and motion of an object
  • Physics: Settings related to the physical properties of an object

Property Panel

Keyframe Editor

The keyframe editor allows you to animate properties of objects over time. Keyframe animation can be used to let emitters spin in circles, to make particles bigger and smaller over their lifespan and for other complex behavior. To edit a property's keyframes, select the corresponding property name in the property panel, which is then highlighted to indicate that it is being edited. Your edits are applied in real-time to the effect.

A property can be defined with a number of keyframes that determine how it changes over time. You can add a new keyframe by right-clicking inside the keyframe editor. Similarly, a right-click on an existing keyframe removes it. To move keyframes, simply drag them around with the mouse. The timing can be adjusted more precisely in the small timeline above the main editor frame.

Additional actions are shown above the editor and in the menu accessible via :

Option
Description
InterpolationThe interpolation defines how values between keyframes are calculated.
None: Values change abruptly between keyframes.
Linear: Values are interpolated linearly.
Spline: Values are interpolated with Spline interpolation producing smooth transitions.
AddAdd a new keyframe at the current cursor position.
RemoveRemove the selected keyframe.
EraseRemove all keyframes, setting the property to a constant value.
CopyCopy keyframes to the clipboard.
PasteReplace keyframes with the ones in the clipboard.
ScrollScroll the graph by clicking and dragging the mouse.
ZoomAdjust the zoom level by clicking and dragging the mouse..
Reset ViewReset zoom and scrolling.
Grid SpacingThe distance between grid lines in the keyframe editor.
Snap to GridToggle snapping keyframes to the grid.
Open Script Editor...Generate keyframes by writing scripts with the Lua scripting language.

Keyframe Editor

Main Menu

The main menu contains important functions like saving and loading projects, exporting effects and controlling the effect playback.

File Menu

Item
Description
New Project...Create a new project, replacing the current one.
Open Project...Load a project from file.
Add Project...Add objects of another project to the current project without deleting anything.
SaveSave the project.
Save As...Save the project under a new filename.
Render...Open the render dialog to render and export effects.
Preferences...Open the preference dialog to modify global settings.
CloseClose the application.

Edit Menu

Item
Description
UndoUndo the last action.
RedoRedo a previously undone action.
CopyCopy the animation data of the selected property to the clipboard.
PastePaste copied animation data to the selected property.
VisibleShow/hide the selected object.
DuplicateClone the selected object.
RemoveRemove the selected object.
Add Sub-EmitterAdd a new particle emitter as a sub-emitter of the selected one.
Add EmitterAdd a new particle emitter.
Add SpriteAdd a new sprite.
Add ForceAdd a new force field.
Add ColliderAdd a new collider.

Simulation Menu

Item
Description
PlayResume the effect playback.
PausePause the effect playback.
RestartRestart the effect playback.
PlaybackSet the playback speed.
LoopSet the time after which the effect restarts automatically.

View Menu

Item
Description
Zoom InZoom in by 10%.
Zoom OutZoom out by 10%.
Reset ViewReset zoom to 100% and center view.
Fit to FrameFit the effect into the field of view.
ResolutionChange the image resolution.
BackgroundChange the background color.
Image Effects...Open the list of active image effects.
Show BackgroundShow/hide background color.
Show Image EffectsTurn image effects on/off.
Show ForcesShow/hide force fields in the effect preview.
Show CollidersShow/hide colliders in the effect preview.
Show Debug InformationShow/hide debugging information in the effect preview.

Help Menu

Item
Description
Documentation...Open the documentation.
About...Show information about the application.

Creating Effects

Creating effects in Pixelpart involves creating particle emitters and other objects that influence the behavior of emitted particles. Four types of objects are available:

  • Particle Emitters, which continuously create new particles in a specific area.
  • Sprites, which are mostly static images that are rendered together with an effect.
  • Force Fields, which influence particles by applying forces to them.
  • Colliders, which are objects particles collide with.

Particles and sprites can have custom shaders to define their appearance even more precisely. They are created with shader graphs, which use visual scripting to define shaders instead of code.

It is also possible to enhance the effect you have created with additional image effects, which are filters that are applied to the whole effect after rendering, such as motion blur and color correction.

Particle Emitters

Particles are the basic visual elements of any effect and are spawned by emitters. The following properties of emitters and particles can be adjusted in the property panel to create the desired effect.

General

Property
Description
LifetimeTime period during which the emitter is active and spawns particles. After the time expires, the emitter stops producing particles. If Repeat is activated, the emitter starts again after the specified duration. This is useful for emitters that should repeat their behavior after a certain amount of time.
TypeIn what kind of area particles are spawned (Point, Line, Circle, Rectangle or Path).
WidthThe horizontal extent of the emitter area.
HeightThe vertical extent of the emitter area.
OrientationThe orientation of the emitter area in degrees.
Particle DistributionWhere particles are spawned inside the emitter area.
Uniform: Particles are spawned uniformly inside the emitter area.
Centered: Particles are created mostly around the center and less at the boundary.
Near Boundary: More particles spawn near the shape boundary and less in the center.
On Boundary: Particles are created only on the shape boundary.
Particle LifespanLifespan of particles produced by the emitter. You can also specify a variation for this parameter, so that individual particles have different lifespans.
Number of ParticlesHow many particles are created by the emitter. If the spawn mode is set to Continuous, the emitter continuously spawns the given amount of particles per second. If the mode is set to Burst, the emitter instantiates all particles immediately after being created. A third option Spawn on Death is available in case the emitter is a sub-emitter. Using this option, particles are spawned only when particles of the parent emitter die.
DirectionThe direction in which particles move when spawned, in degrees. The default mode is Fixed, causing particles to shoot off in a common direction. If you select Outwards, particles move away from the emitter. If you select Inwards, particles move towards the emitter's center.
SpreadHow much the direction varies. A spread of 0° means that particles only move in the specified direction, while 360° leads to particles shooting off in all directions.

Visual

Property
Description
MaterialDefines what material particles use for rendering. The default material applies a texture to the particle, blending it with the given particle color. If you want to customize the appearance of particles beyond switching textures and changing colors, open the shader graph editor by clicking Shader Graph.... The parameters of shader can be accessed quickly with .
RendererWhich renderer is used for drawing the particles.
The Sprite Renderer draws each particle as a separate sprite.
The Trail Renderer generates continuous trails along the path of particles with the same parent particle.
Blend ModeHow the particles are blended together and composed with other objects in the effect.
LayerLayer the particles are drawn on. Particles on upper layers occlude those on lower layers.
ColorThe color of each particle over its lifetime, displayed as a color gradient. Double-click or right-click the color bar to add another color. Double-clicking a color mark lets you choose its color, right-clicking removes it. To change the position of color marks, drag them using the mouse. To create particles with more random colors use the variance parameters for hue, saturation and value.
Initial OpacityThe initial opacity of each particle.
OpacityOpacity of each particle over its lifetime as a fraction of its initial opacity.
Initial Particle SizeThe initial size of each particle.
Particle SizeThe size of each particle over its lifetime as a fraction of its initial size.
Particle WidthThe width of each particle over its lifetime as a fraction of its size.
Particle HeightThe height of each particle over its lifetime as a fraction of its size.

Motion

Property
Description
PositionThe position of the emitter. This option allows you to specify a motion path the emitter traverses during its lifetime. It is shown in the effect preview if the property is selected.
Particle PositionMotion path for particles, which all particles of the emitter follow. You can specify how much particles are influenced by the path with the Influence parameter varying from 0% (particles do not follow the path) to 100% (particles follow the path exactly).
If Attached to Emitter is selected, the position of particles is tied directly to the position of their emitter.
Initial VelocityHow fast each particle is initially after being spawned by the emitter.
AccelerationLinear acceleration applied to each particle over its lifetime. Positive values speed up particles, while negative values slow them down.
Radial AccelerationAcceleration of each particle towards the emitter over its lifetime. If you select negative values here, particles are repelled from the emitter.
DampingDamping applied to each particle over its lifetime. Lower values result in more damping.
Initial RotationThe initial rotation of each particle in degrees.
RotationHow particles rotate over time from their initial rotation. There are four possible modes:
Angle: Set rotation angle of each particle over its lifetime.
Angular Velocity: Set angular velocity of each particle over its lifetime.
Align With Direction: Rotate each particle according to its direction vector. This is useful if you want particles to align with their movement.
Align With Path: If particles move on a motion path, align each particle's rotation with the path.
PivotThe center of rotation, relative to the particle's center.

Physics

Property
Description
Particle WeightHow strongly particles are affected by force fields.
Particle BounceHow much particles bounce back from colliders.
Particle FrictionHow resistant particles are to sliding down colliders.

Sprites

Sprites are additional visual elements you may want to include in an effect, like background images. Unlike particles, there is exactly one instance of each sprite. The following properties can be adjusted in the property panel to influence the look and behavior of a sprite.

General

Property
Description
LifetimeTime period during which the sprite is active. If Repeat is selected, the sprite stays active.
WidthWidth of the sprite.
HeightHeight of the sprite.
OrientationOrientation of the sprite in degrees. The option Align With Path causes the sprite to always turn in the direction of its motion path.

Visual

Property
Description
MaterialDefines what material the sprite uses for rendering. The default material applies a texture to the sprite, blending it with the given color. If you want to customize the appearance of the sprite beyond switching textures and changing colors, open the shader graph editor by clicking Shader Graph.... The parameters of shader can be accessed quickly with .
Blend ModeHow the sprite is composed with other objects in the effect.
LayerLayer the sprite is drawn on. Objects on upper layers occlude those on lower layers.
ColorThe color of the sprite over its lifetime, displayed as a color gradient. Double-click or right-click the color bar to add another color. Double-clicking a color mark lets you choose its color, right-clicking removes it. To change the position of color marks, move them with the mouse.
OpacityOpacity of the sprite over its lifetime.

Motion

Property
Description
PositionPosition of the sprite. You can also specify a motion path along which the sprite travels over its lifetime.
PivotThe center of rotation, relative to the sprite's center.

Force Fields

Force fields affect particles by attracting, repelling or accelerating them in some direction. They can be used to model gravity, wind and other natural effects. Add force fields using the object list or alternatively, directly place a force field in the scene by right-clicking on the effect preview while holding CTRL. The following properties can be adjusted in the property panel to influence the behavior of a force field.

General

Property
Description
LifetimeTime period during which the force field is active. If Repeat is selected, the force field stays active and repeats its behavior.
TypeType of the force field.
Point forces attract or repel particles based on their distance to the force center. Particles near the center are influenced more than particles farther away. They have a circular area of effect.
Area forces accelerate particles in a specific direction if they move into into the force area. In contrast to a point force, this direction is not towards or away from the force center, but set as a separate parameter.
WidthHorizontal extent of the force field.
HeightVertical extent of the force field.
OrientationOrientation of the force field, in degrees.
Excluded EmittersList of emitters not affected by the force field.

Motion

Property
Description
PositionPosition of the force field. You can also specify a motion path along which the force field travels over its lifetime.

Physics

Property
Description
DirectionDirection in which particles are accelerated, in degrees. Only applies to area force fields.
StrengthHow strongly particles are affected by the force field. Negative values reverse the force direction. Point forces then repel particles, for example.
GridNumber of cells used for the randomization grid. Each grid cell has a slightly different, randomly selected force direction and strength, which is influenced by the variance parameters. This is especially useful for more organic motion that moves particles with some variation in strength and direction. Click to randomize the strength and direction values of the grid cells.

Colliders

Colliders act as objects particles can collide with and consist of connected line segments. Add colliders using the object list or alternatively, by holding CTRL and left-clicking on the effect preview. You can then set the collider's vertices with additional clicks. The following properties can be adjusted in the property panel to influence the behavior of a collider.

General

Property
Description
LifetimeTime period during which the collider is active. If Repeat is selected, the collider stays active.
VerticesThe list of vertices of the collider. You can add and remove vertices using the context menu (right-click).
Excluded EmittersList of emitters not affected by the collider.

Physics

Property
Description
BounceHow strongly particles bounce back from the collider.
FrictionHow much particles are slowed down when sliding down the collider.

Shader Graphs

Shader graphs can be used to define the material of particles more precisely allowing you to fine-tune colors and even make materials react dynamically to particle properties like velocity and force influence. Such a shader graph consits of nodes that work together to define the final pixel color and opacity. Each nodes implements a specific function that computes an output value from its input values, which are supplied by other nodes. Some nodes also have additional parameters that influence their function.

An example of a node is the Blend node, which mixes two colors together: The two colors are connected to the input pins of the blend node while the output pin, carrying the resulting color, is connected to other nodes in the graph. The parameter Mode determines how the colors are blended together.

Shader Node Blend

Eventually, all nodes run together into the Output node, which sets the final color of each pixel. Color values are stored in RGBA (Red, Green, Blue, Alpha) format, where each channel contains a number in the range [0, 1] defining the color intensity for that channel. The alpha component defines the opacity.

Shader Node Output

Interaction

The shader graph of an object can be modified in the shader graph window. To open this window, click Shader Graph... from the Material property of an object.

Creating Shader Graphs

Each emitter and sprite already has a default shader graph, which applies a texture and combines it with the color set from the particle or sprite properties. To assign a completely new shader graph to the object click New or select a preset with Preset....

Adding Nodes

New nodes can be added by right-clicking an empty space and selecting a node type, by dragging out an attribute pin and dropping it on an empty space or by clicking Add in the toolbar. The list of available nodes can be filtered by typing in the search box at the top.

Shader Graph Add

While right-clicking or dragging out a node pin, there are several keyboard shortcuts for creating common node types directly.

ShortcutNode
1Number Constant
2Float2 Constant
3Float3 Constant
4Float4 Constant
BBoolean Constant
CColor Constant

Removing Nodes

To remove a node, click Remove in the context menu (right mouse button) or select the node(s) and press Remove in the tool bar.

Applying Changes

Changes to the graph are not actually applied to the object until you click Apply in the toolbar. Otherwise, they are not saved when you close the window.

Nodes

Nodes: Constants

NodeInputsDescription
BooleanBoolean constant, which can be true or false.
IntegerInteger constant, which can be any positive or negative integer.
NumberNumber constant, which can be any rational number.
Vector 2Vector constant with two components.
Vector 3Vector constant with three components.
Vector 4Vector constant with four components.
ColorColor constant with four components (RGBA).

Nodes: Inputs

NodeInputsDescription
Input: Texture CoordinateThe per-vertex texture coordinate for the current drawable. Used to sample textures.
Input: ColorThe per-vertex color of the current drawable. This input can be set with Color attribute in the Visuals tab.
Input: VelocityThe velocity vector of the current drawable (only available for particles).
Input: ForceThe force vector of the current drawable (only available for particles).
Input: LifeThe percentage of life left for the current drawable from 1.0 (drawable has spawned) to 0.0 (drawable is about to disappear).
Input: Object IDThe ID of the current drawable, which can be used to differentiate individual particles, for example.
Effect TimeTime passed since the effect has started.
Object TimeTime passed since the object (emitter or sprite) was instantiated.

Nodes: Colors

NodeInputsDescription
BlendA, BBlends colors A and B together using the specified blending mode.
Color RampValuePicks a color from the specified gradient using Value as an index between 0.0 and 1.0.
Adjust BrightnessColor, BrightnessIncreases the brightness of Color for Brightness > 0 and decreases it for Brightness < 0.
Adjust ExposureColor, ExposureIncreases the exposure of Color for Exposure > 0 and decreases it for Exposure < 0.
Adjust ContrastColor, ContrastIncreases the contrast of Color for Contrast > 0 and decreases it for Contrast < 0.
Adjust SaturationColor, SaturationIncreases the saturation of Color for Saturation > 0 and decreases it for Saturation < 0.
PosterizeColor, NumberReduce the number of available colors per channel to Number.

Nodes: Textures

NodeInputsDescription
Texture: ImageUVSamples the given image at texture coordinate UV.
Texture: Sprite SheetUV, FrameSamples the image at index Frame in the given sprite sheet at texture coordinate UV.
Tiling and OffsetUV, Tiling, OffsetTransforms texture coordinate UV by tiling it Tiling times and applying Offset.
TwirlUV, AmountTransforms texture coordinate UV by twirling it with strength Amount.

Nodes: Procedural

NodeInputsDescription
Circle MaskUV, Radius, SmoothnessGenerates a circular mask, where (0.5, 0.5) is the circle's center, Radius is its radius and Smoothness dictates how slowly the value falls off outside the radius. The circle is then sampled at coordinate UV.
Noise (2D)UV, Amplitude, Frequency, Persistence, LacunarityGenerates 2D Simplex noise with the given parameters. This noise is sampled at coordinate UV.

Nodes: Math

NodeInputsDescription
AddA, BAdds A and B (A + B).
SubtractA, BSubtracts B from A (A - B).
MultiplyA, BMultiplies A with B (A * B).
DivideA, BDivides A by B (A / B).
ModuloA, BComputes the modulus of A and B (A mod B).
PowerA, BRaises A to the power of B (AB).
Natural ExponentiationValueComputes the natural exponentiation of Value (exp(Value)).
Natural LogarithmValueComputes the natural logarithm of Value (ln(Value)).
SignValueReturns the sign of Value, i.e. +1 if Value is positive, -1 if Value is negative and 0 if Value is 0.
Absolute ValueValueReturns the absolute value of Value (|Value|).
MinA, BReturns the minimum of A and B (min(A, B)).
MaxA, BReturns the maximum of A and B (max(A, B)).
ClampValue, Min, MaxLimits Value to the range [Min, Max].
Linear InterpolationA, B, FactorInterpolations linearly between A and B using Factor (in the range [0, 1]).
FloorValueRounds Value down to the next integer.
CeilValueRounds Value up to the next integer.
RoundValueRounds Value to the nearest integer.
Square RootValueComputes the square root of Value.
SinValueComputes the sine of Value.
CosValueComputes the cosine of Value.
ArcsinValueComputes the arcus sine of Value.
ArccosValueComputes the arcus cosine of Value.
Dot ProductA, BComputes the dot product of vectors A and B.
Cross ProductA, BComputes the cross product of vectors A and B.
NormalizeVectorNormalizes Vector to a vector of length 1.
Vector LengthVectorReturns the length or magnitude of Vector.
StepValue, EdgeGenerates a step function by comparing Value to Edge. If Value < Edge, the output is 0 and otherwise 1.
Smooth StepValue, Edge 1, Edge 2Performs a smooth interpolation between 0 and 1 when Edge 1 < Value < Edge 2.
ThresholdValueReturns parameter Output if Value is smaller than parameter Threshold.
NegateValueNegates the boolean Value.

Nodes: Comparison

NodeInputsDescription
EqualA, BOutputs True if A = B and False otherwise.
Not EqualA, BOutputs True if A ≠ B and False otherwise.
Approximately EqualA, BOutputs True if A ≈ B (depending on given Epsilon) and False otherwise.
LessA, BOutputs True if A < B and False otherwise.
Less or EqualA, BOutputs True if A ≤ B and False otherwise.
GreaterA, BOutputs True if A > B and False otherwise.
Greater or EqualA, BOutputs True if A ≥ B and False otherwise.

Nodes: Utililty

NodeInputsDescription
BranchPredicate, True, FalseOutputs the value for True if Predicate evaluates to true and the value for False otherwise.
Frame AnimationTimeComputes the frame (for example of a sprite sheet) that has been reached after time Time. The animation is characterized by the given parameters.
Split Vector (2)VectorSplits the two-dimensional vector Vector into its components.
Split Vector (3)VectorSplits the three-dimensional vector Vector into its components.
Split Vector (4)VectorSplits the four-dimensional vector Vector into its components.
Merge Vector (2)X, YCombines X, Y into a two-dimensional vector.
Merge Vector (3)X, Y, ZCombines X, Y, Z into a three-dimensional vector.
Merge Vector (4)X, Y, Z, WCombines X, Y, Z, W into a four-dimensional vector.

Image Effects

Image effects change the appearance of the whole effect and are applied after all particles are rendered. You can specify which image effects are used and in which order they are applied by opening the image effects dialog from the main menu via View > Image Effects.... Note that image effects are only applied when rendering the effect to sprite sheets, image sequences and videos and not when used with runtime plugins for game engines.

The following effects are supported:

Option
Description
Contrast & BrightnessChanges contrast and brightness.
Hue & SaturationChanges hue and saturation.
Gamma CorrectionApplies gamma correction.
Color CurvesModifies the colors by applying the user-defined color ramps.
ColorizeColorizes the effect with the selected hue.
Palette & DitheringConstrains colors to the specified palette. You can also specify how much dithering is applied.
PosterizeReduces the number of possible colors in each color channel to the specified amount.
GrayscaleConverts the animation to grayscale. The Weights parameter controls how much each color channel contributes.
InvertInverts the colors.
Alpha ThresholdDiscards parts of the effect that have an opacity below the specified threshold.
PixelateApplies pixelation to the effect. The parameter Pixel Size controls the amount of pixelation.
Horizontal BlurApplies horizontal gaussian blur. Use Radius and Sigma to change how much blur is applied. In order to produce an evenly blurred image, combine horizontal and vertical blur.
Vertical BlurApplies vertical gaussian blur. Use Radius and Sigma to change how much blur is applied. In order to produce an evenly blurred image, combine horizontal and vertical blur.
Motion BlurBlurs particles with high velocity. The Radius, Sigma and Strength parameters control how much blur is applied.
Bilateral FilterApplies bilateral filtering, which blurs the effect but preserves edges.
Kuwahara FilterApplies the Kuwahara filter, which smooths out the effect.
SharpenSharpens the animation. Use Radius and Sigma to change how much sharpening is applied.
OutlineOutlines the effect using the specified color and line width.
Film GrainApplies a film grain effect.

Rendering Effects

Effects can be rendered and exported to various formats. Open the render dialog from the main menu via File > Render... or by clicking in the toolbar.

Render

Click Render to start rendering the effect. The rendering process can be influenced with the following options:

Option
Description
ResolutionThe image resolution in pixels. Select to automatically fit the effect to the image frame.
Capture RateThe rate at which the effect is recorded, in frames per seconds.
DurationLength of the effect in seconds. The duration can be estimated automatically using if the effect does not loop.
DelayHow long the effect is simulated before it is captured.
SeedSeed used for randomizing the particle simulation. Use to pick a random seed.
LoopRender the effect as a seamless loop.
SeamlessRender the effect with seamless edges. This is useful for animations that are used as part of a tilemap, for example.
BackgroundEnable/disable the background color. Turn this option off to render the effect in front of a transparent background.
Image EffectsEnable/disable image effects.

After the effect has been rendered, a preview of the final animation is shown on the left. Click Export to export the animation to the file specified under File Path. The following formats are supported:

Type
File Format
Description
Sprite Sheetpng, tga, bmp, jpegRenders the effect onto a sprite sheet. Texture Origin determines the corner where the first animation frame is placed.
Image Sequencepng, tga, bmp, jpegExports the effect as a series of individual image files. You can also customize how the filenames of the different frames are formatted: For example, specifying "image%03d.png" stores the frames as image000.png, image001.png and so on with leading zeros and padded to three digits. If you choose a filename without format specifiers, e.g. just "image.png", the images will be saved as "image0.png", "image1.png" and so on.
Selected Framepng, tga, bmp, jpegExports the selected frame as an image file.
Animated Imagegif, apngExports the effect as an animated image file.
Videoogv (Theora), webm (VP8), avi (Motion JPEG)Exports the effect as a video. The Bitrate controls the data rate used for the video.

Game Engine Plugins

Effects created in Pixelpart can be played directly inside game engines using runtime plugins. Doing it this way has an important benefit that videos, sprite sheets and animated images like GIFs cannot provide: Plugins allow effects to be controlled dynamically, even while an effect is playing, which makes it possible to let them react to other objects in the scene. This can be achieved with the extensive scripting API that Pixelpart provides.

At the moment, plugins for Unity and Godot 3 are available.

Plugin for Unity

Installation

Unity 2017 or higher is required for the plugin. Follow these steps to install the plugin:

  1. Start the Unity Editor and open the project in which you want to use the plugin.
  2. Import the plugin package via the main menu with Assets > Import Package.
  3. Select all assets and click Import....

Usage

Importing An Effect

Save the effect you created in Pixelpart as a .ppfx file and place it in the Assets folder of your Unity project. Appropriate .asset and .shader files are created automatically. Make sure to include the .shader files in the final build. The original .ppfx files are no longer needed and can be deleted. Select the .asset file to set a scale value in the inspector if the effect appears to small or too large in your scene.

Playing An Effect

In order to actually play the effect, attach the Pixelpart Effect component to a game object in your scene and move the imported effect asset (with extension .asset) onto the Effect Asset field in the component's inspector window.

Unity Play

Scripting

An effect and its particle emitters, force fields, colliders and sprites can be controlled dynamically from script.

PixelpartEffect

Property
Description
PixelpartEffectAsset EffectAssetThe attached effect asset.
bool PlayingWhether the effect is currently playing or not.
bool LoopWhether the effect restarts automatically after time LoopTime.
float LoopTimeTime after which the effect loops (only effective if Loop = true).
float SpeedHow fast the effect is being played.
float FrameRateAt which rate the effect is simulated, in frames per second.
bool FlipHWhether the effect is flipped horizontally.
bool FlipVWhether the effect is flipped vertically.
BillboardMode BillboardThe billboard mode, which is used to align the effect to the camera (Disabled, Enabled, EnabledFixedY).
ShadowCastingMode CastShadowsWhether the effect can cast shadows.
bool ReceiveShadowsWhether the effect can receive shadows.
bool UseLightProbesWhether the effect should use light probes.
Transform ProbeAnchorIf used, the effect uses this transform to sample light probes and find the matching reflection probe.
Method
Description
Restart()Restarts the effect and removes all existing particles.
Reset()Restarts the effect, but does not remove existing particles.
GetTime()Returns the time since the effect has started playing.
GetAssetScale()Returns the scale applied to the effect asset.
GetParticleEmitter(string name)Returns the particle emitter with the given name or null if no particle emitter with this name exists.
GetSprite(string name)Returns the sprite with the given name or null if no sprite with this name exists.
GetForceField(string name)Returns the force field with the given name or null if no force field with this name exists.
GetCollider(string name)Returns the collider with the given name or null if no collider with this name exists.
GetParticleEmitterById(uint id)Returns the particle emitter with the given id or null if no particle emitter with this id exists.
GetSpriteById(uint id)Returns the sprite with the given id or null if no sprite with this id exists.
GetForceFieldById(uint id)Returns the force field with the given id or null if no force field with this id exists.
GetColliderById(uint id)Returns the collider with the given id or null if no collider with this id exists.
GetParticleEmitterByIndex(uint index)Returns the particle emitter at the given index, starting with 0, or null if no particle emitter exists at this index.
GetSpriteByIndex(uint index)Returns the sprite at the given index, starting with 0, or null if no sprite exists at this index.
GetForceFieldByIndex(uint index)Returns the force field at the given index, starting with 0, or null if no force field exists at this index.
GetColliderByIndex(uint index)Returns the collider at the given index, starting with 0, or null if no collider exists at this index.

PixelpartParticleEmitter

Property
Description
float LifetimeStartWhen the emitter becomes active, in seconds.
float LifetimeDurationHow long the emitter stays active, in seconds.
bool RepeatWhether the emitter continues to stay active after LifetimeDuration has passed.
EmitterShapeType ShapeShape of the emitter area (Point, Line, Ellipse, Rectangle, Path).
EmitterDistributionType DistributionHow particles are distributed in the emitter area (Uniform, Center, CenterReverse, Boundary).
EmitterSpawnModeType SpawnModeIn which direction particles are generated in relation to the emitter area (Fixed, Out, In).
EmitterInstantiationMode InstantiationModeWhen particles are spawned during the lifetime of the emitter (Continuous, Burst, BurstDeath).
uint LayerLayer on which the particles of the emitter are drawn, starting at 0.
bool VisibleWhether the emitter and its particles are visible.
RotationModeType ParticleRotationModeThe rotation mode of particles (Angle, Velocity, Align, AlignPath).
Vector2 ParticlePivotThe point around which particles are rotated, relative to the particle center.
float ParticleLifespanVarianceHow much the lifespans of particles vary.
float ParticleInitialVelocityVarianceHow much the starting velocities of particles vary.
float ParticleRotationVarianceHow much the rotations of particles vary.
float ParticleAngularVelocityVarianceHow much the angular velocities of particles vary.
float ParticleSizeVarianceHow much the sizes of particles vary.
float ParticleOpacityVarianceHow much the opacities of particles vary.
Method
Description
GetName()Returns the name of the emitter.
GetId()Returns the id of the emitter.
GetParentId()Returns the id of the emitter's parent.
IsActive()Returns whether the emitter is active and spawns particles at the current point in time.
GetLocalTime()Returns the time fraction the emitter has been active for, in range 0.0 (0%) to 1.0 (100%).
SpawnParticles(int count)Spawns count particles with the emitter.
GetShapePath()Returns the spawn path of the emitter if Path is selected as the emitter shape.
GetWidth()Returns the curve describing the width of the emitter area.
GetHeight()Returns the curve describing the height of the emitter area.
GetOrientation()Returns the curve describing the orientation of the emitter area in degrees.
GetDirection()Returns the curve describing the direction of the emitter in degrees.
GetSpread()Returns the curve describing the spread of the emitter.
GetNumParticles()Returns the curve describing the number of the particles the emitter spawns per second.
GetParticleLifespan()Returns the curve describing the lifespan of particles of the emitter.
GetMotionPath()Returns the motion path of the emitter.
GetParticleMotionPath()Returns the motion path of particles of the emitter.
GetParticleInitialVelocity()Returns the curve describing the starting velocity of particles of the emitter.
GetParticleAcceleration()Returns the curve describing the acceleration of particles over their lifetime.
GetParticleRadialAcceleration()Returns the curve describing the radial acceleration of particles over their lifetime.
GetParticleDamping()Returns the curve describing the damping of particles over their lifetime.
GetParticleInitialRotation()Returns the curve describing the starting rotation of particles.
GetParticleRotation()Returns the curve describing the rotation of particles over their lifetime.
GetParticleWeight()Returns the curve describing the weight of particles over their lifetime.
GetParticleBounce()Returns the curve describing the bounce of particles over their lifetime.
GetParticleFriction()Returns the curve describing the friction of particles over their lifetime.
GetParticleInitialSize()Returns the curve describing the starting size of particles.
GetParticleSize()Returns the curve describing the size of particles over their lifetime.
GetParticleWidth()Returns the curve describing the width of particles over their lifetime.
GetParticleHeight()Returns the curve describing the height of particles over their lifetime.
GetParticleColor()Returns the gradient describing the colors of particles over their lifetime.
GetParticleInitialOpacity()Returns the curve describing the initial opacity of particles.
GetParticleOpacity()Returns the curve describing the opacity of particles over their lifetime.

PixelpartSprite

Property
Description
float LifetimeStartWhen the sprite becomes active, in seconds.
float LifetimeDurationHow long the sprite stays active, in seconds.
bool RepeatWhether the sprite continues to stay active after LifetimeDuration has passed.
bool AlignWithPathWhether the sprite's orientation aligns with the motion path.
Vector2 PivotThe point around which the sprite rotates, relative to the sprite center.
uint LayerLayer on which the sprite is draw, starting at 0.
bool VisibleWhether the sprite is visible.
Method
Description
GetName()Returns the name of the sprite.
GetId()Returns the id of the sprite.
IsActive()Returns whether the sprite is active.
GetLocalTime()Returns the time fraction the sprite has been active for, in range 0.0 (0%) to 1.0 (100%).
GetWidth()Returns the curve describing the width of the sprite.
GetHeight()Returns the curve describing the height of the sprite.
GetOrientation()Returns the curve describing the orientation of the sprite in degrees.
GetMotionPath()Returns the motion path of the sprite.
GetColor()Returns the color gradient of the sprite.
GetOpacity()Returns the curve describing the opacity of the sprite.

PixelpartForceField

Property
Description
float LifetimeStartWhen the force field becomes active, in seconds.
float LifetimeDurationHow long the force field stays active, in seconds.
bool RepeatWhether the force field continues to stay active after LifetimeDuration has passed.
ForceType TypeType of the force field (Point, Area).
float DirectionVarianceHow much the force direction is allowed to vary between grid cells of the force field.
float StrengthVarianceHow much the force strength is allowed to vary between grid cells of the force field.
Vector2Int GridSizeThe number of columns and rows of the force field's grid. Each cell of the grid varies in direction and strength determined by DirectionVariance and StrengthVariance.
Method
Description
GetName()Returns the name of the force field.
GetId()Returns the id of the force field.
IsActive()Returns whether the force field is active.
GetLocalTime()Returns the time fraction the force field has been active for, in range 0.0 (0%) to 1.0 (100%).
GetWidth()Returns the curve describing the width of the force field.
GetHeight()Returns the curve describing the height of the area force field.
GetOrientation()Returns the curve describing the orientation of the area force field.
GetMotionPath()Returns the motion path of the force field.
GetDirection()Returns the curve describing the force direction of the area force field.
GetStrength()Returns the curve describing the strength of the force field.

PixelpartCollider

Property
Description
float LifetimeStartWhen the collider becomes active, in seconds.
float LifetimeDurationHow long the collider stays active, in seconds.
bool RepeatWhether the collider continues to stay active after LifetimeDuration has passed.
Method
Description
GetName()Returns the name of the collider.
GetId()Returns the id of the collider.
IsActive()Returns whether the collider is active.
GetLocalTime()Returns the time fraction the collider has been active for, in range 0.0 (0%) to 1.0 (100%).
AddPoint(Vector2 point)Adds a vertex to the collider at the given position.
SetPoint(int index, Vector2 point)Sets the position of the given vertex.
RemovePoint(int index)Removes the given vertex from the collider.
GetPoint(int index)Returns the position of the given vertex.
GetNumPoints()Returns the number of vertices.
GetBounce()Returns the curve describing the bounce of the collider.
GetFriction()Returns the curve describing the friction of the collider.

PixelpartCurve

Property
Description
InterpolationType InterpolationInterpolation applied to the curve (None, Linear, Spline).
Method
Description
Get(float t)Returns the (interpolated) value of the curve at time t (in range 0.0 to 1.0).
GetPoint(uint index)Returns the value of the curve point with the given index.
Set(float value)Sets the curve to a constant with value value.
AddPoint(float t, float value)Adds a curve point at time t with value value.
SetPoint(uint index, float value)Sets the value of the curve point with the given index to value.
MovePoint(uint index, float delta)Adds delta to the value of the curve point with the given index.
ShiftPoint(uint index, float delta)Moves the curve point with the given index forward or backward in time by delta.
RemovePoint(uint index)Removes the point with the given index from the curve.
Clear()Removes all points from the curve.
GetNumPoints()Returns the number of curve points.
Move(float delta)Adds delta to the value of all curve points.
Shift(float delta)Moves all curve points forward or backward in time by delta.
EnableAdaptiveCache()Enables an adaptive cache, which resizes itself automatically if the number of curve points increases or decreases a lot.
EnableFixedCache(uint size)Enables a fixed cache with the given size, which only stores up to size different values.
GetCacheSize()Returns the size of the cache.

PixelpartPath

Property
Description
InterpolationType InterpolationInterpolation applied to the path (None, Linear, Spline).
Method
Description
Get(float t)Returns the (interpolated) path point at time t (in range 0.0 to 1.0).
GetPoint(uint index)Returns the path point with the given index.
Set(Vector2 value)Sets the path to a constant point with position value.
AddPoint(float t, Vector2 value)Adds a path point at time t with position value.
SetPoint(uint index, Vector2 value)Sets the position of the path point with the given index to value.
MovePoint(uint index, Vector2 delta)Adds delta to the position of the point with the given index.
ShiftPoint(uint index, float delta)Moves the point with the given index forward or backward in time by delta.
RemovePoint(uint index)Removes the point with the given index from the path.
Clear()Removes all points from the path.
GetNumPoints()Returns the number of path points.
Move(Vector2 delta)Adds delta to the position of all path points.
Shift(float delta)Moves all path points forward or backward in time by delta.
EnableAdaptiveCache()Enables an adaptive cache, which resizes itself automatically if the number of path points increases or decreases a lot.
EnableFixedCache(uint size)Enables a fixed cache with the given size, which only stores up to size different values.
GetCacheSize()Returns the size of the cache.

PixelpartGradient

Property
Description
InterpolationType InterpolationInterpolation applied to the gradient (None, Linear, Spline).
Method
Description
Get(float t)Returns the (interpolated) gradient color at time t (in range 0.0 to 1.0).
GetPoint(uint index)Returns the color of the gradient mark with the given index.
Set(Color value)Sets the gradient to the constant color value.
AddPoint(float t, Color value)Adds a gradient mark at time t with color value.
SetPoint(uint index, Color value)Sets the color of the gradient mark with the given index to value.
MovePoint(uint index, Color delta)Adds delta to the color of the gradient mark with the given index.
ShiftPoint(uint index, float delta)Moves the gradient mark with the given index forward or backward in time by delta.
RemovePoint(uint index)Removes the gradient mark with the given index from the gradient.
Clear()Removes all marks from the gradient.
GetNumPoints()Returns the number of gradient marks.
Move(Color delta)Adds delta to the color of all gradient marks.
Shift(float delta)Moves all gradient marks forward or backward in time by delta.
EnableAdaptiveCache()Enables an adaptive cache, which resizes itself automatically if the number of gradient marks increases or decreases a lot.
EnableFixedCache(uint size)Enables a fixed cache with the given size, which only stores up to size different values.
GetCacheSize()Returns the size of the cache.

Platform Support

PlatformsArchitecturesSupported
Windowsx64, x86
Linuxx64, x86
macOSUniversal
Android
iOS
HTML5
Console

Plugin for Godot 3

Installation

Godot 3.3+ is required for the plugin. Installation is quite simple:

  1. Extract the addons folder from the plugin archive.
  2. Move the addons folder into your project's root folder.
  3. Start Godot and enable the plugin in the project settings.

Godot3 Installation

Usage

Importing An Effect

Save the effect you created in Pixelpart as a .ppfx file and place it in the folder of your Godot project. Then in Godot, import the effect file as a Pixelpart Effect. You usually want to set a scale value here, because effects typically appear small when imported into Godot.

Godot3 Import

Playing An Effect

In order to actually play the effect, create a new PixelpartEffect2D node in your scene (PixelpartEffect for 3D scenes) and move the imported effect asset onto the Effect field in the node's inspector window. The effect will now be played inside you game and you can use the effect node like any other CanvasItem node (Spatial node for 3D scenes).

Godot3 Play

Scripting

An effect and its particle emitters, sprites, force fields and colliders can be controlled dynamically from GDScript.

PixelpartEffect2D / PixelpartEffect

Attribute
Description
PixelpartEffectResource effectThe attached effect resource.
bool playingWhether the effect is currently playing or not.
bool loopWhether the effect restarts automatically after time loop_time.
float loop_timeTime after which the effect loops (only effective if loop = true).
float speedHow fast the effect is being played.
float frame_rateAt which rate the effect is simulated, in frames per second.
bool flip_hWhether the effect is flipped horizontally.
bool flip_vWhether the effect is flipped vertically.
int billboard_modeThe billboard mode, which is used to align the effect to the camera (Disabled (0), Enabled (1), Enabled with fixed Y-Axis (2)).
Method
Description
play(bool p)Starts playing the effect or pauses the effect if p = false.
pause()Pauses the effect.
restart()Restarts the effect and removes all existing particles.
reset()Restarts the effect, but does not remove existing particles.
is_playing()Returns whether the effect is currently playing or is paused.
get_time()Returns the time since the effect has started playing.
get_import_scale()Returns the scale applied to the effect resource.
get_particle_emitter(String name)Returns the particle emitter with the given name or null if no particle emitter with this name exists.
get_force_field(String name)Returns the force field with the given name or null if no force field with this name exists.
get_collider(String name)Returns the collider with the given name or null if no collider with this name exists.
get_sprite(String name)Returns the sprite with the given name or null if no sprite with this name exists.
get_particle_emitter_by_id(int id)Returns the particle emitter with the given id or null if no particle emitter with this id exists.
get_sprite_by_id(int id)Returns the sprite with the given id or null if no sprite with this id exists.
get_force_field_by_id(int id)Returns the force field with the given id or null if no field field with this id exists.
get_collider_by_id(int id)Returns the collider with the given id or null if no collider with this id exists.
get_particle_emitter_by_index(int index)Returns the particle emitter at the given index, starting with 0, or null if no particle emitter exists at this index.
get_sprite_by_index(int index)Returns the sprite at the given index, starting with 0, or null if no sprite exists at this index.
get_force_field_by_index(int index)Returns the force field at the given index, starting with 0, or null if no force field exists at this index.
get_collider_by_index(int index)Returns the collider at the given index, starting with 0, or null if no collider exists at this index.

PixelpartParticleEmitter

Attribute
Description
float lifetime_startWhen the emitter becomes active, in seconds.
float lifetime_durationHow long the emitter stays active, in seconds.
bool repeatWhether the emitter continues to stay active after lifetime_duration has passed.
int shapeShape of the emitter area (POINT, LINE, ELLIPSE, RECTANGLE, PATH).
int distributionHow particles are distributed in the emitter area (UNIFORM, CENTER, CENTER_REVERSE, BOUNDARY).
int spawn_modeIn which direction particles are generated in relation to the emitter area (FIXED, OUT, IN).
int instantiation_modeHow particles are created over the lifetime of the emitter (CONTINUOUS, BURST, BURST_DEATH).
int layerLayer on which the particles of the emitter are drawn, starting at 0.
bool visibleWhether the emitter and its particles are visible.
int particle_rotation_modeThe rotation mode of particles (ANGLE, VELOCITY, ALIGN, ALIGN_PATH).
float particle_lifespan_varianceHow much the lifespans of particles vary.
float particle_initial_velocity_varianceHow much the starting velocities of particles vary.
float particle_rotation_varianceHow much the rotations of particles vary.
float particle_angular_velocity_varianceHow much the angular velocities of particles vary.
float particle_size_varianceHow much the sizes of particles vary.
float particle_opacity_varianceHow much the opacities of particles vary.
Method
Description
get_name()Returns the name of the emitter.
get_id()Returns the id of the emitter.
get_parent_id()Returns the id of the emitter's parent.
is_active()Returns whether the emitter is active and spawns particles at the current point in time.
get_local_time()Returns the time fraction the emitter has been active for, in range 0.0 (0%) to 1.0 (100%).
spawn_particles(int count)Spawns count particles using the emitter.
get_shape_path()Returns the spawn path of the emitter if PATH is selected as the emitter shape.
get_width()Returns the curve describing the width of the emitter area.
get_height()Returns the curve describing the height of the emitter area.
get_orientation()Returns the curve describing the orientation of the emitter area in degrees.
get_direction()Returns the curve describing the direction of the emitter in degrees.
get_spread()Returns the curve describing the spread of the emitter.
get_num_particles()Returns the curve describing the number of the particles the emitter spawns per second.
get_particle_lifespan()Returns the curve describing the lifespan of particles of the emitter.
get_motion_path()Returns the motion path of the emitter.
get_particle_motion_path()Returns the motion path of particles of the emitter.
get_particle_initial_velocity()Returns the curve describing the starting velocity of particles of the emitter.
get_particle_acceleration()Returns the curve describing the acceleration of particles over their lifetime.
get_particle_radial_acceleration()Returns the curve describing the radial acceleration of particles over their lifetime.
get_particle_damping()Returns the curve describing the damping of particles over their lifetime.
get_particle_initial_rotation()Returns the curve describing the starting rotation of particles.
get_particle_rotation()Returns the curve describing the rotation of particles over their lifetime.
get_particle_weight()Returns the curve describing the weight of particles over their lifetime.
get_particle_bounce()Returns the curve describing the bounce of particles over their lifetime.
get_particle_friction()Returns the curve describing the friction of particles over their lifetime.
get_particle_initial_size()Returns the curve describing the starting size of particles.
get_particle_size()Returns the curve describing the size of particles over their lifetime.
get_particle_width()Returns the curve describing the width of particles over their lifetime.
get_particle_height()Returns the curve describing the height of particles over their lifetime.
get_particle_color()Returns the gradient describing the colors of particles over their lifetime.
get_particle_initial_opacity()Returns the curve describing the initial opacity of particles.
get_particle_opacity()Returns the curve describing the opacity of particles over their lifetime.

PixelpartSprite

Attribute
Description
float lifetime_startWhen the sprite becomes active, in seconds.
float lifetime_durationHow long the sprite stays active, in seconds.
bool repeatWhether the sprite continues to stay active after lifetime_duration has passed.
bool align_with_pathWhether the sprite's orientation aligns with the motion path.
Vector2 pivotThe point around which the sprite rotates, relative to the sprite center.
int layerLayer on which the sprite is draw, starting at 0.
bool visibleWhether the sprite is visible.
Method
Description
get_name()Returns the name of the sprite.
get_id()Returns the id of the sprite.
is_active()Returns whether the sprite is active.
get_local_time()Returns the time fraction the sprite has been active for, in range 0.0 (0%) to 1.0 (100%).
get_width()Returns the curve describing the width of the sprite.
get_height()Returns the curve describing the height of the sprite.
get_orientation()Returns the curve describing the orientation of the sprite in degrees.
get_motion_path()Returns the motion path of the sprite.
get_color()Returns the color gradient of the sprite.
get_opacity()Returns the curve describing the opacity of the sprite.

PixelpartForceField

Attribute
Description
float lifetime_startWhen the force field becomes active, in seconds.
float lifetime_durationHow long the force field stays active, in seconds.
bool repeatWhether the force field continues to stay active after lifetime_duration has passed.
int typeType of the force field (POINT, AREA).
float direction_varianceHow much the force direction is allowed to vary between grid cells of the force field.
float strength_varianceHow much the force strength is allowed to vary between grid cells of the force field.
Method
Description
get_name()Returns the name of the force field.
get_id()Returns the id of the force field.
is_active()Returns whether the force field is active.
get_local_time()Returns the time fraction the force field has been active for, in range 0.0 (0%) to 1.0 (100%).
set_grid_size(int width, int height)Sets the number of columns and rows of the force field grid. Each cell of the grid varies in direction and strength determined by direction_variance and strength_variance.
get_grid_width()Returns the number of columns of the force field grid.
get_grid_height()Returns the number of rows of the force field grid.
get_width()Returns the curve describing the width of the force field.
get_height()Returns the curve describing the height of the area force field.
get_orientation()Returns the curve describing the orientation of the area force field.
get_motion_path()Returns the motion path of the force field.
get_direction()Returns the curve describing the force direction of the area force field.
get_strength()Returns the curve describing the strength of the force field.

PixelpartCollider

Attribute
Description
float lifetime_startWhen the collider becomes active, in seconds.
float lifetime_durationHow long the collider stays active, in seconds.
bool repeatWhether the collider continues to stay active after lifetime_duration has passed.
Method
Description
get_name()Returns the name of the collider.
get_id()Returns the id of the collider.
is_active()Returns whether the collider is active.
get_local_time()Returns the time fraction the collider has been active for, in range 0.0 (0%) to 1.0 (100%).
add_point(Vector2 point)Adds a vertex to the collider at the given position.
set_point(int index, Vector2 point)Sets the position of the given vertex.
remove_point(int index)Removes the given vertex from the collider.
get_point(int index)Returns the position of the given vertex.
get_num_points()Returns the number of vertices.
get_bounce()Returns the curve describing the bounce of the collider.
get_friction()Returns the curve describing the friction of the collider.

PixelpartCurve

Attribute
Description
int interpolationInterpolation applied to the curve (NONE, LINEAR, SPLINE).
Method
Description
get(float t)Returns the (interpolated) value of the curve at time t (in range 0.0 to 1.0)
get_point(int index)Returns the value of the curve point with the given index.
set(float value)Sets the curve to a constant with value value.
add_point(float t, float value)Adds a curve point at time t with value value.
set_point(int index, float value)Sets the value of the curve point with the given index to value.
move_point(int index, float delta)Adds delta to the value of the curve point with the given index.
shift_point(int index, float delta)Moves the curve point with the given index forward or backward in time by delta.
remove_point(int index)Removes the point with the given index from the curve.
clear()Removes all points from the curve.
get_num_points()Returns the number of curve points.
move(float delta)Adds delta to the value of all curve points.
shift(float delta)Moves all curve points forward or backward in time by delta.
enable_adaptive_cache()Enables an adaptive cache, which resizes itself automatically if the number of curve points increases or decreases a lot.
enable_fixed_cache(int size)Enables a fixed cache with the given size, which only stores up to size different values.
get_cache_size()Returns the size of the cache.

PixelpartPath

Attribute
Description
int interpolationInterpolation applied to the path (NONE, LINEAR, SPLINE).
Method
Description
get(float t)Returns the (interpolated) path point at time t (in range 0.0 to 1.0).
get_point(int index)Returns the path point with the given index.
set(Vector2 value)Sets the path to a constant point with position value.
add_point(float t, Vector2 value)Adds a path point at time t with position value.
set_point(int index, Vector2 value)Sets the position of the path point with the given index to value.
move_point(int index, Vector2 delta)Adds delta to the position of the point with the given index.
shift_point(int index, float delta)Moves the point with the given index forward or backward in time by delta.
remove_point(int index)Removes the point with the given index from the path.
clear()Removes all points from the path.
get_num_points()Returns the number of path points.
move(Vector2 delta)Adds delta to the position of all path points.
shift(float delta)Moves all path points forward or backward in time by delta.
enable_adaptive_cache()Enables an adaptive cache, which resizes itself automatically if the number of path points increases or decreases a lot.
enable_fixed_cache(int size)Enables a fixed cache with the given size, which only stores up to size different values.
get_cache_size()Returns the size of the cache.

PixelpartGradient

Attribute
Description
int interpolationInterpolation applied to the gradient (NONE, LINEAR, SPLINE).
Method
Description
get(float t)Returns the (interpolated) gradient color at time t (in range 0.0 to 1.0).
get_point(int index)Returns the color of the gradient mark with the given index.
set(Color value)Sets the gradient to the constant color value.
add_point(float t, Color value)Adds a gradient mark at time t with color value.
set_point(int index, Color value)Sets the color of the gradient mark with the given index to value.
move_point(int index, Color delta)Adds delta to the color of the gradient mark with the given index.
shift_point(int index, float delta)Moves the gradient mark with the given index forward or backward in time by delta.
remove_point(int index)Removes the gradient mark with the given index from the gradient.
clear()Removes all marks from the gradient.
get_num_points()Returns the number of gradient marks.
move(Color delta)Adds delta to the color of all gradient marks.
shift(float delta)Moves all gradient marks forward or backward in time by delta.
enable_adaptive_cache()Enables an adaptive cache, which resizes itself automatically if the number of gradient marks increases or decreases a lot.
enable_fixed_cache(int size)Enables a fixed cache with the given size, which only stores up to size different values.
get_cache_size()Returns the size of the cache.

Platform Support

PlatformsArchitecturesSupported
Windowsx64, x86
Linuxx64, x86
macOSUniversal
Android
iOS
HTML5
Console

Third-Party Software

SoftwareVersionLicense
The OpenGL Extension Wrangler Library (GLEW)2.1.0LICENSE
Graphics Library Framework (GLFW)3.3.7LICENSE
OpenGL Mathematics (GLM)0.9.9.8LICENSE
nlohmann/json3.10.5LICENSE
zlib1.2.11LICENSE
Dear ImGui1.87LICENSE
ImFileDialogLICENSE
stb_image2.26LICENSE
stb_image_write1.15LICENSE
libogg1.3.5LICENSE
libwebm1.0.0.27LICENSE
libtheora1.1.1LICENSE
libvpx1.11.0LICENSE
gif-hLICENSE
Lua5.4.4LICENSE
IconFontCppHeadersLICENSE
godot-cpp3.4.3LICENSE
GCC RuntimeLICENSE
MinGW-w64 RuntimeLICENSE
Font: Open Sans3.000LICENSE
Font: Noto Sans2.002LICENSE
Font: Inconsolata3.001LICENSE
Font: Font Awesome5.15.4LICENSE
Images: Particle Pack by KenneyLICENSE
Images: Foliage Sprites by KenneyLICENSE
Images: VFX Sprites by Raffaele PiccaLICENSE
Color Palette: EDG16, EDG32 and EDG64 by ENDESGA
Color Palette: RESURRECT64 by Kerrie Lake
Color Palette: PICO-8 by Lexaloffle Games
Color Palette: AAP-64 by Adigun A. Polack
Color Palette: VINIK24 by Vinik
Color Palette: APOLLO by Adam Younis
Color Palette: SLSO8 by Luis Miguel Maldonado

Terms of Use

These Terms of Use are a legal agreement between you and Sören Möllers ("Licensor"). This agreement governs your acquisition and use of the Pixelpart software ("Software") directly from Licensor or indirectly through an authorized reseller or distributor. Please read this agreement carefully before purchasing and using the Software. It provides a license to use the Software and contains warranty information and liability disclaimers. If you use a free trial or demo version of the Software, this agreement will also govern that trial. By purchasing, downloading, installing and/or using the Software, you are confirming your acceptance of the Software and agreeing to become bound by the terms of this agreement. If you are entering into this agreement on behalf of a company or other legal entity, you represent that you have the authority to bind such entity and its affiliates to these terms and conditions. If you do not have such authority or if you do not agree with the terms and conditions of this agreement, do not purchase, download, install or use the Software, and you must not accept this agreement. The terms also apply to any updates, supplements, and support services for the Software, unless other terms accompany those items on delivery. If so, those terms apply.

License Grant

Licensor hereby grants you a personal, non-exclusive, perpetual licence to load and use the Software on devices under your control in accordance with the terms of this agreement. You are responsible for ensuring these devices meet the minimum requirements of the Software.

You are not permitted to:

  • Edit, alter, modify, adapt, translate or otherwise change the whole or any part of the Software nor permit the whole or any part of the Software to be combined with or become incorporated in any other software, nor decompile, disassemble or reverse engineer the Software or attempt to do any such things,
  • reproduce, copy, distribute or resell the Software for any commercial purpose,
  • allow any third party to use the Software on behalf of or for the benefit of any third party,
  • use the Software in any way which breaches any applicable local, national or international law.

Intellectual Property and Ownership

Licensor shall at all times retain ownership of the Software as originally downloaded by you and all subsequent downloads of the Software by you. The Software (and the copyright, and other intellectual property rights of whatever nature in the Software, including any modifications made thereto) are and shall remain the property of Licensor. Licensor reserves the right to grant licences to use the Software to third parties. This does not cover content you create using the Software (see below).

User-Created Content

Any videos, images and animations you create using the Software are your property and Licensor does not claim any ownership in your original content. It is your responsibility to ensure that the content you create does not infringe or violate any rights, including, but not limited to, trademarks, copyrights, and other intellectual property rights of Licensor or any third party.

Termination

This agreement is effective from the date you first purchase, download and/or use the Software and shall continue until terminated. You may terminate it at any time upon written notice to Licensor. It will also terminate immediately if you fail to comply with any term of this agreement. Upon such termination, the licenses granted by this agreement will immediately terminate and you agree to stop all access and use of the Software. The provisions that by their nature continue and survive will survive any termination of this agreement.

WARRANTY DISCLAIMER

Licensor hereby expressly disclaims any warranty for the Software. The Software is provided “as is”, without warranty of any kind, either express or implied, including, without limitation, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. You accept any and all risk arising out of use or performance of the Software. Because some jurisdictions do not allow the exclusion of or limitations on implied warranties or the limitations on the applicable statutory rights of a consumer, some or all of the above exclusions and limitations may not apply to you.

LIMITATION OF LIABILITY

To the fullest extent of applicable law, Licensor shall not be liable for special, incidental, or consequential damages resulting from possession, use, or malfunction of the software, including, but not limited to, damages to property, loss of goodwill, computer failure or malfunction, and, to the extent permitted by law, damages for personal injuries, property damage, or lost profits or punitive damages from any causes of action arising out of or related to this agreement or the Software, whether arising in tort (including negligence), contract, strict liability, or otherwise, whether or not Licensor has been advised of the possibility of such damages. To the fullest extent of applicable law, Licensor's liability for all damages shall not (except as required by applicable law) exceed the actual price paid by you for use of the Software.

Privacy Policy

Licensor does not collect your personal data using the Software. This does not apply to resellers or distributors of the Software who may collect personal data. Read their privacy policy for further information.