Nebula
Loading...
Searching...
No Matches
Terrain Namespace Reference

Detailed Description

The occupancy quad tree implements a tree which allows for a quick search.

The texture tile cache keeps track of which texture tiles should be used based on a last recently used heuristic.

Terrain rendering subsystem.

Classes

struct  BiomeMaterial
 
struct  BiomeMaterialBuilder
 
struct  BiomeParameters
 
struct  BiomeSettings
 
struct  BiomeSettingsBuilder
 
struct  IndirectionEntry
 
class  OccupancyQuadTree
 
struct  PhysicalTileUpdate
 
struct  SubTexture
 
struct  SubTextureCompressed
 
struct  SubTextureUpdateJobOutput
 
struct  SubTextureUpdateJobUniforms
 
struct  TerrainBiomeId
 
class  TerrainContext
 
struct  TerrainCreateInfo
 
struct  TerrainQuad
 
struct  TerrainSetupSettings
 
struct  TerrainTri
 
struct  TerrainVert
 
class  TextureTileCache
 
struct  TileCacheEntry
 

Enumerations

enum  BiomeLoadBits {
  AlbedoLoaded = 0x1 , NormalLoaded = 0x2 , MaterialLoaded = 0x4 , MaskLoaded = 0x8 ,
  WeightsLoaded = 0x10
}
 
enum class  SubTextureUpdateState : uint8_t {
  NoChange , Deleted , Created , Grew ,
  Shrank
}
 

Functions

 __ImplementContext (TerrainContext, TerrainContext::terrainAllocator)
 
void PackSubTexture (const SubTexture &subTex, TerrainSubTexture &compressed)
 
void UnpackPageDataEntry (uint *packed, uint &status, uint &subTextureIndex, uint &mip, uint &maxMip, uint &subTextureTileX, uint &subTextureTileY)
 Unpack from packed ushort vectors to full size.
 
template<typename T>
uint Upload (TerrainContext::TerrainInstanceInfo &instance, T *data, uint size, uint alignment)
 
void IndirectionUpdate (TerrainContext::TerrainInstanceInfo &instance, uint mip, uint physicalOffsetX, uint physicalOffsetY, uint indirectionOffsetX, uint indirectionOffsetY, uint subTextureTileX, uint subTextureTileY)
 
void IndirectionErase (TerrainContext::TerrainInstanceInfo &instance, uint mip, uint indirectionOffsetX, uint indirectionOffsetY, uint subTextureTileX, uint subTextureTileY)
 
void IndirectionMoveGrow (TerrainContext::TerrainInstanceInfo &instance, uint oldMaxMip, uint oldTiles, const Math::uint2 &oldCoord, uint newMaxMip, uint newTiles, const Math::uint2 &newCoord)
 Copies mip chain from old region to new region which is bigger by mapping mips 0..X to 1..X in the new region.
 
void IndirectionMoveShrink (TerrainContext::TerrainInstanceInfo &instance, uint oldMaxMip, uint oldTiles, const Math::uint2 &oldCoord, uint newMaxMip, uint newTiles, const Math::uint2 &newCoord)
 Copies mip chain from old region to new region which is smaller, mapping mips 0..X to 0..X-1 in the new region.
 
void IndirectionClear (TerrainContext::TerrainInstanceInfo &instance, uint mips, uint tiles, const Math::uint2 &coord)
 Clear old region.
 
void TerrainCullJob (const Jobs::JobFuncContext &ctx)
 

Variables

static uint colorIndex = 0
 
const uint IndirectionTextureSize = 2048
 
const uint SubTextureWorldSize = 64
 
const uint SubTextureMaxTiles = 256
 
const uint IndirectionNumMips = Math::log2(SubTextureMaxTiles) + 1
 
const float SubTextureRange = 300.0f
 
const float SubTextureSwapDistance = 10.0f
 
const float SubTextureFadeStart = 200.0f
 
const uint SubTextureMaxPixels = 65536
 
const uint LowresFallbackSize = 4096
 
const uint LowresFallbackMips = Math::log2(LowresFallbackSize) + 1
 
const uint PhysicalTextureTileSize = 256
 
const uint PhysicalTextureTileHalfPadding = 4
 
const uint PhysicalTextureTilePadding = PhysicalTextureTileHalfPadding * 2
 
const uint PhysicalTextureNumTiles = 32
 
const uint PhysicalTextureTilePaddedSize = PhysicalTextureTileSize + PhysicalTextureTilePadding
 
const uint PhysicalTextureSize = (PhysicalTextureTileSize) * PhysicalTextureNumTiles
 
const uint PhysicalTexturePaddedSize = (PhysicalTextureTilePaddedSize) * PhysicalTextureNumTiles
 
const uint TerrainShadowMapSize = 2048
 
struct { 
 
   CoreGraphics::ShaderId   Terrain::terrainShader 
 
   CoreGraphics::ShaderId   Terrain::tileShader 
 
   CoreGraphics::ShaderProgramId   Terrain::terrainShadowProgram 
 
   CoreGraphics::VertexLayoutId   Terrain::vlo 
 
   CoreGraphics::BufferId   Terrain::biomeBuffer 
 
   Terrain::MaterialLayers::STRUCT   Terrain::biomeMaterials 
 
   Util::Array< CoreGraphics::TextureId >   Terrain::biomeTextures 
 
   BiomeMaterial   Terrain::biomeResources [Terrain::MAX_BIOMES][BiomeSettings::BiomeMaterialLayer::NumLayers
 
   CoreGraphics::TextureId   Terrain::biomeMasks [Terrain::MAX_BIOMES] 
 
   CoreGraphics::TextureId   Terrain::biomeWeights [Terrain::MAX_BIOMES] 
 
   Threading::AtomicCounter   Terrain::biomeLoaded [Terrain::MAX_BIOMES][4] 
 
   uint   Terrain::biomeLowresGenerated [Terrain::MAX_BIOMES] 
 
   IndexT   Terrain::biomeCounter 
 
   Graphics::GraphicsEntityId   Terrain::sun 
 
   Math::vec4   Terrain::cachedSunDirection 
 
   bool   Terrain::shadowMapInvalid 
 
   bool   Terrain::updateShadowMap 
 
   Threading::CriticalSection   Terrain::syncPoint 
 
   CoreGraphics::ResourceTableId   Terrain::terrainShadowResourceTable 
 
   CoreGraphics::TextureId   Terrain::terrainPosBuffer 
 
   float   Terrain::mipLoadDistance = 1500.0f 
 
   float   Terrain::mipRenderPadding = 150.0f 
 
   SizeT   Terrain::layers 
 
   bool   Terrain::debugRender 
 
   bool   Terrain::renderToggle 
 
terrainState 
 
struct { 
 
   CoreGraphics::ShaderProgramId   Terrain::terrainPrepassProgram 
 
   CoreGraphics::PipelineId   Terrain::terrainPrepassPipeline 
 
   CoreGraphics::ShaderProgramId   Terrain::terrainPageClearUpdateBufferProgram 
 
   CoreGraphics::ShaderProgramId   Terrain::terrainResolveProgram 
 
   CoreGraphics::PipelineId   Terrain::terrainResolvePipeline 
 
   CoreGraphics::ShaderProgramId   Terrain::terrainTileWriteProgram 
 
   CoreGraphics::ShaderProgramId   Terrain::terrainWriteLowresProgram 
 
terrainVirtualTileState 
 
struct { 
 
   CoreGraphics::ShaderProgramId   Terrain::meshProgram 
 
   CoreGraphics::VertexAlloc   Terrain::vertexBuffer 
 
   CoreGraphics::VertexAlloc   Terrain::indexBuffer 
 
   CoreGraphics::ResourceTableId   Terrain::meshGenTable 
 
   CoreGraphics::BufferId   Terrain::patchBuffer 
 
   CoreGraphics::BufferId   Terrain::constantsBuffer 
 
   SizeT   Terrain::numTris 
 
   SizeT   Terrain::numPatches 
 
   bool   Terrain::updateMesh = false 
 
   std::function< void()>   Terrain::terrainSetupCallback 
 
   IndexT   Terrain::setupBlasFrame 
 
raytracingState 
 
const uint SubTextureMaxUpdates = 1024
 
static const TileCacheEntry InvalidTileCacheEntry = TileCacheEntry{ 0x3FF, 0x7FF, 0x7FF, 0xFFFFFFFF }
 

Enumeration Type Documentation

◆ BiomeLoadBits

Enumerator
AlbedoLoaded 
NormalLoaded 
MaterialLoaded 
MaskLoaded 
WeightsLoaded 

◆ SubTextureUpdateState

enum class Terrain::SubTextureUpdateState : uint8_t
strong
Enumerator
NoChange 
Deleted 
Created 
Grew 
Shrank 

Function Documentation

◆ __ImplementContext()

Terrain::__ImplementContext ( TerrainContext ,
TerrainContext::terrainAllocator  )

◆ IndirectionClear()

void Terrain::IndirectionClear ( TerrainContext::TerrainInstanceInfo & instance,
uint mips,
uint tiles,
const Math::uint2 & coord )

Clear old region.

◆ IndirectionErase()

void Terrain::IndirectionErase ( TerrainContext::TerrainInstanceInfo & instance,
uint mip,
uint indirectionOffsetX,
uint indirectionOffsetY,
uint subTextureTileX,
uint subTextureTileY )

◆ IndirectionMoveGrow()

void Terrain::IndirectionMoveGrow ( TerrainContext::TerrainInstanceInfo & instance,
uint oldMaxMip,
uint oldTiles,
const Math::uint2 & oldCoord,
uint newMaxMip,
uint newTiles,
const Math::uint2 & newCoord )

Copies mip chain from old region to new region which is bigger by mapping mips 0..X to 1..X in the new region.

◆ IndirectionMoveShrink()

void Terrain::IndirectionMoveShrink ( TerrainContext::TerrainInstanceInfo & instance,
uint oldMaxMip,
uint oldTiles,
const Math::uint2 & oldCoord,
uint newMaxMip,
uint newTiles,
const Math::uint2 & newCoord )

Copies mip chain from old region to new region which is smaller, mapping mips 0..X to 0..X-1 in the new region.

◆ IndirectionUpdate()

void Terrain::IndirectionUpdate ( TerrainContext::TerrainInstanceInfo & instance,
uint mip,
uint physicalOffsetX,
uint physicalOffsetY,
uint indirectionOffsetX,
uint indirectionOffsetY,
uint subTextureTileX,
uint subTextureTileY )

◆ PackSubTexture()

void Terrain::PackSubTexture ( const SubTexture & subTex,
TerrainSubTexture & compressed )

◆ TerrainCullJob()

void Terrain::TerrainCullJob ( const Jobs::JobFuncContext & ctx)

◆ UnpackPageDataEntry()

void Terrain::UnpackPageDataEntry ( uint * packed,
uint & status,
uint & subTextureIndex,
uint & mip,
uint & maxMip,
uint & subTextureTileX,
uint & subTextureTileY )

Unpack from packed ushort vectors to full size.

◆ Upload()

template<typename T>
uint Terrain::Upload ( TerrainContext::TerrainInstanceInfo & instance,
T * data,
uint size,
uint alignment )

Variable Documentation

◆ biomeBuffer

CoreGraphics::BufferId Terrain::biomeBuffer

◆ biomeCounter

IndexT Terrain::biomeCounter

◆ biomeLoaded

Threading::AtomicCounter Terrain::biomeLoaded[Terrain::MAX_BIOMES][4]

◆ biomeLowresGenerated

uint Terrain::biomeLowresGenerated[Terrain::MAX_BIOMES]

◆ biomeMasks

CoreGraphics::TextureId Terrain::biomeMasks[Terrain::MAX_BIOMES]

◆ biomeMaterials

Terrain::MaterialLayers::STRUCT Terrain::biomeMaterials

◆ biomeResources

BiomeMaterial Terrain::biomeResources[Terrain::MAX_BIOMES][BiomeSettings::BiomeMaterialLayer::NumLayers]

◆ biomeTextures

Util::Array<CoreGraphics::TextureId> Terrain::biomeTextures

◆ biomeWeights

CoreGraphics::TextureId Terrain::biomeWeights[Terrain::MAX_BIOMES]

◆ cachedSunDirection

Math::vec4 Terrain::cachedSunDirection

◆ colorIndex

uint Terrain::colorIndex = 0
static

◆ constantsBuffer

CoreGraphics::BufferId Terrain::constantsBuffer

◆ debugRender

bool Terrain::debugRender

◆ indexBuffer

CoreGraphics::VertexAlloc Terrain::indexBuffer

◆ IndirectionNumMips

const uint Terrain::IndirectionNumMips = Math::log2(SubTextureMaxTiles) + 1

◆ IndirectionTextureSize

const uint Terrain::IndirectionTextureSize = 2048

◆ InvalidTileCacheEntry

const TileCacheEntry Terrain::InvalidTileCacheEntry = TileCacheEntry{ 0x3FF, 0x7FF, 0x7FF, 0xFFFFFFFF }
static

◆ layers

SizeT Terrain::layers

◆ LowresFallbackMips

const uint Terrain::LowresFallbackMips = Math::log2(LowresFallbackSize) + 1

◆ LowresFallbackSize

const uint Terrain::LowresFallbackSize = 4096

◆ meshGenTable

CoreGraphics::ResourceTableId Terrain::meshGenTable

◆ meshProgram

CoreGraphics::ShaderProgramId Terrain::meshProgram

◆ mipLoadDistance

float Terrain::mipLoadDistance = 1500.0f

◆ mipRenderPadding

float Terrain::mipRenderPadding = 150.0f

◆ numPatches

SizeT Terrain::numPatches

◆ numTris

SizeT Terrain::numTris

◆ patchBuffer

CoreGraphics::BufferId Terrain::patchBuffer

◆ PhysicalTextureNumTiles

const uint Terrain::PhysicalTextureNumTiles = 32

◆ PhysicalTexturePaddedSize

const uint Terrain::PhysicalTexturePaddedSize = (PhysicalTextureTilePaddedSize) * PhysicalTextureNumTiles

◆ PhysicalTextureSize

const uint Terrain::PhysicalTextureSize = (PhysicalTextureTileSize) * PhysicalTextureNumTiles

◆ PhysicalTextureTileHalfPadding

const uint Terrain::PhysicalTextureTileHalfPadding = 4

◆ PhysicalTextureTilePaddedSize

const uint Terrain::PhysicalTextureTilePaddedSize = PhysicalTextureTileSize + PhysicalTextureTilePadding

◆ PhysicalTextureTilePadding

const uint Terrain::PhysicalTextureTilePadding = PhysicalTextureTileHalfPadding * 2

◆ PhysicalTextureTileSize

const uint Terrain::PhysicalTextureTileSize = 256

◆ [struct]

struct { ... } Terrain::raytracingState

◆ renderToggle

bool Terrain::renderToggle

◆ setupBlasFrame

IndexT Terrain::setupBlasFrame

◆ shadowMapInvalid

bool Terrain::shadowMapInvalid

◆ SubTextureFadeStart

const float Terrain::SubTextureFadeStart = 200.0f

◆ SubTextureMaxPixels

const uint Terrain::SubTextureMaxPixels = 65536

◆ SubTextureMaxTiles

const uint Terrain::SubTextureMaxTiles = 256

◆ SubTextureMaxUpdates

const uint Terrain::SubTextureMaxUpdates = 1024

◆ SubTextureRange

const float Terrain::SubTextureRange = 300.0f

◆ SubTextureSwapDistance

const float Terrain::SubTextureSwapDistance = 10.0f

◆ SubTextureWorldSize

const uint Terrain::SubTextureWorldSize = 64

◆ sun

◆ syncPoint

Threading::CriticalSection Terrain::syncPoint

◆ terrainPageClearUpdateBufferProgram

CoreGraphics::ShaderProgramId Terrain::terrainPageClearUpdateBufferProgram

◆ terrainPosBuffer

CoreGraphics::TextureId Terrain::terrainPosBuffer

◆ terrainPrepassPipeline

CoreGraphics::PipelineId Terrain::terrainPrepassPipeline

◆ terrainPrepassProgram

CoreGraphics::ShaderProgramId Terrain::terrainPrepassProgram

◆ terrainResolvePipeline

CoreGraphics::PipelineId Terrain::terrainResolvePipeline

◆ terrainResolveProgram

CoreGraphics::ShaderProgramId Terrain::terrainResolveProgram

◆ terrainSetupCallback

std::function<void()> Terrain::terrainSetupCallback

◆ terrainShader

CoreGraphics::ShaderId Terrain::terrainShader

◆ TerrainShadowMapSize

const uint Terrain::TerrainShadowMapSize = 2048

◆ terrainShadowProgram

CoreGraphics::ShaderProgramId Terrain::terrainShadowProgram

◆ terrainShadowResourceTable

CoreGraphics::ResourceTableId Terrain::terrainShadowResourceTable

◆ [struct]

struct { ... } Terrain::terrainState

◆ terrainTileWriteProgram

CoreGraphics::ShaderProgramId Terrain::terrainTileWriteProgram

◆ [struct]

struct { ... } Terrain::terrainVirtualTileState

◆ terrainWriteLowresProgram

CoreGraphics::ShaderProgramId Terrain::terrainWriteLowresProgram

◆ tileShader

CoreGraphics::ShaderId Terrain::tileShader

◆ updateMesh

bool Terrain::updateMesh = false

◆ updateShadowMap

bool Terrain::updateShadowMap

◆ vertexBuffer

CoreGraphics::VertexAlloc Terrain::vertexBuffer

◆ vlo