Anders Scheel Nielsen 1
Virtual Textures
Dealing with Enormous Texture-Based Resources
Anders Scheel Nielsen
Virtual Textures Dealing with Enormous Texture-Based Resources - - PowerPoint PPT Presentation
Virtual Textures Dealing with Enormous Texture-Based Resources Anders Scheel Nielsen 1 Anders Scheel Nielsen Textures 2 Anders Scheel Nielsen Textures 3 Anders Scheel Nielsen Mipmaps 4 Anders Scheel Nielsen Mipmaps 5 Anders Scheel
Anders Scheel Nielsen 1
Dealing with Enormous Texture-Based Resources
Anders Scheel Nielsen
Anders Scheel Nielsen 2
Anders Scheel Nielsen 3
Anders Scheel Nielsen 4
Anders Scheel Nielsen 5
Anders Scheel Nielsen 6 Real life problems Problems:
Anders Scheel Nielsen 6 Real life problems Problems:
Anders Scheel Nielsen 6 Real life problems Problems:
Anders Scheel Nielsen 6 Real life problems Problems:
Solution for ’large’ models:
Anders Scheel Nielsen 7
Anders Scheel Nielsen 8
Anders Scheel Nielsen 9
Anders Scheel Nielsen 10
Using too much memory?
Anders Scheel Nielsen 10
Using too much memory?
Anders Scheel Nielsen 10
Using too much memory?
Anders Scheel Nielsen 10
Using too much memory?
Anders Scheel Nielsen 11
Anders Scheel Nielsen 11
Large Textures
Anders Scheel Nielsen 11
Large Textures
Texture loading with higher granularity
Anders Scheel Nielsen 11
Large Textures
Load Textures Runtime:
Texture loading with higher granularity
Anders Scheel Nielsen 12
Anders Scheel Nielsen 13
Anders Scheel Nielsen 14
Anders Scheel Nielsen 15
Readback of the framebuffer:
Anders Scheel Nielsen 16
1 float mipmapLevel = calcMipmapLevel(uv * textureSize); 2 float2 tilePos = floor(uv * indirectionSize); 3 tilePos /= 256.0; 4 float2 tilePos_low = frac(tilePos); 5 float2 tilePos_high = floor(tilePos); 6 color.bg = floor(tilePos_low * 256.0 + 0.5)/255.0; 7 color.r = (tilePos_high.x + tilePos_high.y * 16)/255.0; 8 color.a = (mipmapLevel + textureId * 16)/255.0; 9 10 float calcTextureMipmapLevel(float2 uv) { 11 float2 dtdx = dFdx(uv); 12 float2 dtdy = dFdy(uv); 13 float2 dtex = dtdx*dtdx + dtdy*dtdy; 14 float minDelta = max(dtex.x,dtex.y); 15 float miplevel = max(0.5 * log2(minDelta), 0.0); 16 return miplevel; 17 }
Anders Scheel Nielsen 17
1 float mipmapLevel = calcMipmapLevel(uv * textureSize); 2 float2 tilePos = floor(uv * indirectionSize); 3 tilePos /= 256.0; 4 float2 tilePos_low = frac(tilePos); 5 float2 tilePos_high = floor(tilePos); 6 color.bg = floor(tilePos_low * 256.0 + 0.5)/255.0; 7 color.r = (tilePos_high.x + tilePos_high.y * 16)/255.0; 8 color.a = (mipmapLevel + textureId * 16)/255.0; 9 10 float calcTextureMipmapLevel(float2 uv) { 11 float2 dtdx = dFdx(uv); 12 float2 dtdy = dFdy(uv); 13 float2 dtex = dtdx*dtdx + dtdy*dtdy; 14 float minDelta = max(dtex.x,dtex.y); 15 float miplevel = max(0.5 * log2(minDelta), 0.0); 16 return miplevel; 17 }
Anders Scheel Nielsen 18
Anders Scheel Nielsen 18
Texture usage:
Anders Scheel Nielsen 18
Texture usage:
Anders Scheel Nielsen 18
1 color = tex2D(tdTexture, vertexIn.uv * coordScale); 2 color.w = tex2Dbias(tdTexture, vertexIn.uv, mipBias + resolutionBias).w;
Texture usage:
My fragment shader:
Anders Scheel Nielsen 19
Tilbagelæsning fra grafikkort til systemhukommelse
Anders Scheel Nielsen 20
Anders Scheel Nielsen 21
Anders Scheel Nielsen 22
Anders Scheel Nielsen 23
Anders Scheel Nielsen 24
Anders Scheel Nielsen 25
Anders Scheel Nielsen 26
Anders Scheel Nielsen 27
Resultater
Anders Scheel Nielsen 28
Diskussion
Anders Scheel Nielsen 29
Anders Scheel Nielsen 30
Anders Scheel Nielsen 31
Anders Scheel Nielsen 32
Anders Scheel Nielsen 33
Anders Scheel Nielsen 34
Anders Scheel Nielsen 35
Anders Scheel Nielsen 36
Virtual Textures:
Anders Scheel Nielsen 36
Virtual Textures:
Demo: 128k x 128k, theoretical: 2M x 2M (16 TB)
Anders Scheel Nielsen 36
Virtual Textures:
Demo: 128k x 128k, theoretical: 2M x 2M (16 TB)
Anders Scheel Nielsen 36
Virtual Textures:
Demo: 128k x 128k, theoretical: 2M x 2M (16 TB)
Anders Scheel Nielsen 37
Anders Scheel Nielsen 38
Prediction of visible tiles
Virtuel Terrain
Other uses than games
Anders Scheel Nielsen 39
Contributions
Anders Scheel Nielsen 40 Konklusion
Anders Scheel Nielsen 40 Konklusion
Thank you! Andreas Bærentzen, DTU Carsten Kjær, Dalux Daniel Povlsen, Aptocore Martin Mittring, CryTek GmbH Sean Barrett Per Rasmussen Hardware provided by HwT.dk Anders.Scheel@gmail.com
Anders Scheel Nielsen 41
Anders Scheel Nielsen 41
Seek time is a killer: 10 tiles @ 256 x 256 = 650KB
Anders Scheel Nielsen 42
Anders Scheel Nielsen 42
Anders Scheel Nielsen 42
Anders Scheel Nielsen 42
Anders Scheel Nielsen 42
Anders Scheel Nielsen 43
Ulemper ved metoden: Transparente objekter
Antal unikke teksturer
Kvalitetstab pga. manglende tekstur
Anders Scheel Nielsen 44
Hastighedstab pga. indirection
Filtrering
Ulemper ved metoden :
Anders Scheel Nielsen 45
Litteratur
Anders Scheel Nielsen 46
Litteratur
Anders Scheel Nielsen 47
Tilbagelæsning fra grafikkort til systemhukommelse
systemhukommelsen
Anders Scheel Nielsen 48
Litteratur
Anders Scheel Nielsen 49
Introduktion
Introduktion Litteratur Metode Resultater Diskussion Konklusion
Anders Scheel Nielsen 50
Teksturrepetition
Introduktion Litteratur Metode Resultater Diskussion Konklusion
Anders Scheel Nielsen 51
Introduktion
Introduktion Litteratur Metode Resultater Konklusion
Anders Scheel Nielsen 51
Introduktion
Introduktion Litteratur Metode Resultater Konklusion
Anders Scheel Nielsen 51
Introduktion
Introduktion Litteratur Metode Resultater Konklusion
Anders Scheel Nielsen 51
Introduktion
Introduktion Litteratur Metode Resultater Konklusion
Anders Scheel Nielsen 51
Introduktion
Introduktion Litteratur Metode Resultater Konklusion
Anders Scheel Nielsen 52
Resultater
Introduktion Litteratur Metode Resultater Diskussion Konklusion
Anders Scheel Nielsen 53
Resultater
Introduktion Litteratur Metode Resultater Diskussion Konklusion