Jak vymodelovat a vyexportovat 3D model nemovitosti v bezplatném softwaru Blender?
Digitální 3D modely nemovitostí lze využít v mnoha aplikacích k mnoha účelům. Tento článek se váže k tvorbě interaktivního konfigurátoru nemovitosti, více v článku interaktivní virtuální realita ve spojení s modelem nemovitosti? - Výhody, možnosti, tvorba.
At již 3D model nemovitosti získáváte fotogrammetrií nebo kompletním modelování, v menší či větší míře se práci v programu pro 3D modelování nevyhnete. Samotnou volbu preferovaného programu bychom přitom měli volit na základě potřeb. Já, jakožto vystudovaný konstrukční inženýr, bych s velkou radostí vše modeloval v Autocad Inventor, který má z podstaty svého zaměření skvěle vyřešené rozměrové modelování. Pro tvorbu fotorealistických vizualizací je přitom zcela nevhodný - od toho je řada architektonických programů rovněž od Autocadu. ... A pak je zde bezplatný open source 3D grafický editor Blender s řadou dostupných doplňků, včetně těch architektonických. Vyjma skvěle vypadajících fotorealistických renderů (pokud to člověk s ním umí), lze v něm tvořit i skvělé fotorealistické akční animace (pokud to člověk s ním ještě lépe umí). Právě v něm se do modelace pustím v rámci tohoto článku.
[Poznámka pro začátečníky] Program Blender se může zdát pro začátečníky na první pohled relativně složitý. Má hromadu karet, volání většiny funkcí prostřednictvím klávesových zkratek, zvláštní ovládání pohledu na pracovní plochu a konečně - 99,9% tlačítek a voleb, u nichž absolutně netušíte, k čemu slouží. Naštěstí existuje dokumentace a celá řada tutoriálů které pomohou, ale nakonec je nejlepším průzkumem stejně samotná práce s ním. Sám jsem Blender zpočátku neměl rád, ale po pár hodinách se člověk zorientuje a vše začne dávat smysl. Doporučuji se podívat na pár videí na YouTube o tom, jak se v Blenderu pracuje a co umí.
Tvorba 3D modelu bytu v programu Blender
Vzorovou nemovitostí k 3D modelaci je bytová jednotka 2kk o celkové podlahové ploše 70m², z toho je 16m² terasa - viz půdorys a vizualizace.
Předloha pro modelování ve formě ilustračního obrázku od developera + rozměrového půdorysu bytu
Postup modelování hrubého rozměrového modelu / stavby
- Blender umožňuje vložení obrázku jako předlohy do roviny XY. Poté je již jednoduché obkreslit si zdi. Já toho nevyužil, modeloval jsem "na zelené louce", pouze na základě rozměrů z půdorysu.
- K modelování jsem použil nativní rozšíření "Add Mesh: Archimesh" (aktivovat lze v "Edit → Preferences → Add-ons → Add Mesh: Archimesh)"
- Modeloval jsem v měřítku, s přesností 1mm
- Objekty Archimesh lze vkládat přes "Add → Mesh → Archimesh → { konkrétní objekt - např. Room }". Poté jsou objekty Archimesh dostupné i v postranním menu (lze otevřít / zavřít klávesou "n") na záložce "Create".
- Model jsem tvořil postupně po jednotlivých místnostech. Každou jsem začal v Archimesh možností "Room" a přidáváním jednotlivých stěn. Každou místnost je pro vygenerování bezchybné podlahy a stropu potřeba uzavřít 4mi stěnami. V případě společných stěn mezi dvěma místnostmi jsem nastavil jedné ze stěn viditelnost na "hidden". Rozdílnou tloušťku stěn (nosná, oddělovací) jsem v rámci modelu neřešil.
- Dveře a okna jsou ze zabudované knihovny Archimesh. Je potřeba dávat pozor, aby poloha oken, dveří a dalších objektů byla nastavena nad celou skupinou dílců objektu. Jakmile jsou umístěny na svém místě, označí se jejich nadřazená místnost a na panelu Archimesh oné místnosti se prostřednictvím stisknutí tlačítka "Auto Holes" automaticky vytvoří otvory ve stěnách pro vložené objekty.
- Podlahy a stropy jsem vložil jednoduše zaškrtnutím tlačítek "Ceiling" a "Floor" na panelu jednotlivých místností.
- Dveře jsou pootevřené úpravou hodnoty rotation v ose z na objektu dveří skupiny dvěřního objektu.
Úprava hrubého modelu pro budoucí bezproblémový export
Technické objekty vytvořené rozšířením Archimesh
Na ukázce viditelného výsledku (zobrazení v Solid módu = bez zahrnutí materiálové vrstvy), je viditelné množství zaznačených technických objektů (díry a přidružené dílce) kolem vložených dílů (dveře, okna...) z knihovny Archimesh. V případě importu vymodelovaného modelu bytu s těmito technickými objekty do externího softwaru, jež s nimi neumí pracovat (například herní engine Unity), by došlo k zobrazovací chybě - skryté objekty by se staly viditelnými. K tomu by přitom došlo bez ohledu na nastavení jejich viditelnosti v programu Blender. Tento problém lze řešit dvěma způsoby:
- Jejich odstraněním / skrytím v externím enginu, pokud působí problém
- Jejich odstraněním v softwaru Blender ještě před exportem modelu
Vhodný typ řešení je odvislý od budoucích potřeb práce s modelem. Řekněme, že v rámci efektivity práce exportujete daný model přímo do projektu v externím softwaru, v němž s modelem dále pracujete. Kdykoliv uděláte v Blenderu nový export, veškeré změny se ihned projeví i v návazném programu. V momentě, kdy budete provádět opravu prvním způsobem, daný problém se bude opakovat (a vyžadovat opravu) při každém exportu. Naproti tomu, pokud se rozhodnete pro druhé řešení, daný problém zmizí natrvalo, avšak za cenu ztráty jednoduché modifikace polohy daných objektů prostřednictvím rozšíření Archimesh (objekt dveře nebude dále svázán s objektem díra pro dveře - díra pro dveře bude pevnou neposunovatelnou součástí objektu místnost). Avšak za pomoci běžných modelovacích nástrojů Blender jsou dané modifikace stále možné.
V tomto případě je pevná poloha dveří a oken již schválena a nelze do ní zasahovat, optimálním řešením je tedy způsob 2. Pokud by i přes to přišel požadavek na změnu, úprava by se provedla v rámci nástrojů běžného modelování. Pro zprocesování opravy druhým způsobem je nutné potvrzení provedených modifikací (okno "Modifier properties" - ikona modrého servisního klíče) nástrojem Archimesh pro každý zmodifikovaný objekt (místnost). Po potvrzení všech modifikací (tlačítko "apply") lze poté veškeré technické objekty (v mém případě otvory a zákaldní desky) z modelu odstranit.
Viditelnost ploch modelu po exportu
Render grafiky v reálném čase je náročný na grafický výkon zařízení. Z toho důvodu používá většina programů a aplikací optimalizační logiku, která zařizuje, že render probíhá pouze pro viditelné povrchy objektu. Aby to fungovalo správně, každý povrch musí poskytovat informaci, zda je vyžadován jeho render (viditelnost) při pohledu zvenčí, zevnitř nebo z obou stran. Přiřazení této informace povrchu se může lišit napříč programy (například v herních enginech je předpis součástí nastavení povrchového shaderu), v nástroji Blender pro to slouží nastavení "normals" (popř lze rovněž přes shadery) přiřazené pro mesh. (nastavení normals pro celé objekty i jejich jednotlivé plochy lze provádět v záložce "Modeling". Označí se objekt / konkrétní plocha, poté rozklikne možnost "Mesh" → "Normals" a zvolí preferovaná možnost. Jestliže by byl vyžadován render z obou stran, aktivuje se v materiálových vlastnostech objektu (na aktivním objektu, v liště materiály - označení materiálu → checkbox "Backface culling" v materiálové liště "Settings").
Normály můžete plochám přiřadit manuálně (nastavení shaderu lze rozpoznat dle barvy povrchu při aktivním typu zobrazení "shading viewport"), případně nejdříve zjistit chybně renderované povrchy (provést export do softwaru, v němž s daným modelem plánujete dále pracovat a vizuálně zkontrolovat) a ty následně řešit. Příklad chybného nastavení normál a způsob jejich nápravy je objasněn níže. (některé povrchy byly nastaveny chybně z Blenderu, jiné jsem záměrně chybně pro lepší názornost nastavil). Poznámka - na povrchy se podívejte pro správnost zobrazení prostřednictvím objektu kamery softwaru.
Na ukázce výše si můžete všimnout hned tří povrchů se špatnou konfigurací:
- Chybějící render pro podlahu - Unity danou plochu renderuje pouze ze spodní strany. Pro opravu nám stačí přehodit render ze spodní na horní stranu povrchu ("Modeling" || "Mesh" → "Normals" → "Flip")
- Průhledná stěna mezi místnostmi "toaleta" a "koupelna" - daná zeď, leč se může zdát jako plný objekt, je ve skutečnosti pouze dutým kvádrem. Každá strana kvádru má poté z důvodu výkonové optimalizace nastavenou viditelnost (render) pouze z vnější strany. V případě z ukázky k průhlednosti dochází pouze ve směru "Toaleta" → "Koupelna". Chybně nastavený je totiž pouze povrch kvádru ze strany od toalety (průhlednost povrchu ze strany koupelny je v tomto případě správná - jedná se totiž o povrch z vnitřní strany). Pro opravu je tedy nutné povrchu zdi ze strany toalety nastavit normály pro vnější ("Modeling" || "Mesh" → "Normals" → "Recalculate Outside", popř zkratka shift+n)
- Není vám jasný bod 3? Proč místo něj není označen spíše strop místnosti chodba nebo toaleta, kde "chybí"? Odpověď je snadná - kamera (tedy uživatel) při používání aplikace danou plochu vidí pouze z vnitřní strany místnsoti. Na snímku je přitom viditelná pouze ze strany vnější. Opravu provedeme stejně jako v bodě 1 - ("Modeling" || "Mesh" → "Normals" → "Flip"), případně klávesovou zkratkou shift+ctrl+n (= "Mesh" → "Normals" → "Recalculate Inside")
Liší-li se náš model od půdorysu z důvodu nemožnosti určitý prvek vytvořit v Archimesh, můžeme jej do hrubého modelu vložit / upravit s využitím běžných modelovacích nástrojů v programu Blender. V našem modelu se tímto způsobem provedla modifikace oken tak, ať vyplňují celou výšku nemovitosti a zároveň na sebe přirozeně navazují. Společně s touto úpravou byl lehce snížen počet verticelů modelu pro nižší výkonovou náročnost při jeho renderu.
Konfigurace základního vzhledu - podlahy, stěny, stropy
Vzhled povrchových ploch i celých objektů se definuje přiřazením materiálu. Ten je přitom definován barvou, nebo estetičtěji - přiřazenou texturou či kombinací více textur o různě definovaných vlastnostech. Tím lze dosahovat fotorealistického vzhledu jednotlivých materiálů.
Model bytu bude situován v čistém designu - bílé stěny + podlaha s přírodním dřevěným dekorem neurčeného vzhledu. Rámy oken jsou definovány architektonickým návrhem a budou ve hnědém dřevěném dekoru. Tím je dán výtah základních materiálů, které pro model potřebujeme. Jestliže chceme uživateli ve virtuální realitě umožnit porovnávání / přepínání mezi více dekory na jednotlivých plochách, pak je nutné mít materiál pro všechny dostupné varianty. V tomto případě zejména různé dekory podlahy - tmavé dřevo, světlé dřevo atd.
Pokud textury pro použití v rámci vizualizací nedodá dodavatel / výrobce podlah / jakýchkoli komponent, různé textury (dřevo, dlažba, omítka) v různých variacích si lze zakoupit / stáhnout v k tomu specializovaných službách.
Materiály z textur a barev lze tvořit / upravovat v záložce "Shading" programu Blender. Jeho přiřazení ke konkrétnímu objektu / ploše poté jednoduše - prostřednictvím záložky "Material properties" označeného tělesa / plochy. Tento postup aplikujeme pro výchozí vzhled stěn, stropů, podlah, dveří, jejich klik a futer, rámů oken, zábradlí a dalších bytových komponent.
Vybavení bytu? Kdy vkládat a odkud
Dalším krokem může být doplnění modelu o nábytek. Tisíce Cad a BIM modelů ke stažení zdarma jsou například na webu Polantis. Ku příkladu nábytek z populárních obchodů Ikea může být stažen na adrese https://www.polantis.com/ikea. Různý nábytek je možné načíst i rovnou do Blenderu prostřednictvím rozšíření propojených s nejrůznějšími knihovnami 3D modelů. Kuchyňskou linku a další nábytek lze vymodelovat na základě vizualizace poskytnuté kuchynským / koupelnovým studiem (vizualizační software kuchyňských studií často umožňuje export (2D render) pouze do formátu pdf a jpg.), případně jej lze jednoduše spravovat s využitím knihovny Home Builder.
Přidání nábytku do modelu a dalšího vybavení bytu přímo v Blenderu zaručí možnost tvorby skvělých renderů přímo v tomto softwaru. Při výběru nábytku bychom nicméně měli zohlednit účel, pro který modely hodláme použít. Jedná-li se o VR aplikaci, je vhodné volit co nejlépe optimalizované modely, případně je výkonostně optimalizovat před exportem do herního enginu. Samotný export lze provést jak pro celý objekt, tak samostatně pro jeho jednotlivé části. Při prvním exportu často exportujeme vše, při dalších postupujeme dle námi zvolené a prověřené pipeliny.
Pipeline přenosu 3D modelů napříč softwary
Pojmem pipeline (angl. potrubí) se nazývá postup pro bezpečný přenos 3D modelů mezi programy - například Blenderem pro 3D modelování, Substance pro správu materiálů a herním enginem (Unity / Unreal Engine) pro zpracování VR aplikace.
Principiálně jsou 2 možnosti exportu - 1) export 3D modelu jako celku a 2) export po samostatných částech. Možnost 1 typicky použijeme při prvním exportu, dále se řídíme schopnostmi a kompatibilitou softwarů a našich potřeb. V rámci kompatibility je důležité znát chování v navazujícím softwaru, do nějž je exportovaný model automaticky importován (viz doporučení efektivity práce v bodě nastavení viditelnosti ploch modelu). Příklad uvedu právě na tomto modelu. Dejme tomu, že v Unity jsme na modelu změnili podlahy a nastavily interaktivní prvky - scripty a kmponenty pro otevírání dveří, rožínání světel a podobně. Všechny tyto scripty a komponenty jsou svázány s daným objektem v 3D modelu v Unity. Otázka zní, co se s těmito externě přidanými prvky stane při re-importu onoho modelu do Unity? V tomto případě (export z Blender = import do Unity) při dodržení názvů modelů nic zásadního - aktualizuje se 3D model, avšak bez ovlivnění k němu připojeným komponent. V rámci Unity je tedy relativně jedno, zda vždy exportujeme celý 3D model, nebo pouze jeho pozměněné části, děláme-li pouze drobné změny.
Toto cování se může napříč softwary lišit. Zároveň je časově náročnější a otevírá prostor pro případné chyby schopné razantně prodlužovat dobu vývoje. Bezpečnějším a mnou doporučeným způsobem je tedy převádět 3D model mezi programy po logických částech - například jednotlivě části modelu bytu (pokoje) a následně každého kusu nábytku zvlášť, ve vlastním .fbx nebo jiném souboru. V tomto případě přesně víte, co bylo v rámci 3D modelu v navazujícím softwaru aktualizováno a můžete zkontrolovat jen tomu relevantní přiřazenou funkcionalitu v témže softwaru. Export jednotlivých dílčích 3D modelů (komponent) se z Blenderu provádí jednoduše - označením modelu → file → export → fbx do souboru se jménem dané komponenty nacházejícím se ve zdrojové složce projektu programu, do nějž daný model vkládáme.
Správa textur a bezpečný export
Textury svázané s nadefinovanými materiály v Blenderu lze exportovat jako součást 3D modelu, nebo v případě složitějších materiálů bezpečněji - samostatně. Samostatné vyexportování textur pro určitý objekt / celý projekt se provádí označení objektů, pro něž chceme textury exportovat, a následným zvolením možnosti file → External Data → Unpack All Into Files se exportují do téže složky, jako 3D modely. Po exportu v dané složce nalezneme vyjma 3d modelů ve formátu .fbx i složku "textures" s našimi externě vyexportovanými texturami.
Při exportu jednotlivých modelů je nezbytné striktně dodržovat shodné zvolené měřítko a ideálně i souřadnicovou XYZ orientaci modelu v prostoru.
Práce s 3D modelem v navazujících programech
Existující model je základem pro nespočet dalších prací a užití. Pro příklad tvorby interaktivní virtuální nemovitosti, použitelného ve smyslu konfigurátoru interiéru nemovitosti, místa pro společné setkávání lidí (teambuildingů) i běžných interaktivních virtuálních prohlídek dále pokračujte na článek Interaktivní virtuální realita ve spojení s modelem nemovitosti? - Výhody, možnosti, tvorba.