High Level Shading Language - #1 uvod do GPU

24.06.2006 12:33 | blackhole

Kym zacneme, trochu predstavenia HLSL nezaskodi. HLSL (High Level Shading Language) je jazyk s ktorym si programatori podstatne ulahcili programovanie algoritmov pre GPU (GRAPHICS PROCCESSING UNIT), teda graficku kartu.

Ano. Graficka karta ma RAMku, rovnako ako procesor (na tomto poli nesutazi AMD a Intel ale NVidia a ATI). Jediny jazyk ktorym sa dalo programovat pre GPU pred vznikom HLSL bol assembler, teda 16kova sustava, kod, ktory netreba kompilovat. Co teda HLSL skompiluje? Otazka je na mieste, je to ovladac directX3D od verzie 9.0c vyssie. Ak teda chcete pouzivat HLSL, musite mat dirextX 9.0 SDK vo svojom projekte, SDK si mozte stiahnut zadarmo zo stranok MSDN. Podobne ma aj svoje HLSL Opengl, tzv. GLSL (co sa za skratkou ukriva neviem). To, co v HLSL (a obecne pre GPU) programujete, sa nazyva Pixel Shader alebo Vertex Shader, niekedy ale Pixel Shader v hovorovej reci znamena "Pixel shader a Vertex shader zaroven", pretoze oba spolu pevne suvisia, ja ale budem dodrziavat formalnu syntax, a budem odlisovat Pixel shader od Vertex Shaderu. Tento kod sa vykonova kazdym framom.Teda pri 40 FPS za sekundu sa vykona 40 krat.

-Pomerne huste, mozem si dovolit naprogramovat aj viac ako 2*2? Pri 128 MB DDRAM a 400 MHZ ktore karty zvyknu mat (zvykli uz davno) si mozte dovolit skutocne rosambo. Vertex shader je pomerne nenarocny, obstarava iba tzv. vertexy (cize vrcholy(uzly) 3d modelu-meshu), ktorych nieje urcite tolko ako pixelov na texture, ktoru dany model pouziva. Tu nastupuje pixel shader, ktory vlastne zabera aj 90% vypoctovej kapacity GPU, pretoze nielen ze ma viac elementov vo svojom priechode, ale pre kazdy element prebieha zlozity explicitny vypocet(ktory vy programujete). -Dost, o co ide a co to robi?

Ako ste uz mozno vytusili, Pixel shader zmeni farbu pixelov, a farbu kazdeho jedneho pixelu na vasom 3d modeli bude pocitat odznova kazdy jeden frame.To je velmi zaujimava skutocnost. S tymto vypoctom mozte dosiahnut uplatnenie napriklad dynamickeho svetla. Do nedavna "svetlo" v hrach, alebo akychkolvek realtime renderovacich aplikaciach, pritomne nebolo. Videli ste iba texturu, taku aka je a bude, alebo ste mali pocit svetla, pretoze s prichodom paralelnych 2 textur na sebe (to bolo po prvykrat v directX 6.0) sa ako 2 textura pouzivala tzv "light mapa", cize cierno biela textura ktora definovala svetlejsie a tmavsie miesta na texture 1. V tych casoch uz nejake dynamicke svetlo pritomne bolo, ale iba "per vertex", cize sa vypocitalo iba pre polygony modelu, to by vyzeralo nejako takto (obr.), ak by sme to mali na nizko polygonovom cajniku (high polygonove modely nepripadaju v uvahu pre dynamicky renderovanu grafiku :-(). per vertex light

...ovela zaujimavejsie je sledovat vysledok, ak sa svetlo vypocita pre kazdy pixel
per pixel light

Vobec prvy krat ste mohli mat moznost vyskusat si tento typ svetla v Doom 3ke ked ste si baterkou svietili na tie "fakt brutalne a premakane" prisery...

uz coskoro v druhom seriali uz nieco konkretnejsie..

    • svetlo 27.06.2006 | 21:39
      Avatar vid   Používateľ

      > Do nedavna "svetlo" v hrach, alebo akychkolvek
      > realtime renderovacich aplikaciach, pritomne
      > nebolo...
      odporucam zadrtit napriklad Realms of Arkania 3: Shadows Over Riva, nech vidis ci bolo osvetlovanie len pre celu texturu alebo nie :]

      alebo System Shock, zda sa mi, ze aj tam bolo osvetlovanie nielen spolocne pre celu texturu.

      inak dobra seria, dik, prajem vela sil pokracovat...

      • hmm, dynamicke svetlo 28.06.2006 | 15:35
        Avatar blackhole   Návštevník

        hmm, dynamicke svetlo pocitane per pixel bolo skutocne az v doom 3, system shock sa datuje do dobe kedy GPUcka neboli schopne pocitat per pixel, a rovnako asi aj Shadows over riva. Per vertex dynamicke svetla pritomne boli samozrejme, typujem ze to je prave tento typ v spomenutych hrach.... inac system shock prvy pouzil mouse look :) , nedivil by som sa ak by tam borci dali CPU pocitany per pixel shader :)