sky.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>How to add a Sky to your Scene :: jMonkeyEngine Docs</title>
  7. <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/jme3/advanced/sky.html">
  8. <meta name="generator" content="Antora 2.3.3">
  9. <link rel="stylesheet" href="../../../_/css/site.css">
  10. <meta property="og:image" content="https://wiki.jmonkeyengine.org/_/img/iconx128.png">
  11. <meta property="og:description" content="How to add a Sky to your Scene">
  12. <meta property="og:title" content="jMonkeyEngine Docs">
  13. <link rel="stylesheet" href="../../../_/css/site-extra.css">
  14. <link rel="stylesheet" href="../../../_/css/vendor/docsearch.min.css">
  15. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css -->
  16. <link rel="icon" href="../../../_/img/favicon.ico" type="image/x-icon">
  17. </head>
  18. <body class="article">
  19. <header class="header">
  20. <nav class="navbar">
  21. <div class="navbar-brand">
  22. <a class="navbar-item" href="https://wiki.jmonkeyengine.org">
  23. <img alt="" src="../../../_/img/jMonkeyDocLogo.png" height="32" type="image/x-icon">
  24. </a>
  25. <div class="navbar-item hide-for-print">
  26. <input type="text" placeholder="Search docs..." id="search-input"/>
  27. </div>
  28. <button class="navbar-burger" data-target="topbar-nav">
  29. <span></span>
  30. <span></span>
  31. <span></span>
  32. </button>
  33. </div>
  34. <div id="topbar-nav" class="navbar-menu">
  35. <div class="navbar-end">
  36. <div class="navbar-item theme-switch-wrapper">
  37. <label class="theme-switch" for="checkbox">
  38. <input type="checkbox" id="checkbox" />
  39. <div class="slider round"></div>
  40. </label>
  41. </div>
  42. <a class="navbar-item" href="https://github.com/jmonkeyengine/wiki">Github</a>
  43. </div>
  44. </div>
  45. </nav>
  46. </header>
  47. <div class="body">
  48. <div class="nav-container" data-component="docs" data-version="master">
  49. <aside class="nav">
  50. <div class="panels">
  51. <div class="nav-panel-menu is-active" data-panel="menu">
  52. <nav class="nav-menu">
  53. <h3 class="title"><a href="../../documentation.html">Docs</a></h3>
  54. <ul class="nav-list">
  55. <li class="nav-item" data-depth="0">
  56. <ul class="nav-list">
  57. <li class="nav-item" data-depth="1">
  58. <a class="nav-link" href="../../documentation.html">Getting Started</a>
  59. </li>
  60. <li class="nav-item" data-depth="1">
  61. <a class="nav-link" href="https://javadoc.jmonkeyengine.org/v3.3.2-stable">JavaDoc</a>
  62. </li>
  63. <li class="nav-item" data-depth="1">
  64. <button class="nav-item-toggle"></button>
  65. <a class="nav-link" href="../../jme3.html">jMonkeyEngine 3</a>
  66. <ul class="nav-list">
  67. <li class="nav-item" data-depth="2">
  68. <button class="nav-item-toggle"></button>
  69. <span class="nav-text">Beginner Tutorials</span>
  70. <ul class="nav-list">
  71. <li class="nav-item" data-depth="3">
  72. <a class="nav-link" href="../beginner/hello_simpleapplication.html">Hello SimpleApplication</a>
  73. </li>
  74. <li class="nav-item" data-depth="3">
  75. <a class="nav-link" href="../beginner/hello_node.html">Hello Node</a>
  76. </li>
  77. <li class="nav-item" data-depth="3">
  78. <a class="nav-link" href="../beginner/hello_asset.html">Hello Asset</a>
  79. </li>
  80. <li class="nav-item" data-depth="3">
  81. <a class="nav-link" href="../beginner/hello_main_event_loop.html">Hello Main Event Loop</a>
  82. </li>
  83. <li class="nav-item" data-depth="3">
  84. <a class="nav-link" href="../beginner/hello_input_system.html">Hello Input System</a>
  85. </li>
  86. <li class="nav-item" data-depth="3">
  87. <a class="nav-link" href="../beginner/hello_material.html">Hello Material</a>
  88. </li>
  89. <li class="nav-item" data-depth="3">
  90. <a class="nav-link" href="../beginner/hello_animation.html">Hello Animation</a>
  91. </li>
  92. <li class="nav-item" data-depth="3">
  93. <a class="nav-link" href="../beginner/hello_picking.html">Hello Picking</a>
  94. </li>
  95. <li class="nav-item" data-depth="3">
  96. <a class="nav-link" href="../beginner/hello_collision.html">Hello Collision</a>
  97. </li>
  98. <li class="nav-item" data-depth="3">
  99. <a class="nav-link" href="../beginner/hello_terrain.html">Hello Terrain</a>
  100. </li>
  101. <li class="nav-item" data-depth="3">
  102. <a class="nav-link" href="../beginner/hello_audio.html">Hello Audio</a>
  103. </li>
  104. <li class="nav-item" data-depth="3">
  105. <a class="nav-link" href="../beginner/hello_effects.html">Hello Effects</a>
  106. </li>
  107. <li class="nav-item" data-depth="3">
  108. <a class="nav-link" href="../beginner/hello_physics.html">Hello Physics</a>
  109. </li>
  110. </ul>
  111. </li>
  112. <li class="nav-item" data-depth="2">
  113. <button class="nav-item-toggle"></button>
  114. <span class="nav-text">Intermediate Tutorials</span>
  115. <ul class="nav-list">
  116. <li class="nav-item" data-depth="3">
  117. <button class="nav-item-toggle"></button>
  118. <span class="nav-text">Concepts</span>
  119. <ul class="nav-list">
  120. <li class="nav-item" data-depth="4">
  121. <a class="nav-link" href="../intermediate/best_practices.html">Best Practices</a>
  122. </li>
  123. <li class="nav-item" data-depth="4">
  124. <a class="nav-link" href="../intermediate/simpleapplication.html">Simple Application</a>
  125. </li>
  126. <li class="nav-item" data-depth="4">
  127. <a class="nav-link" href="../features.html">Features</a>
  128. </li>
  129. <li class="nav-item" data-depth="4">
  130. <a class="nav-link" href="../intermediate/optimization.html">Optimization</a>
  131. </li>
  132. <li class="nav-item" data-depth="4">
  133. <a class="nav-link" href="../faq.html">FAQ</a>
  134. </li>
  135. </ul>
  136. </li>
  137. <li class="nav-item" data-depth="3">
  138. <button class="nav-item-toggle"></button>
  139. <span class="nav-text">Math Concepts</span>
  140. <ul class="nav-list">
  141. <li class="nav-item" data-depth="4">
  142. <a class="nav-link" href="../math_for_dummies.html">Math For Dummies</a>
  143. </li>
  144. <li class="nav-item" data-depth="4">
  145. <a class="nav-link" href="../intermediate/math.html">Math</a>
  146. </li>
  147. <li class="nav-item" data-depth="4">
  148. <a class="nav-link" href="../math.html">More Math</a>
  149. </li>
  150. <li class="nav-item" data-depth="4">
  151. <a class="nav-link" href="../rotate.html">Rotate</a>
  152. </li>
  153. <li class="nav-item" data-depth="4">
  154. <a class="nav-link" href="../math_video_tutorials.html">Math Video Tutorials</a>
  155. </li>
  156. </ul>
  157. </li>
  158. <li class="nav-item" data-depth="3">
  159. <button class="nav-item-toggle"></button>
  160. <span class="nav-text">3D Graphics Concepts</span>
  161. <ul class="nav-list">
  162. <li class="nav-item" data-depth="4">
  163. <a class="nav-link" href="../intermediate/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>
  164. </li>
  165. <li class="nav-item" data-depth="4">
  166. <a class="nav-link" href="../scenegraph_for_dummies.html">Scenegraph for Dummies</a>
  167. </li>
  168. <li class="nav-item" data-depth="4">
  169. <a class="nav-link" href="../beginner/hellovector.html">Hello Vector</a>
  170. </li>
  171. <li class="nav-item" data-depth="4">
  172. <a class="nav-link" href="../terminology.html">Terminology</a>
  173. </li>
  174. <li class="nav-item" data-depth="4">
  175. <a class="nav-link" href="../intermediate/how_to_use_materials.html">How to Use Materials</a>
  176. </li>
  177. <li class="nav-item" data-depth="4">
  178. <a class="nav-link" href="../intermediate/transparency_sorting.html">Transparency and Sorting</a>
  179. </li>
  180. <li class="nav-item" data-depth="4">
  181. <a class="nav-link" href="../external/blender.html">Importing from Blender</a>
  182. </li>
  183. <li class="nav-item" data-depth="4">
  184. <a class="nav-link" href="../external/3dsmax.html">Importing from 3DS Max</a>
  185. </li>
  186. </ul>
  187. </li>
  188. </ul>
  189. </li>
  190. </ul>
  191. </li>
  192. <li class="nav-item" data-depth="1">
  193. <a class="nav-link" href="../../logo.html">Logo Usage</a>
  194. </li>
  195. <li class="nav-item" data-depth="1">
  196. <a class="nav-link" href="../../bsd_license.html">License</a>
  197. </li>
  198. <li class="nav-item" data-depth="1">
  199. <a class="nav-link" href="../../github_tips.html">Github Tips</a>
  200. </li>
  201. </ul>
  202. </li>
  203. <li class="nav-item" data-depth="0">
  204. <button class="nav-item-toggle"></button>
  205. <span class="nav-text">SDK</span>
  206. <ul class="nav-list">
  207. <li class="nav-item" data-depth="1">
  208. <a class="nav-link" href="../../sdk.html">jMonkeyEngine SDK</a>
  209. </li>
  210. </ul>
  211. </li>
  212. </ul>
  213. </nav>
  214. </div>
  215. <div class="nav-panel-explore" data-panel="explore">
  216. <div class="context">
  217. <span class="title">Docs</span>
  218. <span class="version">master</span>
  219. </div>
  220. <ul class="components">
  221. <li class="component is-current">
  222. <span class="title">Docs</span>
  223. <ul class="versions">
  224. <li class="version is-current is-latest">
  225. <a href="../../documentation.html">master</a>
  226. </li>
  227. </ul>
  228. </li>
  229. <li class="component">
  230. <span class="title">Wiki UI</span>
  231. <ul class="versions">
  232. <li class="version is-latest">
  233. <a href="../../../wiki-ui/index.html">master</a>
  234. </li>
  235. </ul>
  236. </li>
  237. </ul>
  238. </div>
  239. </div>
  240. </aside>
  241. </div>
  242. <main class="article">
  243. <div class="toolbar" role="navigation">
  244. <button class="nav-toggle"></button>
  245. <nav class="breadcrumbs" aria-label="breadcrumbs">
  246. <ul>
  247. <li><a href="../../documentation.html">Docs</a></li>
  248. <li><a href="sky.html">How to add a Sky to your Scene</a></li>
  249. </ul>
  250. </nav>
  251. <div class="edit-this-page"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/docs/modules/ROOT/pages/jme3/advanced/sky.adoc">Edit this Page</a></div>
  252. </div>
  253. <div class="content">
  254. <article class="doc">
  255. <h1 class="page">How to add a Sky to your Scene</h1>
  256. <div id="preamble">
  257. <div class="sectionbody">
  258. <div class="paragraph">
  259. <p>Here is an example for how you add a static horizon (a background landscape and a sky) to a scene.
  260. Having a discernable horizon with a suitable landscape (or space, or ocean, or whatever) in the background makes scenes look more realistic than just a single-colored &#8220;sky&#8221; background.</p>
  261. </div>
  262. </div>
  263. </div>
  264. <div class="sect1">
  265. <h2 id="adding-the-sky"><a class="anchor" href="#adding-the-sky"></a>Adding the Sky</h2>
  266. <div class="sectionbody">
  267. <div class="paragraph">
  268. <p>Adding a sky is extremely easy using the <code>com.jme3.util.SkyFactory</code>.</p>
  269. </div>
  270. <div class="listingblock">
  271. <div class="content">
  272. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">getRootNode().attachChild(SkyFactory.createSky(getAssetManager(), "Textures/Sky/Bright/BrightSky.dds", SkyFactory.EnvMapType.CubeMap));</code></pre>
  273. </div>
  274. </div>
  275. <div class="paragraph">
  276. <p>To add a sky you need to supply:</p>
  277. </div>
  278. <div class="olist arabic">
  279. <ol class="arabic">
  280. <li>
  281. <p>The assetManager object to use</p>
  282. </li>
  283. <li>
  284. <p>A cube or sphere map texture of the sky</p>
  285. </li>
  286. <li>
  287. <p>Set the map type: <a href="https://javadoc.jmonkeyengine.org/v3.3.2-stable/com/jme3/util/SkyFactory.EnvMapType.html">SkyFactory.EnvMapType</a>. In this instance, CubeMap.</p>
  288. </li>
  289. </ol>
  290. </div>
  291. <div class="paragraph">
  292. <p>Internally, the SkyFactory calls the following methods:</p>
  293. </div>
  294. <div class="olist arabic">
  295. <ol class="arabic">
  296. <li>
  297. <p><code>sky.setQueueBucket(Bucket.Sky);</code> makes certain the sky is rendered in the right order, behind everything else.</p>
  298. </li>
  299. <li>
  300. <p><code>sky.setCullHint(Spatial.CullHint.Never);</code> makes certain that the sky is never culled.</p>
  301. </li>
  302. <li>
  303. <p>The SkyFactory uses the internal jME3 material definition <code>Sky.j3md</code>. This Material definition works with sphere and cube maps.</p>
  304. </li>
  305. </ol>
  306. </div>
  307. </div>
  308. </div>
  309. <div class="sect1">
  310. <h2 id="creating-the-textures"><a class="anchor" href="#creating-the-textures"></a>Creating the Textures</h2>
  311. <div class="sectionbody">
  312. <div class="paragraph">
  313. <p>As the sky texture we use the sample BrightSky.dds file from jme3test-test-data.</p>
  314. </div>
  315. <div class="paragraph">
  316. <p>How to create a sky textures?</p>
  317. </div>
  318. <div class="ulist">
  319. <ul>
  320. <li>
  321. <p>There are many tools out there that generate cube and sphere maps.<br>
  322. Examples for landscape texture generators are Terragen or Bryce.</p>
  323. </li>
  324. <li>
  325. <p>The actual texture size does not matter, as long as you add the Sky Geometry to the Sky bucket: Everything in the sky bucket will always be infinitely far away behind everything else, and never intersect with your scene.<br>
  326. Of course the higher the resolution, the better it will look. On the other hand, if the graphic is too big, it will slow the game down.</p>
  327. </li>
  328. <li>
  329. <p>A box or sphere map is the simplest solution. But you can use any Node as sky, even complex sets of geometries and quads with animated clouds, blinking stars, city skylines, etc.</p>
  330. </li>
  331. <li>
  332. <p>JME3 supports cube maps in PNG, JPG, or (compressed) DDS format.</p>
  333. </li>
  334. </ul>
  335. </div>
  336. <div class="paragraph">
  337. <p>Box or Sphere?</p>
  338. </div>
  339. <div class="ulist">
  340. <ul>
  341. <li>
  342. <p>If you have access to cube map textures, then use a SkyBox</p>
  343. <div class="ulist">
  344. <ul>
  345. <li>
  346. <p><a href="http://1.bp.blogspot.com/_uVsWqMqIGQU/SN0IZEE117I/AAAAAAAAAPs/4lfHx1Erdqg/s1600/skybox">SkyBox examples</a></p>
  347. </li>
  348. </ul>
  349. </div>
  350. </li>
  351. <li>
  352. <p>If you have access to sphere map textures – specially projected sky images that fit inside a sphere – then you use a SkySphere or SkyDome.</p>
  353. <div class="ulist">
  354. <ul>
  355. <li>
  356. <p><a href="http://wiki.delphigl.com/index.php/Datei:Skysphere.jpg">SkySphere example</a></p>
  357. </li>
  358. </ul>
  359. </div>
  360. </li>
  361. </ul>
  362. </div>
  363. <div class="paragraph">
  364. <p>For more information on Skymap creation see:</p>
  365. </div>
  366. <div class="ulist">
  367. <ul>
  368. <li>
  369. <p><a href="free_skymaps.html" class="page">How to create free skymaps</a></p>
  370. </li>
  371. <li>
  372. <p><a href="#../../jme3/external/blender.html#skybox-baking#" class="page unresolved">SkyBox baking</a></p>
  373. </li>
  374. </ul>
  375. </div>
  376. </div>
  377. </div>
  378. </article>
  379. <aside class="toc sidebar" data-title="Contents" data-levels="2">
  380. <div class="toc-menu"></div>
  381. </aside>
  382. </div>
  383. </main>
  384. </div>
  385. <footer class="footer">
  386. <p>Copyright 2020 jMonkeyEngine Wiki Contributors. Licensed BSD-3.</p>
  387. </footer>
  388. <script src="../../../_/js/vendor/docsearch.min.js"></script>
  389. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js -->
  390. <script>
  391. var search = docsearch({
  392. apiKey: 'a736b6d93de805e26ec2f49b55013fbd',
  393. indexName: 'jmonkeyengine',
  394. inputSelector: '#search-input',
  395. autocompleteOptions: { hint: false, keyboardShortcuts: ['s'] },
  396. algoliaOptions: { hitsPerPage: 10 }
  397. }).autocomplete
  398. search.on('autocomplete:closed', function () { search.autocomplete.setVal() })
  399. function focusSearchInput () { document.querySelector('#search-input').focus() }
  400. if (document.querySelector('.home-link.is-current')) window.addEventListener('load', focusSearchInput)
  401. </script>
  402. <script src="../../../_/js/site.js"></script>
  403. <script async src="../../../_/js/vendor/highlight.js"></script>
  404. </body>
  405. </html>