BI-PGA Programování grafických aplikací
Jdi na navigaci předmětu

Import 3D modelů do Unreal Engine 4

Tato práce se zabývá vývojem zásuvného modulu, který bude zajišťovat import 3D modelů z RESTFull API do Unreal Engine 4.

  • Komunikace s RESTFull API
  • Práce je ukázkou práce s blueprinty

Odkaz na text práce.

SetJsonHeader

link na zdroje https://gitlab.fit.cvut.cz/vmck/htc-vive/runtime-import-plugin

Pro vytvoření pluginu je potřeba mít vytvořený Unreal Engine projekt. V tomto tutoriálu budeme probírat pouze vývoj skrze c projekt. Pro blueprint projekt není však postup příliš odlišný, pouze nám nenabízí možnosti psaní c kódu. Možnost c++ projektu si můžeme vybrat při vytváření nového projektu zde.

image1

Společně s projektem by se mělo otevřít i Visual Studio, ve kterém bude probíhat případné psaní kódu.

image2

My však přejdeme opět do projektu v Unreal Engine a otevřeme okno s pluginy. Okno otevřeme v levém horním rohu následovnně Edit→Plugins.

image3

Dále je potřeba kliknout na tlačítko “New Plugin” nacházející se v pravém dolním rohu nového okna.

image4

Tímto se nám otevře okno, kde budeme nuceni vyplnit název a určit šablonu vytvářeného pluginu. V našem případě se plugin nazývá “Plugin_tutorial” a vybereme si šablonu content only. Tato šablona se hodí pokud chceme vytvářet plugin pomocí blueprint, protože nám znemožní psát kód a zpřístupní nám pouze složku content. V této contect složce lze následně vytvářet blueprint třídy.

image5

Výše zmíněné atributy jsou potřeba vyplnit naprosto vždy. Unreal Engine však nabízí k vyplnění také informace jako je jméno autora, popis našeho pluginu, webovou stránku autora atd, které jsou dobrovolné.

image6

Po úspěšném vyplnění všech atributů je čas kliknout na tlačítko Create Plugin

image7

Po kliknutí na tlačítko Create Plugin se objeví v Content Browser Content složka našeho pluginu

image8

Ve Visual studiu zase můžeme vidět složku našeho pluginu pod složkou Plugins. Protože jsme zvolili šablonu content only. Obsahuje složka pouze konfigutační soubor .uplugin a složku Resources, do které se umisťuje například ikona pluginu. V případě zvolení jiné šablony by se zde nacházela i složka Source, do které se vkládají c++ kódy.

image9

Nyní lze začít s vývojem funkcionalit pluginu. Nejprve se podíváme na tvar konfiguračního souboru. Pokud jsme zvolili šablonu content only, měl by být konfigurační soubor v následujícím tvaru.

{
    "FileVersion": 3,
    "Version": 1,
    "VersionName": "1.0",
    "FriendlyName": "Plugin_tutorial",
    "Description": "",
    "Category": "Other",
    "CreatedBy": "",
    "CreatedByURL": "",
    "DocsURL": "",
    "MarketplaceURL": "",
    "SupportURL": "",
    "CanContainContent": true,
    "IsBetaVersion": false,
    "IsExperimentalVersion": false,
    "Installed": false
}

Pokud využíváme k vývoji i c++, rozšíří se konfigurařní soubor o kolonku:

"Modules": [],

ve které je třeba zmínit veškeré moduly Unreal engine, které bude náš plugin využívat.

Pokud pak chceme aby náš plugin využíval jiné pluginy, je možné přidat do konfiguračního souboru kolonku:

"Plugins": [],

do té pak můžeme napsat název pluginu a zdali ho chceme aktivovat. Unreal engine pak prohledá plugin složky projektu a enginu a pokud v některé najde plugin s vyplněným jménem, automaticky ho v projektu aktivuje. Kdybychom tedy chtěli náš plugin využít v některém jiném pluginu, napsali bychom:

"Plugins": [
    {
    "Name": "Plugin_tutorial",
    "Enabled": true
    }
]

Pro samotnou funkcionalitu je v rámci blueprint vývoje nejdůležitější pak content složka pluginu. V této složce pak lze v Unreal engine editoru vytvářet blueprint třídy, stejně jako v normálním projektu.

K vytvoření nové blueprint třídy je důležité se ujistit, že se nacházíme v content složce pluginu. Pak je nunté kliknout na tlačítko Add new a vybrat Blueprint class.

image12

Ze zobrazené nabídky je pak nutné si vybrat typ blueprint třídy, my si vybereme Actor. Jedná se o základní třídu, kterou lze umístit do scény.

image13

Po vytvoření blueprint třídy na ní dvakrát klikneme, aby se otevřela. Nejdůležitější pro funkcionalitu je pak event graph.

image14

Po tomto úvodu se podíváme na příklad pluginu, který využívá pluginy VaRest a RuntimeMeshLoader k runtime importu modelů do Unreal Engine. Takto vypadá konfigurační soubor:

{
    "FileVersion": 3,
    "Version": 1,
    "VersionName": "1.0",
    "FriendlyName": "RuntimeImportPlugin",
    "Description": "",
    "Category": "Other",
    "CreatedBy": "Tadeas Busek",
    "CreatedByURL": "",
    "DocsURL": "",
    "MarketplaceURL": "",
    "SupportURL": "",
    "CanContainContent": true,
    "IsBetaVersion": false,
    "IsExperimentalVersion": false,
    "Installed": false,
    "Modules": [],
    "Plugins": [
        {
            "Name": "VaRest",
            "Enabled": true
        },
        {
            "Name": "RuntimeMeshLoader",
            "Enabled": true
        }
    ]
}

Plugin se skládá z vícero uživatelských rozhraní a dalších komponent. Uživatelské rozhraní je možné vytvořit podobně jako blueprint třídu, pouze je nutné vybrat widget blueprint.

image15

Widget se liší od normální blueprint třídy možností vytvářet design. Po otevření widgetu se zobrazí designer, do kterého lze z paletty vlevo přidávat grafické komponenty. Nové komponenty se pak mohou přidávat pod již vytvořené komponenty a tím vytvářet složitější struktury. V příkladu níže je do designeru přidán button, pod button je pak přidán text.

image16

Funkcionalita přidaných grafických komponent je pak možná upravovat v event graphu. V event graphu můžeme vytvářet proměnné, funkce, eventy a další věci. Proměnné se nacházejí vlevo a jsou schopny uchovávat různorodé informace. Mezi tyto informace patří i instance, či reference na námi vytvořené blueprint třídy.

image17

Pokud některou z proměnných zvolíme, můžeme dále upravovat její atributy. Například jméno, typ, jestli je možné jí editovat, či jestli se zobrazí při vytváření nové instance. Z proměnné je pak také možné udělat pole, množinu, či mapu.

image18

Vytvořené proměnné je možné přetáhnutím do event graphu nastavovat, či číst.

image19

Obrázek výše například při eventu, který nastane při vytvoření, nastaví text v komponentě name na referenci na sebe (převedenou na text). Komponenta name je vytvořená v designeru a jedná se o text u kterého bylo vybráno, že je to proměnná.

image20

Druhá část obrázku výše při eventu stisknutí tlačítka provede funkci Load Model from Memory se vstupními parametry reference na sebe a reference na rodiče. Event pro stisknutí je pak vytvořen pomocí tlačítka vytvořeného v designeru. Po vybrání této komponenty je možné v pravo kliknout na plus, které přidá požadovaný event do event graphu.

image21