Wyślij zapytanie Dołącz do Sii

W artykule opisałem jak krok po kroku dodawać obiekty rozszerzonej rzeczywistości na urządzeniach mobilnych przy wykorzystaniu Unreal Engine. Zapraszam do lektury.

Budowanie projektu w Unreal Engine

Aby mieć na swoim Macu Unreal Engine, wcześniej potrzebujemy Epic Games Launcher. Żeby to zrobić, wchodzimy na stronę i pobieramy instalkę. Po zainstalowaniu, wchodzimy w Epic Games Launcher, a następnie w zakładkę Unreal Engine -> Biblioteka.

biblioteka

W Bibliotece mamy możliwość doinstalowania/usunięcia innych wersji silnika. W artykule będziemy używać ostatniej wersji 4.X.X, gdyż wersja 5.1.1 (najnowsza na dzień pisania) nie jest wstecznie kompatybilna. Dodatkowo, kompilacja shaderów trwa w nieskończoność (nawet, gdy chcemy wyświetlić tylko zwykły sześcian), uniemożliwiając całkowicie uruchomienie projektu.

Po uruchomieniu silnika, wybieramy Games -> Next -> Blank -> Next.

Select or create new project

Następnie w target platform zmieniamy na „Mobile/Tablet”, ustawiamy ścieżkę i nazwę projektu.

Project Settings

Będąc już w świeżo utworzonym projekcie, w sekcji „Content Browser” tworzymy nowy folder przy pomocy prawego przycisku myszy i nadajemy nazwę „Maps”. Następnie na górze ekranu naciskamy „Save Current”, by zapisać naszą nową mapę w folderze „Maps” i ustawiamy jej nazwę „BaseMap”.

Save Current

Z elementów mapy zostawiamy tylko „Light Source” i „Sky Light”, by nasz wyświetlony object nie był całkowicie czarny. Można też korzystać z gotowych presetów z plików tekstowych, by mieć od razu skonfigurowane oświetlenie. Polecam przejrzeć tutorial.

Będziemy potrzebowali 5 plików projektowych:

  1. Konfiguracji sesji AR (w sekcji „Content Browser” – naciskamy prawy przycisk myszy -> Miscellaneous -> Data Asset -> ARSessionCoinfig -> Select),
  2. Game Mode Base,
  3. Pawn,
  4. Player Controller,
  5. Actor.

Poza AR Session Config wszystkie potrzebne pliki stworzymy przez PPM -> Blueprint Class (ekran wyboru komponentu plus wygląd i nazwa potrzebnych plików widoczne poniżej).

Blueprint class

Nie ma potrzeby modyfikacji pliku konfiguracyjnego sesji AR. Bazowe ustawienia są wystarczające dla naszych potrzeb. Klikając dwukrotnie w AR_GameMode, przechodzimy do konfiguracji ustawień gry. Powinniśmy teraz zamienić domyślne klasy na stworzone przez nas w „Player Controller Class” oraz „Default Pawn Class” jak w obrazku poniżej:

Player Controller Class

Następnie, wchodzimy w opcje projektu tak, jak jest to pokazane na poniższej grafice,

opcje projektu

… a kolejno w sekcję „Maps & Modes”.

Musimy być pewni, że nasza gra startuje z zapisanej przez nas mapy, a nie z domyślnego wzorca, dlatego w obu sekcjach „Default Maps” wybieramy naszą „BaseMap”. W „Default Modes” ustawiamy przez nas stworzony „AR_GameMode”, tak aby „Selected GameMode” odzwierciedlał zmiany naniesione w naszym pliku AR_GameMode.

Project - Maps & Modes

W sekcji Input (zakładka „Mobile”) w polu „Default Touch Interface” naciskamy na „Clear”, aby wirtualny Joystick nie przesłaniał nam widoku z kamery. Finalny efekt widzimy poniżej.

finalny efekt

Bez poprawnego skonfigurowania sekcji „Mobile Provision” dla opcji „iOS” będąc nadal w „Project Settings”, nie będziemy mogli uruchomić naszego projektu na urządzeniu iOS.

Należy pamiętać, by w naszym pęku kluczy oprócz certyfikatu developerskiego/deploymentowego był też zachowany klucz prywatny. Po ściągnięciu provisioning profile z profilu developerskiego Apple należy go w pierwszej kolejności otworzyć poprzez Xcode, gdyż musi mieć typ Xcode managed. W pierwszej kolejności przy konfigurowaniu sekcji iOS w ustawieniach projektu należy wpisać nasz „Bundle Identifier”. Po wpisaniu Unreal Engine zacznie dopasowywać nam provisioning oraz certyfikat do podanego bundle ID.

kolejny krok

Również w sekcji iOS opcję „Max. Metal Shader Standard To Target” ustawiamy na wersję „Metal v2.1” i restartujemy projekt po sugestii silnika.

Poprzez „Settings” -> „Plugins” -> „Augmented Reality” włączamy pluginy rozszerzonej rzeczywistości dla iOS i Android (Apple ARKit i Google ARCore).

włączanie pluginów

Każde urządzenie iOS z zainstalowanym iOS SDK 11 (niższe SDK nas nie interesuje) lub wyżej ma moduł AR. Inaczej jest w przypadku urządzeń Androidowych. Nasz projekt można uruchomić tylko na urządzeniach wskazanych na liście.

Dokładne ustawienia opcji Android nie są ujęte w tym artykule, ale konfigurację możecie znaleźć w materiałach na YT.  

Wracamy do bazowego widoku projektu i klikamy dwukrotnie na AR_Pawn. Na poniższym obrazku do DefaultSceneRoot musimy dodać komponent „Camera” (krok 1.). W sekcji EventGraph (krok 2.) widzimy ostateczny wygląd bulepuintu po dodaniu wszystkich nodów. Jedynym niedostępnym nodem jest funkcja „WorldHitTest”, którą trzeba stworzyć poprzez dodanie funkcji (krok 3.).

dodanie funkcji

Powyższy blueprint AR_Pawn to przełożenie dotknięcia jednym palcem przez gracza, którego akcje obsługiwane są w AR_PlayerController i sprawdzenie, czy w coś nie uderzyliśmy w funkcji WorldHitTest (funkcję tę opiszę poniżej). Jeśli nie uderzyliśmy i trafiliśmy na płaską powierzchnię geometryczną wykrytą przez silnik, to bierzemy pierwszą przestrzeń ze zbioru znalezionych i spawnujemy na niej nasz obiekt klasy AR_Spawned_Actor.

W funkcji WorldHitTest, która przedstawia się następująco:

WorldHitTest

pobieramy od gracza screen position, gdzie dotknął palcem, przeprojektowujemy to na wektor w świecie 3D z kierunkiem do przodu i sprawdzamy, czy wektor nie styka się z jednym z elementów świata rzeczywistego, bądź wewnątrzsilnikowego.

Funkcja dostarcza nam nie tylko informację, czy nie będziemy kolidować z jakimś obiektem, ale też wszystkie powierzchnie geometryczne wykryte przez silnik, które miały styczność z opisanym wektorem. Na końcu pracy z bluprintem AR_Pawn musimy pamiętać o przekazaniu stworzonego przez nas pliku konfiguracyjnego sesji AR w nodzie Start AR Session (patrz obraz UE_AR_Pawn, krok 4.).

Dla celów testowych naszym aktorem, którego będziemy spawnować, jest kula (sphere). Aby ją dodać, dwukrotnie klikamy w stworzony przez nas blueprint AR_Spawned_Actor, następnie w „DefaultSceneRoot”, a później w zielony przycisk „+Add Component” i wybieramy „Sphere”.

Add component

Po zaznaczeniu sfery zmniejszamy ją dziesięciokrotnie w menu „Details”, by nie była rozmiarów metr x metr x metr. Możemy uruchomić projekt na naszym urządzeniu mobilnym poprzez kliknięcie trójkąta jako listy rozwijanej przy przycisku „Launch” i wybranie naszego urządzenia mobilnego (poniżej).

uruchomienie projektu

Importowanie do naszego projektu obiektów z Blendera

Pobieramy program Blender i instalujemy na naszym Macu. Następnie ze strony Blender pobieramy „Bugatti Chiron 2017 sports car”. Po rozpakowaniu otwieramy plik „bugatti.blend”. Pliki .blend są automatycznie otwierane przez Blendera. LPM naciskamy na podłogę i ją usuwamy, by lepiej można było zaznaczyć elementy auta. Wybieramy tylko i wyłącznie wszystkie elementy samochodu bez kamer i oświetlenia za nim.

Zaznaczone elementy powinny wyglądać tak:

importowanie Bugatti

Na zaznaczonych elementach klikamy LPM -> Convert To -> Mesh. Po ukończonej operacji PPM -> Join

Mając zaznaczone Bugatti, naciskamy File -> Export -> FBX. W opcjach eksportu zmieniamy, by eksportować zaznaczone obiekty, włączyć Face smoothing, zaakceptować transformacje i modyfikatory; nie eksportować animacji ani kości; włączyć eksport luźnych krawędzi, zaznaczyć styczne powierzchnie i przede wszystkim triangulację obiektów. Zła kombinacja spowoduje, że niektóre elementy się nie wyeksportują. Zaznaczone opcje powinny wyglądać następująco:

zaznaczone opcje

Wracamy do Unreal Engine. Tworzymy nowy folder „Blender” i będąc w folderze „Blender”, klikamy na „Import to …”

powrót do Unreal Engine

Następnie, w kolejnym menu naciskamy „Import All”, używając domyślnych opcji importu. Aby wyświetlić zaimportowane Bugatti, wystarczy z AR_Spawned_Actor usunąć „Cube”, czyli sferę dodaną w poprzedniej części i metodą drag and drop przenieść model „bugatti” w miejsce. gdzie była sfera.

Jeśli w poprzedniej części artykułu zmniejszaliśmy sferę 10-krotnie, to będzie lepiej zmniejszyć Bugatti jeszcze bardziej. Silnik zapamiętuje ostatnio wykorzystane urządzenie, więc teraz projekt możemy uruchamiać po prostu naciskając przycisk „Launch”.

efekt końcowy

Podsumowanie

Model znacząco różni się materiałami od modelu wyrenderowanego w Blenderze. W znacznej większości przypadków rodzaj materiału z Blendera nie odpowiada temu z Unreal Engine.

Projektując modele w Blenderze tylko pod eksport do Unreal Engine, należy się przede wszystkim skupić na bryle, a materiały dobrać w silniku. Gdy nie będzie nas interesowała modyfikacja tych materiałów w silniku, warto zainteresować się opcją wypalaniem tekstur do pliku .png w Blenderze. Jest to najmniej zasobożerna opcja, powszechnie używana przy robieniu modeli do gier. Jednak dojście do wprawnego wypalania tekstur wymaga dużego doświadczenia. W Blenderze nie warto również poświęcać zbyt dużo czasu na oświetlenie albo efekty, gdyż nie będziemy w stanie tego dobrze wyeksportować do Unreal Engine.

Przydatne informacje

  1. Dokumentacja podstawowa – jeżeli zacząłeś swoją przygodę z Unreal Engine, warto poczytać trochę o podstawach i dostępnych elementach blueprintowych
  2. Oświetlenie – w przypadku korzystania z urządzeń mobilnych musimy liczyć się z wieloma ograniczeniami, dlatego warto poznać je, zanim zaczniemy budowanie bardziej zaawansowanych komponentów. Ograniczenia w budowaniu oświetlenia
  3. C++ zamiast blueprintów – jeśli poświęciliśmy już trochę czasu na swój projekt i chcielibyśmy użyć natywnego języka programowania w Unreal Engine, warto najpierw zainstalować Visual Studio for Mac. Według dokumentacji Unreal Engine, nie jest to konieczne i można np. używać zwykłego edytora tekstu, ale w praktyce, w nawet średnio-małych projektach, jest to awykonalne. Polecam na początku przerabiać klasy blueprintowe jedna po drugiej, a nie masowo. Opis znajdziecie w sekcji Exclusive Nativization w dokumentacji.
  4. Możliwości silnika w rozszerzonej rzeczywistości – pomimo tego, że upłynęło wiele lat od wypuszczenia tego video, nadal nie ma lepszego, który opisze podstawowe możliwości korzystania z rozszerzonej rzeczywistości. Warto też ten materiał obejrzeć, by mieć świadomość, w jaki sposób prostymi środkami udoskonalić swój projekt.
  5. Informacje o importowaniu FBX-ów i dlaczego trzeba używać opcji triangulacji w Blenderze przy eksportowaniu.
5/5 ( głosy: 3)
Ocena:
5/5 ( głosy: 3)
Autor
Avatar
Adam Kłaniecki

Pasjonat tematyki rozszerzonej inteligencji oraz tworzenia gier 3D. Na co dzień zaangażowany w projekty mobile z zakres iOS oraz Android. Zajmuje się rozwojem aplikacji dla różnych klientów przy wykorzystaniu: PHP, JS, JQuery, MySql, C++, Kotlin, Swift, Objective C

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Może Cię również zainteresować

Pokaż więcej artykułów

Bądź na bieżąco

Zasubskrybuj naszego bloga i otrzymuj informacje o najnowszych wpisach.

Otrzymaj ofertę

Jeśli chcesz dowiedzieć się więcej na temat oferty Sii, skontaktuj się z nami.

Wyślij zapytanie Wyślij zapytanie

Natalia Competency Center Director

Get an offer

Dołącz do Sii

Znajdź idealną pracę – zapoznaj się z naszą ofertą rekrutacyjną i aplikuj.

Aplikuj Aplikuj

Paweł Process Owner

Join Sii

ZATWIERDŹ

This content is available only in one language version.
You will be redirected to home page.

Are you sure you want to leave this page?