All Projects → prideout → Heman

prideout / Heman

Licence: mit
C99 heightmap utilities.

Programming Languages

c
50402 projects - #5 most used programming language

Labels

Projects that are alternatives of or similar to Heman

Midivisualizer
A small MIDI visualizer tool, using OpenGL
Stars: ✭ 347 (-15.57%)
Mutual labels:  graphics
Openvg
Tools for exploring OpenVG
Stars: ✭ 371 (-9.73%)
Mutual labels:  graphics
Libsdl2pp
C++11 bindings/wrapper for SDL2
Stars: ✭ 385 (-6.33%)
Mutual labels:  graphics
Retro3dpipeline
A minimal example of a custom render pipeline with the Retro3D shader.
Stars: ✭ 354 (-13.87%)
Mutual labels:  graphics
Quartz
Vulkan RTX path tracer with a declarative ES7-like scene description language.
Stars: ✭ 367 (-10.71%)
Mutual labels:  graphics
Manim Tutorial
A tutorial for manim, a mathematical animation engine made by 3b1b
Stars: ✭ 373 (-9.25%)
Mutual labels:  graphics
Processing Docs
Processing reference, examples, tutorials, and website
Stars: ✭ 346 (-15.82%)
Mutual labels:  graphics
Holoshield
Highly customizable sci-fi shield / force field shader for Unity3D. Allows you to set edge power & color, inner texture scrolling, waviness, scale pulsation and procedural intensity noise. Implements tessellation for low-poly base meshes.
Stars: ✭ 401 (-2.43%)
Mutual labels:  graphics
Unity Srp Vxgi
Voxel-based Global Illumination using Unity Scriptable Render Pipeline
Stars: ✭ 361 (-12.17%)
Mutual labels:  graphics
Touchdesigner shared
TouchDesigner toxes and small projects
Stars: ✭ 385 (-6.33%)
Mutual labels:  graphics
Vue Babylonjs
A ready-to-go 3d environment for Vue.js using Babylon.js
Stars: ✭ 356 (-13.38%)
Mutual labels:  graphics
Inkkit
Drawing and Geometry made easy on iOS - now in Swift 3.0
Stars: ✭ 367 (-10.71%)
Mutual labels:  graphics
Tinyraytracer
A brief computer graphics / rendering course
Stars: ✭ 3,971 (+866.18%)
Mutual labels:  graphics
Sfml.net
Official binding of SFML for .Net languages
Stars: ✭ 354 (-13.87%)
Mutual labels:  graphics
Soundwave
Illustrate your sound waves on the fly 🚀
Stars: ✭ 390 (-5.11%)
Mutual labels:  graphics
Fbg
Lightweight C 2D graphics API agnostic library with parallelism support
Stars: ✭ 349 (-15.09%)
Mutual labels:  graphics
Awesome Image Colorization
📚 A collection of Deep Learning based Image Colorization and Video Colorization papers.
Stars: ✭ 370 (-9.98%)
Mutual labels:  graphics
Cpp 3d Game Tutorial Series
C++ 3D Game Tutorial Series is a YouTube tutorial series, whose purpose is to help all those who want to take their first steps in the game development from scratch.
Stars: ✭ 400 (-2.68%)
Mutual labels:  graphics
Shadergen
Proof-of-concept library for generating HLSL, GLSL, and Metal shader code from C#,
Stars: ✭ 395 (-3.89%)
Mutual labels:  graphics
Beam
✨ Expressive WebGL
Stars: ✭ 383 (-6.81%)
Mutual labels:  graphics

This toy project is a tiny MIT-licensed C library of image utilities for dealing with height maps, normal maps, distance fields, and the like. It has a very low-level API, where an "image" is simply a flat array of floats. There are no dependencies and only one header file.

Heman can do stuff like this:

  • Create a random height field using simplex noise and FBM.
  • Generate a normal map from a height map.
  • Compute ambient occlusion from a height map.
  • Generate a signed distance field (SDF).
  • Export a 3D mesh in PLY format.
  • Apply a color gradient to a heightmap.
  • Generate a color gradient, given a list of control points.
  • Compute diffuse lighting with an infinite light source.
  • Generate a nicely-distributed list of points according to a density field.

Heman implements some really nice 21st-century algorithms:

  • Ambient occlusion is generated using Sean Barrett's efficient method that makes 16 sweeps over the height field.
  • Distance field computation uses the beautiful algorithm from Distance Transforms of Sampled Functions (Felzenszwalb and Huttenlocher).
  • Density field samples are generated using Robert Bridson's Fast Poisson Disk Sampling in Arbitrary Dimensions.

Example

The images at the top were generated from code that looks like this:

// Generate an island shape using simplex noise and a distance field.
heman_image* elevation = heman_generate_island_heightmap(1024, 1024, rand());

// Compute ambient occlusion from the height map.
heman_image* occ = heman_lighting_compute_occlusion(elevation);

// Visualize the normal vectors.
heman_image* normals = heman_lighting_compute_normals(elevation);

// Apply a color gradient.
heman_image* gradient = heman_color_create_gradient(...);
heman_image* albedo = heman_color_apply_gradient(elevation, -0.5, 0.5, grad);

// Apply diffuse lighting.
heman_image* final = heman_lighting_apply(elevation, albedo, ...);

For the unabridged version, see test_lighting() in test/test_heman.c.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].