1<!doctype html> 2<html lang="en"> 3 4<head> 5 <meta charset="utf-8" /> 6 <meta name="viewport" content="width=device-width,initial-scale=1.0" />
vendor: 104 bytes, lines 6-9
6 7 8 <script defer src="https://static.cloudflareinsights.com/beacon.min.js" 9 data-cf-beacon='{"token": "
9b5167bec6a0147e68b1dfc7dfedc8239
vendor: 15 bytes, lines 9-10
9"}'></script> 10
10<script async src="https://datenkrake.cgbookcase.com/script.js" 11 data-website-id="3c65e797-7d9a-4cb0-9ae0-b30420f59e8c"></script>
11 12 13 <link rel="icon" href="./favicon.png" /> 14 15 16 <link href="./_app/immutable/assets/0.CKHJwrub.css" rel="stylesheet"> 17 <link href="./_app/immutable/assets/Footer.C6jlFYE_.css" rel="stylesheet"> 18 <link href="./_app/immutable/assets/3.Cr4VOkX1.css" rel="stylesheet"> 19 <link href="./_app/immutable/assets/TutorialBlock.BuCNBPSQ.css" rel="stylesheet"> 20 <link rel="modulepreload" href="./_app/immutable/entry/start.Bb52DEE9.js"> 21 <link rel="modulepreload" href="./_app/immutable/chunks/entry.Ch9p4__T.js"> 22 <link rel="modulepreload" href="./_app/immutable/chunks/scheduler.DqZIQS3A.js"> 23 <link rel="modulepreload" href="./_app/immutable/entry/app.9PRZ4KU1.js"> 24 <link rel="modulepreload" href="./_app/immutable/chunks/index.UmocHTMz.js"> 25 <link rel="modulepreload" href="./_app/immutable/nodes/0.pHbEUUKb.js"> 26 <link rel="modulepreload" href="./_app/immutable/chunks/module.k1ouhqnB.js"> 27 <link rel="modulepreload" href="./_app/immutable/chunks/each.C-sIxiRW.js"> 28 <link rel="modulepreload" href="./_app/immutable/chunks/index.CwHq6mbt.js"> 29 <link rel="modulepreload" href="./_app/immutable/chunks/stores.BFkEpXDL.js"> 30 <link rel="modulepreload" href="./_app/immutable/nodes/6.CtrlwjSp.js"> 31 <link rel="modulepreload" href="./_app/immutable/chunks/TutorialBlock.PPvoLmd7.js"><title>Learn | cgbookcase.com</title><!-- HEAD_svelte-1yq29t6_START --><!-- HEAD_svelte-1yq29t6_END --> 32</head> 33 34<body data-sveltekit-preload-data="hover" class="theme-light"> 35 <div style="display: contents"> <div class="job svelte-1gyx8pn"><p class="textli svelte-1gyx8pn" data-svelte-h="svelte-13jncip">Hey, cgbookcase.com is on 36 <a href="https://obviously.ilovemy.computer/@cgbookcase" target="_blank" class="svelte-1gyx8pn"><span class="underline svelte-1gyx8pn">Mastodon</span></a> now. ð</p> <button class="svelte-1gyx8pn" data-svelte-h="svelte-z96bro">X</button> </div> <div id="loading" class="svelte-1qwcplo"> </div> <nav class="shadow-light svelte-e99rg0"><div style="display: flex; justify-content: space-between;"><a href="/" style="padding: 0;" aria-label="homepage" class="svelte-e99rg0" data-svelte-h="svelte-1nk9n9e"><img alt="" id="logo" src="https://cgbookcase.b-cdn.net/logo/Logo_Original.svg" class="svelte-e99rg0"></a> <button id="open-nav-btn" class="mobile-only svelte-e99rg0"><svg id="open-nav" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000" class="svelte-e99rg0"><path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path></svg></button></div> <ul class="desktop-nav svelte-e99rg0"><li class="svelte-e99rg0"><a id="nav-textures" rel="prefetch" href="/textures" class="svelte-e99rg0">Textures</a> </li><li class="svelte-e99rg0"><a id="nav-texture-tiling-tool" rel="prefetch" href="/texture-tiling-tool" class="svelte-e99rg0">Tiling Tool</a> </li><li class="svelte-e99rg0"><a id="nav-learn" rel="prefetch" aria-current="page" href="/learn" class="svelte-e99rg0">Learn</a> </li><li class="svelte-e99rg0"><a id="nav-blog" rel="prefetch" href="/blog" class="svelte-e99rg0">Blog</a> </li></ul> </nav> <main class="svelte-f33a6u"> <div class="w-max"><h1 class="svelte-1jceteb" data-svelte-h="svelte-1yhqfa0">Learn</h1> <div class="grid-2"><div class="box svelte-1o6wuzi"><a href="/learn/how-to-use-pbr-textures-in-unreal-engine" class="svelte-1o6wuzi"><img class="rounded shadow-light svelte-1o6wuzi" alt="" src="https://cgbookcase.b-cdn.net/tutorials/pbr-guide-unreal/thumbnail.jpg?width=1000&quality=42"></a> <a href="/learn/how-to-use-pbr-textures-in-unreal-engine" class="svelte-1o6wuzi"><h2 class="svelte-1o6wuzi">How to use PBR Textures in Unreal Engine</h2></a> </div><div class="box svelte-1o6wuzi"><a href="/learn/how-to-use-pbr-textures-in-blender" class="svelte-1o6wuzi"><img class="rounded shadow-light svelte-1o6wuzi" alt="" src="https://cgbookcase.b-cdn.net/tutorials/pbr-guide-blender/blender_pbr_thumbnail.jpg?width=1000&quality=42"></a> <a href="/learn/how-to-use-pbr-textures-in-blender" class="svelte-1o6wuzi"><h2 class="svelte-1o6wuzi">How to use PBR Textures in Blender</h2></a> </div><div class="box svelte-1o6wuzi"><a href="/learn/immersion-vr-substance-designer-material-breakdowns" class="svelte-1o6wuzi"><img class="rounded shadow-light svelte-1o6wuzi" alt="" src="https://cgbookcase.b-cdn.net/tutorials/immersion-vr-substance/thumbnail.jpg?width=1000&quality=42"></a> <a href="/learn/immersion-vr-substance-designer-material-breakdowns" class="svelte-1o6wuzi"><h2 class="svelte-1o6wuzi">Immersion VR Substance Designer Material Breakdowns</h2></a> </div><div class="box svelte-1o6wuzi"><a href="/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d" class="svelte-1o6wuzi"><img class="rounded shadow-light svelte-1o6wuzi" alt="" src="https://cgbookcase.b-cdn.net/tutorials/verge-3d-apartment/thumbn
36ail.jpg?width=1000&quality=42"></a> <a href="/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d" class="svelte-1o6wuzi"><h2 class="svelte-1o6wuzi">How To Create 3D Interactive Web Experiences in Blender & Verge3D</h2></a> </div></div></div> </main> <footer class="svelte-qacwp" data-svelte-h="svelte-p1vz0y"><div class="w-max svelte-qacwp" id="footer-div"><div class="l svelte-qacwp"><a href="/privacy-and-cookies" class="svelte-qacwp">Privacy and Cookies</a></div> <div id="social-media-icons" class="svelte-qacwp"><a aria-label="cgbookcase.com on Mastodon" target="_blank" href="https://obviously.ilovemy.computer/@cgbookcase" class="svelte-qacwp"><img alt="" class="smi svelte-qacwp" src="https://cgbookcase.b-cdn.net/icons/mastodon.svg"></a> <a aria-label="cgbookcase.com on Instagram" target="_blank" href="https://www.instagram.com/cgbookcase" class="svelte-qacwp"><img alt="" class="smi svelte-qacwp" src="https://cgbookcase.b-cdn.net/icons/instagram.svg"></a> <a aria-label="cgbookcase.com on Youtube" target="_blank" href="https://www.youtube.com/channel/UC7VfyhAatTEuMYv7CTzS1Bw" class="svelte-qacwp"><img alt="" class="smi svelte-qacwp" src="https://cgbookcase.b-cdn.net/icons/youtube.svg"></a></div> <div class="l svelte-qacwp"><a target="_blank" href="https://app.cgbookcase.com/patreon/your-settings" class="svelte-qacwp">Patreon Benefits â</a></div></div> </footer> 37 38
38<script> 39 { 40 __sveltekit_zx4txz = { 41 base: new URL(".", location).pathname.slice(0, -1) 42 }; 43 44 const element = document.currentScript.parentElement; 45 46 const data = [null,{"type":"data","data":{tutorials:[{id:6,status:"published",owner:1,content:"\u003Ch2>Importing Textures\u003C/h2>\n\u003Cp>Drag and drop the texture maps of a material into the content browser or use the green \u003Cem>Add/Import \u003C/em>button.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/2f6a2e9b-eda9-4cc7-b876-0ae4cfb67de5.jpg\" alt=\"Import Compressed\" width=\"930\" height=\"315\" />\u003C/p>\n\u003Ch2>Texture Settings\u003C/h2>\n\u003Cp>By double-clicking a texture, you can edit its settings. The two options that you need to care about are the compression settings and the sRGB check.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/884ef4d5-4a61-44d4-b870-e6de8db2103b.png\" alt=\"Texture Settings\" width=\"610\" height=\"350\" />\u003C/p>\n\u003Ch3>Compression Settings\u003C/h3>\n\u003Cp>Unreal Engine usually automatically recognizes the optimal compression settings for a texture.\u003C/p>\n\u003Cp>If you run into some problems, make sure that for AO, Base Color, Roughness and Metallic maps, the compression settings are set to \u003Cem>Default (DXT1 /5, BC1 /3 on DX11)\u003C/em>. For normal maps, set the compression settings to \u003Cem>Normalmap (DXT5, BC5 on DX11)\u003C/em>.\u003C/p>\n\u003Ch3>sRGB\u003C/h3>\n\u003Cp>The sRGB tick determines whether a texture should be gamma-corrected or not. As a rule of thumb, textures that will end up in the Base Color input of the material node (AO and Base Color) should have sRGB enabled, others (Roughness, Metallic, Normal) should not.\u003C/p>\n\u003Cp>For further information on texture settings, please refer to the \u003Ca href=\"https://docs.unrealengine.com/en-US/RenderingAndGraphics/Textures/index.html\" target=\"_blank\" rel=\"noopener\">Textures page in the Unreal Engine 4 documentation\u003C/a>.\u003C/p>\n\u003Ch2>Setting up a material\u003C/h2>\n\u003Cp>To create a new material, right-click in an empty space in the content browser and choose \u003Cem>Material\u003C/em>. Double-click the material that you've just created to open it in the node editor.\u003C/p>\n\u003Ch3>Adding Nodes\u003C/h3>\n\u003Cp>To add a texture to the material, you need a \u003Cem>TextureSample\u003C/em> node. Right-click anywhere in the material graph view and search for the \u003Cem>TextureSample.\u003C/em> You can also add one by pressing \"T\" and then clicking where you want to place the node.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/02c7754d-d381-4112-bd23-3e05d91cab2e.png\" alt=\"Add Texturesampler\" />\u003C/p>\n\u003Cp>To add a texture to the node, go to the details panel and choose one from the dropdown.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/df239c80-96e3-4877-9241-55d5e8ba91e6.jpg\" alt=\"Add Texture Compressed\" width=\"591\" height=\"675\" />\u003C/p>\n\u003Ch3>Base Color\u003C/h3>\n\u003Cp>Connect the base color map to the Base Color input of the material.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/046c686d-8500-43f3-b5d0-80ac03a12c3f.jpg\" alt=\"Basecolor Compressed\" width=\"948\" height=\"450\" />\u003C/p>\n\u003Ch3>Ambient Occlusion (AO)\u003C/h3>\n\u003Cp>The AO map is used to darken the areas in a material that light is less likely to reach. Combine this texture with the Base Color map using a multiply node. You can use a \u003Cem>LinearInterpolate (Lerp)\u003C/em> node to make the AO effect more subtle.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/5650adb8-dad4-4747-8519-205550a322cc.jpg\" alt=\"Ao1 Compressed\" width=\"1967\" height=\"634\" />\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/a7bca888-90ca-49db-855c-ef1c98ad38c2.jpg\" alt=\"Ao0 Compressed\" width=\"1967\" height=\"634\" />\u003C/p>\n\u003Cp>Note: You can also connect the AO map to the Ambient Occlusion input in the material node, but this only works when using \u003Cem>Static\u003C/em> \u003Cem>or Stationary \u003C/em>light sources. To find out more about this, read the Ambient Occlusion section on the page on \u003Ca href=\"https://docs.unrealengine.com/en-US/RenderingAndGraphics/Materials/MaterialInputs
46/index.html\" target=\"_blank\" rel=\"noopener\">material inputs in the Unreal Engine 4 documentation\u003C/a>.\u003C/p>\n\u003Ch3>Roughness\u003C/h3>\n\u003Cp>The roughness map defines how rough or smooth your material's surface is. Connect it to the \u003Cem>Roughness \u003C/em>input in the material node. You can use a \u003Cem>Power\u003C/em> node to further tweak the roughness. (A lower exponent means the material's surface will become rougher and vice versa).\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/e463cd2d-6040-4f45-a2e3-4663166d76ec.jpg\" alt=\"Roughness Compressed\" width=\"1030\" height=\"424\" />\u003C/p>\n\u003Ch3>Normal\u003C/h3>\n\u003Cp>Connect the normal map to the \u003Cem>Normal\u003C/em> input of the material node. You can use a \u003Cem>FlattenNormal\u003C/em> node and a \u003Cem>OneMinus (1-x)\u003C/em> node to change the strength of the normal map.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/7658ecc2-fa2b-4a85-96c3-2c03dc35a1a7.jpg\" alt=\"Normal Compressed\" width=\"1331\" height=\"530\" />\u003C/p>\n\u003Ch2>Tips and Tricks\u003C/h2>\n\u003Ch3>Adjusting the size of a texture\u003C/h3>\n\u003Cp>To adjust the size of the texture, add a \u003Cem>TextureCoordinates \u003C/em>node and connect it to the UVs input of the \u003Cem>TextureSample \u003C/em>node. You can change the size of the texture by adjusting the \u003Cem>UTiling \u003C/em>and \u003Cem>VTiling \u003C/em>values.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/d92a567a-12e5-4884-9bb4-5e22a1897b2a.jpg\" alt=\"Texture Coordinates Compressed\" width=\"1178\" height=\"434\" />\u003C/p>\n\u003Ch3>Editing multiple textures at once\u003C/h3>\n\u003Cp>If you've imported a lot of textures and don't want to edit the textures' settings one by one, you can edit multiple textures by using the property matrix.\u003C/p>\n\u003Cp>Select all the textures you want to edit, right-click and then go to \u003Cem>Asset Actions > Bulk Edit via Property Matrix\u003C/em>.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/d2f0639d-505d-4d81-9a51-7fc07b2e80ad.jpg\" alt=\"Bulkedit Open Compressed\" width=\"1383\" height=\"948\" />\u003C/p>\n\u003Cp>You can now edit all textures at once by adjusting the properties in the panel on the right side.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/247b01ec-25d6-47fe-b505-863dd29b8e9c.png\" alt=\"Bulkedit Matrix\" width=\"2364\" height=\"223\" />\u003C/p>\n\u003Ch3>Material Instances\u003C/h3>\n\u003Cp>In Unreal Engine, there's a useful feature called \u003Cem>Material Instances\u003C/em>. Material instances allow you to create a lot of variations of a material that all share the same node tree but have different textures or values in a select few nodes.\u003C/p>\n\u003Cp>To define which values you want to be able to change after creating the instance, right-click the corresponding node and click on \u003Cem>Convert to Parameter.\u003C/em>\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/6cc4fd14-0217-4f45-a386-8e69e84041c9.jpg\" alt=\"Convert To Param Compressed\" width=\"903\" height=\"473\" />\u003C/p>\n\u003Cp>If you now go back to the content browser, you can create a material instance by right-clicking the material.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/9c8f3f6c-24b8-4548-9fef-136cce889c50.jpg\" alt=\"Create Material Instance Compressed\" width=\"600\" height=\"303\" />\u003C/p>\n\u003Cp>If you then double-click the newly created material instance, you can adjust the values and change the textures that you've previously converted to parameters.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/directus/6ca30c89-3ff3-4fdb-8149-2b1f4738131f.jpg\" alt=\"Instance Editor Compressed\" width=\"1651\" height=\"821\" />\u003C/p>\n\u003Cp>This makes it much simpler to author a large library of materials.\u003C/p>",slug:"how-to-use-pbr-textures-in-unreal-engine",title:"How to use PBR Textures in Unreal Engine",post_type:"Text",publish_date:1618617600000,video_id:null,thumbnail:"https://cgbookcase.b-cdn.net/tutorials/pbr-guide-unreal/thumbnail.jpg"},{id:3,status:"published",owner:1,content:"\u003Ch2>Basic Materials\u003C/h2>\n\u003Cp>Usage of most materials using the Principled Shader. Apart from the Displacement section, this setup works for both Cycles and Eevee.\u003C/p>\n\u003Ch3>Base Color\u003C/h3>\n\u003Cp>The Base Color map defines the color of a surface. It should be plugged into the Base Color input of the Principled BSDF. Make sure the image file’s color space is set to Color.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/default/01_base-color_c.jpg\" />\u003C/p>\n\u003Ch3>Roughness\u003C/h3>\n\u003Cp>The Roughness map defines how rough a surface is. It should be plugged into the Roughness input of the Principled BSDF. Make sure the image file’s color space is set to Non-Color Data. Optionally, you can add a Gamma Node to easily the roughness of the material. Lower gamma means rougher surface and vice versa.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/default/02_roughness_c.jpg\" />\u003C/p>\n\u003Ch3>Height\u003C/h3>\n\u003Cp>The Height map can be used to create detailed shadows and highlights on a material or to actually displace the geometry of an object.\u003C/p>\n\u003Cp>If you want to use it for create detailed shadows and highlights, it should be plugged into the Height input of a Bump node, which then should be plugged into the Normal input of the Principled BSDF. Make sure the image file’s color space is set to Non-Color Data. Using the Strength slider of the Bump node, you can control the strength of the effect.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/default/03_height-bump_c.jpg\" />\u003C/p>\n\u003Cp>If you want to use it for actually displacing the geometry of your object, it should be plugged into the Height input of a Displacement node, which then should be plugged into the Displacement input of the Material Output node. Make sure the image file’s color space is set to Non-Color Data here as well. Using the Scale slider of the Bump node, you can control how much the geometry should be displaced.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/default/04_height-displacement_c.jpg\" />\u003C/p>\n\u003Cp>Also, make sure that the Displacement method in the Material Settings is set to either ‘Displacement’ only or to ‘Displacement and Bump’.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/default/05_height-displacement-settings_c.jpg\" />\u003C/p>\n\u003Ch3>Normal\u003C/h3>\n\u003Cp>The Normal map defines in which direction a part of a surface is faced, which is used to create detailed shadows and highlights.\u003C/p>\n\u003Cp>Normally, it should be plugged into the Color input of a Normal Map node, which then should be plugged into the Normal input of the Principled BSDF. However, all normal maps on cgbookcase.com are ‘DirectX’ normal maps, but Blender uses ‘OpenGL’, which means we have to invert the Green channel of the normal map. You can do that by adding an RGB Curves n
46ode between the Image node and the Normal node and then changing the curve in the ‘G’ channel to match the curve in the screenshot below. Make sure the image file’s color space is set to Non-Color Data.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/default/06_normal_c.jpg\" />\u003C/p>\n\u003Cp>Theoretically, you can use a normal map in combination with a height map. I recommend only using one of them, since in most cases, the effect they create is very similar.\u003C/p>\n\u003Ch3>Metallic\u003C/h3>\n\u003Cp>The Metallic map defines which parts of a material are metallic, and which are not. It should be plugged into the Metallic input of the Principled BSDF. Make sure the image file’s color space is set to Non-Color Data. Only materials that are both metallic and non-metallic have this map available. If a metallic material doesn’t have this map, change the metallic value in the Principled BSDF to 1.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/default/07_metallic_c.jpg\" />\u003C/p>\n\u003Ch3>Ambient Occlusion\u003C/h3>\n\u003Cp>The Ambient Occlusion (AO) map can be used to fake soft shadowing in the bumps of a surface. It isn’t really needed to create realistic materials in Blender (especially with Cycles), but you can still use it to darken the tiny shadows in the surface.\u003C/p>\n\u003Cp>If you want to use this map, it should be multiplied from the Base Color map using a MixRGB node, with the Ambient Occlusion map being the second color input, so you can easily control the strength of it with the slider of the MixRGB node.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/default/08_ao_c.jpg\" />\u003C/p>\n\u003Ch2>Leaves\u003C/h2>\n\u003Cp>I’m just using a plane as the 3D model for the leaf, but you can also create a more complex one that follows the form of the leaf. Make sure your object is UV unwrapped before following the instructions below.\u003C/p>\n\u003Ch3>Basic Setup\u003C/h3>\n\u003Cp>Import the Base Color, Roughness and Normal map from the front of the leaf the way you learned it in the previous guide.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/leaves/01_basic-setup_c.jpg\" />\u003C/p>\n\u003Ch3>Use Opacity\u003C/h3>\n\u003Cp>Mix the Principled BSDF with a Transparent BSDF and use the Opacity map as the factor of the Mix Shader. Make sure the Principled BSDF is plugged into the bottom Shader input of the Mix Shader, and the Transparent BSDF into the top.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/leaves/02_transparent_c.jpg\" />\u003C/p>\n\u003Ch3>Add Translucency\u003C/h3>\n\u003Cp>Translucency is when light passes through a leaf. It creates this glowing effect that you see when leaves are lit from behind:\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/leaves/translucency-irl.jpg\" />\u003C/p>\n\u003Cp>In Blender, we can achieve this effect using the Translucent BSDF. Combine it with the Principled BSDF using the Add Shader node, and connect the Base Color map to the color of the Translucent BSDF. Add a Hue/Saturation node between the Base Color map and the Translucent BSDF. By lowering the value of the Hue/Saturation node, you can lower the strength of the translucency. (A value between 0.010 and 0.200 usually works best for me.)\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/leaves/03_translucency_c.jpg\" />\u003C/p>\n\u003Cp>Translucency helps make the leaf look thinner.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/leaves/04_translucency-comparison_c.jpg\" />\u003C/p>\n\u003Ch3>Double-sided Leaves\u003C/h3>\n\u003Cp>Most leaf textures on cgbookcase.com come with the back side of the leaf as well. If you want to make a double sided leaf, duplicate your entire node setup, change the image files of your copy to the ‘_back’ files and mix them together using the Backfacing output of a Geometry node. This way, the leaf will use different textures when viewing it from to front or back.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/leaves/05_backfacing_c.jpg\" />\u003C/p>\n\u003Ch2>Surface Imperfections\u003C/h2>\n\u003Cp>Surface imperfections are great to add detail to a material, which can make a render look much more realistic. Make sure your object is UV unwrapped before following the instructions below.\u003C/p>\n\u003Ch3>Smudges and Fingerprints\u003C/h3>\n\u003Cp>Smudges and fingerprint textures work best on glossy surfaces. In this example, I’m using a shiny, red material, but you can use any material you want.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/surface imperfections/dirt_base.jpg\" />\u003C/p>\n\u003Cp>Import the texture and make sure it’s color space is set to Non-Color Data. Mix it with the roughness of the material (this can either be a single value or a roughness map). Set the blend mode to screen. If you’ve plugged the surface imperfection texture into the bottom color slot, you can control the strength of the effect by using the factor (Fac.) slider of the MixRGB node.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/surface imperfections/dirt_setup.jpg\" />\u003C/p>\n\u003Ch3>Water Droplets\u003C/h3>\n\u003Cp>By using the water droplets textures you can make a material look like it got wet in the rain (i. e. windshields). I’m using a shiny, blue material for demonstration purposes.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/surface imperfections/droplets_base.jpg\" />\u003C/p>\n\u003Cp>Import the texture and make sure it’s color space is set to Non-Color Data. To make the water droplets look 3D, connect the texture to a Bump node, which then should be plugged into the Normal input of the Principled BSDF. Then, connect the texture to the Clearcoat of the Principled BSDF. The Clearcoat adds a white specular layer on top of the material, which makes it look like the droplets were on top of the blue material. Set the Clearcoat Roughness (= the water droplets’ roughness) to 0.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/textures/guides/blender/surface imperfections/droplets_setup.jpg\" />\u003C/p>",slug:"how-to-use-pbr-textures-in-blender",title:"How to use PBR Textures in Blender",post_type:"Text",publish_date:1609459200000,video_id:null,thumbnail:"https://cgbookcase.b-cdn.net/tutorials/pbr-guide-blender/blender_pbr_thumbnail.jpg"},{id:4,status:"published",owner:1,content:"\u003Cp>Over the last few months, I designed and programmed an \u003Ca href=\"https://www.dorianzgraggen.com/projects/immersion-vr\" target=\"_blank\" rel=\"noopener\">
46interactive building for virtual reality\u003C/a>. Below you can see breakdowns of the Substance Designer graphs of two different PBR materials I created during this project.\u003C/p>\n\u003Cp>If you'd like to know more about the project, feel free to \u003Ca href=\"https://www.youtube.com/watch?v=k-Kr6gCmdKU\" target=\"_blank\" rel=\"noopener\">watch the demo video\u003C/a>.\u003C/p>\n\u003Ch2>White Brick Wall 01\u003C/h2>\n\u003Cp>The first one I'd like to break down is the \u003Ca href=\"https://www.cgbookcase.com/textures/white-brick-wall-01\">White Brick Wall 01\u003C/a>:\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/render.jpg\" />\u003C/p>\n\u003Cp>I started with a Brick Generator and then made the brick shapes have less straight-lined edges using the Warp node with a Gaussian Noise as the strength.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/01.jpg\" />\u003C/p>\n\u003Cp>Next, I wanted to make the bricks a bit bumpy and less perfect. To do that, I used two layers of noises with different levels of detail which creates some kind of depth and interesting height variation. Here it was important to warp the noises by a different factor for each brick, so they don't look like they've just been overlayed over the entire texture, which was achieved using the \u003Cspan class=\"scrn-highlight orange\">Directional Warp node and another Brick Generator\u003C/span> where every brick has a random value.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/02.jpg\" />\u003C/p>\n\u003Cp>Then, I added some height information to the crevices between the bricks.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/03.jpg\" />\u003C/p>\n\u003Cp>The bricks still look too clean and perfect, so I tried to add some kind of slightly damaged type of look to the edges of the bricks.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/04.jpg\" />\u003C/p>\n\u003Cp>Next, I added some minute detail to the entire texture to mimic the tiny height bumps painted bricks often have. I also mixed in another Brick Generator to make the bricks have varying heights.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/05.jpg\" />\u003C/p>\n\u003Cp>Then I added a bunch of holes in the crevices.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/06.jpg\" />\u003C/p>\n\u003Cp>One challenge of making the bricks look like actual painted bricks and not just some bricks that are white for some weird reason, I wanted to make the walls look like they've been painted multiple times in some areas. To achieve this, I've used the Slope Blur node with a rather low amount of samples using two different types of noises as inputs.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/07.jpg\" />\u003C/p>\n\u003Cp>Since the wall was used in a building where lots of people would walk around, I also added some tiny bumps indicating that some stuff bumped into the wall.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/08.jpg\" />\u003C/p>\n\u003Cp>Next, I added some cracks two some bricks, which I think really helped to make it look more realistic and \"used\".\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/09.jpg\" />\u003C/p>\n\u003Cp>Between the bricks, I also added some height, as if some paint was covering some of the crevices.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/10.jpg\" />\u003C/p>\n\u003Cp>The map is then plugged into the Height channel, and after a conversion to normals in the Normal channel.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/11.jpg\" />\u003C/p>\n\u003Cp>The roughness map of this material is pretty simple since it is just two different noises: One for the crevices, one for the bricks.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/12.jpg\" />\u003C/p>\n\u003Cp>The Base Color map is quite simple as well: It is mostly a white map with some soft color variation overall and a slight yellowish
46/brownish white color for the cracks.\u003C/p>\n\u003Cp>(Note: Rendered in the screenshot below is the mask for the cracks, not the last node.)\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/13.jpg\" />\u003C/p>\n\u003Cp>The entire graph can be \u003Ca href=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/WhiteBrickWall01/White_Brick_Wall_01_graph.png\">downloaded at 1:1 resolution\u003C/a>\u003C/p>\n\u003Ch2>Parquet Flooring 09\u003C/h2>\n\u003Cp>The next one I'd like to break down is the \u003Ca href=\"https://www.cgbookcase.com/textures/parquet-flooring-09\">Parquet Flooring 09\u003C/a>:\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/render.jpg\" />\u003C/p>\n\u003Cp>Here, I started with a bunch of lines created using a linear bottom-to-top gradient and a bunch of gradient maps. These lines will end up being wood grains.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/01.jpg\" />\u003C/p>\n\u003Cp>Then, to make them wavy and shaky, I warped them using three different noises: One large Gaussian noise, a smaller one and Clouds 2 node. The first one helps to make the lines follow a curve rather than a perfectly straight line, the other two produce more noise and detailed edges of the lines.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/02.jpg\" />\u003C/p>\n\u003Cp>Next, I wanted to create some wood knot thingy. To create the base for this, I used the Tile Generator with a stretched bell (a round, soft shape) as the input shape.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/03.jpg\" />\u003C/p>\n\u003Cp>After that, wood grains that wrap around the oval shape are created with the help of the Gradient Map node.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/04.jpg\" />\u003C/p>\n\u003Cp>Then, the (more or less) straight wood grains and the oval-shaped ones are combined. A Directional Noise 2 node helps to add detail.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/05.jpg\" />\u003C/p>\n\u003Cp>The pattern is warped based on planks with random values generated using a Tile Generator. The Tile Generator also is used to darken some of the planks.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/06.jpg\" />\u003C/p>\n\u003Cp>Then, the wood texture is colorized using a bunch of gradient maps, HSL and Levels nodes. Here I was mostly picking colors from reference photos of wood and tweaking and combining them until it looked right.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/07.jpg\" />\u003C/p>\n\u003Cp>Some dark spots are added.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/08.jpg\" />\u003C/p>\n\u003Cp>The normal map and the height map are created using the grayscale wood grains.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/09.jpg\" />\u003C/p>\n\u003Cp>For the roughness map, I simply used the inverse of the grayscale wood grains and adjusted them using the Levels and the Curve node.\u003C/p>\n\u003Cp>\u003Cimg src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/10.jpg\" />\u003C/p>\n\u003Cp>The entire graph can be \u003Ca href=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2019/breakdowns/ParquetFlooring09/Parquet_flooring_09_graph.png\">downloaded at 1:1 resolution\u003C/a>\u003C/p>\n\u003Cp>The PBR maps of most of the materials created for the building are \u003Ca href=\"https://www.cgbookcase.com/textures/?category=All&resolution=1&page=1&color=all&search=Immersion+VR\">
46available for download\u003C/a>.\u003C/p>",slug:"immersion-vr-substance-designer-material-breakdowns",title:"Immersion VR Substance Designer Material Breakdowns",post_type:"Text",publish_date:1573430400000,video_id:null,thumbnail:"https://cgbookcase.b-cdn.net/tutorials/immersion-vr-substance/thumbnail.jpg"},{id:2,status:"published",owner:1,content:"\u003Csection id=\"tutorial-description\" class=\"whiteBG margin border\">\n\u003Ch2>Information\u003C/h2>\n\u003Cp>In this video tutorial you'll get to see the process of creating an interactive interior scene created using Blender and Verge 3D\u003C/p>\n\u003Cp>Stuff mentioned in the video:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://www.soft8soft.com/get-verge3d/3dweb/21/?campaign=cgb%20blog%20post\" target=\"_blank\" rel=\"noopener\">Get Verge3D (affiliate Link)\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://cdn.cgbookcase.cloud/file/cgbookcase/verge3d/Interactive+Architecture+Scene.zip\" download=\"\">Download the project files\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/textures\">Free PBR Textures by cgbookcase.com\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://cc0textures.com/\" target=\"_blank\" rel=\"noopener\">Free PBR Textures by CC0 Textures\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://hdrihaven.com/\" target=\"_blank\" rel=\"noopener\">Free HDRIs by HDRI Haven\u003C/a>\u003C/li>\n\u003C/ul>\n\u003Csection id=\"tutorial-summary\" class=\"whiteBG margin border\">\n\u003Ch2>Text Summary\u003C/h2>\n\u003Cul class=\"tutorial-listOutter\">\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-01\">Modeling\u003C/a>\u003C/li>\n\u003Cli>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-02\">Floor, Walls, Ceiling and Baseboard\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-03\">Windows and Door\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-04\">Furniture\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-05\">Kitchen\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-06\">Lighting and Baking\u003C/a>\u003C/li>\n\u003Cli>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-07\">Lighting\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-08\">UV Unwrapping\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-09\">Baking\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-10\">Denoising\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-11\">Setting up a Verge3D Project\u003C/a>\u003C/li>\n\u003Cli>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-12\">Installation\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-13\">Creating a Project\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-14\">
46Creating the Materials\u003C/a>\u003C/li>\n\u003Cli>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-15\">Basic Setup\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-16\">Adding Textures\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-17\">Adding Glossiness\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-18\">Making it Interactive\u003C/a>\u003C/li>\n\u003Cli>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-19\">Introduction\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-20\">Outline Effect\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-21\">Camera Movement\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-22\">User Interface & Making it interactive II\u003C/a>\u003C/li>\n\u003Cli>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-23\">HTML Elements and CSS Styling\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-24\">Hiding and Showing Controls\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-25\">Changing Materials\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.cgbookcase.com/learn/how-to-create-3d-interactive-web-experiences-in-blender-verge-3d#header-id-26\">Final Touches\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003C/ul>\n\u003Ch3 id=\"header-id-01\">Modeling\u003C/h3>\n\u003Ch4 id=\"header-id-02\">Floor, wall, ceiling, baseboard\u003C/h4>\n\u003Cp>Add a plane, insert some loop cuts and delete some faces to define the floor shape.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/01.jpg\" />\n\u003Cp>Select all faces, extrude them by 2.4 meters by pressing E and then 2.4 to create the walls and the ceiling.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/02.jpg\" />\n\u003Cp>Separate the floor from the walls and the ceiling (Shift + P).\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/03.jpg\" />\n\u003Cp>To create the baseboard, select the bottom edges of the walls and duplicate them. Separate them and extrude them on the z-axis to add some height.\u003C/p>\n\u003Cp>Then, add a solidify modifier to add some thickness.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/04.jpg\" />\n\u003Cp>Add a bevel modifier to bevel the edges.\u003C/p>\n\u003Ch4 id=\"header-id-03\">Windows, door\u003C/h4>\n\u003Cp>Add loop cuts to the wall to define the edges of the windows. Delete the faces where you want a window to be.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/05.jpg\" />\n\u003Cp>Activate the Archipack add-on (Edit > Preferences > Add-ons). Add a window (Shift + A > Mesh > Archipack > Window and scale it until it fits the holes.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/06.jpg\" />\n\u003Cp>Repeat the same process for the door, but don’t cut a hole for the door, since you can’t open it in the final project anyway.\u003C/p>\n\u003Ch4 id=\"header-id-04\">Furniture\u003C/h4>\n\u003Cp>Most models of the furniture are downloaded from Vitra for free.\u003C/p>\n\u003Cp>Download the 3DS file and import it to Blender (as of 17th December 2018 it is not possible to import 3DS files into Blender 2.8, but this might be because it’s still in beta. You can use Blender 2.79 instead.)\u003C/p>\n\u003Cp>In order to create a smoothly running 3d web application, our 3d models should have as few vertices as possible. You can minimize the vertex count by convert
46ing the tris to quads(Alt + J), removing double vertices (Vertex > Remove Doubles) and then selecting several loops and dissolving them (Ctrl + X, must be in Edge Select mode).\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/07.jpg\" />\n\u003Cp>On more organic models you can also add a Decimate modifier.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/08.jpg\" />\n\u003Ch4 id=\"header-id-05\">Kitchen\u003C/h4>\n\u003Cp>To model the cabinets in the kitchen, you can just use some cubes and planes and scale them on the X, Y and Z axes.\u003C/p>\n\u003Cp>To model the sink, add a bevelled cube where you want the sink to be. Select the countertop, add a Boolean modifier. Set the Boolean modifier to Difference and select the bevelled cube as the object, so it will cut out a hole where the bevelled cube is. You can use the bottom half of the bevelled cube as the actual sink itself.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/09.jpg\" />\n\u003Cp>Add a Circle (Shift + A > Mesh > Circle) and use Extrude (E) and the Bridge Edge Loops tool (Edges > Bridge Edge Loops) to model the faucet.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/10.jpg\" />\n\u003Ch3 id=\"header-id-06\">Lighting and Baking\u003C/h3>\n\u003Ch4 id=\"header-id-07\">Lighting\u003C/h4>\n\u003Cp>To create the lighting, you can use an environment map. (I used one from HDRI Haven.)\u003C/p>\n\u003Ch4 id=\"header-id-08\">UV Unwrapping\u003C/h4>\n\u003Cp>Since you can’t really render a realistic looking interior in real-time in a web browser, we have to bake the lighting into texture maps.\u003C/p>\n\u003Cp>Select any mesh object in the scene and then hit Shift + G and choose “Type” to select all mesh objects. Then join them together (Ctrl + J).\u003C/p>\n\u003Cp>Enter Edit mode, select all faces and unwrap them (U > Smart UV Project).\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/11.jpg\" />\n\u003Cp>To not unnecessarily bake light where it’s not even needed, you can scale down the UVs of hidden areas (for instance the bottom of the couch, the sides and the back of the cabinet and so on). I also recommend scaling the UVs of the ceiling down a bit, we don’t need lots of detail there since the nobody will really look at the ceiling very closely.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/12.jpg\" />\n\u003Ch4 id=\"header-id-09\">Baking\u003C/h4>\n\u003Cp>Create a new material that only consists of a Diffuse shader, since we only want to bake diffuse reflections but no specular reflections (= shadows). Add an image node and create a new image. Set the image’s resolution to a power of 2 (for instance: 4069 x 4096 pixels) and check “32 bit float”, so we can bake values greater than 1.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/13.jpg\" />\n\u003Cp>Then, to finally bake it, go to the render tab in the Properties editor, scroll to “Bake”, set the Bake Type to “Combined” and the margin to about 4 pixels. Adjust the samples to your liking and then hit “bake”.\u003C/p>\n\u003Cp>After baking is done, you’ll probably see some overblown highlights. That’s because by default the Filmic View Transform doesn’t affect image textures. To change that, open the properties region in the Image Editor (N) and check “View as render”.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/14.jpg\" />\n\u003Ch4 id=\"header-id-10\">Denoising\u003C/h4>\n\u003Cp>Export the texture (Shift + S) and import it to Affinity Photo.\u003C/p>\n\u003Cp>In Affinity photo, add a Denoise filter, then export it as a JPG with the quality set to something between 60 and 80.\u003C/p>\n\u003Ch3 id=\"header-id-11\">Setting up a Verge 3D Project\u003C/h3>\n\u003Cp class=\"summaryText\">Download Verge 3D for Blender. \u003Ca href=\"https://www.soft8soft.com/get-verge3d/3dweb/21/?campaign=cgb%20blog%20post\" target=\"_blank\" rel=\"noopener\">You can try it out here for free\u003C/a> (affiliate link).\u003C/p>\n\u003Ch4 id=\"header-id-12\">Installation\u003C/h4>\n\u003Cp>
46Unpack the .zip file to a directory of you choice. To install Verge 3D, open the Preferences (Edit > Preferences), go to the File tab and enter the directory where you unpacked the .zip file.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/15.jpg\" />\n\u003Cp>Save the user settings, close and restart Blender, open the Preferences again. Then, search for an add-on called “Verge3D” and activate it.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/16.jpg\" />\n\u003Cp>If you’ve done everything correctly, an “App Manager” and a “Sneak Peek” button should be visible at the top of the 3D view.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/17.jpg\" />\n\u003Ch4 id=\"header-id-13\">Creating a project\u003C/h4>\n\u003Cp>Open the App Manager and create a new project.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/18.jpg\" />\n\u003Cp>After you create the app, it appears in the list of projects. By clicking the blue hexagonal icon next to it, you can run the full application in the browser. By clicking the green hexagonal icon, you can run the 3d scene only, without the user interface. By clicking on the Puzzles icon, you can enter the puzzle editor. By clicking the Blender icon, you can open the scene in Blender, and by clicking the world icon, you can publish your app on the web. Open the scene in Blender.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/19.jpg\" />\n\u003Cp>Append all the objects from the old scene (File > Append).\u003C/p>\n\u003Ch3 id=\"header-id-14\">Creating the Materials\u003C/h3>\n\u003Cp>Before creating the materials, separate all objects that should have a unique material from each other (in Edit mode: P > Selection).\u003C/p>\n\u003Ch4 id=\"header-id-15\">Basic setup\u003C/h4>\n\u003Cp>All materials in the scene are built pretty much the same way: Import the baked image texture (Shift + A > Texture > Image Texture) and connect it to an Emission node.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/20.jpg\" />\n\u003Cp>Add a MixRGB node set to multiply after the baked image texture. Colorize the material with the bottom color input.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/21.jpg\" />\n\u003Ch4 id=\"header-id-16\">Adding textures\u003C/h4>\n\u003Cp class=\"summaryText\">If necessary: Add a texture and multiply it using a MixRGB node again. For the couch I used \u003Ca href=\"https://www.cgbookcase.com/textures/blue-cotton-02\" target=\"_blank\" rel=\"noopener\">Blue Cotton 02\u003C/a>, for the floor \u003Ca href=\"https://www.cgbookcase.com/textures/light-wooden-parquet-flooring-01\" target=\"_blank\" rel=\"noopener\">Light Wooden Parquet Flooring 01\u003C/a> and for the table \u003Ca href=\"https://cc0textures.com/view.php?tex=Wood05\" target=\"_blank\" rel=\"noopener\">Wood #05\u003C/a> (by CC0 Textures).\u003C/p>\n\u003Cp>To change the scale, add a Mapping Node and a Texture Coordinate node (select image node and press Ctrl + T) and change the values in the scale section.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/22.jpg\" />\n\u003Ch4 id=\"header-id-17\">Adding glossiness\u003C/h4>\n\u003Cp>If necessary: Add some gloss by mixing in a Glossy node. (Don’t go over the top here, this needs relatively much processing power.)\u003C/p>\n\u003Cp>Then repeat that process for every object and create a few variations.\u003C/p>\n\u003Ch3 id=\"header-id-18\">Making it interactive\u003C/h3>\n\u003Ch4 id=\"header-id-19\">Introduction\u003C/h4>\n\u003Cp>Export the scene as Verge 3D glTF (File > Export > Verge 3D glTF).\u003C/p>\n\u003Cp>Open the App Manager and click the puzzles icon to open the Puzzle editor.\u003C/p>\n\u003Cp>In the Puzzle editor there are two tabs: the main tab and the init tab. In the Main tab, you create scripts that affect the 3D objects in the scene, like changing their materials, moving the camera from A to B and so on. In the Init tab, you can create scripts that don’t affect the objects in the 3D scene, like changing the loading icon.\u003C/p>\n\u003Cp>We’re only gonna use the main tab in this tutorial.\u003C/p>\n\u003Ch4 id=\"header-id-20\">Outline Effect\u003C/h4>\n\u003Cp>When hovering over a object, we want it to have this outline:\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/23.jpg\" />\n\u003Cp>In order to do that, we need to enable the outline effect in the .blend file by going to the render tab in the Properties editor and scrolling down to the Verge 3D settings. Export the scene again and reload the Puzzle editor.\u003C/p>\n\u003Cp>Using a when hovered block (Events category) and a selector block (Selectors category) we can enable and disable the outline of an object when hovering over it.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/24.jpg\" />\n\u003Cp>Press “Save” and “Play” to test it.\u003C/p>\n\u003Ch4 id=\"header-id-21\">Camera Movement\u003C/h4>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/25.jpg\" />\n\u003Ch3 id=\"header-id-22\">User Interface & Making it interactive II\u003C/h3>\n\u003Cp>The user interface is created with HTML, CSS and JavaScript (JS).\u003C/p>\n\u003Cp>If you open the folder, where the .blend file of your porject is saved, you’ll notice a few other files: A .html file which actually is opened when we press this blue button in the App Manager, a JavaScript file where we can add more functionality, and a CSS file where we can style the HTML elements.\u003C/p>\n\u003Ch4 id=\"header-id-23\">HTML elements, CSS styling\u003C/h4>\n\u003Cp>The background of the white tab is a\u003C/p>\n\u003Cdiv>. The most important attribute is the z-index which is set to 1. The z-index defines when an element is rendered. The greater the z-index the later the element is rendered. Because the 3D scene has a z-index of 0 (by default), the user interface is rendered on top of the 3D scene.\u003C/div>\n\u003Cdiv>\n\u003Cpre>\u003Ccode class=\"language-css\">selector {\n position: absolute;\n top: 0px;\n height: 100%;\n width: 25%;\n background-color: white;\n z-index: 1;\n padding: 8px;\n box-shadow: 2px 0 20px #00000069;\n}\u003C/code>\u003C/pre>\n\u003Cp>The elements where you can change the material are just a div with the display set to grid, the name as the first element, and two SVGs as the second and third elements.\u003C/p>\n\u003Ch4 id=\"header-id-24\">Hiding and showing controls\u003C/h4>\n\u003Cp>Now to make these buttons work, we need to use some JavaScript. Because we need the buttons of the interface to “communicate” with the objects in the 3D scene, it is not possible to do this with the Puzzles editor only.\u003C/p>\n\u003Cp>In the .js file on line 169 you can add your own code.\u003C/p>\n\u003Cp>When the couch is clicked, we want the camera to fly to the living area, hide the categories and show only the controls for the living room and the “go back” button. So in JavaScript, we’re gonna create a function that sets the display of the categories and the controls of all other areas to “none”, and the display of the living room controls to “block”.\u003C/p>\n\u003Cpre>\u003Ccode class=\""language-javascript\">
46app.ExternalInterface.showLiving = function() {\n document.querySelector('#livingitems').style.display = \"block\";\n document.querySelector('#diningitems').style.display = \"none\";\n document.querySelector('#kitchenitems').style.display = \"none\";\n document.querySelector('#miscitems').style.display = \"none\";\n for (var i = document.querySelectorAll('.categories').length - 1; i >= 0; i--) {\n document.querySelectorAll('.categories').[i].style.display = \"none\";\n } \n}\n\u003C/code>\u003C/pre>\n\u003Cp>Then, in the Puzzles Editor, we’re gonna call this function when the object is clicked and also add a “tween camera” block to move the camera.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/26.jpg\" />\n\u003Ch4 id=\"header-id-25\">Changing materials when an arrow is clicked\u003C/h4>\n\u003Cp>First, we need to define which material belongs to which object, which you can do using lists. Create a new variable (name it “CouchMaterials” or so) and set it to a list of materials:\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/27.jpg\" />\n\u003Cp>If some materials don’t show up in the drop-down, that’s because only materials that are actually used by an object get exported. In the .blend file, add a plane for each unused material and re-export the scene.\u003C/p>\n\u003Cp>Reload the Puzzle editor. Now you should be able to select the materials.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/28.jpg\" />\n\u003Cp>Now we need to figure out how to program it so that if we click the right arrow, the sofa will change to the next material on the list and if we press the left arrow, it will change to the previous material on the list.\u003C/p>\n\u003Cp>The solution I’ve come up is relatively simple: We first need to create a new variable -let’s call it “CouchMaterialChange” - and set it number which is divisible by the number of materials in the list. For instance: 500.\u003C/p>\n\u003Cp>To make the material change when we click the right arrow, we need to add an event listener to the JavaScript which reacts when the arrow is clicked. When the event listener reacts, it calls a function called CouchNext,\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-javascript\">function runCode(app) {\n // add your code here, e.g. console.log('Hello, World!');\n\n document.querySelector('#sofaplus').addEventListener('click', function() {\n app.ExternalInterface.CouchNext();\n });\n\n document.querySelector('#sofaminus').addEventListener('click', function() {\n app.ExternalInterface.CouchPrevious();\n });\n}\n\u003C/code>\u003C/pre>\n\u003Cp>When the CouchNext function is called, a script in the Puzzles editor gets triggered and adds 1 to the CouchMaterialChange variable. Then the next block takes the result of the remainder of CouchMaterialChange divided by the length of CouchMaterials, chooses the material in the list with the number of the result and applies it to the object.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/29.jpg\" />\n\u003Cp>Then, you can do the same for the left button but reduce the CouchMaterialChange variable by 1 each time the function is called instead of adding 1.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/30.jpg\" />\n\u003Ch4 id=\"header-id-26\">Final touches\u003C/h4>\n\u003Cp>You can do some color adjustments using the post-processing blocks. In my case, it looked a bit washed out and dark, so I added some contrast and increased the brightness a tiny bit.\u003C/p>\n\u003Cimg class=\"tutorial-screenshot border\" src=\"https://cgbookcase.b-cdn.net/migration/cdn2-cgbookcase-cloud/tutorials/posts/2018/v3d_interior/screenshots/31.jpg\" />\u003C/div>\n\u003C/section>\n\u003Cdiv class=\"space\"> \u003C/div>\n\u003C/section>",slug:"how-to-create-3d-interactive-web-experiences-in-blender-verge-3d",title:"How To Create 3D Interactive Web Experiences in Blender & Verge3D",post_type:"Video",publish_date:1546560000000,video_id:"U6aGboR_sHE",thumbnail:"https://cgbookcase.b-cdn.net/tutorials/verge-3d-apartment/thumbn
46ail.jpg"}]},"uses":{}}]; 47 48 Promise.all([ 49 import("./_app/immutable/entry/start.Bb52DEE9.js"), 50 import("./_app/immutable/entry/app.9PRZ4KU1.js") 51 ]).then(([kit, app]) => { 52 kit.start(app, element, { 53 node_ids: [0, 6], 54 data, 55 form: null, 56 error: null 57 }); 58 }); 59 } 60 </script>
60 61 </div>
62<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"09d23100e8a04fddbbeea141b0da4901","r":1,"spa":2}' crossorigin="anonymous"></script>
62 63</body> 64 65</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.