Snake5's Blog

Kāda spēļu veidotāja blogs…

Monthly Archives: aprīlis 2010

Kā tas gadās…

Es gribēju ieslēgt IE (un blogu), bet tā vietā – MSVC. Kā tas gadās? 😀

Bet nu labi, ne par to ir runa.

Drīzāk par šo:

Čakarējos ap šeideri, bet rezultātā dabūju diezgan interesantu skatu. Gan ietves apgaismojums, gan māju sienas.. pastiprina rīta sajūtu. Būs laikam vairāk parametri virziengaismai jāiedod. Pagaidām šo regulēt nevarēja, līdz ar ko gaisma bija gandrīz perpendikulāra fona sienām. Bet šādi arī dažreiz vajag. Svarīgi ir zināt – kad. 😛 Daudzas spēles ar bump/normal-mapēm ir pārspīlējušas un labu galu neieraudzīja. Efekts bija šausmīgs. Šeit jau arī īstenībā derētu vai nu nedaudz samazināt bumpmapes stiprumu, vai viņu pārveidot. Bumpmapei nevajadzētu glabāt tās detaļas, kuras jau ir diffuse mapē. Vismaz kaut kā to efektu vajag samazināt. Domāšu – kā…

Galvenais – lai ir jautri…

Šodien sanāca pastrādāt pie daudz savādāka projekta. Viena no lietām, ko atcerējos – svarīgi ir, lai ir jautri.

Nedaudz par projektu..
– “Radošās skolas” pasākumam veidots video. Es varēju iejusties tehnikas operatora / filmas kopā licēja (iztiksim bez sūdzībām, bija 30 minūtes laika darbam :D) / ideju metēja / komponista un nedaudz arī režisora lomā (privātdetektīva fragmentam – operators/režisors). Daudz stāstīt negribu, jo visu pārējo var pateikt video:

Pateicoties šim darbam, atcerējos ļoti daudz. Arī to, ka jautrība ir svarīgs process spēles veidošanā. Mūsdienu spēļu studijas aizmirst, ka visefektīvākais līdzeklis, lai radītu jautrību… ir jautrība. Varbūt izklausās smieklīgi vai pārāk vienkārši, bet tāda ir patiesība.

Spēļu vērtētāji kļuvuši bezjēdzīgi

Apskatījos vērtējumus stipri viduvējajai Just Cause 2 spēlei.. protams, nepatīkams pārsteigums, ieraugot, ka atkal tiek dzīts bullshits un likti nepareizi vērtējumi. Spēle ir ļoti viduvēja. Tās grafika kopskatā varētu būt normāla, bet detalizācija ir šausmīga = kopumā viduvēja. Tās stāsts ir šausmīgs, bet beigas labas – atkal viduvēji izveidots. Tas pats ar skaņu, ātrdarbību, un protams – spēles procesu. Ir momenti, kad ir interesanti, kad var izgudrot taktiku, bet pārsvarā viss spēles process ir pirmās iespējas ķeršana un pogu turēšana. Tas varētu būt “mindless fun”, ja vien nebūtu tik garlaicīgi izveidots, bez interesantām misijām, tik ātri apnīkošs. Tātad – atkal viduvējs.

Tomēr redzu es vērtējumus no 70 līdz 100. Un te nu jādomā – par ko? Vērtētājus pārsteidza daži efekti (ar katru spēli arvien vairāk) un viņi šī pārsteiguma dēļ liek tos vērtējumus? Negribētos ticēt.. Vērtētājus uzpērk? Reāls variants. Izskatās, ka dzīšanās pēc naudas ir aizmiglojusi visiem prātus un tagad tās dēļ viss kļūst bezjēdzīgs – laba mūzika eksistē tikai tad, ja par to samaksā kārtīgi (spēļu mūzika ir laikam vienīgā, kura vēl turas līmenī un spēj būt daudzveidīga), labas spēles eksistē tikai tad, ja izstrādātāji nedzenas pēc naudas, ar labām filmām apmēram tas pats, naudas trūkuma dēļ gan veidotāji visur pamanās muļķības iestrādāt.

Vēl viens variants būtu mēģinājums pārliecināt cilvēkus, ka spēles visu laiku tikai uzlabojas. Bet tas tā galīgi nav. Ja agrāk varējām runāt par garantētiem n labiem produktiem, tad tagad visi ir aphackoti un es nevaru nosaukt nevienu tādu no pēdējiem gadiem, kuram man būtu vismaz 90% patikusi. Ir dažas tuvu tikušas, bet ne tālāk. Splinter Cell no PC versijām visi ir patikuši, tomēr tagad jaunais Conviction izskatās stipri pārveidots tā, lai patiktu vairākumam… Ir gan viņiem izdevies diezgan labi izveidot R6:Vegas (2) – neizmetot smadzenes no vienādojuma un ieliekot linearitātes radītu dažādību. Par Splinter Cell: Conviction neesmu tik labās domās skatoties uz vērtējumiem – tie ir gandrīz identiski Just Cause 2. Un tā bija stipri viduvēja spēle…

Lielā un sarežģītā ideja.

Varbūt kāds te jau lasot bija aizdomājies – kāpēc es neesmu apskatījis single-pass lighting variantu. Es apskatījos, bet ne līdz galam. Tā ir liela un sarežģīta ideja. Prasītu pamatīgu sistēmas pārbūvi. Bet visticamāk būtu tā darba vērta. Tā nu man šķiet, ka es varētu pamēģināt to implementēt. Sliktākam jau rezultātam nevajadzētu būt. Bet sarežģīti tas viss ir. Pirms sarežģītu ideju veidošanas palīdz visu ideju un plānu izlikšana uz (virtuālā) papīra.

Plānoju implementēt single-pass apgaismojumu vismaz ar 4 gaismām. Ja būs par maz, vajadzēs domāt par 8. Vai par manuālu objektu dalīšanu līmeņu redaktorā, vai par citiem trikiem.. Pagaidām – 4 gaismas. 8 tekstūras tomēr lietot es varu bez īpašām problēmām (tekstūra/normālmape/lightmape/normāl-lightmape/4 shadowmapes).

Nepieciešams iekļauties ps_2_0 instrukciju skaitā, pat ja tas nozīmē nepieciešamību katram gaismu skaitam specializētu šeideri veidot.

Tā kā man shadowmapes glabās tikai 1 float’a informāciju (varētu jau būt tikai 1 bits, bet jādomā arī par blur’ošanu, un viena bita apstrāde nav nekas ātrs vai nepieciešams), jādomā būs par gaismu grupēšanu. Jebkurā gadījumā tas ir izdevīgi – 4x retāk mainīt rendertarget’u, gaismas zīmējot, ir laba optimizācija. Un blur’ošana 4x ātrāk notiek.

Vajadzēs izvēlēties gaismas pēc tā, vai tās ietekmē kameras laukumu, tad iedot tām shadowmapes. Gaismas ar lielāko rādiusu dabū lielākas shadowmapes, gaismas ar mazāko – mazākas. Ja shadowmape ar izmēru, kurš der gaismai ir aizpildīta, tad vispirms tiek meklēta par vienu izmēru lielāka shadowmape, tad par vienu mazāka, tad par 2 lielāka, tad par 2 mazāka utt. (plānoju kopā lietot 4).

Pagaidām laikam viss, ko biju vēlējies pierakstīt. Ja vēl kaut ko atcerēšos, tad labošu.

Līmeņu dizains – novērojumi

Nedaudz tālāk paveidoju līmeni.

Pirms dažām dienām biju sācis vākt screenshot’us no dažādām spēlēm, kuru žanri prasīja labi detalizētus līmeņus. Nedaudz pastāstīšu par to, ko interesantu ieraudzīju šo spēļu līmeņu dizainā. Vairāk meklēju, domājot par 2D sidescroller’iem un to, ka sidescrolleros ne grīdu, ne griestu virsmas nav redzamas. Vēl arī negarantēju, ka šeit esošā informācija būs sakarīgi sakārtota – es to nekārtošu vispār, vismaz pagaidām – tikai pierakstīšu novērojumus.

Iekštelpās vienmēr attēloti sienu savienojumi ar grīdu. Bieži līmeņa izskatu spēj uzlabot pareizi objektu savienojumi, bet nemaz tik bieži tie netiek lietoti, lai taupītu laiku (to uzturēšana līmenim, kurš atrodas izstrādē, ir sarežģīta). Lai izveidotu savienojumus, tiek blendotas vairākas tekstūras. Kur to darīt ir neērti vai tas nedod pietiekamu efektu, tiek lietoti decal’i. Bieži var iztikt ar neblendotiem decal’iem – bojājumiem uz sienām, uzrakstiem, “cieto” objektu minimāli detalizētajiem attēlojumiem. Ja tomēr nevar, tad jālieto alphablendotie decal’i. Bieži spēlēm tiek izveidoti apmēram 100 universāli objekti, kuri ieliekami dažādos līmeņos. Atmosfēras radīšanai bieži lieto spraitus (lai gan pēdējā laikā tā ir nepopulāra detalizācijas metode). Līmeņus (kā jau visu uz pasaules) labi atdzīvina kustīgi objekti. Līmeņa piederību kādai reālai zonai vairāk parāda sīkie objekti, piemēram, zīmes vai darbarīki, nevis lielie objekti. Bieži vien ir iespējams apvienot vairākas dinamiskas gaismas vienā, kā to daudzās vietās darīja Splinter Cell: Chaos Theory. Bumpmapes izcilas grafikas sasniegšanai nedrīkst ierobežoties uz sīkās detalizācijas attēlošanu un tām bieži jāiekļauj arī lielāka mēroga virsmas deformācija. Lai apgaismojums izskatītos interesantāk, bieži tiek pielietotas neredzamās gaismas, kuras parasti lieto, lai viltotu radiosity un līdzīgus gaismas atstarošanās/caurlaišanas efektus. Lai gan no pirmā skata šķiet, ka Splinter Cell: Chaos Theory lieto tikai parastās dinamiskās gaismas, tas dažās vietās galīgi tā nav. scct6.jpg attēls parāda kreisajā pusē – kā ir lietota lightmape, lai uzlabotu gaismas radīto efektu. No cita skatu leņķa to tik vienkārši nevar ieraudzīt. Atmosfēru spēj labi uzlabot arī miglas gaismas (ne tikai volume light, bet arī dažādi spraiti, kuri novilto šādu efektu). Kur iespējams, jācenšas sabīdīt kopā tekstūru līnijas ar 3d objektu līnijām, vai vismaz aizsegt “lūzuma” vietas – nepareizi sabīdītas tekstūras rada iespaidu, ka virsmas nav savienotas.

P.S. Es pat negribēju skatīties uz daudzu moderno spēļu (it īpaši to, kurās 3D pasaule sastāv tikai no universāliem 3D objektiem) līmeņu dizainu – tām spēlēm tas 90% gadījumu ir šausmīgi garlaicīgs un sahackots, un visos veidos nenostrādāts u.tml. utjp. 😛

Vai datorspēles ir vainīgas? (un daži psihiatru murgi)

Šodien uzraku šo: http://www.tvnet.lv/sievietem/maminam/327914-ka_datorspeles_ietekme_bernus_un_pusaudzus

Protams, es neesmu mērķauditorija.. 😀 ..bet domāju, ka būtu diezgan svarīgi izmest dažas domas par tēmu.

Sākumā viss izskatās diezgan ļauni.. datorspēles rada tikai stresu, tikai bojā veselību, tikai rodas atkarība utt. Varam piekrist? Es teiktu, ka tas ir stipri aprobežots skatupunkts, un, līdz ar to, arī viedoklis. Kāpēc vispār cilvēki tik daudz laika pavada pie datorspēlēm? Tāpēc, ka viņiem nav, ko darīt. Tāpēc, ka nav nekā labāka, ko darīt. Te nu jāvēršas pie vecākiem, kuriem ir problēmas ar šādiem bērniem un jāprasa, vai ir bērni apgādāti ar tik labām izklaidēm, ka jebkurš shooteris, piemēram CS/jebkurš MMORPG/jebkura cita ļoti bieži spēlēta spēle izskatās pēc suņa sūda? Atbildi zinu jau es pats – vecākiem nav laika. Vienīgais, ko viņi var dot bērniem, ir savas problēmas. Tā nu redzam, ka šis psihoterapeits vai kasviņštur ir visticamāk arī slikts tēvs savam bērnam. Vai arī vispār nav viņam bērnu. Vienīgie izskaidrojumi šādu murgu dzīšanai. Vēl jau ir otra iespēja – apgādāt bērnu ar spēlēm, kuras tiešām ir māksla. Nebūs tavs mīļākais GTA vai CS, bet, piemēram, Metal Gear Solid (kurš, starp citu, ir veidots tā, lai nemācītu agresiju – pretinieki netiek attēloti kā tuvi realitātei, kaut arī iespējas ar tiem darboties ir interesantas un daudzveidīgas).

OK, ja mēs palasām tālāk, redzam tonnu ar parastām guidebook gudrībām. Nav nekas īpaši nepareizs, bet neizskatās pēc pieredzes radīta viedokļa. Tātad nekas svarīgs, varam lasīt tālāk.

Un netālu no beigām sākas extra-sviests. Psihiatrs iesaka reālistiskas spēles (jeb tādas, kuras var vieglāk savienot ar realitāti, pārnesot spēlē apgūtos darbības principus un domāšanas veidu). Šis ir tas punkts, kurš izcili parāda, ka šis psihiatrs ir tikai grāmatiņas palasījis, bez jebkādām praktiskām zināšanām, savācis viedokli no kaimiņu Jura un ārzemju Džona F. un tagad liek kopā. Pat negribas īpaši sīki ņemties ap vārdiem, būtu jābūt visam skaidram no pirmās lasīšanas reizes. Pietam – šis ieteikums aizņem tikai vienu teikumu. Tā arī nav pamatots, kāpēc tas ir labāk.

Bet vai var būt kaut kas trakāks par jau iepriekšminētajām muļķībām? Kā nu ne – Ferma! To mūsu ģeniālais psihiatrs iesaka spēlēt visiem bērniem. Vai nav jauka reklāma? Nešaubos, ka ir – tiem, kas pirmajā brīdī neuztver, cik kaitīga ir spēle.

Tagad varbūt nedaudz pastāstīšu, cik kaitīga tā ir:

– Spēlējot kādam var pazust laika izjūta diezgan ātri, jo sasniegumi rodas diezgan ātri un nevar taču pārtraukt! (sarkasms teikuma otrajā pusē) Vēl šo domu paturpinot – zaudējumi rodas tad, kad sava ferma netiek sargāta. Tas liek bieži atgriezties visiem tiem, kuriem interesē neeksistējošie sasniegumi (kuri diemžēl pārspēj sasniegumus mācībās).

– Sasniegumi, kuri spēlē tiek iegūti, ir vēl neīstāki par dabiski lidojošām cūkām ar spārniem. Tiek radīta ilūzija, ka kaut kas tiek lielā ātrumā sasniegts, radot jau iepriekš rakstā minēto nepamatoti lielo pašapziņu no saviem sasniegumiem. Kad īstajā dzīvē pierādīsies pretējais, nervu bojājumi garantēti. Šīs spēles iespēju dēļ sasniegumi liekas vēl īstāki par jebkuras vienspēlētāja spēles sasniegumiem (kuri tādās spēlēs paliek uz vietas un nepārnesas uz īsto dzīvi).

– Par šiem pašiem pseidoreālajiem sasniegumiem runājot – tie bojā dzīvi gan pašam gan citiem, ja jaunais zemnieks izdomā palielīties ar saviem sasniegumiem. Nevienam nepatīk baigie krāni (..un kurš gan spēj atturēties no lielīšanās, kad tik lieli sasniegumi ir panākti “paša spēkiem”?). Tālāk gan jau paši variet saprast, kas var notikt starp jaunajiem censoņiem.

Ir jau arī dažas labas lietas, piemēram tas, ka nevajag spēli saglabāt (ja ļoti vajag, var iziet jebkurā laikā un progress paliks), tomēr sliktās īpašības ir daudz lielākas un sliktākas.

P.S. Atceros, ka savā laikā nobiedēju vecākus, spēlējot Dead or Alive sarkans kā tomāts no dusmām uz slikti strādājošo vadības sistēmu, kuras dēļ nevarēju izdarīt gandrīz neko no tā, ko gribēju. Tāpēc vēl viens padoms no manis – vajag mācēt saprast, kad spēle ir tā, kura kaitina, nevis spēlētāja prasmju trūkums. (Nespēja kaut ko izdarīt sevis dēļ parasti neizraisīs superātras dusmas, kā tas notiek tad, ja spēles kļūdas dēļ spēlētājam jādara (vēlreiz) tas, ko viņš negrib.) Šādas spēles ir līdz galam nenostrādātas, un tāpēc nebūtu vēlams tādas dot bērniem.. pat pusaudžiem ne. 😛

Līmeņu dizaina tests

Nesen piemetu vēl dažas tekstūras (šausmīgi garlaicīgs darbs, bet neiet nemaz tik lēni, tomēr arī nevarētu teikt, ka ātri..), un notestēju to līmeņu dizaina stilu, par kuru pēdējā laikā domāju, tāpēc interesētu atsauksmes, ieteikumi utt.

Vēl gan jau pielikšu kustīgo fonu, kurš tiek zīmēts tieši tāpat, kā līmenis, bet citādi viss būs apmēram tādā pašā stilā veidots (decal’us arī kaut kur varētu pielikt, bet pagaidām man to nav tik daudz). Cenšos mācīties no labākajiem.

EDIT: Palaboju rakstā kādu vārdu, kuru nepareizi ierakstīju.. es te pusmiegā visu nedēļu velkos.. 😀

Starp citu, es vakar apstrādāju to sarakstu ar spēlēm.. http://dev.gamez.lv/viewtopic.php?t=1910&start=0 ..pamācījos dažas līmeņu dizaina lietas no screenshot’iem, ko varēju savākt. Vēlreiz paldies visiem palīgiem! Neizdevās gan pilnīgi visu izmantot (nebija tik daudz laika, lai sameklētu pašas spēles, tāpēc iztiku ar screenshot’iem no tām spēlēm, kurām tos ātri varēju dabūt). Drīz gan jau nāks raksts par līmeņu dizaina trikiem, kurus iemācījos, un ielikšu te tos screenshot’us, kurus savācu.

Ir variants…

Tātad, apskatījos dažādus ne tik vecos Gunplay screenshot’us, un CoD4 screenshot’us un sapratu, ka vajag “bagātākas” tekstūras — tad ar decal’iem īpaši aizrauties nevajadzēs. Tagad pētīšu HL2 līmeņus (dabūju BSP viewer’i), skatīšos, kā tur panāca to piepildījuma efektu bez nenormāla decal’u skaita.

EDIT: Paskatījos, kā tur viss veidots.. apskatījos daudzas tekstūras arī.. izskatās, ka viņiem ir vairākas versijas vienai tekstūrai – līdzīgi kā citi profesionāli līmeņu veidotāji, viņi paņēma čupu ar tekstūrām, čupu ar bojājumu/netīrumu tekstūrām un uzblendoja otrās uz pirmajām dažādos veidos.

Man vajag to un šito..

Ietestējot trulāko apgaismojuma implementāciju, kādu vien varēju uzveidot, nonācu pie secinājumiem:

– Vajag samazināt manas prasības
– Vajag ierobežot dzini

Tur pat zirgam ir skaidrs, ka ar alphablendotiem (no CG valodas tulkojas kā – caurspīdīgiem) objektiem joki mazi. Pat ja 2 slāņus es uzzīmētu bez problēmām (1. slāņa gaismai piereizinātu 1-dest_alpha (saglabājās no pēdējā zīmētā caurspīdīgā objekta), kas ir, citiem vārdiem sakot, SrcBlend=InvDestAlpha), ar 3 slāņiem to izdarīt nesanāks. Tāpēc es vēlreiz aci uzmetu prasībām..

Un izrādās, ka…

1. alphablend’otus daudzstūrus tik daudz man tomēr nevajag:

Ar AlphaFactor=127 nemaz nav tik viegli pamanīt tās nelielās problēmas, tomēr …

2. daudzos gadījumos var “smago alphablendu” (kuram vajag uzrenderēt gaismas) aizstāt ar alphablendotām tekstūrām bez gaismas, un ar zemu alpha vērtību pāri visai tekstūrai (<~0.5), vai dažos gadījumos vēl receptei var piemest additive blending’u (src_alpha;one), piemēram – gaismām:

Kā mēs te redzam, ir problēmas, bet tās ir viegli atrisināmas – gaismu spraitiem lietojam additive blending’u, logiem pirmā slāņa alphablends ir bezmaksas, bet gaismas spraitu lejā var apstrādāt tā, lai tam būtu asas malas un alphablendings netaisītu nekādas problēmas…

Tas mūs noved pie nākošās problēmas – pikseļainas, “apgrauztas” malas. Kura nemaz nav īsti problēma, jo videokartes saprot mul_sat un mad_sat instrukcijas. alpha = saturate( alpha * 255 – alpha_factor );. Viss vienā instrukcijā. (mul_sat būs tad, ja apmierinās alpha_factor =0, bet tas visticamāk tā nebūs :P).

Nākamā problēma – sienu detalizācija. Tā kā pienākusi tāda situācija, ka apgaismotus alphablendotus decal’us lietot tik daudz nevar, tad pagaidām redzu šādus variantus:

– Ne-alphablendoti decal’i; (sienu bojājumi, uzraksti)
– Alphablendoti decali – pavisam neapgaismoti, ar mazām alpha vērtībām (+varbūt additive blending); (dūmi, gaismas stari)
– decal’us neapgaismot ar dinamiskajām gaismām; (tumšie sienu bojājumi, visi tumšie uzraksti un viss pārējais, kas tumšs)
– vairākas tekstūras vienam blokam, kuras kaut kā tiek jauktas kopā; (sarežģīts un nepārdomāts variants, visticamāk dabas “telpām” der, kur gan jau tāpat var iespiest cita veida decal’us)
– decal’iem tiem izrēķināta krāsa no centra punkta; (der tumšām telpām, gaismas stariem – krāsas pieregulēšanai)
-= vajag izdomāt veidu, kā lietot ļoti daudz decal’us, kuri saplūst ar sienu (tātad – alphablendoti, apgaismoti)
Pagaidām atbilde varētu būt deferred rendering … man nepatīk tā atbilde. Atmiņu aprij nenormālos daudzumos (1024 x 768 x 32 biti x 3 rendertarget’i => 72 MB*). Tekstūrām maz vietas paliek videokartēs ar 256 MB atmiņu. Nemaz nerunājot par 1280 x 1024 x 32 x 3, kas ir vienāds ar 120 MB…

Jādomā būs kaut kas cits.

* – diffuse tekstūra (3 x 8 biti), lightmapes tekstūru koordinātas (2 x 16 biti), normālmape + specularmape ((3 vai 4) x 8 biti). Max. 2 x 8 biti (2 kanāli) paliek brīvi, bet tas pat īsti nemaina nepieciešamību pēc šādu formātu tekstūrām.

Dienas galā…

…jāsaka, ka ar Gunplay FPS neesmu apmierināts (tā kā pats kodēju, man ir visas tiesības tādam būt :D)

Bet nu arī nebrīnos – katram caurspīdīgajam objektam tika pārrenderēts savs gaismu/ēnu komplekts. Viena no trulākajām implementācijām, kāda iespējama. 🙂

Bet nu es tikai ieliku pamatus un izmantoju iespēju refaktorēt kodu nedaudz. Padomā ir dažas labas optimizācijas:

1. Shadow mapping: Nepārrenderēju ēnas ar blokiem katru reizi – daru to tikai vienreiz, pēc tam lietoju tekstūru, lai renderētu ēnas katrai gaismai;

2. z-bufferis necaurspīdīgajiem blokiem;

3. Bloku kārtošana pa slāņiem: katram slānim savas ēnas ; viens slānis = visi objekti, kuri var tikt zīmēti kopā – nepārklājas;

–bet ar šo nepietiek, tāpēc centīšos izdomāt, kā labāk apstrādāt caurspīdīgus objektus un to pārklāšanos;