-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathdecals.html
243 lines (197 loc) · 12.3 KB
/
decals.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<title>Creating Seamless Decal Meshes ▪ Topology Guides</title>
<!--
<meta name="description" content="Creating Seamless Decal Meshes I’ve talked quite a bit here on Topology Guides about integrating shapes into meshes. But until this point, I’ve overlooked a surprisingly adequate workaround to traditional modeling practices for integrating shapes onto a surface. This workaround is the process of using “decal” meshes that hover over...">
-->
<meta name="description" content="Guides for 3d Artists">
<meta name="keywords" content="b3d, 3d modeling, decals, modifers, blender, topology, hack">
<link rel="canonical" href="http://topologyguides.com/decals">
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="Creating Seamless Decal Meshes" />
<meta name="twitter:description" content="Guides for 3d Artists" />
<meta name="twitter:image" content="http://topologyguides.com" />
<meta name="author" content="">
<link rel="author" href="">
<meta property="og:locale" content="">
<meta property="og:type" content="article">
<meta property="og:title" content="Creating Seamless Decal Meshes">
<meta property="og:description" content="Guides for 3d Artists">
<meta property="og:url" content="http://topologyguides.com/decals">
<meta property="og:site_name" content="Topology Guides">
<link rel="stylesheet" href="/assets/vendor/normalize-css/normalize.css">
<link rel="stylesheet" href="/assets/css/main.css">
<link rel="shortcut icon" type="image/png" href="/favicon.png">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Oswald:400,400italic,700,700italic, Lora:400,400italic">
<style>
html {
font-family: "Oswald", "Lora", -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;
}
</style>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-CEG51BDTXT"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-CEG51BDTXT');
</script>
<body>
<div class="wrapper" id="blep">
<header>
<div class="menu">
<div class="logo">
<a href="/">Topology Guides</a>
<br>
<h3 style="margin-top: 0em;">Guides for 3d Artists</h3>
</div>
</div>
<div class="social">
<div class="nav">
<ul>
<li><a href="/">home</a>
<li><a href="/about">about</a>
<li><a href="/encyclopedia">encyclopedia</a>
<li><a href="/archive">archive</a>
</ul>
</div>
<ul>
<li>
<a href="https://github.com/TopologyGuides/topologyguides.github.io" target="_blank" class="smaller">
<span class="icon-github"></span>
</a>
<li>
<a href="/feed.xml" target="_blank">
<span class="icon-rss_feed"></span>
</a>
<li>
<a href="#" onclick="switchTheme()" title="Switch theme?">
<span class="icon-invert_colors" id="theme-switcher"></span>
</a>
</ul>
</div>
</header>
<article class="post">
<div class="post-title-container
no-hero-margin
">
<!--Post hero image source-->
<div class="heading-container ">
<h1>
Creating Seamless Decal Meshes
</h1>
<div class="post-meta">
<span>17/07/2017</span>
<span>
<a href="/tag/b3d">#b3d</a>
<a href="/tag/3d modeling">#3d modeling</a>
<a href="/tag/decals">#decals</a>
<a href="/tag/modifers">#modifers</a>
<a href="/tag/blender">#blender</a>
<a href="/tag/topology">#topology</a>
<a href="/tag/hack">#hack</a>
</span>
</div>
</div>
</div>
<p><img src="/assets/img/163096515095.png" alt="" />
<h2 id="creating-seamless-decal-meshes"><strong><a href="http://topologyguides.com/2020/05/23/2017-07-17-decals.html">Creating Seamless Decal Meshes</a></strong></h2>
<p>I’ve talked quite a bit here on Topology Guides about integrating shapes into meshes. But until this point, I’ve overlooked a surprisingly adequate workaround to traditional modeling practices for integrating shapes onto a surface.
<p>This workaround is the process of using “decal” meshes that hover over the surface of a primary mesh, yet seem to be fully integrated once shaded. The method I’m about to show you works mainly for protruding convex parts of an object. Such as a door handle or a button on a workstation.
<p>For this process, all you need is the “decal” object you want to integrate, and the primary “surface” mesh.
<hr />
<p><em>Note:</em> For smaller or concave decals, I highly recommend checking out <a href="https://www.blendermarket.com/products/DECALmachine">DECALmachine</a>. It’s a fantastic add-on that’s been spreading like wildfire in the Blender community the past few months.
<h2 id="start-simple">Start Simple</h2>
<p>In addition to the decal and surface we’re using, we’ll also need a 2d lattice roughly in the shape of the bottom of the decal. Along with that, be sure that the decal has a bottom rim with some type of bevel to make sure there’s a smooth transmission between the decal and surface in the later stages.
<p><img src="/assets/img/163096515095_0.png" alt="" />
<p>Once you have all these elements, lay them out in a similar fashion to the screenshot above before you move on to adding vertex groups.
<h2 id="vertex-groups">Vertex Groups</h2>
<p>We’ll need two vertex groups to get the decal working properly. One for the very outer rim of the decal, and another for the larger area around the base of the decal.
<p>We’ll use these groups later for deforming the decal to the surface using a variety of methods for mesh deformation.
<h2 id="using-lattices">Using Lattices</h2>
<p>After laying out the lattice and decal over the surface, you can start to use the lattice to shape the decal.
<p><img src="/assets/img/163096515095_1.png" alt="" />
<p>Start by applying the lattice to the decal using the lattice modifier. Now the lattice has total control over the decal, which isn’t quite what we want, so we’ll need to use the larger vertex group we created earlier to make sure the lattice deforms only the bottom areas of the decal.
<p>After the decal is joined to the lattice, apply a shrinkwrap modifier to the lattice with the surface as the target. This should give a rough version of the final outcome. But don’t quit yet, there’s still a lot of perfecting to do.
<h2 id="perfecting-the-shape">Perfecting the Shape</h2>
<p>To perfect the surface, the outer rim still needs to be adjusted. Otherwise, at certain low viewing angles, we can sometimes still see a slight gap between the two surfaces. Of course, if this gap isn’t visible on whatever model you’re using, then you can go skip this.
<p><img src="/assets/img/163096515095_2.png" alt="" />
<p>To adjust the rim, apply a shrinkwrap modifier to the decal with the surface as the target. Next, select the rim vertex group to make sure only the rim is affected.
<h2 id="correcting-normals">Correcting Normals</h2>
<p>At this point, you should have an almost perfect mesh uniform to the target surface, apart from some shading artifacts. If not, come back to this step later and have a look at the troubleshooting tips below.
<p>If it all looks good, all that’s left is to apply some normal editing hacks to smooth out the shading. Again, this is also a very picky detail so you might be able to get away with skipping it if you’re not doing close-up renderings.
<p><img src="/assets/img/163096515095_3.png" alt="" />
<p>Start by adding a Data Transfer modifier with the surface as the target. Then you can set the settings as shown in the screenshot and click Generate Data Layers near the bottom of the modifier.
<p>To briefly explain what’s going on here, the data transfer modifier can copy the normal information from the surface model and apply it to the decal. Which makes the Render Engine (or viewport) view the two models as a seamless surface. Of course, this only works if the two meshes are approximately in the same location, hence the need for the previous steps in this guide.
<h2 id="troubleshooting">Troubleshooting</h2>
<p>If everything went smoothly, great! If not, don’t worry, here are some tips that might help.
<blockquote>
<p><strong>Origin Points</strong>
<p>Having the origin points of the lattice and decal in the same spot is best when possible. Otherwise, sometimes the decal will not deform with the lattice correctly.
<p><strong>Applying Transforms</strong>
<p>Make sure to apply the scale of all objects using CTRL-A.
<p><strong>Setting the Rim Shrinkwrap</strong>
<p>If you notice a shadow under the decal, it’s most likely because there’s still a small gap between the surfaces. Adjusting the offset of the shrinkwrap can often solve it. This applies to intercepting pieces as well.
<p><strong>Tweak Data Transfer</strong>
<p>If you’re having problems with the edge of the decal shading properly, try tweaking the settings of the Data Transfer modifier. Often times its normals that cause seemingly unsolvable problems. Don’t overlook them.
<p><strong>Still having Problems?</strong>
<p>If you’re still having problems, I’ve uploaded an example file <a href="https://drive.google.com/file/d/0B-y-nXNXcDMBUzRVTGxwTm04dFk/view?usp=sharing">here</a>that has all the settings and modifiers laid out. So if all else fails, you can consult the file for help. ;)
</blockquote>
<hr />
<p>That’s it! I hope this guide was useful. If it was, please consider making a small per-post donation to <a href="https://www.patreon.com/johnson">my Patreon page</a> to support my work here on Topology Guides. I’d really appreciate it. :)
<p>Happy Modeling!
</article>
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES * * */
var disqus_shortname = 'topologyguides';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
<aside class="related">
<h2>Related posts</h2>
<ul class="related-posts">
<li>
<a href="/human-foot">
<span>Modeling a Human Foot</span>
<small>28/11</small>
</a>
<li>
<a href="/modeling-for-animation">
<span>Modeling with Animation in Mind</span>
<small>27/12</small>
</a>
<li>
<a href="/human-hand">
<span>Modeling a Human Hand</span>
<small>14/06</small>
</a>
<li>
<a href="/bevel-width-transitions">
<span>Modeling Bevel Width Transitions</span>
<small>14/05</small>
</a>
</aside>
<script type="text/javascript" src="//downloads.mailchimp.com/js/signup-forms/popup/unique-methods/embed.js" data-dojo-config="usePlainJson: true, isDebug: false"></script><script type="text/javascript">window.dojoRequire(["mojo/signup-forms/Loader"], function(L) { L.start({"baseUrl":"mc.us10.list-manage.com","uuid":"377f8cb02163f375b3f03fcfb","lid":"ceb49c397a","uniqueMethods":true}) })</script>
<footer>
<span>Guides for 3d Artists</span>
<span>| Written by Johnson Martin</span>
</footer>
</div>
<script type="text/javascript" src="/assets/js/theme.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-46758601-3', 'auto');
ga('send', 'pageview');
</script>