| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width,initial-scale=1">
- <title>jMonkeyEngine SDK: Material Editor :: jMonkeyEngine Docs</title>
- <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/sdk/material_editing.html">
- <meta name="keywords" content="documentation, sdk, material, file, texture">
- <meta name="generator" content="Antora 2.3.3">
- <link rel="stylesheet" href="../../_/css/site.css">
- </head>
- <body class="article">
- <header class="header">
- <nav class="navbar">
- <div class="navbar-brand">
- <a class="navbar-item" href="https://wiki.jmonkeyengine.org">jMonkeyEngine Docs</a>
- <button class="navbar-burger" data-target="topbar-nav">
- <span></span>
- <span></span>
- <span></span>
- </button>
- </div>
- <div id="topbar-nav" class="navbar-menu">
- <div class="navbar-end">
- <a class="navbar-item" href="#">Home</a>
- <div class="navbar-item has-dropdown is-hoverable">
- <a class="navbar-link" href="#">Products</a>
- <div class="navbar-dropdown">
- <a class="navbar-item" href="#">Product A</a>
- <a class="navbar-item" href="#">Product B</a>
- <a class="navbar-item" href="#">Product C</a>
- </div>
- </div>
- <div class="navbar-item has-dropdown is-hoverable">
- <a class="navbar-link" href="#">Services</a>
- <div class="navbar-dropdown">
- <a class="navbar-item" href="#">Service A</a>
- <a class="navbar-item" href="#">Service B</a>
- <a class="navbar-item" href="#">Service C</a>
- </div>
- </div>
- <div class="navbar-item has-dropdown is-hoverable">
- <a class="navbar-link" href="#">Resources</a>
- <div class="navbar-dropdown">
- <a class="navbar-item" href="#">Resource A</a>
- <a class="navbar-item" href="#">Resource B</a>
- <a class="navbar-item" href="#">Resource C</a>
- </div>
- </div>
- <div class="navbar-item">
- <span class="control">
- <a class="button is-primary" href="#">Download</a>
- </span>
- </div>
- </div>
- </div>
- </nav>
- </header>
- <div class="body">
- <div class="nav-container" data-component="docs" data-version="master">
- <aside class="nav">
- <div class="panels">
- <div class="nav-panel-menu is-active" data-panel="menu">
- <nav class="nav-menu">
- <h3 class="title"><a href="../jme3.html">Docs</a></h3>
- <ul class="nav-list">
- <li class="nav-item" data-depth="0">
- <ul class="nav-list">
- <li class="nav-item" data-depth="1">
- <a class="nav-link" href="../documentation.html">Getting Started</a>
- </li>
- <li class="nav-item" data-depth="1">
- <a class="nav-link" href="https://javadoc.jmonkeyengine.org/v3.3.2-stable">JavaDoc</a>
- </li>
- <li class="nav-item" data-depth="1">
- <button class="nav-item-toggle"></button>
- <a class="nav-link" href="../jme3.html">jMonkeyEngine 3</a>
- <ul class="nav-list">
- <li class="nav-item" data-depth="2">
- <button class="nav-item-toggle"></button>
- <span class="nav-text">Beginner Tutorials</span>
- <ul class="nav-list">
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_simpleapplication.html">Hello SimpleApplication</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_node.html">Hello Node</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_asset.html">Hello Asset</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_main_event_loop.html">Hello Main Event Loop</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_input_system.html">Hello Input System</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_material.html">Hello Material</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_animation.html">Hello Animation</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_picking.html">Hello Picking</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_collision.html">Hello Collision</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_terrain.html">Hello Terrain</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_audio.html">Hello Audio</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_effects.html">Hello Effects</a>
- </li>
- <li class="nav-item" data-depth="3">
- <a class="nav-link" href="../jme3/beginner/hello_physics.html">Hello Physics</a>
- </li>
- </ul>
- </li>
- <li class="nav-item" data-depth="2">
- <button class="nav-item-toggle"></button>
- <span class="nav-text">Intermediate Tutorials</span>
- <ul class="nav-list">
- <li class="nav-item" data-depth="3">
- <button class="nav-item-toggle"></button>
- <span class="nav-text">Concepts</span>
- <ul class="nav-list">
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/intermediate/best_practices.html">Best Practices</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/intermediate/simpleapplication.html">Simple Application</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/features.html">Features</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/intermediate/optimization.html">Optimization</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/faq.html">FAQ</a>
- </li>
- </ul>
- </li>
- <li class="nav-item" data-depth="3">
- <button class="nav-item-toggle"></button>
- <span class="nav-text">Math Concepts</span>
- <ul class="nav-list">
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/math_for_dummies.html">Math For Dummies</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/intermediate/math.html">Math</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/math.html">More Math</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/rotate.html">Rotate</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/math_video_tutorials.html">Math Video Tutorials</a>
- </li>
- </ul>
- </li>
- <li class="nav-item" data-depth="3">
- <button class="nav-item-toggle"></button>
- <span class="nav-text">3D Graphics Concepts</span>
- <ul class="nav-list">
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/intermediate/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/scenegraph_for_dummies.html">Scenegraph for Dummies</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/beginner/hellovector.html">Hello Vector</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/terminology.html">Terminology</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/intermediate/how_to_use_materials.html">How to Use Materials</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/intermediate/transparency_sorting.html">Transparency and Sorting</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/external/blender.html">Importing from Blender</a>
- </li>
- <li class="nav-item" data-depth="4">
- <a class="nav-link" href="../jme3/external/3dsmax.html">Importing from 3DS Max</a>
- </li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- </li>
- <li class="nav-item" data-depth="1">
- <a class="nav-link" href="../logo.html">Logo Usage</a>
- </li>
- <li class="nav-item" data-depth="1">
- <a class="nav-link" href="../bsd_license.html">License</a>
- </li>
- <li class="nav-item" data-depth="1">
- <a class="nav-link" href="../github_tips.html">Github Tips</a>
- </li>
- </ul>
- </li>
- <li class="nav-item" data-depth="0">
- <button class="nav-item-toggle"></button>
- <span class="nav-text">SDK</span>
- <ul class="nav-list">
- <li class="nav-item" data-depth="1">
- <a class="nav-link" href="../sdk.html">jMonkeyEngine SDK</a>
- </li>
- </ul>
- </li>
- </ul>
- </nav>
- </div>
- <div class="nav-panel-explore" data-panel="explore">
- <div class="context">
- <span class="title">Docs</span>
- <span class="version">master</span>
- </div>
- <ul class="components">
- <li class="component is-current">
- <span class="title">Docs</span>
- <ul class="versions">
- <li class="version is-current is-latest">
- <a href="../jme3.html">master</a>
- </li>
- </ul>
- </li>
- <li class="component">
- <span class="title">Wiki UI</span>
- <ul class="versions">
- <li class="version is-latest">
- <a href="../../wiki-ui/index.html">master</a>
- </li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </aside>
- </div>
- <main class="article">
- <div class="toolbar" role="navigation">
- <button class="nav-toggle"></button>
- <a href="../documentation.html" class="home-link"></a>
- <nav class="breadcrumbs" aria-label="breadcrumbs">
- <ul>
- <li><a href="../jme3.html">Docs</a></li>
- <li><a href="material_editing.html">jMonkeyEngine SDK: Material Editor</a></li>
- </ul>
- </nav>
- <div class="edit-this-page"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/docs/modules/ROOT/pages/sdk/material_editing.adoc">Edit this Page</a></div>
- </div>
- <div class="content">
- <article class="doc">
- <h1 class="page">jMonkeyEngine SDK: Material Editor</h1>
- <div id="preamble">
- <div class="sectionbody">
- <div class="paragraph">
- <p>If you are looking for background information, read about <a href="../jme3/advanced/material_definitions.html" class="page">Material Definitions</a> and <a href="../jme3/advanced/j3m_material_files.html" class="page">j3M Material Files</a>.
- You can <a href="../jme3/advanced/j3m_material_files.html" class="page">write .j3m files in a text editor</a>, or use the jMonkeyEngine SDK to generate them for you as described in this article.</p>
- </div>
- </div>
- </div>
- <div class="sect1">
- <h2 id="materials"><a class="anchor" href="#materials"></a>Materials</h2>
- <div class="sectionbody">
- <div class="paragraph">
- <p>The jMonkeyEngine uses a special Material format, which comes in .j3m files. You use .j3m files to store sets of material properties that you use repeatedly. This enables you write one short line of code that simply loads the presets from a custom .j3m file. Without a .j3m file you need to write several lines of material property setters every time when you want to use a non-default material.</p>
- </div>
- </div>
- </div>
- <div class="sect1">
- <h2 id="creating-j3m-materials"><a class="anchor" href="#creating-j3m-materials"></a>Creating .j3m Materials</h2>
- <div class="sectionbody">
- <div class="imageblock text-right right">
- <div class="content">
- <img src="../_images/sdk/material-editor.png" alt="material-editor.png" width="275" height="245">
- </div>
- </div>
- <div class="paragraph">
- <p>To create new .j3m files in the jMonkeyEngine SDK:</p>
- </div>
- <div class="olist arabic">
- <ol class="arabic">
- <li>
- <p><b class="button">RMB</b> select the <code>assets/Materials</code> directory and choose <code><span class="menuseq"><b class="menu">New</b> <i class="fa fa-angle-right caret"></i> <b class="menuitem">Other</b></span></code>.</p>
- </li>
- <li>
- <p>In the New File Wizard, choose <code><span class="menuseq"><b class="menu">Material</b> <i class="fa fa-angle-right caret"></i> <b class="menuitem">Empty Material File</b></span></code>, and click <b class="button">Next</b>.</p>
- </li>
- <li>
- <p>Give the file a name, for example <code>mat_wall</code> for a wall material.</p>
- </li>
- <li>
- <p>A new file <code>mat_wall.j3m</code> is created in the Materials directory and opens in the Material Editor.</p>
- </li>
- </ol>
- </div>
- <div class="paragraph">
- <p>You can edit the source of the material, or use the user-friendly visual editor to set the properties of the material. Set the properties to the same values as you would otherwise specify with setters on a Material object in Java code:</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">Material mat_wall = new Material(
- assetManager, "Common/MatDefs/Light/Lighting.j3md");
- mat_wall.setTexture("DiffuseMap",
- assetManager.loadTexture("Textures/wall_diffuse.png"));
- mat_wall.setTexture("NormalMap",
- assetManager.loadTexture("Textures/wall_normals.png"));
- mat_wall.setFloat("Shininess", 5f);</code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p>This Java code corresponds to the following .j3m file:</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">Material my brick wall : Common/MatDefs/Light/Lighting.j3md {
- MaterialParameters {
- DiffuseMap: Repeat Textures/wall_diffuse.png
- NormalMap: Repeat Textures/wall_normals.png
- Shininess: 5.0
- }
- }</code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p>You can modify the source code of the j3m file in the “source” tab of the Material Editor.</p>
- </div>
- </div>
- </div>
- <div class="sect1">
- <h2 id="using-j3m-materials"><a class="anchor" href="#using-j3m-materials"></a>Using .j3m Materials</h2>
- <div class="sectionbody">
- <div class="imageblock text-right right">
- <div class="content">
- <img src="../_images/sdk/applymaterial.jpg" alt="applymaterial.jpg" width="180" height="300">
- </div>
- </div>
- <div class="paragraph">
- <p>When the material is ready and saved into your projects assets directory, you can assign the .j3m to a Geometry.</p>
- </div>
- <div class="paragraph">
- <p>In the jMonkeyEngine SDK</p>
- </div>
- <div class="olist arabic">
- <ol class="arabic">
- <li>
- <p><b class="button">RMB</b> select the j3o file and choose <code>Edit in SceneComposer</code>.</p>
- </li>
- <li>
- <p>You can open the SceneExplorer window by selecting <code><span class="menuseq"><b class="menu">Window</b> <i class="fa fa-angle-right caret"></i> <b class="menuitem">SceneExplorer</b></span></code> from the menu bar, if it’s not already open.</p>
- </li>
- <li>
- <p>In the SceneExplorer, click the geometry to which you want to assign the material.</p>
- </li>
- <li>
- <p>Open the Properties window.</p>
- </li>
- <li>
- <p>Assign the .j3m material to the .j3o in the <code><span class="menuseq"><b class="menu">Properties</b> <i class="fa fa-angle-right caret"></i> <b class="submenu">Geometry</b> <i class="fa fa-angle-right caret"></i> <b class="menuitem">Material</b></span></code> section.</p>
- <div class="admonitionblock tip">
- <table>
- <tr>
- <td class="icon">
- <i class="fa icon-tip" title="Tip"></i>
- </td>
- <td class="content">
- If the .j3o file already has a material assigned to it from exporting/importing, you can generate the material by selecting “create j3m file” instead. This will place a .j3m under <code>assets/Materials/Generated</code> and assign it to your .j3o.
- </td>
- </tr>
- </table>
- </div>
- </li>
- <li>
- <p>Save the j3o and load it into you game.</p>
- </li>
- </ol>
- </div>
- <div class="paragraph">
- <p>Or in your Java code</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Use a loader and a setter to assign the material to a Geometry.</p>
- </li>
- </ul>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">mywall.setMaterial(assetManager.loadMaterial( "Materials/mat_wall.j3m"));</code></pre>
- </div>
- </div>
- <hr>
- <div class="paragraph">
- <p><strong>See also:</strong></p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p><a href="../jme3/advanced/material_specification.html" class="page">Developer specification of the jME3 material system (.j3md,.j3m)</a></p>
- </li>
- <li>
- <p><a href="../jme3/beginner/hello_material.html" class="page">Hello Material</a></p>
- </li>
- <li>
- <p><a href="../jme3/advanced/materials_overview.html" class="page">Materials Overview</a></p>
- </li>
- <li>
- <p><a href="../jme3/advanced/material_definitions.html" class="page">Material Definitions</a></p>
- </li>
- <li>
- <p><a href="../jme3/advanced/j3m_material_files.html" class="page">j3M Material Files</a></p>
- </li>
- <li>
- <p><a href="neotexture.html" class="page">Neotexture</a> (Procedural textures)</p>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </article>
- <aside class="toc sidebar" data-title="Contents" data-levels="2">
- <div class="toc-menu"></div>
- </aside>
- </div>
- </main>
- </div>
- <footer class="footer">
- <p>This page was built using the Antora default UI.</p>
- <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
- </footer>
- <script src="../../_/js/site.js"></script>
- <script async src="../../_/js/vendor/highlight.js"></script>
- </body>
- </html>
|