atomexasset.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Asciidoctor 1.5.4"><title>atomexasset</title><link rel="stylesheet" href="./asciidoctor.css">
  2. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
  3. <link rel="stylesheet" href="./coderay-asciidoctor.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.css"></head><body class="article toc2 toc-left"><div id="header"><div id="toolbar"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/src/docs/asciidoc/jme3/advanced/atom_framework/atomexasset.adoc"><i class="fa fa-pencil-square" aria-hidden="true"></i></a><a href="https://github.com/jMonkeyEngine/wiki/new/master/src/docs/asciidoc/jme3/advanced/atom_framework/"><i class="fa fa-plus-square" aria-hidden="true"></i></a><input dir="auto" style="position: relative; vertical-align: top;" spellcheck="false" autocomplete="off" class="searchbox__input aa-input" id="doc-search" name="search" placeholder="Search in the doc" required="required" type="search"></div><h1>atomexasset</h1><div class="details"><span class="author" id="author"></span><br><span id="revnumber">version ,</span> <span id="revdate">2016/03/17 20:48</span></div><div id="toc" class="toc2"><div id="toctitle">Table of Contents</div><ul class="sectlevel1"><li><a href="#atomexassets">AtomExAssets</a><ul class="sectlevel2"><li><a href="#features">Features</a></li><li><a href="#the-real-pipeline">The "real" pipeline</a></li><li><a href="#multi-sources-multi-targets">Multi sources &amp; Multi targets</a></li></ul></li><li><a href="#first-look">First look</a><ul class="sectlevel2"><li><a href="#slides">Slides</a></li><li><a href="#architecture">Architecture</a></li><li><a href="#supported-sources-targets">Supported sources &amp; targets</a></li><li><a href="#quickstart">Quickstart</a></li></ul></li><li><a href="#documentation">Documentation</a><ul class="sectlevel2"><li><a href="#write-encoder-decoder">Write encoder &amp; decoder</a></li><li><a href="#manage-dataflow-turbine">Manage dataflow &amp; turbine</a></li><li><a href="#server-nodes">Server &amp; Nodes</a></li></ul></li></ul></div></div><div id="content"><div class="sect2"><h3 id="atomexassets">AtomExAssets</h3><div class="paragraph"><p>The future assets pipeline for JME3 games!</p></div>
  4. <div class="sect2"><h3 id="features">Features</h3><div class="ulist"><ul><li><p>Real pipeline</p></li><li><p>Multi sources &amp; Multi targets</p></li></ul></div></div>
  5. <div class="sect2"><h3 id="the-real-pipeline">The "real" pipeline</h3><div class="paragraph"><p>Pipeline is a common term in computing and also asset making. From sattelite view, pipeline is progresses between input and output.</p></div>
  6. <div class="paragraph"><p><span class="image"><img src="http://storm.incubator.apache.org/images/topology.png" alt="400px" width="" height=""></span></p></div>
  7. <div class="paragraph"><p>Here in game we talking about Assets aspect, mostly!</p></div>
  8. <div class="paragraph"><p>In real world, converting-processing data and assets also require amount of times, efforts and cause headaches, almost comparable to making data and assets.</p></div>
  9. <div class="admonitionblock tip"><table><tr><td class="icon"><i class="fa icon-tip" title="Tip"></i></td><td class="content"><div class="paragraph"><p>Some of the problems and solutions here can also be applied to other situation and usecaces</p></div></td></tr></table></div>
  10. <div class="sect3"><h4 id="converting">Converting</h4><div class="paragraph"><p>Converting between things is a hard problem:</p></div>
  11. <div class="ulist"><ul><li><p>Semantic: “things are different “in contexts.</p></li><li><p>Incompatible: Converting almost one-direction only. Converter programs sometime not reliable and not support your data</p></li><li><p>Hidden: Some format is unknown. Some require commercial and $$$</p></li><li><p>Fault-tolerant: Currently almost asset pipeline is easy to fail and do not support recovery.</p></li></ul></div></div>
  12. <div class="sect3"><h4 id="processing">Processing</h4><div class="paragraph"><p>Processing again is require a lot power:</p></div>
  13. <div class="ulist"><ul><li><p>Time: Did you ever generate lightmap or PVS? - It may take a long long wait and easy to fail.</p></li><li><p>Power and units: Did you ever render a movie? - It may require a render farm.</p></li><li><p>Connections: Is there anything has to transfer between units? - It may delay the whole progress.</p></li></ul></div></div>
  14. <div class="sect3"><h4 id="innovations">Innovations</h4><div class="paragraph"><p>AtomExAsset try to leverage pipelines from ideas inspired:</p></div>
  15. <div class="sect4"><h5 id="from-preon">From Preon</h5><div class="paragraph"><p>Bit stream language</p></div></div>
  16. <div class="sect4"><h5 id="from-dataturbine">From DataTurbine</h5><div class="paragraph"><p>Real-time data over network</p></div></div>
  17. <div class="sect4"><h5 id="from-distributed-computing">From Distributed computing</h5><div class="paragraph"><p><a href="http://storm.incubator.apache.org/">http://storm.incubator.apache.org/</a> -</p></div></div>
  18. <div class="sect4"><h5 id="from-other-ccds-and-engines">From Other CCDs and Engines</h5><div class="paragraph"><p>3DSMax and Autodesk programs: Render farm integrated.</p></div>
  19. <div class="paragraph"><p>Blender: DNA structure</p></div>
  20. <div class="paragraph"><p>Unity: Metadata and SVN integrated</p></div></div></div></div>
  21. <div class="sect2"><h3 id="multi-sources-multi-targets">Multi sources &amp; Multi targets</h3></div></div>
  22. <div class="sect2"><h3 id="first-look">First look</h3><div class="sect2"><h3 id="slides">Slides</h3><div class="paragraph"><p>iframe::https://docs.google.com/presentation/d/1gvh00FBoSYgvryw7Czbcjxrt5TmlK12P14QRdjKo4NA/embed?start=false&amp;loop=false&amp;delayms=3000[width="100%", height="600px", alt="", scroll="true",border="true",align="false"]</p></div></div>
  23. <div class="sect2"><h3 id="architecture">Architecture</h3></div>
  24. <div class="sect2"><h3 id="supported-sources-targets">Supported sources &amp; targets</h3></div>
  25. <div class="sect2"><h3 id="quickstart">Quickstart</h3><div class="sect3"><h4 id="unified-format-how-about-no">Unified Format? How about NO</h4><div class="paragraph"><p>“Unified Format (use one format to encoded, decoded all kind of assets) is actually a nice idea but it&#8217;s not real useful in real life situtations (or not even possible?)</p></div>
  26. <div class="paragraph"><p>AtomExAsset in other hand has unified pipeline via: Codecs, Flows, EntryPoints. Its “unified data are actually a temporial data which has meta-data embeded.</p></div></div>
  27. <div class="sect3"><h4 id="temporial-scene-data">Temporial scene data</h4></div>
  28. <div class="sect3"><h4 id="codecs">Codecs</h4><div class="paragraph"><p>Models</p></div>
  29. <div class="paragraph"><p>Textures</p></div>
  30. <div class="paragraph"><p>Animations</p></div>
  31. <div class="paragraph"><p>Basic usages</p></div></div>
  32. <div class="sect3"><h4 id="entrypoints">EntryPoints</h4><div class="paragraph"><p>EntryPoint is a higher abstract level of AssetKey where we accept the fact that Assets is not actually separated but reference in nested way, via each other and form a topology. We are talking about batch solutions which are very popular in real-life gamedev, and a way to integrate the flow of assets to the normal pipeline…</p></div>
  33. <div class="paragraph"><p>A lot of AAA games of big company relied on packed and streaming assets (online, from disks..). This assets usually get loaded by chunks instead of a whole at a time, make it possible to process as fast and smooth as possible.</p></div>
  34. <div class="paragraph"><p>You can see one simple example of the situation when:</p></div>
  35. <div class="ulist"><ul><li><p>We reference to a Texture assetkey of a single Tile: assetManager.load(“tile1.png);</p></li><li><p>We later make a texture atlas of Tiles: tiles.png</p></li><li><p>How can we reference to the original tile the old way, ignore the fact that it got batched!?</p></li></ul></div>
  36. <div class="paragraph"><p>Texture atlas for ex and all kind of batching assets (pack, atlas, uber …) are techniques to optimize/boost load time and real-time performance. Obfucasion, encoding add an extra layer technique that hide the real data from the back-end user; who shouldn&#8217;t touch that data and modify them.</p></div>
  37. <div class="paragraph"><p>Also the always processing nature of the the asset in Atom pipeline require “dynamic entry point which AssetKey&#8217;s abstraction is not enough. EntryPoint and Flow are two new concept in the playground that you should take time to get familiar with.</p></div></div>
  38. <div class="sect3"><h4 id="flows">Flows</h4></div>
  39. <div class="sect3"><h4 id="j3a">J3A</h4><div class="literalblock"><div class="title">j3a (see, it looks like j3o) stand for “Alternate Automatic Assets is not actually format, but a meta-data or entry point in the asset system. One can use .j3a as entry point to load what ever he want with just the name, for ex:</div>
  40. <div class="content"><pre> assetManager.load("monkey.j3o")</pre></div></div>
  41. <div class="paragraph"><p>is equal with:</p></div>
  42. <div class="literalblock"><div class="content"><pre> assetManager.load("monkey.j3a")</pre></div></div>
  43. <div class="paragraph"><p>but the later has extra effects:</p></div>
  44. <div class="ulist"><ul><li><p>It put a update watcher over the entry point</p><div class="ulist"><ul><li><p>the file in filesystem</p></li><li><p>if you has config for that entry to “link to another remote point (git, remote asset central), it actually manage the linkage for you</p></li></ul></div></li><li><p>It manage the flows of the loading progress of that entry</p></li><li><p>It manage the avaiablility, validation, necessarility of that entry if you are in a streaming scenario</p></li><li><p>It let the assets pipeline fault tolerant.</p><div class="ulist"><ul><li><p>So if the entry point is not available yet, you has a place holder util the file is available. The “holding back effect also can be set if need</p></li><li><p>If the request to the entry point actually timeouted, cached assets are used</p></li></ul></div></li></ul></div></div>
  45. <div class="sect3"><h4 id="usage-along-with-the-official-asset-pipeline">Usage along with the "official" asset pipeline</h4><div class="paragraph"><p>You can see the Atom&#8217;s asset pipeline as a replacement of the official one. In fact, you can also let them work together seamlessly because Atom pipeline just bypass JME3&#8217;s assetManager in a few special case.</p></div>
  46. <div class="admonitionblock warning"><table><tr><td class="icon"><i class="fa icon-warning" title="Warning"></i></td><td class="content"><div class="paragraph"><p>Remember Atom&#8217;s asset pipeline is better for “not-well formed assets. In normal situation, you can use JME3&#8217;s asset without a doubt!</p></div></td></tr></table></div>
  47. <div class="paragraph"><p>Way1 - Atom over JME3: Put assetManager under an entry point, let call it “SEP - StaticEntryPoint.</p></div>
  48. <div class="literalblock"><div class="content"><pre> assetManager.load("SEP\")</pre></div></div>
  49. <div class="paragraph"><p>Way2 - Atom with JME#:</p></div>
  50. <div class="literalblock"><div class="content"><pre> assetManager.load(".j3a")</pre></div></div></div></div></div>
  51. <div class="sect2"><h3 id="documentation">Documentation</h3><div class="sect2"><h3 id="write-encoder-decoder">Write encoder &amp; decoder</h3><div class="paragraph"><p>Models</p></div>
  52. <div class="paragraph"><p>Textures</p></div>
  53. <div class="paragraph"><p>Animations</p></div>
  54. <div class="paragraph"><p>Basic usage</p></div>
  55. <div class="paragraph"><p>Preon reference:</p></div>
  56. <div class="paragraph"><p><a href="http://preon.codehaus.org/preon-binding/apidocs/1.1-SNAPSHOT/nl/flotsam/preon/codec/package-summary.html">http://preon.codehaus.org/preon-binding/apidocs/1.1-SNAPSHOT/nl/flotsam/preon/codec/package-summary.html</a></p></div></div>
  57. <div class="sect2"><h3 id="manage-dataflow-turbine">Manage dataflow &amp; turbine</h3></div>
  58. <div class="sect2"><h3 id="server-nodes">Server &amp; Nodes</h3><div class="paragraph"><p>AtomExAssets ultimately use Building tools and Framework to help Java developer doing Game assets!</p></div>
  59. <div class="paragraph"><p>Beside of Defacto of the building tools: Ant &amp; Maven, the new rising star Gradle. AtomExAssets also use the powerful framework:</p></div>
  60. <div class="paragraph"><p><a href="http://www.go.cd/">http://www.go.cd/</a></p></div>
  61. <div class="paragraph"><p><span class="image"><img src="http://www.go.cd/images/home-image1.png" alt="home-image1.png" width="" height=""></span></p></div></div></div></div><div id="footer"><div id="footer-text">Version <br>Last updated 2018-04-17 20:42:10 +00:00</div></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.js"></script><script>docsearch({
  62. apiKey: 'a736b6d93de805e26ec2f49b55013fbd',
  63. indexName: 'jmonkeyengine',
  64. inputSelector: '#doc-search',
  65. debug: false // Set debug to true if you want to inspect the dropdown
  66. });</script></body></html>