Kaş dilimizdə çoxlu söz olaydı

Azərbaycan dilinin texniki terminologiya cəhətdən çox kasıb olduğu sirr deyil. Bu problemlə tez-tez qarşılaşdığım üçün, belə qənaətə gəldim ki, terminlər qarşıma çıxdıqca bu postda toplamağa çalışım. Beləcə öz işimi də qismən asanlaşdırmış olaram.

Bloq oyun istehsalatı mövzulu olduğuna görə terminlər də daha çox bu sahənin fərqli aspektlərini əhatə edəcək. Mümkün olduqca dolğun məlumat verməyə çalışsam da, xəta gördükcə məlumat verməyinizi xahiş edirəm.

Müstəqil Developer

Müstəqil developer (indie dev – independent developer) böyük istehsalat büdcəsi olmadan oyun/film istehsalıyla məşğul olan, heç kəsdən asılılığı olmayan fərd və ya studiyalara verilən addır. Kompleksliyindən asılı olaraq hazırladıqları layihələr bir neçə saatdan (məsələn, hansısa həftə sonu yığışıb oyun düzəltmək) bir neçə ilə qədər vaxt ala bilər.

Görüş Piramidası

Qaynaq: Wikipedia

3D kompyuter qrafikasında görüş piramidası (viewing frustum) izləyicinin ekranda gördüyü fəza kəsiminə deyilir. O bir növ xəyali kameranın görüş sahəsini ifadə edir. Bu fəza kəsimindən çöldə qalan cismlər görsənməyəcəkləri səbəbilə bir çox hesablamalarda (məs. işığın səthdən əks olunma hesabları xaric) nəzərə alınmır və buna görüş piramidası ayırması (viewing frustum culling) adı verilir.

Unity daxilində görüş piramidası 3D kamera üçün Field of view (kameranın y oxundakı əhatə etdiyi dərəcə miqdarı) və Clipping planes (yaxın və uzaqdakı kəsik piramidanı əmələ gətirən müstəvilər) vasitəsilə təyin edilir.

Okklyuziv Ayırma

Kompyuter qrafikasında okklyuziv ayırma (occlusion culling) digər cismlərin arxasında qalan cismlərin render prosesində nəzərə alınmamasına deyilir. Bu iri səhnələrin canlandırılmasında ən çox istifadə edilən metodlardandır. Oyunlarda okklyuziv ayırma oyunçunun görməyəcəyi cismlərin render edilməməsini təmin edir, beləcə bu resurslar başqa məqsədlər üçün istifadə edilə bilir. Əks halda eyni pikselin rəngi bir neçə dəfə təyin edilir, buna da overdraw deyilir.

Unity-də bu parametrləri idarə etmək üçün Occlusion Culling panelini və (statik olmayan obyektlər üçün) Occlusion Area komponentini işlədə bilərsiniz.

Atmosfer Okklyuziyası

Ambient Occlusion Painting Tutorial by Ardinaryas
Qaynaq: Deviant Art

3D kompyuter qrafikasında atmosfer okklyuziyası (ambient occlusion) fotonların daha az miqdarının çata biləcəyi cism hissələrinin tündləşdirilməsinə verilən addır.

Şəkildə göstərilmiş AO atmosfer okklyuziyasını göstərir.

Shader

İlk başlarda sırf kölgələndirmə üçün istifadə edilsə də (adının verdiyi hiss də budur), shader hal-hazırda fərqli qrafik funskialar üçün istifadə edilən proqramlardır. Shader-lar əksərən GPU-nu (Graphics Processing Unit) istifadə edərək fərqli qrafik effektlər əldə etməyə yarayır.

Qaynaq: Unity

Unity-də shader ortaya çıxartmağın bir neçə metodu var:

  1. Surface shader: İşığın təsiri altında dəyişən shader yazmaq istəyirsinizsə, yeganə seçimdir. Əgər bu faktorun sizin üçün heç bir əhəmiyyəti yoxdursa, digər variantlara üstünlük verməlisiniz, çünki daha kompakt olsa da, surface shader yazmaq digər variantlardan əsaslı dərəcədə fərqlidir. Surface shader-lar Cg/HLSL istifadə edərək yazılır.
  2. Vertex Fragment shader: Daha uzun kod yazılmasını tələb edir (çünki Surface shader-i Unity özü vertex və fragment shader-lara çevirir). Əksər yazacağınız shader-lər geometriya və piksellər üçün fərqli əməliyyatların icrasını tələb edən göstərişlərdən ibarət olacaq (məsələn, pikselin y koordinatı artdıqca şəffaflığını artır). Vertex və Fragment shader-lar yenə də Cg/HLSL istifadə edərək yazılır.
  3. Shader Graph: İstədiyiniz effekti əldə etmək üçün vizual redaktor istifadə edirsiniz, heç bir kod yazmağınıza ehtiyac qalmır. Sizin hazırladığınız xüsusiyyətlərə uyğun olaraq Unity özü shader kodunu hazırlayır.

Level of Detail

3D Kompyuter qrafikasında əsas 2 növ shader var (Unity daxilində işığın təsiri altında dəyişməyi istədiyiniz halda istifadə edə biləcəyiniz Surface shader istisna olmaqla):

  1. Vertex shader: 3D obyekti təyin edən hər bir nöqtə (vertex) üçün hesablanır.
  2. Pixel/Fragment shader: Alınan qrafikanın hər nöqtəsi/pikseli (pixel) üçün hesablanır.
LOD Group inspector
Qaynaq: Unity manual

Normal şərtlər altında obyekt kameradan uzaqlaşdıqca ekranda tutduğu piksel sayı azalır, amma həmin obyektin 3D modelindəki nöqtə sayı eyni miqdarda qaldığı üçün render prosesinin yükü dəyişmir. Optimizasiya məqsədilə obyektin kameradan uzaqlaşdıqca daha primitiv model istifadə etməsini təmin edə bilərsiniz. Buna Level of Detail (LOD) optimizasiyası deyilir.

Unity motorunda LOD Group komponenti vasitəsilə keçidləri və hansı uzaqlıqda obyektin tamamən göstərilməməsi (culling) gərəkdiyini təyin edə bilərsiniz. Fade Mode modellər arasında keçid edərkən hansı metodun istifadə edildiyini təyin etməyə kömək edir.

Fill rate

Fill rate qrafik kartın/çipsetin hər saniyədə ekranda render edə bildiyi piksel sayını göstərir və ekran kartlarının özəlliklərinə baxsanız ROP (Raster Output Units) və tezliyinin hasilinə bərabər olur. MegaPixel/saniyə və ya GigaPixels/second-la ölçülür.

Nümunə üçün, PS4 saniyədə 25.6 GigaPixel render etməyi bacarır. Saniyədə 60 kadr olduğunu düşünsək, bu hər kadrda 427 milyon pikselə uyğun gəlir. 4k keyfiyyətdə olan ekranda (3840×2160) təxminən 8.3 milyon piksel var. Sadəcə unutmamaq lazımdır ki, overdraw səbəbilə eyni piksel bir neçə dəfə boyana bilər, qrafikanın keyfiyyətini artırmaq üçün qrafik kart bir çox filterlər tətbiq etməlidir, shader-lər (xüsusən də şəffaflıq və refraksiya kimi xüsusiyyətlər daşıyanlar) prosesi daha kompleksləşdirə bilər, ayrıca kənarda dayanan obyektlərin səhnəyə təsirini nəzərə almaq üçün əlavə sahə də render olunmalıdır.

Məsləhət: Ekranın piksel ölçüsü (resolution) nə qədər böyük olarsa, standard oynama sürəti (təxminən 60 fps) təmin etmək GPU üçün daha çətin olur. Əgər oyununuzda performans problemləri yaşayırsınızsa, bunun səbəbinin qrafika olmağını test etməyin çox sadə yolu var (Profiler-dən çox daha sadə). Sadəcə oyun pəncərəsinin ölçüsünü əsaslı dərəcədə dəyişin və FPS-ə necə təsir etdiyinə baxın. Əgər ciddi dəyişiklik görmürsünüzsə, digər oyun aspektlərinə göz atmağınız məsləhətdir.

Aydınlanma Xəritəsi

File:Lightmapped Scene with Lightmap.png
Sağ tərəfdə göstərilən səhnə üçün aydınlanma xəritəsini (lightmap) görürsünüz. Qaynaq: Wikipedia

3D kompyuter qrafikasında aydınlanma xəritəsi (lightmap) səhnənin aydınlanmasını təyin etmək üçün istifadə edilən metoddur. Rendering əsnasında işıq qaynaqlarına əsasən səhnənin aydınlanmasını təyin etmək əvəzinə, statik obyektlər üçün əvvəlcədən aydınlanma teksturası hazırlanıb (baking) həmin səthlərin teksturasına əlavə edilir. Beləcə ciddi ölçüdə resurslara qənaət etmək mümkündür.

Author

I am founder of DynamicBox Studio, mobile oriented game development studio located in Baku, Azerbaijan. Having spent most of my professional life as Project Engineer, I have utmost interest for data science and game development.