This commit is contained in:
Oleg Petruny 2025-05-26 12:34:32 +02:00
parent e2688674de
commit c521f93c6d

View File

@ -46,7 +46,7 @@ Byl navržen komplexní systém pro správu každého interakčního objektu a k
\newpage
\paragraph{AInteractableActivator} Aktivátory jsou komponenty s určitými mechanismy detekce objektů. Instance hráče automaticky vytváří pro sebe jednu podinstanci každého aktivátoru registrovaného v enginu. Libovolný objekt taky může obsahovat libovolný aktivator. Práce obsahuje klasický způsob detekce objektů pomoci raytracingu a dereference objektu v případě nárazu paprsku.
Navíc je k dispozici detekce objektů v zorném poli hráče. Ta funguje na zpomaleném snímání určité stencil vrstvy\footnote{Stencil Buffer sousedí s Z-Bufferem a má pouze jeden osmi bitový celočíselný kanál. Slouží především jako pomocník při tvorbě specifických renderovacích technik a efektů. Nejběžnější použití je renderování obrysů objektů, označení objektů pro následné zpracování v nějaké render pipeline a tvorba portálů.} s vynecháním většiny render pipline a v malém rozlišení. Zachycený snímek obsahuje pouze viditelné hráčem interakční objekty v podobě masky. Následně je maska v grafickém vlákně zpracovaná pomocí algoritmu vyhledávání komponent z počítačového vidění, kterou poskytuje kníhovna OpenCV. Nakonec do středu nalezených komponent se promítne paprsek a zachytí objekty (viz. \Cref{fig:InteractableScreenCapture}). Původně bylo předpokládáno využití HLSL compute shaderu\footnote{High-Level Shader Language je proprietární shader jazyk používaný v DirectX.} pro vyhledání komponent v textuře, ale z časových důvodu jsem nedodělal přenos dat mezi CPU a GPU, jelikož dohledat dokumentaci o použití shaderu je dost náročné. Proto aktuální vyhledávání komponent je spouštěno na procesoru a v renderovacím vlákně na moderních zařízeních trvá pět až deset milisekund. V praxi se takový úkol řeší náhodným promítáním velkého množství paprsků nebo velkým hitboxem napodobující tvar frustrumu kamery. Taková řešení jsou sice rychlá na implementaci, ale začínají být nekvalitní až nepoužitelné pro trochu větší vzdálenosti než ,,pár metrů''. Navíc zahrnují časté počítání nárazů na velké množství objektů, čímž výkonnostně nejsou o nic lepší implementované metody v této práci.
Navíc je k dispozici detekce objektů v zorném poli hráče. Ta funguje na zpomaleném snímání určité stencil vrstvy\footnote{Stencil Buffer sousedí s Z-Bufferem a má pouze jeden osmi bitový celočíselný kanál. Slouží především jako pomocník při tvorbě specifických renderovacích technik a efektů. Nejběžnější použití je renderování obrysů objektů, označení objektů pro následné zpracování v nějaké render pipeline a tvorba portálů.} s vynecháním většiny render pipline a v malém rozlišení. Zachycený snímek obsahuje pouze viditelné hráčem interakční objekty v podobě masky. Následně je maska v grafickém vlákně zpracovaná pomocí algoritmu vyhledávání komponent z počítačového vidění, kterou poskytuje kníhovna OpenCV. Nakonec do středu nalezených komponent se promítne paprsek a zachytí objekty (viz. \Cref{fig:InteractableScreenCapture}). Původně bylo předpokládáno využití HLSL compute shaderu\footnote{High-Level Shader Language je proprietární shader jazyk používaný v DirectX.} pro vyhledání komponent v textuře, ale z časových důvodu jsem nedodělal přenos dat mezi CPU a GPU, jelikož dohledat dokumentaci o použití shaderu je dost náročné. Proto aktuální vyhledávání komponent je spouštěno na procesoru a v renderovacím vlákně na moderních zařízeních trvá pět až deset milisekund. V praxi se takový úkol řeší náhodným promítáním velkého množství paprsků nebo velkým hitboxem napodobující tvar frustrumu kamery. Taková řešení jsou sice rychlá na implementaci, ale začínají být nekvalitní až nepoužitelné pro trochu větší vzdálenosti než ,,pár metrů''. Navíc zahrnují časté počítání nárazů na velké množství objektů, čímž výkonnostně nejsou o nic lepší implementované metody v této práci.
\begin{figure}
\centering