Ipsys Particle System Yey letS go, very cool particle system generator and fast renderer

ipsys - Ipsys Particle System Yey letS go

About

Ipsys is a piece of software that focuces on running and displaying cool randomly generated particule systems.

It is written in C and GLSL and uses the SDL2 for window management and OpenGL 4 for running shaders (either for rendering, or for computing on the many cores of the GPU).

Build and run

The current build system assumes being run on Linux with Python 3.

python3 _comp.py

Supported compilers are GCC (--compiler=gcc which is the default) and Clang (--compiler=clang).

Add the -l option at the end means to execute the binary if compilation succeeded. Any argument that comes after the -l is instead given to the binary as its command line arguments.

Use the --help option to get a list of options.

Dependencies

Controls

At runtime, the ways to interact with the simulation and rendering are listed here:

  • The first bar in the ui panel controls the intensity of fading.
  • The second bar in the ui panel controls the number of physical iterations performed between each frames.
  • Left click repels particles.
  • Right click attracts particles.
  • The R key randomizes the interaction rules.
  • The F key slightly and randomly mutates the interaction rules.
  • The C key randomizes the particle types colors.
  • The P key randomizes the particle positions.
  • The escape key terminates execution (same as closing the window).
  • The T key switches between the rendering of each iteration and each frame.
  • The W key toggles fading.
  • The S key saves the current rule set to a file.

Command line interface

  • -t followed by a number sets the number of particle types.
  • -f followed by a file path load the rule set described in the given file.

TODO

  • Text rendering for the UI.
  • More UI components to tinker with the settings.
  • Make the text-based modular data representation format even better.
    • Config, setting set, color theme, rules, rule generators, particle positions, all of that in different blocks.
    • Each rule should be independant from the others, and optional.
    • Understandable and modifiable by humans.
    • One should be able to share such data with other users.
    • Better code (with error report, and without vulnerabilities).
  • Changelog and version numbers.
  • Read a config file.
    • OpenGL version (disable some features if needed).
    • Set settings.
  • Full screen setting.
  • Wrapping around the edge as a setting.
  • Making particles able to changhe their individual size according to new types of rules.
  • Add an history of rules to be able to return to previous rules.
  • The main.c file should be small, not big ><.
  • Built-in console for a cool interface.
  • Configurable interface and scripting.
    • Script the action of the cursor on particles with a custom scripting language.
    • Script the action of user-created UI witgets on the rules, rule generators, patricles, colors, etc.
    • Create UI witgets with scripting.
    • A console line can be a witget.
  • Make the build system usable with clang and on Windows.
  • View the "force" fields and motion fields.
  • Display the rules.
  • Better type changing rules and rule generation (using a changing graph).
  • Fix memory leaks when hitting Q.
  • Better interaction abilities with the particles.
  • Adding walls, wind zones, pipes, etc.
  • Adding links and linking rules.
    • Two particles may be linked, which means they will stay close but not too close.
    • The exact behavior of links and how they appear/disappear are the rules called linking rules.
  • Dynamic number of particles.
  • Dynamic number of particle types.
  • Better rule set mutation.
    • Add a slider (or multiple sliders) that, in a continuous manner, changes some parameter that in turns changes some rules.
    • For example, the curve describing the attraction rule between some pair of particle types gets added the values of a curve that is null everywere except in an interval where its value and edges are continuous functions of a slider.
  • Built-in video/gif recorder.
  • Website/server to upload/download shared rules, configs and scripts.
  • Put some features in separated libraries with some clean APIs.
    • And maybe make binding to C++/Python/Rust/whatever.
  • Music visualization mode.
    • Having the beat/melodies of a music influence the particles/colors/rules.
  • Accept shaders from outside, provided by the user.
  • Make it possible to have some dynamic library be used in place of scripts (to make it faster or to allow to call some neat C functions directly or something).
  • Multiple particle rendering shaders (square, circle, something else).
  • Bloom effect.
  • Background cool color effects maybe.
  • Optimize even more.
  • Support for MacOS/Windows.
  • Run in web browser (compile to wasm, use WebGL, etc.).
  • Better build system command line interface.
  • Better command line interface in general.
  • Make a cooler gif or even a video to promote the project.
  • Make adding a shader easier (with even more code generation).
  • Add debugging features like function calls tracing, verbose option, etc.
  • Precomile the shaders to SPIR-V or something.
  • Expand the TODO list, it is not long enough xd.
  • Be able to compile without the SDL2 library (use Xorg, Wayland, WinAPI, whatever, but keep SDL2 as an optional dependancy).

Rerwite it in Rust ?

Actually why not one day~

Owner
Anima Libera
I love programming and anime and manga and science-fiction and minecraft and frozen and fantasy and dictatorship and esolangs and chickens uwu ^^
Anima Libera
Similar Resources

A Simple Spectral Renderer

Simple Spectral This is a simple multithreaded spectral pathtracer implementing the algorithm (linear combination of bases) described in our EGSR 2019

Dec 8, 2022

An immediate-mode, renderer agnostic, lightweight debug drawing API for C++

An immediate-mode, renderer agnostic, lightweight debug drawing API for C++

Debug Draw An immediate-mode, renderer agnostic, lightweight debug drawing API for C++. License This software is in the public domain. Where that dedi

Dec 24, 2022

A dx12 river renderer using wave particles with interactive vortices.

A dx12 river renderer using wave particles with interactive vortices.

Wave Particles with Interactive Vortices Final Result Overview In game industry water can be divided into two domains, ocean and river. This project f

Dec 26, 2022

A very simple and light-weight drawing app made with qt and C++.

A very simple and light-weight drawing app made with qt and C++.

Blackboard A very simple and light-weight drawing app made with qt and C++. It supports tablet and pen pressure with the help of QTabletEvents. So you

Nov 15, 2021

A C++ commandline for use in servers and chat software. Provides very simple asynchronous input/output.

A C++ commandline for use in servers and chat software. Provides very simple asynchronous input/output.

commandline A C++ commandline for use in servers and terminal chat software. Provides very simple asynchronous input/output. Supports reading and writ

Dec 20, 2022

SMAA is a very efficient GPU-based MLAA implementation (DX9, DX10, DX11 and OpenGL)

SMAA is a very efficient GPU-based MLAA implementation (DX9, DX10, DX11 and OpenGL), capable of handling subpixel features seamlessly, and featuring an improved and advanced pattern detection & handling mechanism.

Dec 30, 2022

Wang Tiles Grid generator

Wang Tiles Grid generator

Wang Tiles Grid generator Quick Start The project is using nobuild build system. $ cc -o nobuild nobuild.c $ ./nobuild $ ./wang -live Goal Trying to g

Dec 28, 2022

Python binding for Grasp Pose Generator (pyGPG)

Python binding for Grasp Pose Generator (pyGPG)

Python binding for Grasp Pose Generator (pyGPG) Grasp Pose Generator is a cpp package that creat grasp candidates for 3D point clouds. This package bi

Dec 16, 2022

GPU Texture Generator

GPU Texture Generator

Imogen GPU/CPU Texture Generator GPU Texture generator using dear imgui for UI. Not production ready and a bit messy but really fun to code. This is a

Dec 3, 2022
Comments
  • Trace (blending) not working on some machines

    Trace (blending) not working on some machines

    The use of

    glEnable(GL_BLEND);
    glBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
    glBlendFunc(GL_ONE, GL_ONE);
    glUseProgram(g_shprog_draw_fade);
    glDrawArrays(GL_POINTS, 0, 1);
    

    doesn't seem to produce the expected result on systems using mesa drivers. Instead the framebuffer is not affected and not fading is applied.

    It could be the fact that OpenGL features are misused here (but somehow still produce the expected fading with non-mesa drivers) or something else..

  • Add --mac option to compile on mac machines

    Add --mac option to compile on mac machines

    I added a --mac option to the compilation script to add support for macOS. This option sets the appropriate include path for sdl2 and glew (which should be installed with brew install sdl2 glew) and uses the -framework OpenGL flag to find OpenGL headers.

  • fix typos + add license

    fix typos + add license

    By merging this you re-license previous code under the MIT license.

    This pull request fixes a few typos and introduces a license to the project so people can use it and all and it's professional. The MIT license is an easy and nice license. It's easy to understand too so you should have no problem understanding it.

C++ (with python bindings) library for easily reading/writing/manipulating common animation particle formats such as PDB, BGEO, PTC. See the discussion group @ http://groups.google.com/group/partio-discuss

Partio - A library for particle IO and manipulation This is the initial source code release of partio a tool we used for particle reading/writing. It

Dec 29, 2022
Flutter package that lets you simply animate a widget into a visible state.
Flutter package that lets you simply animate a widget into a visible state.

Entry This Flutter package introduces a new widget : Entry. It lets you simply animate a widget into a visible state. Don't just display widgets : mak

Aug 14, 2022
physically based renderer written in DX12 with image-based lighting, classic deffered and tiled lighting approaches
physically based renderer written in DX12 with image-based lighting, classic deffered and tiled lighting approaches

Features Classical Deferred Renderer Physically Based shading Image Based Lighting BRDF Disney model (Burley + GGX) Tangent space normal mapping Reinh

Dec 13, 2022
Source code for pbrt, the renderer described in the third edition of "Physically Based Rendering: From Theory To Implementation", by Matt Pharr, Wenzel Jakob, and Greg Humphreys.

pbrt, Version 3 This repository holds the source code to the version of pbrt that is described in the third edition of Physically Based Rendering: Fro

Jan 7, 2023
A toy renderer written in C using Vulkan to perform real-time ray tracing research.

This is a toy renderer written in C using Vulkan. It is intentionally minimalist. It has been developed and used for the papers "BRDF Importance Sampl

Dec 19, 2022
2D GPU renderer for dynamic UIs
2D GPU renderer for dynamic UIs

vger vger is a vector graphics renderer which renders a limited set of primitives, but does so almost entirely on the GPU. Works on iOS and macOS. API

Dec 30, 2022
PainterEngine is a application/game engine with software renderer,PainterEngine can be transplanted to any platform that supports C
PainterEngine is a application/game engine with software renderer,PainterEngine can be transplanted to any platform that supports C

PainterEngine is a application/game engine with software renderer,PainterEngine can be transplanted to any platform that supports C

Jan 4, 2023
work in progress 3d renderer based on sdl2
work in progress 3d renderer based on sdl2

work in progress 3d software renderer based on SDL. (Only supports wireframe view for now) Building On Linux, install libsdl2 and then run the folowin

Sep 12, 2021
work in progress 3d renderer based on sdl2
work in progress 3d renderer based on sdl2

work in progress 3d software renderer based on SDL. (Only supports wireframe view for now) Building On Linux, install libsdl2 and then run the folowin

Sep 12, 2021
A modern C++ physically based renderer
A modern C++ physically based renderer

The Dakku Renderer Warning: This project is currently under developing and does not guarantee any consistency. About Dakku is a physically based rende

Apr 15, 2022