Grafikus játékok fejlesztése Szécsi László t09-texture

Slides:



Advertisements
Hasonló előadás
GraphGame gg001-Triangle
Advertisements

Inkrementális 3D képszintézis
GPU Szirmay-Kalos László.
Geometriai modellezés
Geometriai modellezés
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László.
3D képszintézis fizikai alapmodellje
Bevezetés.  A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja  Teljesítménykövetelmények:  Animáció: néhány nsec.
Grafikus játékok fejlesztése Szécsi László g11-physics
GPGPU labor I. OpenGL, Cg.
Térinformatikai elemzések. Megválaszolható kérdések Pozíció - mi van egy adott helyen Feltétel - hol vannak …? Trendek - mi változott meg? Minta - milyen.
Digitális Domborzat Modellek (DTM)
Grafika a programban Készítette: Pető László. Bevezetés Valójában nem a célobjektumra rajzolunk, hanem annak festővászon területére (canvas). Csak olyan.
Textúrák, világmodellek
A virtuális technológia alapjai Dr. Horváth László Budapesti Műszaki Főiskola Neumann János Informatikai Kar, Intelligens Mérnöki Rendszerek.
Mérnöki objektumok leírása és elemzése virtuális terekben c. tantárgy Budapesti Műszaki Főiskola Neumann János Informatikai Kar Intelligens Mérnöki Rendszerek.
Számítógépes grafika 3. gyakorlat.
4.7. Textúra A felület anyagszerűsége Sík-képek ráborítása a felületre
Számítógépes grafika 5. gyakorlat. Előző órán Textúrázási módok Pixel shader használata.
Számítógépes Grafika Programtervező informatikus (esti)‏ Textúrázás.
2008/2009 tavasz Klár Gergely  Gyakorlatok időpontjai: ◦ Szerda 10:05–11:35 ◦ Csütörtök 10:00+ε –11:30+ε  Gyakvez: ◦ Klár Gergely ◦
BMEEPAG0202 CAD és építészinformatika / D-3D számítógépes grafika BME Építészmérnöki Kar Építészeti Ábrázolás Tanszék Előadó: Batta Imre Árnyalások.
Térfogatvizualizáció
Vektorok különbsége e-x = [ex-xx ey-xy ez-xz] e e-x x szempozíció
Fraktálok és csempézések
Environment mapping Szécsi László. Új osztály: Lab3EnvMap copy&paste: Lab2Trafo.h -> Lab3EnvMap.h copy&paste: Lab2Trafo.cpp -> Lab3EnvMap.cpp copy&paste:
Vízfelület Szécsi László. Nyílt víz a nyílt óceánon a felületi cseppecskék körmozgást végeznek trochoid hullámforma hullámhossz hullámmagasság amplitúdó.
Transzformációk, textúrák, árnyalás Szécsi László.
Játékfejlesztés.
3D képszintézis fizikai alapmodellje Szirmay-Kalos László Science is either physics or stamp collecting. Rutherford.
Rendering pipeline Ogre3D
Kezdeti teendők Letöltés: CharacterModellingBase.zip Blender3D futtatása headBase.blend betöltése.
Textúrák Grafikus játékok fejlesztése Szécsi László g07-texture.
Kamera, 3D, transzformációk Szécsi László. Math.zip kibontása az Egg projectkönyvtárba – float2, foat3, float4 típusok, HLSL-ben megszokott műveletekkel.
Plakátok, részecskerendszerek Grafikus játékok fejlesztése Szécsi László g09-billboard.
Effect framework, HLSL shader László Szécsi. forráskódban elérhető egyszerűsíti a shaderek fordítását, rajzolási állapot beállítását – pass: egy ilyen.
Többmenetes renderelés Grafikus játékok fejlesztése Szécsi László g11-multipass.
Textúrázás Szécsi László. giraffe.jpg letöltése SolutionDir/Media folderbe.
Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
Számítógépes grafika DirectX 5. gyakorlat. Emlékeztető Háromdimenziós alapok befejezése Textúrázás.
Számítógépes Grafika 7. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
GPU ELTE IK Számítógépes Grafika II. Jeni László Attila
GPGPU A grafikus hardver általános célú felhasználása
Jeni László Attila Klár Gergely
Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
Bevezetés a számítógépi grafikába 2. Paraméteres görbék Paraméteres görbe: 2D-ben: paraméter: általában: kikötések: legyen folytonos legyen folytonosan.
3D modellezés. Mi is a 3D modellezés? A 3D MODELLEZÉS AZ A FOLYAMAT, AMELY MATEMATIKAILAG ÁBRÁZOL TETSZŐLEGES HÁROMDIMENZIÓS OBJEKTUMOKAT.
Képek, képfeldolgozás Szirmay-Kalos László.
Vizualizáció és képszintézis
Digitális képanalízis
1.Kanonikus felügyelt tanulási feladat definíciója (5p) 1.Input, output (1p) 2.Paraméterek (1p) 3.Hipotézisfüggvény (1p) 4.Hibafüggvény/költségfüggvény.
Bevezetés.  Miért …  … egyszálúan programozunk?  … probléma ez?  Hogyan …  … változik ez?  … tudjuk kihasználni?  Megéri-e párhuzamosítani?
3D grafika összefoglalás
Szécsi László 3D Grafikus Rendszerek 17. előadás
Global Illumination.
Lighting III.
Vizualizáció és képszintézis
A grafikus hardware programozása
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
Vizualizáció és képszintézis
Görbék, felületek.
Vizualizáció és képszintézis
GPGPU – CUDA 2..
OpenGL II.
Bevezetés GPGPU Alkalmazások.
Environment mapping Szécsi László
CUDA – OpenGL.
Előadás másolata:

Grafikus játékok fejlesztése Szécsi László 2013.03.11. t09-texture Textúrák Grafikus játékok fejlesztése Szécsi László 2013.03.11. t09-texture

Textúra interpretációk kép a memóriában ugyanolyan mint a frame buffer pixel helyett texel adatok tömbje 1D, 2D, 3D tömb pl. RGB rekordok függvény diszkrét mintapontjai rácson rekonstrukció: szűrés függvény a 3D felületi pontok felett? R G B R G B R G B R G B R G B R G B

Textúra formátum egy texel hány bit, hogyan elosztva, milyen kódolással pl. DXGI_FORMAT_B5G6R5_UNORM 3 csatornás, 16 bites, fixpontos [0, 1] lehet floating point pl. DXGI_FORMAT_R32G32B32A32_FLOAT 16 byte/texel ! depth-stencil buffer is lehet textúra DXGI_FORMAT_D24_UNORM_S8_UINT stencil depth

Textúra leképezés 3D felületi pont → 2D textúratérbeli pont u = T(x) tetszőleges f(x) tárolható textúrában f(x) = f(u) = f(T(x)) megkeressük a pont textúrakoordinátáját értéket kiolvassuk a textúra megfelelő texeléből árnyaláshoz a felületi jellemzőket tárolhatjuk BRDF paraméterek: kd, ks, shininess, kr normálvektor: bump map, normal map

Textúra leképezés T(x) legyen könnyen számítható csúcsokban adott modellezéskor u,v koordinátákat rendelünk a vertexekhez háromszögeken interpoláljuk a felületen NEM a képernyőn

Perspektív helyes interpoláció ha a világban lineáris, akkor a képernyőn nem textúráknál látszik persp. helyes textúrázás de ma már mélység szín

Modellezés textúrákkal UV koordináták hozzárendelése 2D festés 2D-ben az élek megrajzolása (szabásminta) rajzolóprogrammal 2D-ben 3D festés 3D modellen kijelölt pont felület → textúratér részletes geometriai modell alapján egyszerű modell + részletek textúrában

Természetes paraméterezés felület paraméteres egyenletéből

Textúrázás Mayában (1,1) (0,0)

Planar mapping

Textúrázás Mayában

Cylindrical mapping

Spherical mapping

Per face automatic mapping

UV atlas általában megengedett, hogy több felületi ponthoz ugyanaz a textúrakoordináta tartozzon model bal és jobb oldala nem kell kétszer de 3D festés (máshol ne legyen változás csak ahova festek) számított textúra (pl. light map)

UV atlas = átfedés nélküli kiterítés

Textúrák szűrése texel > pixel (közeli felület) texel-értékek egy folytonos függvény mintapontjai nearest a legközelebbi texel értékét használjuk bilineáris 4 legközelebbi között interpolálunk elkeni a texel-éleket a felületen

Textúrák szűrése texel < pixel (távoli felület) egy pixelbe sok texel esik, átlagolni kellene ha a pixelközép textúrakooriniátájához legközelebbit vesszük, akkor gyakorlatilag véletlenül választunk egy texelt az átlag helyett kameramozgásnál változik, melyiket megoldás átlagok előre kiszámolása: mipmappek

Bilineáris szűrés képtér textúratér Rasterization visits pixels inside the projection of the triangle and maps the center of the pixel from screen space to texture space to look up the texture color. This mapping will result in a point that is in between the texel centers. More importantly, this mapping may be a magnification, which means that a single step in screen space results in a larger step in texture space, so we may skip texels, and the result will be a mess or noise. From signal processing point of view, in this case, the texture is a high frequency signal which is sampled too rarely, resulting in sampling artifacts. textúratér képtér

Mipmap u, v, m trilineáris szűrés u,v két szinten kettő között interpolálás

Mipmap szint kiválasztása vagy megadjuk a shader kódból [SampleLevel] vagy automatikus [Sample] textúrakoordinátákat a raszterizáló lineárisan interpolálja ehhez a pixelenkénti növekményt meg kell határoznia ez nem más, mint a texel/pixel arány ez alapján lehet választani tehát ez csak a pixel shaderben működhet

Szűrések hatása

Direct3D textúra ID3D11Texture1D ID3D11Texture2D erőforrások ID3D11ShaderResourceView bemenetre köthető nézet ID3D11SamplerState [effectből kezeljük] mintavételezési, szűrési állapot ID3D11RenderTargetView kimenetre köthető (melyik mipmap szintre írunk)

Példa: diffuse map (kd) ID3D11ShaderResourceView* kdSrv; létrehozás fileból: D3DX11CreateShaderResourceViewFromFile (device, textureFilePath, &kdSrv); persze ez létrehozza a textúrát, arra az SRV-t, de jó eséllyel úgyis csak az SRV-t használjuk (csak inputként szerepel) SRV fog egy hivatkozást a textúrúra, ha az SRV-t elengedjük a textúra is felszabadulhat

Textúra effect fileban globális textúra változó ehhez kell kötni amit betöltöttünk Texture2D kdTexture; SamplerState linearSampler { Filter = MIN_MAG_MIP_LINEAR; AddressU = wrap; AddressV = wrap; }; textúrázási állapotleíró

Pixel shader float3 lightRadiance; float3 lightDir; float4 psDiffuse(VsosOutput input) : SV_Target { // diffúz árnyalás: IL L·N kd return lightRadiance * dot(lightDir, input.normal) * kdTexture.Sample( linearSampler, input.tex); } irányfényforrás

Textúratömb – ÍGY NEM MEGY Texture2D textures[3]; float4 psTextured(VsosTrafo input) : SV_Target { float4 e=0; [loop]for(int u=0; u<3; u++) e += kdTextures[u].Sample( linearSampler, input.tex); return e; }

Textúratömb – a megoldás egy textúra-erőforrás (ID3DTexture2D) tartalmazhat több szeletet [array slice] minden szelet egy komplett mipmap piramis

Textúratömb – ÍGY MEGY Texture2DArray textures; float4 psTextured(VsosTrafo input) : SV_Target { float4 e=0; [loop]for(int u=0; u<3; u++) e += kdTextures.Sample( linearSampler, float3(input.tex, u)); return e; }

Cube map 6 szeletes textúratömb kocka felületén minden irányt lefed irány függvényében is tudunk tárolni valamit HW: a textúra irányvektorral címezhető kiszámítja melyik lap milyen u,v

Environment map nem a felületi jellemzőket, hanem a megvilágítást tároljuk textúrában I(w) – bejövő radiancia az irány függvényében nem függ a felületi pont pozíciójától végtelen távoli környezet minden irányból jön be fény összes texelre kellene összegezni DE: ideális tükör: csak 1 irányból érdekes mi jön be

Cube map effectben textureCUBE environmentCubeTexture; samplerCUBE environmentCubeSampler = sampler_state { texture = <environmentCubeTexture>; MipFilter = Linear; MagFilter = Linear; MinFilter = Linear; };

Env map pixel shader TextureCube envTexture; float3 eyePos; float3 kr; float4 psEnvMapped(VsosOutput input) : SV_Target { float3 viewDir = normalize( input.worldPos - eyePos); float3 reflectionDir = reflect( -viewDir, input.normal); return kr * envTexture.Sample( linearSampler, reflectionDir); }

Hogyan rajzoljuk magát a környezetet? nagy valamire feszítve sky box sky dome full viewport quad teljes nézeti ablakot lefedő négyszög a pixel shaderben megkeressük az irányt Z bufferelés: mindennél hátrább van ezt rajzoljuk elöször VAGY a full-screen quad Z-je legyen 0.9999 (norm. képenyőkoordinátában)

Full viewport quad vertex shader input/output struct IaosQuad { float4 pos: POSITION; float2 tex: TEXCOORD0; }; struct VsosQuad float4 pos: SV_POSITION; float2 tex: TEXCOORD0; float3 viewDir: TEXCOORD1;

Nézeti irány kiszámítása NDC-ből xworld VP = xndc a view (V) és proj (P) mátrixok konstrukciója miatt  = xworld - e ahol  a nézeti irány (normalizálatlan, szem felől), e a szempozícó  = xndc (VP)-1 - e az elsőt xndc –re rendezve és behelyettesítve  = xndc (EVP)-1 ahol E az e vektorral eltolás mátrixa , és kihasználtuk, hogy a szorzatmátrix inverze az inverzek szorzata fordított sorrendben (EVP)-1 -et nevezzük viewDirMatrix-nak [NEM a view mátrix szorzata valamivel]

Full viewport quad vertex shader vektor hossza a bemenő pozíció z-jétől függ de minket nem érdekel a hossza, homogén osztás is csak dísznek van float4x4 viewDirMatrix; VsosQuad vsQuad(IaosQuad input) { VsosQuad output = (VsosQuad)0; output.pos = input.pos; output.tex = input.tex; float4 hWorldPosMinusEye = mul(input.pos, viewDirMatrix); // hWorldPosMinusEye /= hWorldPosMinusEye.w; output.viewDir = hWorldPosMinusEye.xyz; return output; }

pixel shader float4 psBackground(VsosQuad input) : SV_Target { return envTexture.Sample( linearSampler, input.viewDir); } még csak le sem kell normalizálni benne van a TextureCube logikájában