Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
3D grafika
Tvorba a animace otočného billboardu
14. září 2006, 00.00 | Tento tutoriál je určen lehce pokročilým uživatelům 3D studia max. Vytvoříme si a zanimujeme (s pomocí jednoduchého skriptu) lamelový otočný billboard, který jste určitě viděli v nějakém větším městě.
Tento tutoriál je určen lehce pokročilým uživatelům 3D studia max. Vytvoříme si a zanimujeme (s pomocí jednoduchého skriptu) lamelový otočný billboard, který jste určitě viděli v nějakém větším městě.
Nejprve si o něm něco řekneme. Plochu billboardu tvoří hranoly s trojúhelníkovou podstavou, které se mohou otáčet. Jednotlivé stěny pláště hranolu jsou polepeny proužky tří rozdílných obrázků. Pokud byste viděli pouze jednu lamelu, těžko byste poznali o jaký obrázek jde, ale pokud uvidíte dostatečný počet ve správném natočení, lehce rozpoznáte detaily na obraze a zdálky se to bude zdát jako obyčejný billboard. Když sledujete změnu obrázku na otočném billboardu, všimnete si, že se hranoly neotáčí všechny najednou - začne první a každý následující se otočí o zlomek sekundy později.
Tvorba rámu
Jako první vytvoříme box s rozměry 50*980*750, ve kterém se budou lamely otáčet. Zkonvertujte ho na Editable Poly. V pohledu front vybereme čelní a zadní polygon a použijeme nástroj Inset s hodnotou Inset amount 30. Smažte vybrané facy. Stále ve výběru polygon, klikněte na Create a vytvořte polygony tak, aby vznikl rám (nejlépe to půjde v perspektivním pohledu). Pokud byste nechtěli používat create, lze polygony vytvořit následujícím způsobem: v Sub-object kliknete na Edge a ve viewportu vyberete hrany jedné strany otvoru a s nástrojem Select and move a stisknutou klávesou Shift táhnete k druhému okraji, ale ne až natěsno k němu; teď zjistíte polohu druhého okraje v ose y (klikněte např. na hranu na obrázku označenou žlutě a podívejte se na dolní lištu lištu s údaji o poloze), potom znovu vyselektujte hrany, které jste vytáhli a zadejte dole do okýnka hodnotu, kterou jste si předtím zjistili. Hrany polygonů k sobě přiskočí, ale ještě nejsou spojeny. Pokud byste se někdy v budoucnu rozčilovali na TurboSmooth nebo na Meshsmooth, že vám tam dělají tmavší a světlejší šmouhy, může to být i kvůli nespojeným hranám (nebo vertexům). Hrany můžete spojit buď selekcí hran a použitím nástroje Weld (pokud by se po kliknutí na toto tlačítko nic nestalo, klikněte na malý obdélníček nalevo od tlačítka, kde se skrývá nastavení - vyšší hodnota Weld Treshold by měla problém vyřešit), nebo selekcí vertexů a použitím Weld. Možná Vám přijde druhá metoda složitější - ano, v tomto případě ano - ale kdybychom měli objekt rozdělen na víc segmentů, než jen jeden, první metoda by byla velmi zdlouhavá a ta druhá by trvala necelou minutu.
V záložce Hierarchy aktivujte tlačítko Affect pivot only a následně klikněte na Center to object, vycenrujete tím pivot. Vraťte se zpět do Modify a klikněte na Tessellate. Přidejte objektu modifikátor Mesh smooth a změňte Subdivision Method na Classic a v části Parametersnastavte hodnotu strenght na 0,01. V pohledu front vytvořte plane o něco větší než je rám a posuňte tak, aby se rámu jen dotýkal (později mu přiřadíme texturu stěny domu). V tento okamžik byste měli vidět něco podobného:
Tvorba lamel
Vytvořte Shape NGon a nastavte radius na 16,9 a nechte Inscribed (=poloměr kružnice opsané). Dál změňte počet stran na 3. V pohledu top ho otočte o –30° (pro přesnější rotaci aktivujte Angle snap togle - klávesa "a"). Přidejte modifikátor Extrude a nastavte Amount na 690 a následně ho zkonvertujte na Editable poly. Sub-object zapněte na polygon a sjeďte v nabídce níž, až se dostanete k části Polygon properties, kde budeme nastavovat ID polygonů pro budoucí materiál. Každému polygonu pláště přiřaďte ID od jedné do tří (selekce polygonu-vepište ID-enter), dolní i vrchní podstavě nastavte ID 4. Určitě uznáte, že je lepší přiřadit ID teď jednomu objektu, než potom 27 kopiím - pokaždé když něco děláte, měli byste si v hlavě přehrát stručný přehled o tom, co s objektem nebo se scénou chcete dělat - ušetříte tím spoustu času.
Posuňte lamelu do levého kraje rámu. Jméno NGonu změňte na lamela01 – při animaci bude tento název ve skriptu a při změně by zápis nefungoval. Teď budeme kopírovat lamelu. Vyberte objekt lamela01 (opusťte Sub-object polygon) a aplikujte Array (menu Tools>Array). Array je nástroj, který umožnuje vytvářet kopie s daným posunem v dané ose (nebo ve dvou a ve třech) a při vytváření kopie umí měnit rotaci a velikost. My využijeme jen posun v jedné ose. Type of object nastavte na kopii. Pod nápisem Incremental (znamená, že se s každou další kopií zvedá celkový rozdíl mezi prvním a posledním - vzniká přírůstek) naleznete 3 sloupky (každý pro jednu osu) a tři řádky (Move, Rotate, Scale). Nastavte hodnotu 33 do kolonky posunu v ose X. V Array dimensions nechte 1D a počet nastavte na 28. Máme hotovo a než svůj příkaz potvrdíte, můžete si zapnout Preview, jestli je vše v pořádku. Vyberte všechny lamely a Hide Unselected (pravé myšítko). Stále s vybranými lamelami běžte do panelu Modify a přidejte modifikátor Poly select. Vyberte polygony s ID # (hodnota "#" záleží na tom jak jste si nastavili tyto hodnoty po vytvoření první lamely - je to ID polygonů, které vytváří rovnou plochu). Nikam neklikejte – i s výběrem polygonů přidejte další modifikátor – UVW Map. Alignment nastavte na osu Y, mapping na Planar a rozměry obdélníka na L: 690; W:921. Nyní vidíte něco takového:
Animace lamel
První lamela se otočí o 120 stupňů a bude se otáčet 20 snímků, další lamela se otočí o 2 snímky později a stejný čas, další také o dva snímky později než předchozí. Poslední lamela začne rotovat o 54 snímků později než první (27*2), celkový čas nutný pro úplnou změnu obrázku je 74 snímků (54+20). „Teď máte všechno co potřebujete vědět k tomu, abyste začali animovat. Přeji příjemné a dlouhé ruční animování a až to za týden budete mít, vraťte se, prosím, k tomuto článku, čeká nás přiřazování materiálů.“ – to skutečně nejsou příjemná slova. Pro lenivější jedince (v tom dobrém kreativním smyslu) mám možná lepší řešení – animace pomocí jednoduchého skriptu. Skripty naleznete a můžete prozkoumávat v MaxScript Listener (MAXSkcript> MaxScript Listener nebo také F11). Po kliknutí na Enable v menu MacroRecorder můžete sledovat, jak se zapíšou skriptem akce, které děláte přímo ve viewportu.
Skript pro zanimování jedné lamely by vypadal asi takhle:
clearSelection()
select $lamela01
set animate on
sliderTime = 0f
actionMan.executeAction 0 "50002" -- Tools: Select and Rotate
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 20f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
A když ho nakopírujeme 28 krát a změníme názvy objektů (vlastně jen čísla) a posuneme snímkování? Myslím že dostaneme to co hledáme – skript pro animaci otočného billboardu.
clearSelection()
select $lamela01
set animate on
sliderTime = 0f
actionMan.executeAction 0 "50002" -- Tools: Select and Rotate
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 20f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela02
sliderTime = 2f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 22f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela03
sliderTime = 4f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 24f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela04
sliderTime = 6f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 26f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela05
sliderTime = 8f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 28f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela06
sliderTime = 10f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 30f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela07
sliderTime = 12f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 32f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela08
sliderTime = 14f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 34f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela09
sliderTime = 16f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 36f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela10
sliderTime = 18f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 38f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela11
sliderTime = 20f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 40f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela12
sliderTime = 22f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 42f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela13
sliderTime = 24f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 44f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela14
sliderTime = 26f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 46f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela15
sliderTime = 28f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 48f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela16
sliderTime = 30f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 50f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela17
sliderTime = 32f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 52f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela18
sliderTime = 34f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 54f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela19
sliderTime = 36f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 56f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela20
sliderTime = 38f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 58f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela21
sliderTime = 40f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 60f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela22
sliderTime = 42f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 62f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela23
sliderTime = 44f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 64f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela24
sliderTime = 46f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 66f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela25
sliderTime = 48f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 68f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela26
sliderTime = 50f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 70f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela27
sliderTime = 52f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 72f
rotate $ (angleaxis 120 [0,0,1])
clearSelection()
select $lamela28
sliderTime = 54f
rotate $ (angleaxis 0 [0,0,1])
sliderTime = 74f
rotate $ (angleaxis 120 [0,0,1])
set animate off
clearSelection()
Možná vypadá složitě, ale opravdu se tam 28 krát opakuje jen jedna část. Doufám, že si ho nejen zkopírujete, ale také prohlédnete. Zatím si vypněte MAXScript Listener a v menu kde jste ho našli, klikněte na New script. Vyskočí okno, do kterého zkopírujte skript, a pokud jste hodně nedočkaví, v menu File je Evaluate all (ctrl+e), který spustí Váš skript. Po chvilce bláznění na monitoru (díváte se na akce, které by ručně trvaly hodiny) by měl ruch utichnout a vy si můžete spustit animaci. Skript si uložte někam do svého adresáře a pokud byste si ho chtěli spustit ze souboru (při dalším použití), jděte do MAXScript listeneru a pod File je Run script (slyším, jak říkáte, že jednodušší by bylo skript spustit přes MAXScript>Run script, ale pokud by byla ve zápise nějaká neznámá, stejně byste ji museli zadat přímo v MAXScript listeneru).
Přidání materiálů
Ještě než se vrhnete do Material editoru, musíme nastavit UVW hodnoty otočeným lamelám. Na časovém posuvníku sjeďte na konec animace a vyberte všechny lamely. Přidejte modifikátor Poly select a vyberte polygony podle ID# (hodnota "#" - ID polygonů, které vytváří rovnou plochu). Dál přidejte do Modifier listu UVW Map - stejné nastavení jako jsme nastavovali výše. Až to budete mít, jděte do Material editoru. První materiál změňte ze Standart na Multi/Sub-object. Počet materiálů nastavte na 4. Na nějaké stránce wallpaperů si sežeňte tři obrázky o stejném rozlišení (poměr stran 3:4) a u materiálů s ID 1-3 je vložte jako Bitmapu do slotu Diffuse map. Nastavíme lesk pro nějaký plast (např. Specular level: 90; Glossiness: 40). Materiál s ID4 můžete nechat s defaultní barvou, protože stejně nebude vidět. Dále pak nastavte materiály pro rám a pro stěnu.
Nakonec Unhide All a můžete si spustit animaci.
Zatím jste zanimovali jen jednu otočku lamel, ale tu další už rozhodně zvládnete sami. Doufám, že Vás tento tutoriál něco naučil a hlavně neodradil od skriptů, ale naopak si odteď budete pomáhat skripty u zdlouhavých a nudných prací.
Tématické zařazení:
-
23. dubna 2014
Konica Minolta přenesla výhody velkých zařízení do kompaktních modelů
-
11. května 2014
-
23. května 2014
Epson na konferenci Droidcon Berlin ukázal nové možnosti čekající na vývojáře OS Android
-
24. listopadu 2014
-
13. května 2014
Samsung NX3000: retro styl, špičkový výkon a snadná konektivita v jednom přístroji
-
30. listopadu 2014
Nový fotoaparát α7 II: první plnoformát s pětiosou optickou stabilizací obrazu na světě
-
15. prosince 2014
Konica Minolta pomůže živnostenským úřadům s digitalizací dokumentů
-
11. května 2014
-
26. listopadu 2014
Canon Junior Awards již posedmé ocení mladé fotografy v rámci Czech Press Photo
-
21. srpna 2014