Ignore:
Timestamp:
10/05/06 18:51:15 (18 years ago)
Author:
mattausch
Message:

added measurement for pvs entries size decrease during subdivision

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/BvHierarchy.cpp

    r1571 r1576  
    369369 
    370370    // how often was max cost ratio missed in this branch? 
    371         frontData.mMaxCostMisses = sc.mMaxCostMisses; 
    372         backData.mMaxCostMisses = sc.mMaxCostMisses; 
     371        frontData.mMaxCostMisses = sc.GetMaxCostMisses(); 
     372        backData.mMaxCostMisses = sc.GetMaxCostMisses(); 
    373373         
    374374        // assign the objects in sorted order 
     
    475475        const bool maxCostRatioViolated = mTermMaxCostRatio < ratio; 
    476476 
    477         splitCandidate.mMaxCostMisses = maxCostRatioViolated ?  
     477        splitCandidate.SetMaxCostMisses(maxCostRatioViolated ?  
    478478                splitCandidate.mParentData.mMaxCostMisses + 1 : 
    479                 splitCandidate.mParentData.mMaxCostMisses; 
     479                splitCandidate.mParentData.mMaxCostMisses); 
    480480 
    481481        const float oldProp = EvalViewCellsVolume(leaf->mObjects); 
     
    488488 
    489489        const float renderCostDecr = oldRenderCost - newRenderCost; 
     490        const int pvsEntriesIncr = EvalPvsEntriesIncr(splitCandidate); 
    490491 
    491492#ifdef _DEBUG 
     
    494495        Debug << "render cost decrease: " << renderCostDecr << endl; 
    495496#endif 
     497 
    496498        splitCandidate.SetRenderCostDecrease(renderCostDecr); 
     499        splitCandidate.SetPvsEntriesIncr(EvalPvsEntriesIncr(splitCandidate)); 
    497500 
    498501#if 1 
     
    510513 
    511514 
     515int BvHierarchy::EvalPvsEntriesIncr(BvhSubdivisionCandidate &splitCandidate) const 
     516{ 
     517        const int oldPvsSize = CountViewCells(splitCandidate.mParentData.mNode->mObjects); 
     518         
     519        const int fPvsSize = CountViewCells(splitCandidate.mFrontObjects); 
     520        const int bPvsSize = CountViewCells(splitCandidate.mBackObjects); 
     521 
     522        return fPvsSize + bPvsSize - oldPvsSize; 
     523} 
     524 
     525 
    512526inline bool BvHierarchy::LocalTerminationCriteriaMet(const BvhTraversalData &data) const 
    513527{ 
     
    515529        return ( 0 
    516530                || ((int)data.mNode->mObjects.size() <= mTermMinObjects) 
    517                 || (data.mProbability <= mTermMinProbability) 
    518                 || (data.mDepth >= mTermMaxDepth) 
    519                 || (data.mNumRays <= mTermMinRays) 
     531                //|| (data.mProbability <= mTermMinProbability) 
     532                //|| (data.mNumRays <= mTermMinRays) 
    520533                 ); 
    521534} 
     
    10631076        return vol; 
    10641077} 
     1078 
    10651079/////////////////////////////////////////////////////////// 
    10661080 
     
    12891303                        return 0.0f; 
    12901304 
    1291                 //////////////////// 
     1305                //////////////// 
    12921306                //-- surface area heuristics 
    12931307 
     
    12981312        } 
    12991313        else 
    1300         {       //////////////////// 
     1314        {       /////////////// 
    13011315                //-- render cost heuristics 
    13021316 
    13031317                const float viewSpaceVol = mViewCellsManager->GetViewSpaceBox().GetVolume(); 
     1318 
    13041319                // probability that view point lies in a view cell which sees this node 
    13051320                const float p = EvalViewCellsVolume(objects) / viewSpaceVol;     
     
    14041419                for (vit = tmpViewCells.begin(); vit != vit_end; ++ vit) 
    14051420                { 
    1406                         VspViewCell *vc = dynamic_cast<VspViewCell *>(*vit); 
     1421                        //VspViewCell *vc = dynamic_cast<VspViewCell *>(*vit); 
     1422                        ViewCell *vc = *vit; 
    14071423 
    14081424                        // store view cells 
     
    14261442                } 
    14271443        } 
     1444} 
     1445 
     1446 
     1447int BvHierarchy::CountViewCells(Intersectable *obj) const 
     1448{ 
     1449        int result = 0; 
     1450         
     1451        VssRayContainer::const_iterator rit, rit_end = obj->mVssRays.end(); 
     1452 
     1453        for (rit = obj->mVssRays.begin(); rit < rit_end; ++ rit) 
     1454        { 
     1455                VssRay *ray = (*rit); 
     1456                ViewCellContainer tmpViewCells; 
     1457         
     1458                mHierarchyManager->mVspTree->GetViewCells(*ray, tmpViewCells); 
     1459                 
     1460                ViewCellContainer::const_iterator vit, vit_end = tmpViewCells.end(); 
     1461                for (vit = tmpViewCells.begin(); vit != vit_end; ++ vit) 
     1462                { 
     1463                        ViewCell *vc = *vit; 
     1464 
     1465                        // store view cells 
     1466                        if (!vc->Mailed()) 
     1467                        { 
     1468                                vc->Mail(); 
     1469                                ++ result; 
     1470                        } 
     1471                } 
     1472        } 
     1473 
     1474        return result; 
     1475} 
     1476 
     1477 
     1478int BvHierarchy::CountViewCells(const ObjectContainer &objects) const 
     1479{ 
     1480        // no view cells yet 
     1481        if (mHierarchyManager->GetViewSpaceSubdivisionType() ==  
     1482                HierarchyManager::NO_VIEWSPACE_SUBDIV) 
     1483                return 1; 
     1484 
     1485        int nViewCells = 0; 
     1486 
     1487        ViewCell::NewMail(); 
     1488 
     1489        ObjectContainer::const_iterator oit, oit_end = objects.end(); 
     1490 
     1491        // loop through all object and collect view cell pvs of this node 
     1492        for (oit = objects.begin(); oit != oit_end; ++ oit) 
     1493        { 
     1494                nViewCells += CountViewCells(*oit); 
     1495        } 
     1496 
     1497        return nViewCells; 
    14281498} 
    14291499 
Note: See TracChangeset for help on using the changeset viewer.