Efekty specjalne w grach wideo
Transkrypt
										Efekty specjalne w grach wideo
                                        
                                        
                                EFEKTY SPECJALNE
W GRACH WIDEO
Cienie
Bartłomiej Filipek
bartlomiejfilipek.pl
1000k lini kodu aby uzyskać
taki efekt schodków! 
Plan
Cienie ogólnie
Cienie planarne
Shadow Volumes
Podstawowa idea ShadowMaps
Rendering głębii
Projekcja tekstury
Test głębi
Redukcja artefaktów
Dodatki
Cienie
Cienie
wikipedia
Cienie
Proste metody
Płaski teren
 Spłaszczyć
obiekt i wyświetlić na terenie…
 Użyć „shadowMatrixProjection”
 http://erich.realtimerendering.com/plateaus.pdf
Shadow Volume
extrude
ID’s
Doom3
Shadow Volume - implement
Użyj „Extrude” do renderowania bryły cienia
 Tylko
do stencil buffer
Podczas renderingu finalnego sprawdzaj
stencil
Shadow Volume
Zalety
Dobre do świateł punktowych
 Pomieszczenia
 Można wykorzystać GeoShader do extrude i obrysu
Wady
Należy posiadać specjalną geometrię do „extrude”
 Wcześniej problem z CPU i przetwarzaniem obrysu
Więcej
DX9, DX10 – samples -> ShadowVolume
Idea ShadowMaps
W cieniu jest to czego nie „widzi” światło.
Zapisz informacja co widzi światło…
Podczas końcowego renderingu sceny:
 Dla
każdego fragmentu sprawdź czy światło go
„widzi”
Rendering głębi
FBO
 Depth
Attachment
 Textura: DEPHT_COMPONENT
Rendering
 DrawBuffer(NONE)
 ColorMask(0,
0, 0, 0)
 Disable(everything)
Rendering głębi
void RenderShadowMap() {
currDepth->Bind();
glClear(GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gLightCam.SetProjectionMatrix();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gLightCam.SetViewMatrix();
glColorMask(false, false, false, false);
glUseProgram(0);
SimpleScene();
glColorMask(true, true, true, true);
}
Ustaw się w pozycji
światła
Czy jesteśmy w cieniu?
Podczas finalnego renderingu sceny:
 Dowiedz
się jaka jest pozycja danego fragmentu
względem światła
 Przekształć
odpowiednio pozycję..
 Sprawdź
czy wyżej otrzymana pozycja jest na
mapie cienia
 Czy
CalcPos.z
 Odpowiednio
?
MapDepth
zmodyfikuj kolor w zależności czy
jesteśmy w cieniu czy nie…
Przestrzeń
projekcji kamery
Przestrzeń
Kamery/Oka
Ekran
MVC = Macierz
Widoku Kamery
MVC-1 * MVL * MPL * MCL
Przestrzeń
Obiektu
Przestrzeń
Świata
MVL =Macierz
Widoku Światła
Tekstura
Przestrzeń
Widoku Światła
MPL = Projekcja
Przestrzeń
projekcji światła
MCL =macierz do
przestrzeń tekstury
Transformacja do światła…
1.
2.
3.
eye_pos = gl_ModelViewMatrix * gl_Vertex
world_pos = InvCameraMatrix * eye_pos
light_pos = LightViewProj * world_pos
Z przestrzeni eye/camera
do przestrzeni świtła
4.
5.
6.
light_pos.xyz / light_pos.w
light_pos.xyz += 1.0
light_pos.xyz *= 0.5
Z 3D do przestrzeni
tekstury
0.0 <= z, y, z <= 1.0
Testowanie…
uniform sampler2DShadow shadowMap;
…
float factor = shadow2D(shadowMap, proj.xyz).r;
factor = 0 gdy w cieniu, 1 wpp
Ustawienia tekstury cienia:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB,
GL_COMPARE_R_TO_TEXTURE_ARB);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB,
GL_LEQUAL);
Texture Comparison Function
Computed result
GL_LEQUAL
result = 1.0 0.0  r <= D t r > D t
GL_GEQUAL
result = 1.0 0.0  r >= D t r < D t
GL_LESS
result = 1.0 0.0  r < D t r >= D t
GL_GREATER
result = 1.0 0.0  r > D t r <= D t
r – trzecia współrzędna textury, D – wartość odczytana z
textury
Redukcja artefaktów
polygon_offset(factor, units)
 factor
× DZ + r × units
PCF
Redukcja migotania
Lepsze wykorzystanie mapy
Dodatki
Światła kierunkowe
Światła punktowe
Facetted Shadow Maps
Cascades Shadow Maps
Perspective Shadow Maps
ShadowVolume + ShadowMap = hybrid
Percentage Closer Soft Shadows
Materiały
More OpenGL Programming
http://www.opengl.org/wiki/GL_EXT_framebuffer_object
http://developer.nvidia.com/object/doc_shadows.html
http://www.paulsprojects.net/tutorials/smt/smt.html
Pytania?
                                     doc
                    doc download
															download                                                         Reklamacja
															Reklamacja                                                         
		     
		     
		     
		     
		     
		     
		    