How to Use Material Definitions (.j3md)

All Geometries need a Materual. Every Material is based on a Material Definition. The most common Material Definitions are included in the engine, advanced users can create custom ones.

Spatial myGeometry = assetManager.loadModel("Models/Teapot/Teapot.j3o");
Material mat = new Material(assetManager,  // Create new material and...
    "Common/MatDefs/Misc/Unshaded.j3md");  // ... specify a Material Definition file, here "Unshaded.j3md"!
mat.setColor("Color", ColorRGBA.Blue);     // Set one or more material parameters.
myGeometry.setMaterial(mat);               // Use material on this Geometry.

If you use one custom material very often, read about storing material configurations in user-friendly j3m Material Files. Either use the jMonkeyEngine SDK to create .j3m files (easier), or write .j3m files in a text editor.

Preparing a Material

In the Materials Overview list,

  1. Choose a Material Definition that has the features that you need.
    • Tip: If you don't know, you can always start with Unshaded.j3md.
  2. Look at the applicable parameters of the Material Definition and determine which parameters you need to achieve the desired effect (e.g. "glow" or "color"). Most parameters are optional.
  3. Create and save the necessary Texture files to your assets directory.
    • E.g. ColorMap; DiffuseMap, NormalMap, AlphaMap, etc…
  4. Determine the required values to achieve the effect that you want.
    • E.g. Colors, floats, booleans, etc…

Using a Material

In your Java code,

  1. Create a Material object based on the chosen Material Definition (.j3md file):
    Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
  2. Configure your Material by setting the appropriate values listed in the Materials Overview table.
    mat.setColor("Color", ColorRGBA.Yellow ); // and more
  3. Apply your prepared Material to a Geometry:
    myGeometry.setMaterial(mat);
  4. (Optional) Adjust the texture scale:
    geometry.scaleTextureCoordinates(new Vector2f(1f, .5f));

For details see also: How to Use Materials

Examples

Here are examples of the methods that set the different data types:

  • mat.setColor( "Color", ColorRGBA.White );
  • mat.setTexture( "ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.png" ));
  • mat.setFloat( "Shininess", 5f);
  • mat.setBoolean( "SphereMap", true);
  • mat.setVector3( "NormalScale", new Vector3f(1f,1f,1f));

A simpled textured material.

Material mat = new Material(assetManager, 
    "Common/MatDefs/Misc/Unshaded.j3md");
mat.setTexture("ColorMap", assetManager.loadTexture(
    "Interface/Logo/Monkey.jpg"));

A textured material with a color bleeding through transparent areas.

Material mat = new Material(assetManager, 
    "Common/MatDefs/Misc/Unshaded.j3md");
mat.setTexture("ColorMap", assetManager.loadTexture(
    "Textures/ColoredTex/Monkey.png"));
mat.setColor("Color", ColorRGBA.Blue);

You can test these examples within the following code snippet. It creates a box and applies the material:

 Box b = new Box(Vector3f.ZERO, 1, 1, 1);
Geometry geom = new Geometry("Box", b);
// ... insert Material definition...
geom.setMaterial(mat);
rootNode.attachChild(geom);

You can find these and other common code snippets in the jMonkeyEngine SDK Code Palette. Drag and drop them into your source code.

Creating a Custom Material Definition

Check out the engine source code and have a look at how Material Definitions are implemented. You can create your own Material Definitions and place them in your projects MatDefs directory.

  1. Find the existing MatDefs are in engine/src/core-data/Common/MatDefs/.
  2. Open a Something.j3md file in a text editor. You see that this jme3 file defines Material Parameters and Techniques.
    • Material Parameters are the ones that you set in Materials, as shown in the examples above.
    • The Techniques rely on VertexShaders and FragmentShaders: You find those in the files Something.vert and Something.frag in the same directory.
  3. Learn about GLSL (OpenGL Shading Language) to understand the .vert and .frag syntax, and write your own.
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution 3.0 Unported