Banner

Getting Started

Pixelpart is an application designed for creating stunning visual effects in 2D and 3D. The application utilizes particles as the basic visual elements, and you have complete control over particle movement and appearance. You can even simulate natural forces like gravity, wind, and collisions to create realistic effects. It offers a variety of plugins that enable direct use in game engines. Furthermore, effects can be exported to sprite sheets, videos, image sequences and animated images.

User Interface

User Interface

The user interface of Pixelpart is composed of several windows:

  1. Scene: Shows the effect in action and a timeline at the bottom. The scene view is interactive, so you may move and manipulate objects while the effect is playing.
  2. Object Browser: Shows a list of all objects (particle types, particle emitters, force fields and colliders) in the scene.
  3. Properties: Lists the properties of the selected object.
  4. Keyframe Editor: Allows you to animate the selected property.
  5. Image Effects: Makes it possible to apply and configure post-processing effects.
  6. Render: Is used to render the effect to sprite sheets, image sequences and videos.

After starting Pixelpart for the first time, you will see the default 2D effect being played. To start from a more complex preset, create a new project by clicking New Project... in the toolbar or main menu. In the dialog that opens, select the preset you would like to use and click Create.

Your first effect is now playing inside the scene view, which is the most important place when designing effects. It shows the effect in action and lets you move and resize objects in the scene. You can navigate the scene view with the following commands:

Mouse / KeyboardAction (2D Effects)Action (3D Effects)
RMBMove the viewpoint.Look around in first-person view. In order to rotate around the selected object, hold Shift.
Mouse WheelAdjust the zoom.Adjust the zoom.
WMove the viewpoint down.Move forward.
SMove the viewpoint up.Move backward.
AMove the viewpoint to the right.Move to the left.
DMove the viewpoint to the left.Move to the right.

Creating Effects

Creating effects in Pixelpart involves designing different particle types, creating emitters for those particles and placing other objects that influence particle behavior. You have access to four different types of scene objects:

  • Particle types, which define the appearance and behavior of particles. This includes visual properties like the color and size of particles, but also behavioral properties like movement paths, acceleration and rotation. You can attach custom shaders to particles in order to define their appearance even more precisely. They are created with shader graphs, a form of visual scripting.
  • Particle emitters, which spawn new particles. Particle emitters continuously instantiate new particles of their assigned particle types in a defined area, like inside a circle or on a line. They also define in which direction particles are initially accelerated.
  • Force fields, which influence particles by applying forces to them and can be used to model things like gravity and wind.
  • Colliders, which are objects particles collide with and are used to simulate particles hitting and bouncing off solid surfaces.

Many properties of these objects can be animated with keyframe animation in order to make particles and object change over time. Similarly, you can animation the position of objects with motion paths.

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.

Using Effects

Once you have created an effect, you can use it outside of Pixelpart in two ways.

  • You can render the effect to a sprite sheet, image sequence, animated image, or video. These formats are compatible with a variety of game engines and video production software.
  • You can save the effect (as a .ppfx file) and directly import it into game engines using the provided runtime plugins.

Scene Objects

In Pixelpart you can use four types of scene objects particle types, particle emitters, force fields and colliders to change the appearance of your effects. Objects are managed in the Object Browser. Once you select an object in this view, a lot of options to change its behavior and appearance become available in the property window.

Object Browser

Objects can be added with in the toolbar or the context menu of the object browser. 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

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 browser, drag & drop an emitter onto a particle type to make it a sub-emitter of that particle type. This way, the emitter spawns particles from the particle positions of the parent particle type.

Object Browser

Property Window

The property window is the place where you can customize the selected object. It is divided into four categories:

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

Property Window

Many properties are animation properties that can change over the lifetime of an object and are marked with . Select the name of such a property to animate it in the keyframe editor.

Particle Emitters

Particle emitters continuously spawn new particles of their assigned particle types (child nodes in the object browser) in a defined area. They also define in which direction particles are accelerated initially.

Scene Emitter

Properties

The following properties can be adjusted in the property panel to define how emitters create particles.

General

PropertyDescription
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, Path, Sphere (3D), Cube (3D), Cylinder (3D)).
Particle DistributionWhere particles are spawned inside the emitter area.
Uniform: Particles are spawned at a randomly generated location (uniform distribution) inside the emitter area.
Center: Particles are created mostly around the center and less at the boundary.
Hole: More particles spawn near the emitter boundary and less in the center.
Boundary: Particles are created only on the emitter boundary.
Particle EmissionWhen particles are emitted.
Continuous: Emitter continuously spawns particles throughout its lifetime.
Burst (Start): Emitter instantiates all particles immediately after being created.
Burst (End): Particles are spawned at the end of the emitter lifetime, or - if the emitter is a sub-emitter - when particles of the parent emitter reach the end of their lifetime.
SizeExtent of the emitter area.
OrientationOrientation of the emitter area in degrees. For 3D effects, the orientation is composed of roll, yaw and pitch.
DirectionDirection in which particles move when spawned, in degrees. For 3D effects, the direction is composed of roll, yaw and pitch.
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.

Motion

PropertyDescription
PositionPosition of the emitter. This option allows you to specify a motion path the emitter traverses during its lifetime. It is shown in the scene view if the property is selected.

Particle Types

Particle types define the appearance and behavior of particles. In the object browser, they are always child nodes of particle emitters.

Scene Particle Type

Properties

The following properties can be adjusted in the property panel to influence the look and behavior of the particles.

General

PropertyDescription
LifespanHow long particles stay alive after being created. You can also specify a variation for this parameter, so that individual particles have different lifespans.
NumberHow many particles are created by the emitter.

Visual

PropertyDescription
MaterialMaterial that 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 the shader can be accessed quickly with .
RendererWhich renderer is used for drawing the particles.
Sprite Renderer: Draws each particle as a separate sprite.
Trail Renderer: Generates continuous trails along the path of particles with the same parent particle.
Click to show additional options for each renderer.
Blend ModeHow the particles are blended together and composed with other objects in the effect.
Normal: Particles are blended together based on their opacity.
Additive: Particle colors are added together.
Subtractive: Particle colors are subtracted from each other.
LayerLayer the particles are drawn on (only for 2D effects). Particles on upper layers occlude those on lower layers.
ColorColor of each particle over its lifetime, displayed as a color gradient. Double-click or right-click the color gradient 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 OpacityOpacity of each particle when created.
OpacityOpacity of each particle over its lifetime as a fraction of its initial opacity.
Initial SizeSize of each particle when created.
SizeSize of each particle over its lifetime as a fraction of its initial size.

Motion

PropertyDescription
PositionMotion path for particles. It is shown in the scene view if the property is selected. You can specify how much particles are influenced by the path with the Force parameter. Set to 0 to disable motion paths.
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 RotationRotation of each particle when created, in degrees. For 3D effects, rotation is composed of roll, yaw and pitch.
RotationHow particles rotate over time from their initial rotation. There are two possible modes:
Angle: Set rotation angle of each particle over its lifetime.
Angular Velocity: Set angular velocity of each particle over its lifetime.
AlignmentParticles can align to different objects and directions:
None: Particles do not align to anything.
Camera: Particles always face the camera (3D).
Motion: Particles align to their own velocity vector.
Emission direction: Particles face their emitter.
Emitter: Particles copy the rotation of their emitter.
PivotCenter of rotation, relative to the particle's center.

Physics

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

Force Fields

Force fields affect particles by attracting, repelling or accelerating them in some direction and can be used to model gravity, wind and other natural effects. Add force fields using the object browser, the main menu or alternatively, directly place a force field in the scene by right-clicking on the scene view while holding CTRL.

Scene Force Field

Properties

The following properties can be adjusted in the property panel to change the behavior of a force field.

General

PropertyDescription
LifetimeTime period during which the force field is active. If Repeat is selected, the force field always 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 the force area. In contrast to point forces, this direction is not towards or away from the force center, but set as a separate parameter.
SizeExtent of the force field area.
OrientationOrientation of the force field, in degrees. For 3D effects, the orientation is composed of roll, yaw and pitch.
Exclusion ListList of particle types not affected by the force field. Add and remove particle types via the context menu (right-click).

Motion

PropertyDescription
PositionPosition of the force field. You can also specify a motion path along which the force field travels over its lifetime. It is shown in the scene view if the property is selected.

Physics

PropertyDescription
DirectionDirection in which particles are accelerated, in degrees. For 3D effects, the direction is composed of roll, yaw and pitch. 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 for direction and strength. 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 are only available for 2D effects.

Colliders act as objects particles collide with and consist of connected line segments. Add colliders using the object browser, the main menu or alternatively, by holding CTRL and left-clicking on the scene view. You can then set the new collider's vertices with additional clicks.

Scene Collider

Properties

The following properties can be adjusted in the property panel to change the behavior of a collider.

General

PropertyDescription
LifetimeTime period during which the collider is active. If Repeat is selected, the collider stays active.
VerticesList of vertices that form the connected line segments of the collider. You can add and remove vertices using the context menu (right-click).
Exclusion ListList of particle types not affected by the collider. Add and remove particle types via the context menu (right-click).

Physics

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

Keyframe Animation

Keyframe animation allows you to animate properties of objects over time and 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. The Keyframe Editor now shows the animation keyframes of the selected property. 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. 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. Note that properties can also have multiple components, like the size (width, height) of particles. Select which component you want to edit with the buttons in the toolbar above the editor.

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

OptionDescription
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 SpacingAdjust the 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

Motion Paths

Using motion paths you can control how emitters, particles and force fields 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 of an object, select its Position property in the property panel.

To add a new waypoint, hold Shift and click on an empty spot in the scene view. Waypoints you add can be repositioned by moving them in the scene view. In order to remove existing waypoints, click on them while holding Shift. To change the timing of each waypoint and the path interpolation, use the keyframe editor.

In 2D, motion paths can be drawn as well. Click next to the Position property and then move the mouse over the scene view while holding the left mouse button. This automatically adds waypoints along the path you draw.

Motion Path

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 consists 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.

One example 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

Creating Shader Graphs

The shader graph of a particle type can be modified in the shader graph window. To open this window, click Shader Graph... in the Material property of the particle type.

New Shader Graphs

Each particle type already has a default shader graph, which applies a texture and combines it with the color set in the particle properties. To assign a completely new shader graph to the object click New or select a preset from the drop-down menu.

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
2Vector 2
3Vector 3
4Vector 4
BBoolean
CColor

Modifying Nodes

After adding a new node, connect its input and output pins to the rest of the graph by dragging out links from each pin. The pin color and shape denote the data type that is expected for the attribute. For example, the red color denotes a 4-component vector, which is used for color values. Most of the time, different data types can be converted into one another.

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

Applying Changes

In order to apply your changes to the particle type, click Apply in the toolbar. Otherwise, they are discarded when you close the window.

List of Available 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 CoordinatePer-vertex texture coordinate for the current drawable. Used to sample textures.
Input: ColorColor of the particle. This input can be set with the Color attribute in the Visuals tab.
Input: VelocityVelocity vector of the particle.
Input: ForceForce vector of the particle.
Input: LifeLife left for the particle, from 1.0 (particle has just spawned) to 0.0 (particle is about to disappear).
Input: Object IDID 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 particle emitter 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, NumberReduces 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 sprite 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.

Nodes: Logic

NodeInputsDescription
Negation (NOT)ValueNegates the boolean Value.
Conjunction (AND)A, BOutputs true if and only if both A and B are true.
Disjunction (OR)A, BOutputs true if and only if A or B is true.
Exclusive Disjunction (XOR)A, BOutputs true if and only if either A or B is true.
BranchPredicate, True, FalseOutputs the value for True if Predicate evaluates to true and the value for False otherwise.

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: Utility

NodeInputsDescription
Frame AnimationTimeComputes the frame (in a sprite sheet, for example) that has been reached after time Time. The animation is characterized by the given parameters.
Value CurveValueDefines a graph using keyframes and samples this graph at position Value.
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 are post-processing effects that change the appearance of the whole effect. You can specify which image effects are used and in which order they are applied using the Image Effects window. 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 Samples, Sigma and Range parameters control how 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.

Main Menu

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

File Menu

ItemDescription
New Project...Create a new project, replacing the current one.
Open Project...Load a project from file.
Add Project...Add objects of another effect to the current project.
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

ItemDescription
UndoUndo the last action.
RedoRedo a previously undone action.
VisibleShow/hide the selected object.
RemoveRemove the selected object.
DuplicateClone the selected object.
Add Sub-EmitterAdd a new particle emitter as a sub-emitter of the selected particle type.
Add EmitterAdd a new particle emitter.
Add Particle TypeAdd a new particle type to the selected emitter.
Add Force FieldAdd a new force field to the scene.
Add ColliderAdd a new collider to the scene (only 2D).
3D EffectChange whether the effect is a 3D or 2D effect.

Simulation Menu

ItemDescription
PlayResume the effect playback.
PausePause the effect playback.
RestartRestart the effect playback.
DurationSet the duration of the effect. The simulation restarts automatically after that time has passed.
PlaybackSet the playback speed.

View Menu

ItemDescription
Zoom InZoom in by 10% (only 2D).
Zoom OutZoom out by 10% (only 2D).
Reset ViewReset zoom to 100% and move the camera back to the scene origin.
Fit to FrameFit the effect into the field of view.
CameraChange properties of the virtual camera.
ResolutionChange the image resolution.
BackgroundChange the background color.
LayoutSelect layout of the user interface from a set of predefined layouts.
ShowToggle what is shown for the active effect, like the background color or the debug overlay.

Help Menu

ItemDescription
Documentation...Open the documentation.
About...Show information about the application.

Rendering Effects

To use effects outside of Pixelpart, they need to be rendered to sprite sheets, image sequences, animated images or videos. Open the Render window by clicking Render... in the toolbar or the main menu.

Render Window

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

OptionDescription
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.
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 loop, so the end of the effect blends seamlessly with the beginning.
SeamlessRender the effect with seamless edges. This is useful for animations that are used as part of a tilemap, for example. Only available for 2D effects.
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 Pixelpart has rendered the effect, 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 FormatDescription
Sprite Sheetpng, tga, bmp, jpegRender the effect onto a sprite sheet. Texture Origin determines the corner where the first animation frame is placed.
Image Sequencepng, tga, bmp, jpegExport the effect as a series of individual image files. You can 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, jpegExport the selected frame as an image file.
Animated Imagegif, apngExport the effect as an animated image file.
Videoogv (Theora), webm (VP8), avi (Motion JPEG)Export 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 the current game state. This can be achieved with the extensive scripting API that Pixelpart provides.

Plugin Play

Plugin for Unity

Requirements

  • Unity 2017 or higher

Installation

  1. Start the Unity Editor and open the project in which you want to use the plugin.
  2. Import the plugin package with Assets > Import Package (main menu).
  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. The original .ppfx file is no longer needed and can be deleted. If the effect appears too small or too large in your scene, select the corresponding .asset file and set a different scale value in the inspector.

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 types, emitters, force fields and colliders can be controlled dynamically with scripts.

PixelpartEffect

Field
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.
List<Shader> ParticleShadersShaders used to render each particle type.
bool FlipHWhether the effect is flipped horizontally.
bool FlipVWhether the effect is flipped vertically.

Property
Description
bool Is3D (read-only)Whether the effect is 3D or 2D.
float CurrentTime (read-only)Time since the effect has started playing.
float AssetScale (read-only)Scale of the attached effect asset.

Method
Description
void RestartEffect()Restarts the effect and removes all existing particles.
void ResetEffect()Restarts the effect, but does not remove existing particles.
PixelpartParticleEmitter FindParticleEmitter(string name)Returns the particle emitter with the given name or null if no particle emitter with this name exists.
PixelpartParticleType FindParticleType(string name)Returns the particle type with the given name or null if no particle type with this name exists.
PixelpartForceField FindForceField(string name)Returns the force field with the given name or null if no force field with this name exists.
PixelpartCollider FindCollider(string name)Returns the collider with the given name or null if no collider with this name exists.
PixelpartParticleEmitter GetParticleEmitter(uint id)Returns the particle emitter with the given id or null if no particle emitter with this id exists.
PixelpartParticleType GetParticleType(uint id)Returns the particle type with the given id or null if no particle type with this id exists.
PixelpartForceField GetForceField(uint id)Returns the force field with the given id or null if no force field with this id exists.
PixelpartCollider GetCollider(uint id)Returns the collider with the given id or null if no collider with this id exists.
PixelpartParticleEmitter GetParticleEmitterAtIndex(int index)Returns the particle emitter at the given index, starting with 0, or null if no particle emitter exists at this index.
PixelpartParticleType GetParticleTypeAtIndex(int index)Returns the particle type at the given index, starting with 0, or null if no particle type exists at this index.
PixelpartForceField GetForceFieldAtIndex(int index)Returns the force field at the given index, starting with 0, or null if no force field exists at this index.
PixelpartCollider GetColliderAtIndex(int index)Returns the collider at the given index, starting with 0, or null if no collider exists at this index.

PixelpartParticleEmitter

Property
Description
uint Id (read-only)Unique ID of the emitter.
uint ParentId (read-only)ID of the parent particle type.
string Name (read-only)Name of the emitter.
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.
bool Active (read-only)Whether the emitter is active and spawns particles at the current point in time.
float LocalTime (read-only)Time fraction the emitter has been active for, in range 0.0 (0%) to 1.0 (100%).
PixelpartCurve3 Position (read-only)Curve describing the position of the emitter over time.
ShapeType ShapeShape of the emitter area (Point, Line, Ellipse, Rectangle, Path, Ellipsoid, Cuboid, Cylinder).
PixelpartCurve3 Path (read-only)Spawn path of the emitter if Path is selected as the emitter shape.
PixelpartCurve3 Size (read-only)Curve describing the size of the emitter area over time.
PixelpartCurve3 Orientation (read-only)Curve describing the orientation of the emitter area over time.
DistributionType DistributionHow particles are distributed in the emitter area (Uniform, Center, Hole, Boundary).
EmissionModeType EmissionModeWhen particles are spawned during the lifetime of the emitter (Continuous, BurstStart, BurstEnd).
DirectionModeType DirectionModeIn which direction particles are generated in relation to the emitter area (Fixed, Outwards, Inwards).
PixelpartCurve3 Direction (read-only)Curve describing the emission direction of the emitter in degrees.
PixelpartCurve Spread (read-only)Curve describing the variety in particle directions of the emitter in degrees.

PixelpartParticleType

Property
Description
uint Id (read-only)Unique ID of the particle type.
uint ParentId (read-only)ID of the emitter creating particles of this type.
string Name (read-only)Name of the particle type.
PixelpartCurve3 Position (read-only)Motion path of particles.
PixelpartCurve NumParticles (read-only)Curve describing the number of the particles spawned.
PixelpartCurve Lifespan (read-only)Curve describing the lifespan of particles.
float LifespanVarianceHow much the lifespans of particles vary.
bool PositionRelativeWhether the position of particles is calculated relative to their emitter.
float MotionPathForceHow much the motion path influences the particle position.
PixelpartCurve InitialVelocity (read-only)Curve describing the initial velocity of particles.
float VelocityVarianceHow much the velocities of particles vary.
PixelpartCurve Acceleration (read-only)Curve describing the linear acceleration of particles over their lifetime.
PixelpartCurve RadialAcceleration (read-only)Curve describing the radial acceleration of particles over their lifetime.
PixelpartCurve Damping (read-only)Curve describing the damping of particles over their lifetime.
RotationModeType RotationModeWhether the Rotation property is interpreted as an angle or an angular velocity (Angle, Velocity).
AlignmentModeType AlignmentModeHow particles align themselves (None, Camera, Motion, Emission, Emitter).
PixelpartCurve3 InitialRotation (read-only)Curve describing the starting rotation of particles, in degrees.
PixelpartCurve3 Rotation (read-only)Curve describing the rotation (or angular velocity) of particles over their lifetime, in degrees.
Vector3 RotationVarianceHow much the rotations of particles vary, in degrees.
Vector3 AngularVelocityVarianceHow much the angular velocities of particles vary, in degrees per second.
Vector3 PivotPoint around which the particle rotates, relative to the particle center.
PixelpartCurve Weight (read-only)Curve describing the weight of particles over their lifetime.
PixelpartCurve Bounce (read-only)Curve describing the bounciness of particles over their lifetime.
PixelpartCurve Friction (read-only)Curve describing the friction of particles over their lifetime.
bool VisibleWhether particles of the particle type are visible.
int Layer (2D effects)Layer on which the particles are drawn inside the effect.
BlendModeType BlendModeHow particles are blended together with the rest of the effect (Normal, Additive, Subtractive).
PixelpartCurve InitialSize (read-only)Curve describing the starting size of particles.
PixelpartCurve3 Size (read-only)Curve describing the width and height of particles as a fraction of their starting size over their lifetime.
float SizeVarianceHow much the sizes of particles vary.
PixelpartGradient Color (read-only)Curve describing the color of particles over their lifetime.
Vector3 ColorVarianceHow much the colors of particles vary, denoted as variances in Hue, Saturation and Value (HSV model).
PixelpartCurve InitialOpacity (read-only)Returns the curve describing the initial opacity of particles.
PixelpartCurve Opacity (read-only)Returns the curve describing the opacity of particles over their lifetime.
float OpacityVarianceHow much the opacities of particles vary.

Method
Description
void SpawnParticles(int count)Spawns count particles.

PixelpartForceField

Property
Description
uint Id (read-only)Unique ID of the force field.
string Name (read-only)Name of the force field.
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.
bool Active (read-only)Whether the force field is active.
float LocalTime (read-only)Time fraction the force field has been active for, in range 0.0 (0%) to 1.0 (100%).
PixelpartCurve3 Position (read-only)Motion path of the force field.
ForceType TypeType of the force field (Point, Area).
PixelpartCurve3 Size (read-only)Curve describing the size of the force field.
PixelpartCurve3 Orientation (read-only)Curve describing the orientation of the force field, in degrees.
PixelpartCurve3 Direction (read-only)Curve describing the direction of the area force field, in degrees.
PixelpartCurve Strength (read-only)Curve describing the strength of the force field.
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.
Vector3Int GridSizeThe number of cells in each dimension of the force field's grid. Each cell of the grid varies in direction and strength (determined by DirectionVariance and StrengthVariance).

PixelpartCollider

Property
Description
uint Id (read-only)Unique ID of the collider.
string Name (read-only)Name of the collider.
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.
bool Active (read-only)Whether the collider is active.
float LocalTime (read-only)Time fraction the collider has been active for, in range 0.0 (0%) to 1.0 (100%).
int NumPoints (read-only)Number of collider vertices.
PixelpartCurve Bounce (read-only)Curve describing the bounciness of the collider.
PixelpartCurve Friction (read-only)Curve describing the friction of the collider.

Method
Description
void AddPoint(Vector3 point)Adds a vertex to the collider at the given position.
void SetPoint(int index, Vector3 point)Sets the position of the given vertex.
void RemovePoint(int index)Removes the given vertex from the collider.
Vector3 GetPoint(int index)Returns the location of the given vertex.

PixelpartCurve

Property
Description
InterpolationType InterpolationInterpolation applied to the curve (None, Linear, Spline).
int NumPoints (read-only)Number of curve points.
int CacheSize (read-only)Size of the cache.

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

PixelpartCurve3

Property
Description
InterpolationType InterpolationInterpolation applied to the path (None, Linear, Spline).
int NumPoints (read-only)Number of curve points.
int CacheSize (read-only)Size of the cache.

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

PixelpartGradient

Property
Description
InterpolationType InterpolationInterpolation applied to the gradient (None, Linear, Spline).
int NumPoints (read-only)Number of curve points.
int CacheSize (read-only)Size of the cache.

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

Platform Support

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

Plugin for Godot 3

Requirements

  • Godot 3.3 or higher

Installation

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

Usage

Importing An Effect

Save the effect you created in Pixelpart as a .ppfx file and place it in a folder inside your Godot project. Then in Godot, import the effect file as a Pixelpart Effect. You can set a scale value here if the effect appears too small or too large when imported into Godot.

Godot3 Import

Playing An Effect

In order to actually play the effect, create a new PixelpartEffect2D node in your 2D 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 or Spatial node.

Godot3 Play

Scripting

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

PixelpartEffect2D / PixelpartEffect

Property
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.

Method
Description
void play(bool p)Starts playing the effect or pauses the effect if p = false.
void pause()Pauses the effect.
void restart()Restarts the effect and removes all existing particles.
void reset()Restarts the effect, but does not remove existing particles.
bool is_playing()Returns whether the effect is currently playing or is paused.
float get_time()Returns the time since the effect has started playing.
float get_import_scale()Returns the scale applied to the effect resource.
PixelpartParticleEmitter find_particle_emitter(String name)Returns the particle emitter with the given name or null if no particle emitter with this name exists.
PixelpartParticleType find_particle_type(String name)Returns the particle type with the given name or null if no particle type with this name exists.
PixelpartForceField find_force_field(String name)Returns the force field with the given name or null if no force field with this name exists.
PixelpartCollider find_collider(String name)Returns the collider with the given name or null if no collider with this name exists.
PixelpartParticleEmitter get_particle_emitter(int id)Returns the particle emitter with the given id or null if no particle emitter with this id exists.
PixelpartParticleType get_particle_type(int id)Returns the particle type with the given id or null if no particle type with this id exists.
PixelpartForceField get_force_field(int id)Returns the force field with the given id or null if no field field with this id exists.
PixelpartCollider get_collider(int id)Returns the collider with the given id or null if no collider with this id exists.
PixelpartParticleEmitter get_particle_emitter_at_index(int index)Returns the particle emitter at the given index, starting with 0, or null if no particle emitter exists at this index.
PixelpartParticleType get_particle_type_at_index(int index)Returns the particle type at the given index, starting with 0, or null if no particle type exists at this index.
PixelpartForceField get_force_field_at_index(int index)Returns the force field at the given index, starting with 0, or null if no force field exists at this index.
PixelpartCollider get_collider_at_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, ELLIPSOID, CUBOID, CYLINDER).
int distributionHow particles are distributed in the emitter area (UNIFORM, CENTER, HOLE, BOUNDARY).
int emission_modeHow particles are created over the lifetime of the emitter (CONTINUOUS, BURST_START, BURST_END).
int direction_modeIn which direction particles are accelerated towards in relation to the emitter area (FIXED, OUTWARDS, INWARDS).

Method
Description
int get_id()Returns the ID of the emitter.
int get_parent_id()Returns the ID of the parent particle type.
String get_name()Returns the name of the emitter.
bool is_active()Returns whether the emitter is active and spawns particles at the current point in time.
float get_local_time()Returns the time fraction the emitter has been active for, in range 0.0 (0%) to 1.0 (100%).
PixelpartCurve3 get_position()Returns the motion path of the emitter.
PixelpartCurve3 get_path()Returns the spawn path of the emitter if PATH is selected as the emitter shape.
PixelpartCurve3 get_size()Returns the curve describing the size of the emitter area.
PixelpartCurve3 get_orientation()Returns the curve describing the orientation of the emitter area in degrees.
PixelpartCurve3 get_direction()Returns the curve describing the emission direction in degrees.
PixelpartCurve get_spread()Returns the curve describing the variance in emission direction in degrees.

PixelpartParticleType

Attribute
Description
float lifespan_varianceHow much the lifespans of particles vary.
bool position_relativeWhether the position of particles is tied to the position of their emitter.
float motion_path_forceHow much the particles follow the motion path.
float velocity_varianceHow much the velocities of particles vary.
int rotation_modeRotation mode of particles (ANGLE, VELOCITY).
int alignment_modeTo which object or vector particles align (NONE, CAMERA, MOTION, EMISSION, EMITTER).
Vector3 rotation_varianceHow much the rotations of particles vary.
Vector3 angular_velocity_varianceHow much the angular velocities of particles vary.
Vector3 pivotThe point around which the particles rotates, relative to the particle center.
bool visibleWhether the particles of this particle type are visible.
int layerLayer on which the particles are drawn, starting at 0.
float size_varianceHow much the sizes of particles vary.
float color_hue_varianceHow much the hue of particles varies.
float color_saturation_varianceHow much the color saturation of particles varies.
float color_value_varianceHow much the color value of particles varies.
float opacity_varianceHow much the opacities of particles vary.

Method
Description
int get_id()Returns the ID of the particle type.
int get_parent_id()Returns the ID of the parent particle emitter.
String get_name()Returns the name of the particle type.
PixelpartCurve3 get_position()Returns the motion path of particles.
PixelpartCurve get_num_particles()Returns the curve describing the number of the particles spawned.
PixelpartCurve get_lifespan()Returns the curve describing the lifespan of particles.
PixelpartCurve get_initial_velocity()Returns the curve describing the starting velocity of particles.
PixelpartCurve get_acceleration()Returns the curve describing the acceleration of particles over their lifetime.
PixelpartCurve get_radial_acceleration()Returns the curve describing the radial acceleration of particles over their lifetime.
PixelpartCurve get_damping()Returns the curve describing the damping of particles over their lifetime.
PixelpartCurve3 get_initial_rotation()Returns the curve describing the starting rotation of particles.
PixelpartCurve3 get_rotation()Returns the curve describing the rotation of particles over their lifetime.
PixelpartCurve get_weight()Returns the curve describing the weight of particles over their lifetime.
PixelpartCurve get_bounce()Returns the curve describing the bounce of particles over their lifetime.
PixelpartCurve get_friction()Returns the curve describing the friction of particles over their lifetime.
int get_blend_mode()Returns the blend mode of the particles (NORMAL, ADDITIVE, SUBTRACTIVE).
PixelpartCurve get_initial_size()Returns the curve describing the starting size of particles.
PixelpartCurve3 get_size()Returns the curve describing the size of particles over their lifetime.
PixelpartGradient get_color()Returns the gradient describing the colors of particles over their lifetime.
PixelpartCurve get_initial_opacity()Returns the curve describing the initial opacity of particles.
PixelpartCurve get_opacity()Returns the curve describing the opacity of particles over their lifetime.
void spawn_particles(int count)Spawns count particles of this particle type.

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
int get_id()Returns the ID of the force field.
String get_name()Returns the name of the force field.
bool is_active()Returns whether the force field is active.
float get_local_time()Returns the time fraction the force field has been active for, in range 0.0 (0%) to 1.0 (100%).
PixelpartCurve3 get_position()Returns the motion path of the force field.
PixelpartCurve3 get_size()Returns the curve describing the size of the force field.
PixelpartCurve3 get_orientation()Returns the curve describing the orientation of the force field.
PixelpartCurve3 get_direction()Returns the curve describing the force direction of the area force field.
PixelpartCurve get_strength()Returns the curve describing the strength of the force field.
void set_grid_size(int width, int height, int depth)Sets the number of cells in each dimension of the force field grid. Each cell of the grid varies in direction and strength determined by direction_variance and strength_variance.
int get_grid_width()Returns the number of grid cells on the X axis of the force field grid.
int get_grid_height()Returns the number of grid cells on the Y axis of the force field grid.
int get_grid_depth()Returns the number of grid cells on the Z axis of the force field grid.

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
int get_id()Returns the ID of the collider.
String get_name()Returns the name of the collider.
bool is_active()Returns whether the collider is active.
float get_local_time()Returns the time fraction the collider has been active for, in range 0.0 (0%) to 1.0 (100%).
void add_point(Vector3 point)Adds a vertex to the collider at the given position.
void set_point(int index, Vector3 point)Sets the position of the given vertex.
void remove_point(int index)Removes the given vertex from the collider.
Vector3 get_point(int index)Returns the position of the given vertex.
int get_num_points()Returns the number of vertices.
PixelpartCurve get_bounce()Returns the curve describing the bounciness of the collider.
PixelpartCurve 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
float get(float t)Returns the (interpolated) value of the curve at time t (in range 0.0 to 1.0)
float get_point(int index)Returns the value of the curve point with the given index.
void set(float value)Sets the curve to a constant with value value.
void add_point(float t, float value)Adds a curve point at time t with value value.
void set_point(int index, float value)Sets the value of the curve point with the given index to value.
void move_point(int index, float delta)Adds delta to the value of the curve point with the given index.
void shift_point(int index, float delta)Moves the curve point with the given index forward or backward in time by delta.
void remove_point(int index)Removes the point with the given index from the curve.
void clear()Removes all points from the curve.
int get_num_points()Returns the number of curve points.
void move(float delta)Adds delta to the value of all curve points.
void shift(float delta)Moves all curve points forward or backward in time by delta.
void enable_adaptive_cache()Enables an adaptive cache, which resizes itself automatically if the number of curve points increases or decreases a lot.
void enable_fixed_cache(int size)Enables a fixed cache with the given size, which only stores up to size different values.
int get_cache_size()Returns the size of the cache.

PixelpartCurve3

Attribute
Description
int interpolationInterpolation applied to the path (NONE, LINEAR, SPLINE).

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

PixelpartGradient

Attribute
Description
int interpolationInterpolation applied to the gradient (NONE, LINEAR, SPLINE).

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

Platform Support

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

Plugin for Godot 4

Requirements

  • Godot 4.0 or higher

Installation

  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.

Usage

Importing An Effect

Save the effect you created in Pixelpart as a .ppfx file and place it in a folder inside your Godot project. Then in Godot, import the effect file as a Pixelpart Effect. You can set a scale value here if the effect appears too small or too large when imported into Godot.

Godot4 Import

Playing An Effect

In order to actually play the effect, create a new PixelpartEffect2D node in your 2D 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 Node2D or Node3D node.

Godot4 Play

Scripting

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

PixelpartEffect2D / PixelpartEffect

Property
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.

Method
Description
void play(bool p)Starts playing the effect or pauses the effect if p = false.
void pause()Pauses the effect.
void restart()Restarts the effect and removes all existing particles.
void reset()Restarts the effect, but does not remove existing particles.
bool is_playing()Returns whether the effect is currently playing or is paused.
float get_time()Returns the time since the effect has started playing.
void set_loop(bool l)Sets loop.
bool get_loop()Returns loop.
void set_loop_time(float l)Sets loop_time.
float get_loop_time()Returns loop_time.
void set_speed(float s)Sets speed.
float get_speed()Returns speed.
void set_frame_rate(float r)Sets frame_rate.
float get_frame_rate()Returns frame_rate.
void set_flip_h(bool flip)Sets flip_h.
void set_flip_v(bool flip)Sets flip_v.
bool get_flip_h()Returns flip_h.
bool get_flip_v()Returns flip_v.
float get_import_scale()Returns the scale applied to the effect resource.
void set_effect(PixelpartEffectResource effect_res)Sets effect.
PixelpartEffectResource get_effect()Returns effect.
PixelpartParticleEmitter find_particle_emitter(String name)Returns the particle emitter with the given name or null if no particle emitter with this name exists.
PixelpartParticleType find_particle_type(String name)Returns the particle type with the given name or null if no particle type with this name exists.
PixelpartForceField find_force_field(String name)Returns the force field with the given name or null if no force field with this name exists.
PixelpartCollider find_collider(String name)Returns the collider with the given name or null if no collider with this name exists.
PixelpartParticleEmitter get_particle_emitter(int id)Returns the particle emitter with the given id or null if no particle emitter with this id exists.
PixelpartParticleType get_particle_type(int id)Returns the particle type with the given id or null if no particle type with this id exists.
PixelpartForceField get_force_field(int id)Returns the force field with the given id or null if no field field with this id exists.
PixelpartCollider get_collider(int id)Returns the collider with the given id or null if no collider with this id exists.
PixelpartParticleEmitter get_particle_emitter_at_index(int index)Returns the particle emitter at the given index, starting with 0, or null if no particle emitter exists at this index.
PixelpartParticleType get_particle_type_at_index(int index)Returns the particle type at the given index, starting with 0, or null if no particle type exists at this index.
PixelpartForceField get_force_field_at_index(int index)Returns the force field at the given index, starting with 0, or null if no force field exists at this index.
PixelpartCollider get_collider_at_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, ELLIPSOID, CUBOID, CYLINDER).
int distributionHow particles are distributed in the emitter area (UNIFORM, CENTER, HOLE, BOUNDARY).
int emission_modeHow particles are created over the lifetime of the emitter (CONTINUOUS, BURST_START, BURST_END).
int direction_modeIn which direction particles are accelerated towards in relation to the emitter area (FIXED, OUTWARDS, INWARDS).

Method
Description
int get_id()Returns the ID of the emitter.
int get_parent_id()Returns the ID of the parent particle type.
String get_name()Returns the name of the emitter.
void set_lifetime_start(float time)Sets lifetime_start.
void set_lifetime_duration(float time)Sets lifetime_duration.
void set_repeat(bool value)Sets repeat.
float get_lifetime_start()Returns lifetime_start.
float get_lifetime_duration()Returns lifetime_duration.
bool get_repeat()Returns repeat.
bool is_active()Returns whether the emitter is active and spawns particles at the current point in time.
float get_local_time()Returns the time fraction the emitter has been active for, in range 0.0 (0%) to 1.0 (100%).
PixelpartCurve3 get_position()Returns the motion path of the emitter.
void set_shape(int type)Sets shape.
int get_shape()Returns shape.
PixelpartCurve3 get_path()Returns the spawn path of the emitter if PATH is selected as the emitter shape.
PixelpartCurve3 get_size()Returns the curve describing the size of the emitter area.
PixelpartCurve3 get_orientation()Returns the curve describing the orientation of the emitter area in degrees.
void set_distribution(int mode)Sets distribution.
void set_emission_mode(int mode)Sets emission_mode.
void set_direction_mode(int mode)Sets direction_mode.
int get_distribution()Returns distribution.
int get_emission_mode()Returns emission_mode.
int get_direction_mode()Returns direction_mode.
PixelpartCurve3 get_direction()Returns the curve describing the emission direction in degrees.
PixelpartCurve get_spread()Returns the curve describing the variance in emission direction in degrees.

PixelpartParticleType

Attribute
Description
float lifespan_varianceHow much the lifespans of particles vary.
bool position_relativeWhether the position of particles is tied to the position of their emitter.
float motion_path_forceHow much the particles follow the motion path.
float velocity_varianceHow much the velocities of particles vary.
int rotation_modeRotation mode of particles (ANGLE, VELOCITY).
int alignment_modeTo which object or vector particles align (NONE, CAMERA, MOTION, EMISSION, EMITTER).
Vector3 rotation_varianceHow much the rotations of particles vary.
Vector3 angular_velocity_varianceHow much the angular velocities of particles vary.
Vector3 pivotThe point around which the particles rotates, relative to the particle center.
bool visibleWhether the particles of this particle type are visible.
int layerLayer on which the particles are drawn, starting at 0.
float size_varianceHow much the sizes of particles vary.
float color_hue_varianceHow much the hue of particles varies.
float color_saturation_varianceHow much the color saturation of particles varies.
float color_value_varianceHow much the color value of particles varies.
float opacity_varianceHow much the opacities of particles vary.

Method
Description
int get_id()Returns the ID of the particle type.
int get_parent_id()Returns the ID of the parent particle emitter.
String get_name()Returns the name of the particle type.
PixelpartCurve3 get_position()Returns the motion path of particles.
PixelpartCurve get_num_particles()Returns the curve describing the number of the particles spawned.
PixelpartCurve get_lifespan()Returns the curve describing the lifespan of particles.
void set_lifespan_variance(float variance)Sets lifespan_variance.
float get_lifespan_variance()Returns lifespan_variance.
void set_position_relative(bool mode)Sets position_relative.
bool is_position_relative()Returns position_relative.
void set_motion_path_force(float force)Sets motion_path_force.
float get_motion_path_force()Returns motion_path_force.
PixelpartCurve get_initial_velocity()Returns the curve describing the starting velocity of particles.
void set_velocity_variance(float variance)Sets velocity_variance.
float get_velocity_variance()Returns velocity_variance.
PixelpartCurve get_acceleration()Returns the curve describing the acceleration of particles over their lifetime.
PixelpartCurve get_radial_acceleration()Returns the curve describing the radial acceleration of particles over their lifetime.
PixelpartCurve get_damping()Returns the curve describing the damping of particles over their lifetime.
void set_rotation_mode(int mode)Sets rotation_mode.
void set_alignment_mode(int mode)Sets alignment_mode.
int get_rotation_mode()Returns rotation_mode.
int get_alignment_mode()Returns alignment_mode.
PixelpartCurve3 get_initial_rotation()Returns the curve describing the starting rotation of particles.
PixelpartCurve3 get_rotation()Returns the curve describing the rotation of particles over their lifetime.
void set_rotation_variance(Vector3 variance)Sets rotation_variance.
void set_angular_velocity_variance(Vector3 variance)Sets angular_velocity_variance.
Vector3 get_rotation_variance()Returns rotation_variance.
Vector3 get_angular_velocity_variance()Returns angular_velocity_variance.
void set_pivot(Vector3 pivot)Sets pivot.
Vector3 get_pivot()Returns pivot.
PixelpartCurve get_weight()Returns the curve describing the weight of particles over their lifetime.
PixelpartCurve get_bounce()Returns the curve describing the bounce of particles over their lifetime.
PixelpartCurve get_friction()Returns the curve describing the friction of particles over their lifetime.
void set_visible(bool mode)Sets visible.
void set_layer(int layer)Sets layer.
bool is_visible()Returns visible.
int get_layer()Returns layer.
int get_blend_mode()Returns the blend mode of the particles (NORMAL, ADDITIVE, SUBTRACTIVE).
PixelpartCurve get_initial_size()Returns the curve describing the starting size of particles.
PixelpartCurve3 get_size()Returns the curve describing the size of particles over their lifetime.
void set_size_variance(float variance)Sets size_variance.
float get_size_variance()Returns size_variance.
PixelpartGradient get_color()Returns the gradient describing the colors of particles over their lifetime.
void set_color_hue_variance(float variance)Sets color_hue_variance.
void set_color_saturation_variance(float variance)Sets color_saturation_variance.
void set_color_value_variance(float variance)Sets color_value_variance.
float get_color_hue_variance()Returns color_hue_variance.
float get_color_saturation_variance()Returns color_saturation_variance.
float get_color_value_variance()Returns color_value_variance.
PixelpartCurve get_initial_opacity()Returns the curve describing the initial opacity of particles.
PixelpartCurve get_opacity()Returns the curve describing the opacity of particles over their lifetime.
void set_opacity_variance(float variance)Sets opacity_variance.
float get_opacity_variance()Returns opacity_variance.
void spawn_particles(int count)Spawns count particles of this particle type.

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
int get_id()Returns the ID of the force field.
String get_name()Returns the name of the force field.
void set_lifetime_start(float time)Sets lifetime_start.
void set_lifetime_duration(float time)Sets lifetime_duration.
void set_repeat(bool value)Sets repeat.
float get_lifetime_start()Returns lifetime_start.
float get_lifetime_duration()Returns lifetime_duration.
bool get_repeat()Returns repeat.
bool is_active()Returns whether the force field is active.
float get_local_time()Returns the time fraction the force field has been active for, in range 0.0 (0%) to 1.0 (100%).
PixelpartCurve3 get_position()Returns the motion path of the force field.
void set_type(int type)Sets type.
int get_type()Returns type.
PixelpartCurve3 get_size()Returns the curve describing the size of the force field.
PixelpartCurve3 get_orientation()Returns the curve describing the orientation of the force field.
PixelpartCurve3 get_direction()Returns the curve describing the force direction of the area force field.
PixelpartCurve get_strength()Returns the curve describing the strength of the force field.
void set_direction_variance(float variance)Sets direction_variance.
void set_strength_variance(float variance)Sets strength_variance.
float get_direction_variance()Returns direction_variance.
float get_strength_variance()Returns strength_variance.
void set_grid_size(int width, int height, int depth)Sets the number of cells in each dimension of the force field grid. Each cell of the grid varies in direction and strength determined by direction_variance and strength_variance.
int get_grid_width()Returns the number of grid cells on the X axis of the force field grid.
int get_grid_height()Returns the number of grid cells on the Y axis of the force field grid.
int get_grid_depth()Returns the number of grid cells on the Z axis of the force field grid.

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
int get_id()Returns the ID of the collider.
String get_name()Returns the name of the collider.
void set_lifetime_start(float time)Sets lifetime_start.
void set_lifetime_duration(float time)Sets lifetime_duration.
void set_repeat(bool value)Sets repeat.
float get_lifetime_start()Returns lifetime_start.
float get_lifetime_duration()Returns lifetime_duration.
bool get_repeat()Returns repeat.
bool is_active()Returns whether the collider is active.
float get_local_time()Returns the time fraction the collider has been active for, in range 0.0 (0%) to 1.0 (100%).
void add_point(Vector3 point)Adds a vertex to the collider at the given position.
void set_point(int index, Vector3 point)Sets the position of the given vertex.
void remove_point(int index)Removes the given vertex from the collider.
Vector3 get_point(int index)Returns the position of the given vertex.
int get_num_points()Returns the number of vertices.
PixelpartCurve get_bounce()Returns the curve describing the bounciness of the collider.
PixelpartCurve 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
float get(float t)Returns the (interpolated) value of the curve at time t (in range 0.0 to 1.0)
float get_point(int index)Returns the value of the curve point with the given index.
void set(float value)Sets the curve to a constant with value value.
void add_point(float t, float value)Adds a curve point at time t with value value.
void set_point(int index, float value)Sets the value of the curve point with the given index to value.
void move_point(int index, float delta)Adds delta to the value of the curve point with the given index.
void shift_point(int index, float delta)Moves the curve point with the given index forward or backward in time by delta.
void remove_point(int index)Removes the point with the given index from the curve.
void clear()Removes all points from the curve.
int get_num_points()Returns the number of curve points.
void move(float delta)Adds delta to the value of all curve points.
void shift(float delta)Moves all curve points forward or backward in time by delta.
void set_interpolation(int method)Sets interpolation.
int get_interpolation()Returns interpolation.
void enable_adaptive_cache()Enables an adaptive cache, which resizes itself automatically if the number of curve points increases or decreases a lot.
void enable_fixed_cache(int size)Enables a fixed cache with the given size, which only stores up to size different values.
int get_cache_size()Returns the size of the cache.

PixelpartCurve3

Attribute
Description
int interpolationInterpolation applied to the path (NONE, LINEAR, SPLINE).

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

PixelpartGradient

Attribute
Description
int interpolationInterpolation applied to the gradient (NONE, LINEAR, SPLINE).

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

Platform Support

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

Third-Party Software

SoftwareVersionLicense
zlib1.2.11LICENSE
spdlog1.11LICENSE
OpenGL Mathematics (GLM)0.9.9.8LICENSE
JSON for Modern C++ (nlohmann/json)3.10.5LICENSE
The OpenGL Extension Wrangler Library (GLEW)2.1.0LICENSE
GLFW3.3.7LICENSE
Dear ImGui1.89.6LICENSE
ImNodes0.5LICENSE
ImFileDialogLICENSE
ImGuiColorTextEditLICENSE
ImGuizmoLICENSE
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
GCC RuntimeLICENSE
MinGW-w64 RuntimeLICENSE
godot-cppLICENSE
godot-demo-projectsLICENSE
Font: Open Sans3.000LICENSE
Font: Noto Sans2.002LICENSE
Font: Inconsolata3.001LICENSE
Font: Material Design Icons7.3.67LICENSE
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 license 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 licenses 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.