08/10/21

Revolučné inovácie pre AA hry, zastaralá rutina pre AAA odpad

Konzola Sega Saturn nedokáže voľne manipulovať koordinátmi textúr /UV mapovanie/ na objekte v reálnom čase v hardvéri jeho grafickej karty /PS1 alebo N64 to zvládne/. Existuje zopár fínt s extrémne limitovaným použitím, ale ako hovoria špičkoví kóderi, nestojí to za reč. Na PS1 a N64 je možné ľahko zrealizovať efektné efekty ako pseudo enviromentálne odrazy /viď odlesky na autách v Gran Turismo/. Na Saturne bohužiaľ nie, snáď trošku hej a to softvérovou cestou cez CPU, zožerie to však kopu pracovného času, takže sa to nedá prakticky použiť v živej hre, iba ako technická zaujímavosť niekde v menu hry ako názorne predvádza lesklé logo Sonic R vo videu v odkaze.

Ak niečo nie je možné, tak zákonite hľadáme spôsob ako to možným urobiť - ďalšie video. Ten rotujúci sonic tam beží na 50-60 fps podla TV normy s enviromentálnym mapovaním a v HW GPU, bez asistencie CPU. Tento zázrak sa dosiahol geniálne jednoduchým postupom. Saturn má HW podporu pre Gouraudovo tieňovanie /podobne ako PS1 a N64/. Ide o netextúrovací postup s podporou pre presné koordináty umiestenia farby na objekte a práve toto potrebujeme. Farebná paleta je v saturne umiestnené v špeciálnej oddelenej RAM /CRAM/. S paletami sa robia psie kusy už od čias amiga 500 /jeho copper procák je na to zvlášť navrhnutý/. Na saturne to urobíme rovnako. Použitím HW pre gouraud tieňovanie a jeho koordinátov pre farby tieto premapujeme na koordináty pre textúry. Samozrejme tu sú nejaké drakonické obmedzenia. Rozlíšenie farieb nie je dosť dobré pre rozlíšenie textúr a CRAM nie je dosť veľká pre objem potrebných textúr. Aj na to však existuje kopa postupov, ktorá vyplývajú z merita veci. Časť textúr /časť farebnej informácie textúry/, na ktoré nie je v novom systéme miesto urobíme po starom a HW umožňuje streaming nových /maličké množstvá/ dát do malej CRAM počas pohybu objektu. Konečne čas na zdrvujúcu praktickú "hernú" ukážku na saturne údajne nemožnej grafickej fičúry.

To čo tám vidíte je narýchlo upravený engine pre FPS hry na Sega Saturn s autom s enviro mapovaním, pričom tá lesklá odrazová textúrka je prebratá priamo z GT2ky pre PS1 !! Ako som povedal, tak nejde o natívnu HW podporu pre tento typ efektov ako pri PS1, kde je to úplná trivialita s nastavením UV mapovania textúr pre ľubovoľný vertex polygónu. Na saturne to robíte cez inú časť HW, ktorá na to nie je primárne určená a obmedzenia sú značné /toho času "textúra" do veľkosti 32x32 pixel, "textúrovacia" RAM do 4KB atakďalej/. Ide však o novú, doslova pár dňovú programovaciu techniku a čaká sa na ďalšiu optimalizáciu celého procesu a ďalšie praktické testy. Sledujem a doručím, aby ste sa tiež pokochali.

Nie je to po prvýkrát, čo bol herný HW použitý za iným účelom ako bolo pôvodne dizajnované. Pozná to ZX Spectrum s floating bus grafickými trikmi, Atari Falcon s audio DSP /ako geometrický procák pre Quake !!/ alebo staršie konzoly PS3-Xbox 360 s MSAA HW, ktorý zneužívali tiež na úplne iné účely. Pri PS5 to bude časom podobné a už teraz sa berie jeho RT /raytracing/ HW ako "všeobecný" modul pre akceleráciu výpočtov, matíc - pre čokoľvek čo sa nám v hre hodí. Dizajn HW PS5 ide ešte oveľa ďalej. Celé compute shader výpočetné GPU pole je zámerne urobené tak, aby ste sa mohli úplne vykašlať na definované HW limity fixnej grafickej pipelajny. Problémom ostáva časová a kapitálová pasca. Doslova nikto nemá toľko času a peňazí aby si v tejto slobode  na zelenej lúke a z nuly pre rizikové AAA-AAAA hry urobil vlastný graficky/fyzikálny/AI engine mimo všetkých zažitých, archaických, zastaralých štandardov. Takého pravé next gen middleware by zožralo mnoho rokov vývoja a raz takú dlhú dobu aj ladenie nových, prevratných herných mechaník. Hovorím o desaťročnom projekte. Uzatváram to teda ako akademický problém, zbytočné mentálne cvičenie a vraciam sa pokorne ku hernej PS1-PS2 nude v "novej" 2K-4K-8K grafike.

16 comments:

  1. fyzika na GPU z počátku taky nebyla nic jinýho, než namapování souřadnic objektu XYZ na RGB barvy na textuře, 3x float32 prostě a pak si s tím dělej v shader kodu co chceš. I ted se ty compute shaders v Unity pouštějí na GPU jako tenzory (1024,1024,1) pro milion particlu nebo (1024,1024,3) pro 3 miliony.

    ReplyDelete
    Replies
    1. chápat ty čísla jako rozměry 3D matice která se bude počítat postupně podle toho kolik jednotek ta GPU má. Teoreticky na těch číslech nezáleží dokud sedí výsledný součin rozmerů.

      Delete
    2. ... ano, je fuk na com kalkulacia bezi, ak to ma potrebnu presnost a rychlost .. ak ratal geometriu na DSP toho falcona, tak narazil skor na limit tobo, ze ide o audio DSP a to je so zvyskom masiny spojene prilis uzkou 8 bit zbernicou na troch portoch a ma pidi malu kesku a uzky DMA kanal .. lebo ide primarne o audio modul .. koderi dnes hovoria ze sa malo mysliet viac future proof a dat tam aj fast gfx rezim ..

      Delete
  2. Takže co? Nic. Někdo si hraje se Saturnem, zřejmě z nudy a nostalgie. Hledá kličky a čeká že oslní obecenstvo... Mě neoslní. Saturn považuji za zpatlaný slepenec, kterému nemá smysl věnovat pozornost. Daleko smysluplnější by bylo vytěžovat potenciál PS2-jky, která je navržená velmi flexibilně. Se Saturnem na mě nechoďte...

    ReplyDelete
    Replies
    1. ... s PS2 nechce nikto robit .. viacmenej vsetci experti hovoria, ze learning curve je nepricetna /aj ked mozne vysledky su neuveritelne, PS2 bola este daleko od praveho potencialu/.

      Delete
    2. Na druhou stranu jako nejprodávanější konzole všech dob určitě přitáhla pozornost mnoha borců co ten potenciál zkoušeli... na rozdíl od Saturnu

      Delete
    3. ... tazko tomu veri ale atari jaguar zije, saturn hyri aktivitou .. PS2 je vsak homebrew/demoscene uz velmi dlho uplne dead .. a ze sa snazim najst cokolvek.

      Delete
    4. Je to zajímavé a oslňující právě protože je Saturn takový neflexibilní blbinec. A prakticky všechny generace PlayStationu jsou navrženy flexibilně, takže takovéhle naparování s vytěžováním potenciálu u PlayStationu postrádá wow efekt.

      Delete
    5. ... expertiza potrebna na dosiahnutia plneho potencialu PS2 je nedosiahnutelna pre 90%+ profi koderov .. ocakava sa od vas vlastne, ze zvladnete naprogramovat vlastnu skutocne komplexnu graf. pipelajnu pre dvojicu vektor. jednotiek .. vid standardna TPS /technologicky nadpriemerna/ gamesa Primal versus AmonRa, kt. vyzera skor ako keby bezal na minimalne o pol generaciu novsom HW.


      Primal

      AmonRA


      Delete
    6. Proč by to mělo postrádat wow efekt? Právě já rád ocením když progiš najde další nový způsob jak něco rozjet co předtím nikdo nevymyslel. A kde jinde než na flexibilné platformě na to má dost prostoru.

      Delete
    7. ... PS2 nepodporuje per-pixel graficke operacie, robi to stale per-vertex ako PS1 ale predsa je future proof ako sa ukaze .. ovela novsi Xbox uz per pixel HW ma v podobe pixel shader podpory.
      ... vec ako normal mapping /pseudo 3D geometria, opticky klam co vyuziva normaly - kolmica na vertex a hry so svetlom - shader kod/ vyzaduje per-pixel manipulaciu s datami /alias fragment shading/, kedze ho PS2 nema tak co s tym .. nasli sa samozrejme nejake sposoby, nie su uplne zadarmo ale tieto wow efekty su na PS2ke mozne, zarve trochu GS /podobne ako ked z styroch monochrom sprajtov skladate 4 farebneho pandula/ tak aj PS2 pouzije GS na opakovany prechod rasterizacie cez objekt /fillrate teda utrpi a musite s plochami pre normal mapping sestrit/ a koordinaty pre per pixel operacie poskytne primarne VU01 s vlastnym kodom, kt. si napisete ..

      ... flexibilita PS2 /enormny fillrate GS a multipass charakter operacii na kt. je stavena/ a kompletne programovatelne vektor. jednotky umoznuju efekty na kt. PS2 ani omylom nebola dizajnova.


      PS2 normalove mapovanie, pdf pokec


      ... dnes pozname asi len jednu jedinu hru, co sa o tento efekt pokusila Matrix /PS2/ a viac uz nikto .. nepochybujem, ze je PS2 obmedzena iba fantaziou kodera ale 20 rokov cakam na nejake genialne homebrew a ono nic ..

      Delete
  3. Je zřejmé, že vždy bude lepší hardware s "plnou programovatelností" než napevno zadrátované algoritmy... O tom se není třeba přít. Vemte si takové Atari 2600 - jak tady dopadla snaha se posouvat dál a dál: jelikož se poměrně brzy narazilo na limity co je schopné s grafikou (a hudbou) reálně dělat, začaly se používat externí procesory co převzaly generování grafiky, zvuku, hry a začaly jen krmit omezené sběrnice konzole... Tohle nepovažuji za wow efekt, to je prostě podfuk. Atari 2600 je zrovna příklad takové zvláštní konzole, která má na jednu stranu zadrátováno pár scénářů generování grafiky, na druhou stranu je tam jistá flexibilita díky tomu, že se programuje obraz řádek po řádku... Kritickým časováním tam dokážete zobrazit grafiku, která v základním konceptu nepřipadá v úvahu, ale i tak ty limity jsou dávno dosažené. Současná scéna na Atari 2600 je pro mě nezajímavá, přestal jsem to sledovat, a není tam potenciál se někam smysluplně posunout. Je ale dost jiných konzolí, kde ten potenciál na vyždímání teprve čeká, a myslím že neusís chodit ani moc daleko - jeho mladší sourozenec 7800 s jeho mnohem flexibilnějším hardwarem je dobrý kandidát...

    ReplyDelete
  4. maiki: z PS1 by se dalo taky lecos vymáčknout viz Fromage https://www.youtube.com/watch?v=2oNQLP0oqeY dost nápadů a techniky vznikalo až po roce 2000. Já sjem prozatím snahy vytvořit něco an PS1 vzdal, protože tam si člověk musí psát i vlastní funkce na vytváření 3D objektů apod. Prostě dostaneš C++ a knihovny na polygony a textury a to je vše. Kamery, loadery a jiny věci si tam musíš napsat. Proto PS1 homebrew je všechno vícemeně jen 2D

    ReplyDelete
    Replies
    1. ... hej .. 3D engine ako taky si na PS1 musis urobit cely sam a ked si sikovny koder tak aj vlastne kniznice na spracovanie celej sceny .. homebrew 3D su vzacne .. podla mna je PS1 niekde na urovni Pentia s Voodoo 1 /frekvencie sa daju vypocitat aby to sedelo .. lepsie pentium preto aby nam nahradilo geometricky procak, kt. PS1 ma/.


      PS1 demoscena .. ale prakticky vzdy ide iba len o nejaky rotujuci 3D objekt a alfa efektiky - YT video

      Delete
  5. ... ide o vseobecny PS1 "engine", este tam treba urobit more prace na riadeni audio, FVM, CD atd. atd ale aspon sa niekto snazi : "PSn00bSDK is a 100% free and open source SDK project for the original Sony PlayStation for developing homebrew applications and games for the console 100% freely. This SDK can be used for freeware, commercial, and open source homebrew projects."


    GitHub stranka projektu



    YT kanal

    ReplyDelete
    Replies

    1. ... a este tento odkaz /budem to sledovat dalej, snad to nejako do roka, do dvoch dokonci a ludia na tom nieco aj urobia/ : PS1 SDK

      Delete

**** pre vloženie hypertextového odkazu do komentára použi CSS kód: hyperlink ****