Changeset 147


Ignore:
Timestamp:
06/22/05 18:35:55 (20 years ago)
Author:
mattausch
Message:

fixed average fps + shadow maps

Location:
trunk/VUT
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibility/include/CoherentHierarchicalCullingManager.h

    r146 r147  
    2525 
    2626protected: 
    27         /** Decides wether occlusion query should be issued depending on some  
     27        /** Decides if node is considered to be visible depeding on the  
    2828                assumed visibility factor. 
    29                 @returns if occlusion query should be issued 
     29                @returns if node is considered to be visible 
    3030        */ 
    31         bool DecideQueryTest(HierarchyNode *node) const; 
     31        bool DecideVisible(HierarchyNode *node) const; 
    3232 
    3333        unsigned int mAssumedVisibility; 
     
    3535                mAssumedVisibility. 
    3636        */ 
    37         unsigned int mThreshold; 
     37        int mThreshold; 
    3838}; 
    3939 
  • trunk/VUT/GtpVisibility/src/CoherentHierarchicalCullingManager.cpp

    r146 r147  
    11#include "CoherentHierarchicalCullingManager.h" 
    2 //#include <OgreLogManager.h> 
     2#include <OgreLogManager.h> 
    33 
    44namespace GtpVisibility { 
     
    5555                        if (!mHierarchyInterface->CheckFrustumVisible(node, intersects)) 
    5656                        { 
    57                                 mNumFrustumCulledNodes ++; 
     57                                ++ mNumFrustumCulledNodes; 
    5858                                 
    59                                 if(mVisualizeCulledNodes) 
     59                                if (mVisualizeCulledNodes) 
    6060                                { 
    6161                                        mHierarchyInterface->VisualizeCulledNode(node, FRUSTUM_CULLED); 
     
    7979                                bool wasVisible = mHierarchyInterface->IsNodeVisible(node) &&  
    8080                                        (mHierarchyInterface->LastVisited(node) == mHierarchyInterface->GetFrameId() - 1); 
    81                                  
     81                                // if visibility is assumed to be true in this frame 
     82                                bool assumeVisible = wasVisible && (mAssumedVisibility > 0) && DecideVisible(node); 
     83 
    8284                                // identify nodes that we cannot skip queries for 
    8385                                // geometry not only in leaves => test for renderable geometry 
    8486                                bool issueQuery = !wasVisible ||  
    85                                         (mHierarchyInterface->HasGeometry(node) &&  
    86                                         (!mAssumedVisibility || DecideQueryTest(node))); 
    87                                  
    88                                 // reset node's visibility classification  
    89                                 mHierarchyInterface->SetNodeVisible(node, false); 
     87                                        (mHierarchyInterface->HasGeometry(node) && !assumeVisible); 
     88                                                                 
     89                                // reset node's visibility classification 
     90                                mHierarchyInterface->SetNodeVisible(node, !issueQuery && assumeVisible); 
    9091 
    9192                                // update node's visited flag 
     
    9596                                if (issueQuery) 
    9697                                { 
    97                                         mNumQueriesIssued ++; 
     98                                        ++ mNumQueriesIssued; 
    9899                                         
    99100                                        queryQueue.push(QueryPair(node, mHierarchyInterface-> 
    100101                                                IssueOcclusionQuery(node, wasVisible))); 
    101102                                } 
    102                                          
     103                                 
    103104                                // always traverse a node if it was visible 
    104105                                if (wasVisible) 
     
    117118        mThreshold = 0; 
    118119 
    119         if (mAssumedVisibility) 
     120        if (mAssumedVisibility > 0) 
    120121        { 
    121                 mThreshold =  RAND_MAX / mAssumedVisibility; 
     122                mThreshold =  RAND_MAX - RAND_MAX / mAssumedVisibility; 
    122123        } 
     124        //std::stringstream d; d << "*** setting assumed vis: " << mAssumedVisibility; Ogre::LogManager::getSingleton().logMessage(d.str()); 
    123125} 
    124126//----------------------------------------------------------------------- 
    125 bool CoherentHierarchicalCullingManager::DecideQueryTest(HierarchyNode *node) const 
     127bool CoherentHierarchicalCullingManager::DecideVisible(HierarchyNode *node) const 
    126128{ 
     129        /*bool result = rand() < mThreshold; 
     130        std::stringstream d; d << "Assumed vis: " << mAssumedVisibility << ", result: " << result; 
     131        Ogre::LogManager::getSingleton().logMessage(d.str()); return result;*/ 
     132         
    127133        return rand() < mThreshold; 
    128134} 
  • trunk/VUT/GtpVisibility/src/FrustumCullingManager.cpp

    r139 r147  
    1717 
    1818                if (!mHierarchyInterface->CheckFrustumVisible(node)) 
    19                 {//if (mHierarchyInterface->mIsShadowPass) 
    20                         mNumFrustumCulledNodes ++; 
     19                { 
     20                        ++ mNumFrustumCulledNodes; 
    2121 
    2222                        if (mVisualizeCulledNodes) 
  • trunk/VUT/GtpVisibility/src/VisibilityManager.cpp

    r146 r147  
    1313mQueryManager(new DummyQueryManager(NULL)), 
    1414mPreprocessingManager(new DummyPreprocessingManager(NULL)), 
    15 mVisibilityEnvironment(visEnvironment) 
     15mVisibilityEnvironment(visEnvironment), 
     16mAssumedVisibility(0) 
    1617{ 
    1718        SetCullingManager(VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING); 
  • trunk/VUT/Ogre/resources/VisibilityDemo.overlay

    r146 r147  
    4646                element TextArea(Example/Visibility/AlgorithmInfo): Example/Visibility/Templates/BasicText 
    4747                { 
    48                         left 155 
     48                        left 170 
    4949                        top 5 
    5050                        width 90 
     
    6363                element TextArea(Example/Visibility/ThresholdInfo): Example/Visibility/Templates/BasicText 
    6464                { 
    65                         left 155 
     65                        left 170 
    6666                        top 20 
    6767                        width 90 
     
    7979                element TextArea(Example/Visibility/UseOptimizationInfo): Example/Visibility/Templates/BasicText 
    8080                { 
    81                         left 155 
     81                        left 170 
    8282                        top 35 
    8383                        width 90 
     
    9595                element TextArea(Example/Visibility/UseDepthPassInfo): Example/Visibility/Templates/BasicText 
    9696                { 
    97                         left 155 
     97                        left 170 
    9898                        top 50 
    9999                        width 90 
     
    107107                        width 90 
    108108                        height 30 
    109                         caption [A] Assumed Visibility 
     109                        caption [8][9] Assumed Visibility 
    110110                } 
    111111                 
    112112                element TextArea(Example/Visibility/AssumedVisibilityInfo): Example/Visibility/Templates/BasicText 
    113113                { 
    114                         left 155 
     114                        left 170 
    115115                        top 65 
    116116                        width 90 
  • trunk/VUT/Ogre/src/OgreVisibilityTerrainSceneManager.cpp

    r141 r147  
    223223        else 
    224224        {        
    225                 // we interleave identification and rendering of objects  
    226                 // in _renderVisibibleObjects 
    227  
     225                // if not the shadow pass we interleave identification  
     226                // and rendering of objects in _renderVisibibleObjects 
     227                if (mShadowTechnique == SHADOWTYPE_TEXTURE_MODULATIVE &&  
     228                        mIlluminationStage == IRS_RENDER_TO_TEXTURE) 
     229                { 
     230                        TerrainSceneManager::_findVisibleObjects(cam, onlyShadowCasters); 
     231                } 
    228232                // only shadow casters will be rendered in shadow texture pass 
    229                 mHierarchyInterface->SetOnlyShadowCasters(onlyShadowCasters); 
    230                 //InitVisibilityCulling(cam); 
     233                //mHierarchyInterface->SetOnlyShadowCasters(onlyShadowCasters); 
    231234        } 
    232235        //TerrainSceneManager::_findVisibleObjects(cam, onlyShadowCasters); 
     
    247250                mIlluminationStage = IRS_NONE; 
    248251         
     252                TerrainSceneManager::_renderVisibleObjects(); 
     253 
     254                mIlluminationStage = savedStage; 
     255        } 
     256        // normal rendering for shadow maps because of performance 
     257        else if (mShadowTechnique == SHADOWTYPE_TEXTURE_MODULATIVE &&  
     258                         mIlluminationStage == IRS_RENDER_TO_TEXTURE) 
     259        { 
    249260                TerrainSceneManager::_renderVisibleObjects(); 
    250261        } 
     
    313324                 
    314325        // set the new render level index afterwards => new level in the next frame  
    315         TerrainRenderable::setCurrentRenderLevelIndex( 
    316                 (TerrainRenderable::getCurrentRenderLevelIndex() + 1) % 10); 
     326        int levelIdx = (TerrainRenderable::getCurrentRenderLevelIndex() + 1) % 10; 
     327        TerrainRenderable::setCurrentRenderLevelIndex(levelIdx); 
    317328 
    318329        getRenderQueue()->clear(); 
  • trunk/VUT/work/TestCullingTerrain/TerrainFrameListener.cpp

    r146 r147  
    170170        dynamic_cast<PlatformQueryManager *>(mVisibilityManager->GetQueryManager())-> 
    171171                SetViewport(mWindow->getViewport(0)); 
     172 
     173        // reset statistics 
     174        resetStats(); 
    172175}  
    173176//----------------------------------------------------------------------- 
     
    528531                writeFrames(); 
    529532                 
     533                float avgFps = (float)mAvgFps / (float)mFrameCount; 
     534 
    530535                //-- write out stats for recorded walkthrough 
    531536                std::stringstream d; 
    532537                d << "Algorithm: " << currentAlgorithmCaptions[mCurrentAlgorithm] << "\n" 
    533                   << "avg. FPS: " << mWindow->getAverageFPS() << "\n" 
     538                  //<< "avg. FPS: " << mWindow->getAverageFPS() << "\n" 
     539                  << "avg. FPS: " << avgFps << "\n" 
    534540                  << "best FPS: " << mWindow->getBestFPS() << "\n" 
    535541                  << "worst FPS: " << mWindow->getWorstFPS() << "\n" 
     
    564570                        mWindow->setDebugText("Replay"); 
    565571                         
    566                         // reset, because we measure fps stats during walkthrough 
     572                        // reset, because we measure fps stats during walkthrough (warning: average fps broken) 
    567573                        mWindow->resetStatistics(); 
     574                        resetStats(); 
    568575 
    569576                        //-- initialise frame data 
     
    630637} 
    631638//----------------------------------------------------------------------- 
     639void TerrainFrameListener::resetStats() 
     640{ 
     641        mAvgFps = 0; 
     642        mFrameCount = 0; 
     643} 
     644//----------------------------------------------------------------------- 
    632645void TerrainFrameListener::updateStats() 
    633646{ 
     
    635648        char str[100]; 
    636649         
    637         static String currFps = "Current FPS: "; 
    638         static String avgFps = "Average FPS: "; 
    639         static String bestFps = "Best FPS: "; 
    640         static String worstFps = "Worst FPS: "; 
    641         static String tris = "Triangle Count: "; 
    642  
     650        static String currFpsString = "Current FPS: "; 
     651        static String avgFpsString = "Average FPS: "; 
     652        static String bestFpsString = "Best FPS: "; 
     653        static String worstFpsString = "Worst FPS: "; 
     654        static String trisString = "Triangle Count: "; 
     655 
     656        mAvgFps += mWindow->getStatistics().lastFPS; 
     657        ++ mFrameCount; 
     658         
     659        float avgFps = (float)mAvgFps / (float)mFrameCount; 
     660     
    643661        // update stats when necessary 
    644662    try  
     
    651669                const RenderTarget::FrameStats& stats = mWindow->getStatistics(); 
    652670 
    653                 guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS)); 
    654                 guiCurr->setCaption(currFps + StringConverter::toString(stats.lastFPS)); 
    655                 guiBest->setCaption(bestFps + StringConverter::toString(stats.bestFPS) 
     671                //guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS)); 
     672                guiAvg->setCaption(avgFpsString + StringConverter::toString(avgFps)); 
     673                guiCurr->setCaption(currFpsString + StringConverter::toString(stats.lastFPS)); 
     674                guiBest->setCaption(bestFpsString + StringConverter::toString(stats.bestFPS) 
    656675                        +" "+StringConverter::toString(stats.bestFrameTime)+" ms"); 
    657                 guiWorst->setCaption(worstFps + StringConverter::toString(stats.worstFPS) 
     676                guiWorst->setCaption(worstFpsString + StringConverter::toString(stats.worstFPS) 
    658677                        +" "+StringConverter::toString(stats.worstFrameTime)+" ms"); 
    659678 
    660679                OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement("Core/NumTris"); 
    661         guiTris->setCaption(tris + StringConverter::toString(stats.triangleCount)); 
     680        guiTris->setCaption(trisString + StringConverter::toString(stats.triangleCount)); 
    662681 
    663682                OverlayElement* guiDbg = OverlayManager::getSingleton().getOverlayElement("Core/DebugText"); 
  • trunk/VUT/work/TestCullingTerrain/TerrainFrameListener.h

    r146 r147  
    126126protected: 
    127127 
     128        void resetStats(); 
     129 
    128130        /** Clamp camera to terrain. 
    129131        */ 
     
    228230        bool mShowQueryStats; 
    229231 
     232        unsigned long mAvgFps; 
     233        unsigned long mFrameCount; 
    230234        //bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn; 
    231235}; 
Note: See TracChangeset for help on using the changeset viewer.