From dc7b80aead7024da212d5ef58e13b06888b2440c Mon Sep 17 00:00:00 2001 From: Robert Beckebans Date: Tue, 3 Sep 2024 21:43:13 +0200 Subject: [PATCH] Added material textures/common/occlusion --- base/materials/invisible.mtr | 9 +++++ base/textures/common/occlusion.png | Bin 0 -> 39155 bytes neo/renderer/Material.cpp | 1 + neo/renderer/Material.h | 10 ++++-- .../tr_frontend_masked_occlusion_culling.cpp | 34 +++++++++++++++--- 5 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 base/textures/common/occlusion.png diff --git a/base/materials/invisible.mtr b/base/materials/invisible.mtr index 21da2637..2c0e1b96 100644 --- a/base/materials/invisible.mtr +++ b/base/materials/invisible.mtr @@ -433,4 +433,13 @@ textures/common/origin qer_nocarve // don't let an awry CSG operation cut it up origin } + +// if an ASE/LWO/GLTF model has a surface that uses this material that surface will +// be used for occlusion culling instead of the visual surface(s) +textures/common/occlusion +{ + qer_editorimage textures/common/occlusion.tga + noshadows + occlusion +} // RB end \ No newline at end of file diff --git a/base/textures/common/occlusion.png b/base/textures/common/occlusion.png new file mode 100644 index 0000000000000000000000000000000000000000..2d85cd2ad9f39ac5ac3d577aece28943f0593a5f GIT binary patch literal 39155 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

@;mUT8#s;J8I8pLHC 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 surfaceNum++ ) + { + const modelSurface_t* surf = model->Surface( surfaceNum ); + + const idMaterial* shader = surf->shader; + if( shader == NULL ) + { + continue; + } + + if( shader->IsOccluder() ) + { + occlusionSurface = true; + } + } + for( int surfaceNum = 0; surfaceNum < model->NumSurfaces(); surfaceNum++ ) { const modelSurface_t* surf = model->Surface( surfaceNum ); @@ -221,6 +238,12 @@ void R_RenderSingleModel( viewEntity_t* vEntity ) continue; } + // if the model has a occlusion surface and this surface is not a occluder + if( occlusionSurface && !shader->IsOccluder() ) + { + continue; + } + // motorsep 11-24-2014; checking for LOD surface for LOD1 iteration if( shader->IsLOD() ) { @@ -249,7 +272,7 @@ void R_RenderSingleModel( viewEntity_t* vEntity ) } // foresthale 2014-09-01: don't skip surfaces that use the "forceShadows" flag - if( !shader->IsDrawn() && !shader->SurfaceCastsShadow() ) + if( !shader->IsDrawn() && !shader->SurfaceCastsShadow() && !shader->IsOccluder() ) { continue; // collision hulls, etc } @@ -330,13 +353,16 @@ void R_RenderSingleModel( viewEntity_t* vEntity ) const float* shaderRegisters = NULL; drawSurf_t* baseDrawSurf = NULL; - if( surfaceDirectlyVisible && shader->IsDrawn() && shader->Coverage() == MC_OPAQUE && !renderEntity->weaponDepthHack && renderEntity->modelDepthHack == 0.0f ) - //if( surfaceDirectlyVisible && shader->IsDrawn() && !renderEntity->weaponDepthHack && renderEntity->modelDepthHack == 0.0f ) + if( surfaceDirectlyVisible && + ( ( shader->IsDrawn() && shader->Coverage() == MC_OPAQUE && !renderEntity->weaponDepthHack && renderEntity->modelDepthHack == 0.0f ) || shader->IsOccluder() ) + ) { // render to masked occlusion buffer //if( !gpuSkinned ) - if( model->IsStaticWorldModel() ) + + // render the BSP area surfaces and from static model entities only the occlusion surfaces to keep the tris count at minimum + if( model->IsStaticWorldModel() || ( shader->IsOccluder() && !gpuSkinned ) ) { tr.pc.c_mocIndexes += tri->numIndexes; tr.pc.c_mocVerts += tri->numIndexes;