poniedziałek, 26 września 2016

Vulkan na Samsungu Galaxy S7 (Exynos 8890) [Aktualizacja]

Jeśli używasz Galaxy S7 lub S7 Edge, to niemal miesiąc temu powinieneś dostać aktualizację włączającą obsługę API Vulkan. Byłem chyba jednym z pierwszych ludzi, którzy odkryli niespodziankę ukrytą w jednej z aktualizacji;)

Samsung już w lutym twierdził, że S7 jest pierwszym telefonem z obsługą Vulkana. Niestety rzeczywistość nie była tak różowa. Biblioteki były obecne w systemie, ale brakowało rozszerzenia VK_KHR_swapchain, przez co niemożliwe było wyświetlenie czegokolwiek na ekranie smartphone. Brzmi absurdalnie? Dobrego wytłumaczenia dlaczego VK_KHR_swapchain jest opcjonalnym składnikiem Vulkana dostarcza Intel:

In Vulkan, a swap chain is an extension. Why? Isn’t it obvious we want to display an image on the screen in our application’s window?
Well, it’s not so obvious. Vulkan can be used for many different purposes, including performing mathematical operations, boosting physics calculations, and processing a video stream. The results of these actions may not necessarily be displayed on a typical monitor, which is why the core API is OS-agnostic, similar to OpenGL.

Vainglory, pierwsza duża gra korzystająca z Vulkana na Androidzie

Piszę o Vulkanie dopiero dzisiaj, a nie miesiąc temu, bo wtedy brakowało aplikacji do przetestowania nowego API. Dziś każdy posiadacz Galaxy S7, S7 Edge i Note 7 może zainstalować Vainglory: Vulkan Beta. Nie jest konieczna instalacja wersji podstawowej.
Choć nie mogę zrewidować tutaj zapewnień twórców o 30% wyższej wydajności, to muszę przyznać, że ta gra jest ładna, płynna i niezbyt bateriożerna. Mój S7 cały czas pozostawał chłodny, nie stwierdziłem też błędów wyświetlania. Pewnie gdybym lubił MOBA i nie miał alergii na mikrotransakcje, to grałbym godzinami.

vkQuake - wstępny port klasyka

Jeśli nie przeszkadza ci brak dźwięku i (co gorsza) konieczność użycia gamepadu to możesz spróbować portu vkQuake. Uwaga: jeśli nie masz podobnego gamepadu do tego, który używa twórca portu, to masz problem. Działania wyglądają na przypisane sztywno do przycisków.

GearVR

Niestety Vulkan nie może jeszcze zostać wykorzystany do renderowania wirtualnej rzeczywistości.

Aktualizacja

Unity dostało obsługę Vulkana i jak możemy przeczytać Galaxy S7 powinien być w stanie je uruchomić:

Samsung Galaxy S7 (European version, with ARM Mali GPU). Make sure you have the latest firmware, with build date August 2016 or later.

sobota, 27 sierpnia 2016

FreeCAD: TechDraw (rzuty 2D), elementy bazowe PartDesign

Ta krótka notka ma za zadanie przedstawić kilka ciekawych zmian i nowych funkcji programu FreeCAD.

Elementy bazowe i ciało (Body) modułu PartDesign

Wcześniej każdy nowy szkic musiał być umieszczony na geometrii istniejącej części. Stawało się to często bardzo niewygodne, wystarczy sobie wyobrazić dodanie segmentu do wałka przez obrót - na jednej z podstaw trzeba było wyciągnąć najpierw jakiś prostopadłościan, a dopiero potem narysować na nim docelowy szkic.

Niedawno został wprowadzony kontener Body, który likwiduje ten problem. Szkice mogą być umieszczane na dowolnych powierzchniach płaskich, a operacje z nich powstałe oddziałują na całą geometrię wewnątrz jednego kontenera.


Zadanie jeszcze bardziej ułatwiają elementy bazowe: płaszczyzny, osie i punkty. Więcej o budowie nowego PartDesign można przeczytaj na forum tutaj.

TechDraw - rzuty 2D

Wcześniej mieliśmy oficjalny moduł dokumentacji 2D tworzonej z modeli 3D nazwany Drawing i nieoficjalny Drawing Dimensioning. Pierwszy z nich nie umożliwiał łatwego wymiarowania ani tworzenia przekrojów, drugi dawał sobie radę z wymiarami, ale nie były one aktualizowane po zmianie kształtu części.

Nowy TechDraw rozwiązuje wszystkie te problemy. Wątek na forum.

 
Jak można zauważyć na powyższym zrzucie, jeszcze nie wszystko da się ustawić tak aby odpowiadało to zasadom rysunku technicznego. No, ale minęło dopiero półtora miesiąca od pierwszego wydania TechDraw - jest on cały czas dopracowywany. 

Nowości w module MES (FEM)

Moduł wspomagający obliczenia metodą elementów skończonych jest tak szybko i tak szeroko rozbudowywany, że trudno byłoby streści wszystkie zmiany.

Na pewno warto zwrócić uwagę na symulacje termomechaniczne opisane w tym wątku na forum.
 

Inną ciekawostką jest zaawansowany postprocesing z wykorzystaniem VTK - więcej tutaj.

Instalacja freecad-daily na Ubuntu

Opisane powyżej nowości (prócz postprocesingu VTK,który wymaga kompilacji ze źródeł) można znaleźć w prekompilowanych paczkach freecad-daily. 

Tematy warte uwagi w przyszłości

"Robust References" Redux - rozwiązanie problemu topologicznego nazewnictwa. Do tej pory było tak, że program do utrzymywania referencji numerował geometrię danego typu nie przejmując się jej położeniem czy znaczeniem. Przykład: płytka z kilkoma otworami, w jednym z nich robimy fazę. Potem zmniejszamy liczbę otworów, co się dzieje z fazą? Pojawia się na jednej z pozostałych krawędzi części, niekoniecznie w którymś z otworów. Ten problem powinien już niedługo być przeszłością.


update on FreeCAD + OpenFOAM fluid dynamic computation - pierwsze kroki w kierunku integracji solwera OpenFOAM i symulacji przepływu płynów.

niedziela, 24 lipca 2016

Emulator Dolphin, port vkQuake i emulator RetroArch na Vulkanie

Po The Talos Principle (starszy post) i Docie 2 pojawiły się kolejne projekty korzystające z Vulkana na Linuksie:

 

Dolphin

Zaledwie miesiąc po pierwotnym ogłoszeniu backend wykorzystujący Vulkana stał się kompletny pod względem funkcjonalności.  Nie jest on jeszcze całkowicie dopracowany, ale już może imponować stabilnością, niewielką liczbą błędów czy wydajnością. Ta wg wczesnych testów dorównuje a nawet przewyższa wydajność D3D12 oraz starszych API (OpenGL, D3D11).

W chwili pisania tego postu backend znajduje się jeszcze w trakcie przeglądu i nie został włączony do głównej gałęzi projektu. Można go pobrać i skompilować bezpośrednio z repozytorium dewelopera:
git clone https://github.com/stenzek/dolphin
cd dolphin
git checkout vulkan-pr
mkdir build
cd build
cmake ..
make
sudo make install 
Zależności są dość standardowe, warto tylko zwrócić uwagę na biblioteki libudev i libevdev, które konieczne są do obsługi gamepadów.

Nvidia ma w tej chwili dość paskudny błąd uniemożliwiający skalowanie okien, można go obejść ustawiając tryb pełnoekranowy i natywną rozdzielczość ekranu.


vkQuake

vkQuake to port oryginalnego Quake'a (a właściwie QuakeSpasm) na Vulkana wykonany przez samego Axela Gneitinga. Axel (obecnie programista id Software, wcześniej Crytek) jest też człowiekiem odpowiedzialnym za spektakularny (wrócę do tego pod koniec postu) port Dooma (2016) na Vulkana.

Pobranie i kompilacja są proste:
git clone https://github.com/Novum/vkQuake
cd vkQuake/Quake
make USE_SDL2=1
W przypadku vkQuake należy zatroszczyć się o obecność deweloperskich wersji bibliotek libogg, libvorbis i libmad odpowiadających za dekodowanie muzyki. No i oczywiście potrzebne jest SDL, jak widać powyżej, proponuję kompilację z SDL2.

W wyniku procesu powstaje pojedynczy plik wykonywalny quakespasm, który należy umieścić w jednym katalogu z katalogiem id1 zawierającym pliki pak0.pak i pak1.pak. Uwaga: wersja steamowa Quake ma pliki PAK0.PAK i PAK1.PAK z którymi vkQuake się nie uruchomi. Jest wrażliwy na wielkość znaków i należy zmienić wielkie na małe litery.

Z podobnego powodu jak w przypadku Dolphina, warto już przy starcie uruchomić tryb pełnoekranowy:
./quakespasm -fullscreen -width 1366 -height 768 
Po chwili powinien ukazać się znajomy widok.

 

RetroArch paraLLEl

RetroArch jest frontendem dla wielu emulatorów (nazywanych tutaj rdzeniami) zbudowanych wokół libretro. paraLLEl to jeden z tych rdzeni, zajmuje się on emulacją Nintendo 64, tylko w odróżnieniu od Mupen64plus używa do renderingu API Vulkan.

Kompilację należy przeprowadzić zgodnie z instrukcjami zawartymi na stronie projektu. Domyślnie budowane są wszystkie rdzenie, ale ten krok można pominąć, bo paraLLEl i tak trzeba ściągnąć osobno.
 
W trakcie procesu trafiłem na ostrzeżenie:
Checking function vkCreateInstance in -lvulkan ... yes
Warning: glslang submodule not loaded, can't use Vulkan.
To fix, use:  git submodule init && git submodule update
By to naprawić wystarczyło skorzystać z powyższej wskazówki:
cd retroarch/deps/glslang/
git submodule init && git submodule update
cd ../../..
./retroarch-build.sh
Pozostaje teraz ściągnąć potrzebny rdzeń przez menu Online Updater->Core Updater->parallel_libretro.so.zip


Uwaga: RetroArch do poruszania się po menu wykorzystuje strzałki i klawisze X oraz Z (Enter nic nie robi).
Ostatecznie trzeba też zmienić sterownik Settings->Driver na vulkan i dopiero teraz załadować rdzeń Load Core.


Niestety na tym etapie RetroArch na mojej maszynie przestaje reagować. No, ale może będziesz miał więcej szczęścia.

Dwa grosze o Doomie na Vulkanie

id Software opuszczone przez Carmacka i kilku innych kluczowych programistów (m.in.: J.M.P. van Waveren, Gloria Kennickell) zmuszone zostało do wyssania ludzi z podupadającego studia Crytek. Miejsce Johna zajął Tiago Sousa, który od samego początku stał za rozwojem CryEngine. Odpowiedzialnym za optymalizację id Tech 6 i implementację obsługi Vulkana jest Axel Gneiting.  Opinię Gneitinga o Vulkanie i Direct3D12 możesz przeczytać w artykule id Software Dev Puzzled By Devs Choosing DX12 Over Vulkan, Claims Xbox One DX12 Is Different Than PC ‘Don’t buy all Microsoft propaganda.’

Efekty pracy Axela są doskonałe. Starsze Nvidie są porównywalne na Vulkanie do OpenGL, Nvidia Pascal jest kilka procent szybsza, a AMD Radeon zyskuje od kilkudziesięciu do nawet ponad 100%.

Imponujące osiągi id Tech 6 nie są przypadkiem, korzysta on z funkcji, które nie zostały jeszcze zaimplementowane ani w Source 2 ani w Serious Engine 4. Jest m.in.: pierwszym silnikiem, który korzysta z Shader Intrisic Functions - film AMD nieco rozjaśniający sytuację.

Niestety, pomimo, że Wine potrafi uruchamiać windowsowe aplikacje oparte o Vulkana, to nie zadziała w przypadku Dooma. Tutaj prawdopodobnie winny jest DRM Denuvo. Pozostaje mieć nadzieję, że id wróci do tradycji wydawania łatek usuwających DRM, bo na linuksową wersję nie liczę...

Dwa grosze o Androidzie, Samsungu i Vulkanie

Ekipa Johna Carmacka po opuszczeniu id utworzyła Oculus VR Dallas. Jako oddział Oculusa odpowiedzialny za Gear VR, pośrednio pracują oni dla Samsunga. Być może to właśnie przez ten projekt Galaxy S7 miał być pierwszym telefonem z obsługą Vulkana. Exynos 8890 potrafi korzystać do 8 rdzeni jednocześnie, co wraz z wielowątkową naturą Vulkana może pozwolić uzyskać wyższą wydajność, ograniczyć zużycie energii i opóźnienia w porównaniu do OpenGL ES.

Niestety, do tej pory żadna wersja S7 nie dostała aktualizacji z obsługą nowego API. Jednocześnie mamy zapowiedziane 3 gry oparte o Vulkana no i oczywiście porty RetroArch i Dolphina. Czekam.