-
Notifications
You must be signed in to change notification settings - Fork 6
/
baking_normal_maps.html
220 lines (137 loc) · 7.66 KB
/
baking_normal_maps.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
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="description" content="Manual Livre de Blender" />
<meta name="keywords" content="Blender, Free Software, Libre Software, Open Source, Free Culture, Animation, 3D, Animação, Illustration, Ilustração, Education, Educação, Software Livre, VFX, Efeitos especiais, Visual Effects, CGI, 3D printing, impressão 3D">
<meta name="author" content="nafergo" >
<meta charset="UTF-8">
<title>Manual Livre de Blender</title>
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="css/bootstrap.min.css">
<!-- custom css -->
<link rel="stylesheet" href="css/mine.css" media="all" />
</head>
<body>
<div id="topo"></div>
<!-- início do menu -->
<div data-include="menu.html"></div>
<!-- fim do menu -->
<div class="container-fluid">
<div class="row">
<div class="col-xs-10 col-xs-offset-1">
<h1 class="titulopagina">Baking Normal Maps</h1>
<dl class="dl-horizontal">
<dt>Versão</dt>
<dd>>= 2.75</dd>
<dt>Renderizador</dt>
<dd>Todos</dd>
</dl>
<div class="page-header">
<h2>Introdução</h2>
</div>
<p>
Os Normal Maps são um dos "truques" mais utilizados em 3D. Permitem introduzir detalhe e variação sem necessitar
de mais geometria. Cria uma simulação de detalhes ou imperfeições na superfície mas não altera a geometria.
</p>
<p>
Compare as duas Suzanne presentes abaixo. A da esquerda tem 500 faces e um Subdivision Surface com 2 níveis. Se
aplicássemos (Apply) o Modifier Subdivision Surface ficaríamos com 7.872 faces (mas na imagem não foi aplicado!). A Suzanne
da direita tem 31.488 faces.
</p>
<img src="img/baking_normals/baking_normals1.jpg" alt="..." class="img-responsive img-thumbnail center-block">
<div class="page-header">
<h2>Exercício</h2>
</div>
<p>Neste exemplo, vamos utilizar o Blender Internal Render para criar o Normal Map e depois vamos aplicá-lo em Cycles. Para criar o Normal Map em Cycles,
procedimentos são similares.</p>
<p>1. Assegure-se que está em Blender Internal Render.</p>
<p>2. Comece por criar 2 versões do seu modelo: a versão High Poly (com os detalhes e a partir da
qual irá criar a o Normal Map) e a versão Low Poly (onde irá aplicar o Normal Map).</p>
<p>A nossa Suzanne Low Poly é simplesmente a Suzanne original com um Subdivision Surface com 2 níveis e Shading: Smooth.</p>
<p>A nossa Suzanne High Poly foi criada com a seguinte sequência: 1º adicionar a Suzanne original;
2º Adicionar um Subdivision Surface com 2 níveis; 3º Aplicar o Subdivision Surface; 4º Em Edit Mode, selecionar
todas as faces, pressionar W e escolher Subdivide; Aplicar um Shading: Smooth.</p>
<p>Os efeitos (as cruzes) foram criadas com as ferramentas de Sculpt Mode.</p>
<img src="img/baking_normals/baking_normals6.jpg" alt="..." class="img-responsive img-thumbnail center-block">
<p>3. Os dois modelos têm de estar exatamente no mesmo local (há quem coloque os dois modelos em 2 layers diferentes para
poder ter os dois modelos "separados" mas no mesmo local). No nosso caso, selecionámos o modelo Low Poly, pressionámos Shift+S e
escolhemos Cursor To Selected. Depois, selecionámos o High Poly, pressionámos Shift+S e e escolhemos Selected To Cursor. Agora, as duas
versões estão sobrepostas.
</p>
<p>4. Crie um UV Layout na versão Low Poly. Selecionámos a versão Low Poly e, em Edit Mode, pressionámos U e escolhemos Smart UV Projet. Dividimos
a área de trabalho e criámos uma nova imagem.
</p>
<p>5. No passo seguinte, a ordem de seleção dos modelos é importante! Selecione primeiro a versão High Poly e depois a versão
Low Poly. Passe para Edit Mode. Deverá estar a ver o UV Layout criado para a versão Low Poly.</p>
<p>6. No painel Render, localize a secção Bake e configure de acordo com a imagem.</p>
<img src="img/baking_normals/baking_normals3.jpg" alt="..." class="img-responsive img-thumbnail center-block">
<p>O Bake Mode é Normals porque pretendemos criar um Normal Map. Ative a opção Selected To Active para criar o Normal Map a partir
do High Poly (o Selected) e aplicar o mesmo no Low Poly (o Active - quando seleciona vários objetos, o último é o Active). Clique em Bake
e aguarde até criar uma imagem com tonos azulados (semelhante à apresentada no passo anterior).</p>
<p>Se a sua imagem tiver áreas a verde ou outras cores que não as visíveis no exemplo, provavelmente tem de recalcular os Normals
(ver <a href="erros_comuns.html">Erros Comuns</a>). Depois de recalcular os Normals, faça Bake.
</p>
<p>7. Grave a imagem "azul" criada.</p>
<img src="img/baking_normals/baking_normals5.jpg" alt="..." class="img-responsive img-thumbnail center-block">
<p>8. Em Cycles, configure o material aplicado na versão Low Poly de acordo com a imagem abaixo. Repare que no nó
Image Texture escolhemos a imagem criada (a imagem azul que constitui o Normal Map) e foi
ativada a opção Non-Color Data (não quer que esta imagem influencie a cor...). No nó Normal Map esolhemos o
UV Layout criado anteriormente. Neste nós pode utilizar a opção Strength para controlar a intensidade do efeito criado pelo Normal Map.</p>
<img src="img/baking_normals/baking_normals2.jpg" alt="..." class="img-responsive img-thumbnail center-block">
<p>
Em baixo vê a renderização com o Normal Map aplicado na versão Low Poly (repare que as cruzes são visíveis!) mas sem que esteja a ser
utilizado o Subdivision Surface. Ou seja, está a aplicar o Normal Map na Suzanne original. Se utilizar um Subdivision Surface e o
Normal Map o efeito é o apresentado no topo desta página.
</p>
<img src="img/baking_normals/baking_normals4.jpg" alt="..." class="img-responsive img-thumbnail center-block">
</div>
</div>
</div> <!-- /container -->
<!-- início do footer -->
<div data-include="footer.html"></div>
<!-- fim do footer -->
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/jquery.scrollTo.min.js"></script>
<script src="js/jquery.localScroll.min.js"></script>
<script src="js/csi.min.js"></script>
<!-- Latest compiled and minified JavaScript -->
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("[rel=tooltip]").tooltip();
});
</script>
<script type="text/javascript">
jQuery(function( $ ){
/**
* Most jQuery.localScroll's settings, actually belong to jQuery.ScrollTo, check it's demo for an example of each option.
* @see http://flesler.demos.com/jquery/scrollTo/
* You can use EVERY single setting of jQuery.ScrollTo, in the settings hash you send to jQuery.LocalScroll.
*/
// The default axis is 'y', but in this demo, I want to scroll both
// You can modify any default like this
$.localScroll.defaults.axis = 'y';
/**
* NOTE: I use $.localScroll instead of $('#navigation').localScroll() so I
* also affect the >> and << links. I want every link in the page to scroll.
*/
$.localScroll({
target: 'body', // could be a selector or a jQuery object too.
queue:true,
duration:1000,
hash:true,
onBefore:function( e, anchor, $target ){
// The 'this' is the settings object, can be modified
},
onAfter:function( anchor, settings ){
// The 'this' contains the scrolled element (#content)
}
});
});
</script>
</body>
</html>