Cesium Material Pack: A plugin with procedurally-shaded materials such as bricks, wood, and noise patterns.
Check out the demo.
Cesium version: Tested against 1.0. Most likely works with older and newer versions. Post a message to the Cesium forum if you have compatibility issues.
License: Apache 2.0. Free for commercial and non-commercial use. See LICENSE.md.
Usage
Prebuilt minified and unminified versions of the plugin are in the Build directory. Include the MaterialPack.js
file using a script
tag after the Cesium.js
script
tag.
<script src="path/to/Cesium.js"></script>
<script src="path/to/MaterialPack.js"></script>
<script>
// ...
var primitives = scene.primitives;
primitives.add(new Cesium.RectanglePrimitive({
rectangle : Cesium.Rectangle.fromDegrees(-80.0, 30.0, -60.0, 40.0),
material : Cesium.Material.fromType('Brick')
}));
</script>
Uniforms are used to change material properties. For example:
rectangle.material = new Cesium.Material({
fabric : {
type : 'Wood',
uniforms : {
lightWoodColor : new Cesium.Color(0.7, 0.4, 0.1, 1.0),
darkWoodColor : new Cesium.Color(0.3, 0.1, 0.0, 1.0),
ringFrequency : 4.0,
noiseScale : new Cesium.Cartesian2(0.4, 0.8),
grainFrequency : 18.0
}
}
});
Material uniforms:
Asphalt
asphaltColor
: rgba color object for the asphalt's color.bumpSize
: Number for the size of the asphalt's bumps.roughness
: Number that controls how rough the asphalt looks.
Blob
lightColor
: rgba color object for the light color.darkColor
: rgba color object for the dark color.frequency
: Number that controls the frequency of the pattern.
Brick
brickColor
: rgba color object for the brick color.mortarColor
: rgba color object for the mortar color.brickSize
: Number between 0.0 and 1.0 where 0.0 is many small bricks and 1.0 is one large brick.brickPct
: Number for the ratio of brick to mortar where 0.0 is all mortar and 1.0 is all brick.brickRoughness
: Number between 0.0 and 1.0 representing how rough the brick looks.mortarRoughness
: Number between 0.0 and 1.0 representing how rough the mortar looks.
Cement
cementColor
: rgba color object for the cement's color.grainScale
: Number for the size of rock grains in the cement.roughness
: Number that controls how rough the cement looks.
Erosion
color
: diffuse color and alpha.time
: Time of erosion. 1.0 is no erosion; 0.0 is fully eroded.
Facet
lightColor
: rgba color object for the light color.darkColor
: rgba color object for the dark color.frequency
: Number that controls the frequency of the pattern.
Fresnel
reflection
: Reflection Material.refraction
: Refraction Material.
Grass
grassColor
: rgba color object for the grass' color.dirtColor
: rgba color object for the dirt's color.patchiness
: Number that controls the size of the color patches in the grass.
Reflection
cubeMap
: Object with positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ image paths.channels
: Three character string containing any combination of r, g, b, and a for selecting the desired image channels.
Refraction
cubeMap
: Object with positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ image paths.channels
: Three character string containing any combination of r, g, b, and a for selecting the desired image channels.indexOfRefractionRatio
: Number representing the refraction strength where 1.0 is the lowest and 0.0 is the highest.
TieDye
lightColor
: rgba color object for the light color.darkColor
: rgba color object for the dark color.frequency
: Number that controls the frequency of the pattern.
Wood
lightWoodColor
: rgba color object for the wood's base color.darkWoodColor
: rgba color object for the color of rings in the wood.ringFrequency
: Number for the frequency of rings in the wood.noiseScale
: Object with x and y values specifying the noisiness of the ring patterns in both directions.grainFrequency
: Number for the frequency of grains in the wood.
For more on how to use Cesium materials, see code for the example and the Fabric tutorial. To run the example locally, run npm install
, then run node server.js
and navigate to http://localhost:8080 and select the example application to run.
Build
To build, run npm install
, then run node build.js
.
Contributions
Contributions welcome. We use the same CLA as Cesium. Please email yours before opening a pull request.