Skip to main content

Delicious Voxel worlds in Python

Project description

VoxelWorld

Create delicious Voxel worlds in Python

Live demo on Py.Cafe ☕

image image

Install

From PyPi

pip3 install voxel_world

From source

git clone https://github.com/jackparmer/VoxelWorld.git
cd VoxelWorld
python3 -m pip install .

from voxel_world import VoxelWorld

About

For physics simulation, games, art, and fun

Inspo: https://github.com/wwwtyro/vixel

Features!

  • Automatic GIF generation
  • Numpy 3d ones array in -> Voxel world out
  • Fast-ish (as fast as rendering on the CPU can be)
  • Portable! Outputs simple image files
  • Notebooks! Works well in the Jupyter notebook ecosystem
  • Eye candy! Ambient occlusion, specularity, etc

Known issues (TODO)

  • Speed: Need to migrate to a GPU-based renderer while maintaining portability (suggestions?)
  • Illumination: Light source ray tracing is wonky - but you can fake it (see light_source.py example)
  • Cut offs: The bottom of some voxel cubes are cut off - I'm not sure why
  • Likely much more...

Examples

Animations

from voxel_world import Volume, Surface, Agent, Sequence

volume = Volume(Volume.purlin_matrix(64));
surf = Surface(volume);
agents = [Agent(surf, mask) for mask in Sequence.snake(grid_size=64, num_steps=1000)];
seq = Sequence(agents);

seq2 = seq.apply_bg(volume)

seq2.save('voxel_animation64_v2.gif')
image

Surfaces API

from voxel_world import Volume, Surface;
volume = Volume(Volume.purlin_matrix(32)); surf = Surface(volume)
surf.color = (255,0,0)
volume.add(surf).show()

image

Randomly generated worlds

Live demo on Py.Cafe ☕

import random; import vnoise
from IPython.display import display, Image as IPImage
from voxel_world import Volume

noise = vnoise.Noise()

# Display in Juypter
display(IPImage(Volume(
    np.array([[[1 if noise.noise3(x / 10.0, y / 10.0, z / 10.0) > random.uniform(-0.2, 0.2) else 0 for z in range(16)] for y in range(16)] for x in range(16)], dtype=np.uint8),
    theme=random.choice(list(Volume.themes.keys())),
    resolution=10,
    viewing_angle=(random.randint(0, 90), random.randint(0, 90)),
    zoom=2.0,
    show_light_source=False,
    dark_bg=False
).byte_stream().getvalue()))

image

image

image

image

examples/color_matrix/sand_world.py

image

examples/lighting/light_source.py

download (1)

examples/color_matrix/jill_of_the_jungle.py

jill_of_the_jungle

examples/color_matrix/earth_tones.py

earth_tones

Mono-color themes

from voxel_world import Volume

world = Volume.show_themes() # Jupyter notebook only

image

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

voxel_world-0.2.1.tar.gz (8.3 MB view details)

Uploaded Source

Built Distribution

voxel_world-0.2.1-py2.py3-none-any.whl (9.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file voxel_world-0.2.1.tar.gz.

File metadata

  • Download URL: voxel_world-0.2.1.tar.gz
  • Upload date:
  • Size: 8.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.11.6

File hashes

Hashes for voxel_world-0.2.1.tar.gz
Algorithm Hash digest
SHA256 4f9e04ee75e25dea289ca8eee730a40fb7ddd1aa684368f9b39852a4c0d9f902
MD5 92e18d7a107696b5670e083e3935c4c1
BLAKE2b-256 c13dc54ebf49293b8d213b567d552170a11345a5d85dcc33278d12348064bb6e

See more details on using hashes here.

File details

Details for the file voxel_world-0.2.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for voxel_world-0.2.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 bc7d6396da0ff71d46327ca90742d64cf4386410da762d537d6f375b56166a5a
MD5 73a1061a84c49d6675e97649d81ccbc5
BLAKE2b-256 a209668f4ea8ef1273321726eda068c6001596bae1507b80b21d621dd62aaab0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page