An open API service indexing awesome lists of open source software.

https://github.com/vaneenige/three.phenomenon

⭐️ A tiny wrapper around three.js built for high-performance WebGL experiences.
https://github.com/vaneenige/three.phenomenon

instances particles shader threejs webgl wrapper

Last synced: 6 months ago
JSON representation

⭐️ A tiny wrapper around three.js built for high-performance WebGL experiences.

Awesome Lists containing this project

README

          

# THREE.Phenomenon

[![npm version](https://img.shields.io/npm/v/three.phenomenon.svg)](https://www.npmjs.com/package/three.phenomenon)
[![gzip size](http://img.badgesize.io/https://unpkg.com/three.phenomenon/dist/three.phenomenon.mjs?compression=gzip)](https://unpkg.com/three.phenomenon)
[![license](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/vaneenige/three.phenomenon/blob/master/LICENSE)
[![dependencies](https://img.shields.io/badge/dependencies-three.js-ff69b4.svg)](https://github.com/mrdoob/three.js/)
[![TypeScript](https://img.shields.io/static/v1.svg?label=&message=TypeScript&color=294E80)](https://www.typescriptlang.org/)

THREE.Phenomenon is a tiny wrapper around three.js built for high-performance WebGL experiences.

With it's simple API a mesh can be created that contains multiple instances of a geometry combined with a material. With access to the vertex shader, attributes per instance and uniforms this mesh can be transformed in any way possible (and on the GPU).

#### Features:
- Below 1kb in size (gzip)
- Custom instanced geometries
- Attributes for every instance
- Support for default materials
- Compatible with three.js r104

## Install
```
$ npm install --save three.phenomenon
```

## Usage
```js
// Import the library
import Phenomenon from 'three.phenomenon';

// Create an instance
Phenomenon({ ... });
```

> The wrapper is also available through THREE.Phenomenon.

## API
### Phenomenon(options)

Returns an instance of Phenomenon.

> The instance provides access to the mesh (with the compiled vertex and fragment shader) and uniforms.

#### options.attributes
Type: `Array`

Values used in the program that are stored once, directly on the GPU. Every item in this array needs to have a:
- `name` for referencing data in the vertex shader.
- `data` function to create the data for each instance.
- `size` so it's clear what comes back from the data.

> The data function receives the index of the current instance and the total number of instances so calculations can be done based on these values.

#### options.uniforms
Type: `Object`

Variables used in the program that can be adjusted on the fly. These are accessible through the instance variable and can be updated directly.

#### options.vertex
Type: `String`

The vertex shader of the program which will calculate the position of every instance. This will automatically get merged with the shaders that's created based on the provided geometry.

#### options.fragment
Type: `Array`

The fragment parameter is optional and can be used to modify specific parts of the provided material's fragment shader. For example: Give every instance a unique color or manually use its position for calculations.

#### options.geometry
Type: `THREE.Geometry`

The geometry that will be multiplied. See Geometry for more information.

#### options.material
Type: `THREE.Material`

The material that is used for the geometry. See Material for more information.

#### options.multiplier
Type: `Number`

The amount of instances that will be created.

#### options.castShadow
Type: `Boolean`

Should the mesh cast a shadow?

## Contribute
Are you excited about this library and have interesting ideas on how to improve it? Please tell me or contribute directly!

```
npm install > npm start > http://localhost:8080
```

## License
MIT © Colin van Eenige