HTML

gondolataim elsősorban játékfejlesztésről

Elsősorban játékfejlesztés magyarul: az enginem fejlesztése során felmerülő problémák, ötletek, tévutak stb dokumentálása, amely számomra és talán mások számára is hasznos lehet később Másodsorban gondolatok szavakban...

Kapcsolat:
aalberik 'at' gmail 'dot' com

Haletető

Galéria

Címkék

Összes

Linkblog

Naptár

december 2024
Hét Ked Sze Csü Pén Szo Vas
<<  < Archív
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

egy csokor trükk

2009.03.29. 17:21 :: syam

-exponenciális mélység adatból lineáris mélység visszanyerése near...far tartományban:
F = (V*C+D) / -V;
F = -C + (D / -V)
F + C = D / -V
(F + C) / D = 1 / -V
D / (F + C) = -V
D / (-F - C) = V
D / (F * -2 + 1 - C) = V, mivel az F-t át kell vinni 0..1 tartományból -1..1 tartományba

,ahol C,D a frustum matrix megfelelő elemei, F a végeredmény, V a vertex eye spaceben

glsl:
float Z = gl_ProjectionMatrix[3].z/(gl_FragCoord.z * -2.0 + 1.0 - gl_ProjectionMatrix[2].z);

asm:
TEX depth, texcoord, texture[X],2D;

MAD tmp, depth, -2.0, ONE_MINUS_D;
RCP tmp, tmp.x;
MUL eye_depth, C, tmp;

-exponenciális mélység adatból lineáris mélység visszanyerése 0..1 tartományban:
glsl:
float Z= (2.0 * Near) / (Far + Near - depth * (Far - Near));

asm:

MAD depth, depth, NEAR_MINUS_FAR, NEAR_PLUS_FAR;
RCP depth, depth.x;
MUL depth, 2_TIMES_NEAR, depth.x;


-normál visszanyerése 2 komponensből (félgömb ujraleképzés):
csak pozitiv z irány és egységvektor esetén használható!!

glsl:
N.z = sqrt( 1 – N.x*N.x – N.y*N.y );

asm:

DP2 tmp.z, normal, normal;
SUB tmp.z, 1.0.z, tmp.z;
RSQ tmp.z, tmp.z;
RCP normal.z, tmp.z;



- 2 nem normalizált vektor skalár szorzata:
glsl:
float r= dot((N,L) * rsq( dot(N,N) * dot(L,L) )

asm:
DP3 tmp0, N,L;
DP3 tmp1, L,L;
DP3 tmp2, N,N;
MUL tmp3, tmp1, tmp2;
RSQ tmp3.x, tmp3.x;
MUL res, tmp0.x, tmp3.x;

-hogyan lesz 2x sebességű a depth (+stencil) only renderelés:
tilos-
-color bufferbe írni
-multisamplet bekapcsolni
-a fragment eldobás (se alpha test, se KIL)
-a fragment mélység módosítás
-használni user defined vágósíkokat

-hogyan lesz early z cull bekapcsolva:
tilos-
-a fragment eldobás (se alpha test, se KIL)
-a fragment mélység módosítás

-gpu feltétel kezelés:

if-then-else
[nv3x] mind2 ág végrehajtódik és a condition code dönti el, melyik számítás kerül a kimeneti regiszterbe
[nv40] valódi feltétel

-gpu feltétel kezelés:

for-loops, do-while
[nv3x] méretkorlát + nincs ciklus változó
[nv40] valódi ciklus  

 

Szólj hozzá!

A bejegyzés trackback címe:

https://sakura7.blog.hu/api/trackback/id/tr641033345

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása