Changeset 1893


Ignore:
Timestamp:
12/14/06 09:16:08 (17 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/Lib/Vis/Preprocessing/src
Files:
4 edited

Legend:

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

    r1890 r1893  
    585585 
    586586 
     587static float AvgRayContribution(const int pvs, const int nRays) 
     588{ 
     589        return (float)pvs / (float)nRays; 
     590} 
     591 
     592 
    587593void BvHierarchy::EvalSubdivisionCandidate(BvhSubdivisionCandidate &splitCandidate,  
    588594                                                                                   bool computeSplitPlane) 
     
    591597        { 
    592598                const bool sufficientSamples =  
    593                                 splitCandidate.mParentData.mNumRays > mMinRaysForVisibility; 
     599                        splitCandidate.mParentData.mNumRays > mMinRaysForVisibility; 
    594600 
    595601                const bool useVisibiliyBasedHeuristics =  
     
    609615                const int previousMisses = splitCandidate.mParentData.mMaxCostMisses; 
    610616 
    611                 splitCandidate.SetMaxCostMisses( 
    612                         maxCostRatioViolated ? previousMisses + 1 : previousMisses); 
     617                splitCandidate.SetMaxCostMisses(maxCostRatioViolated ?  
     618                                                                                previousMisses + 1 : previousMisses); 
    613619        } 
    614620 
     
    629635        const int pvsEntriesIncr = EvalPvsEntriesIncr(splitCandidate); 
    630636        splitCandidate.SetPvsEntriesIncr(pvsEntriesIncr); 
    631  
    632         const int numViewCells = CountViewCells(leaf->mObjects); 
    633  
    634         const float avgRayContrib =  
    635                 (float)splitCandidate.mParentData.mNumRays / (float)numViewCells; 
    636  
    637         cout << "avgRayContrib: " << avgRayContrib << endl; 
     637         
    638638#ifdef GTP_DEBUG 
    639639        Debug << "old render cost: " << oldRenderCost << endl; 
     
    642642#endif 
    643643 
    644         const float priority = EvalPriority(splitCandidate,  
    645                                                                                 oldRenderCost,  
    646                                                                                 renderCostDecr); 
    647          
     644        float priority = EvalPriority(splitCandidate,  
     645                                                                  oldRenderCost,  
     646                                                                  renderCostDecr); 
     647         
     648        // avg ray contri: this leaf is a pvs entry in all the view cells 
     649        // that see one of the objects. 
     650        const int numViewCells = CountViewCells(leaf->mObjects); 
     651         
     652        const float avgRayContri =  
     653                AvgRayContribution(numViewCells, splitCandidate.mParentData.mNumRays); 
     654 
     655        cout << "avgRayContri: " << avgRayContri << endl; 
     656 
     657        // avg ray contri very high. i.e., the result is influenced by undersampling 
     658        // => decrease priority 
     659        if (avgRayContri > 99925) 
     660        { 
     661                priority /= avgRayContri; 
     662        } 
     663 
    648664        // compute global decrease in render cost 
    649665        splitCandidate.SetPriority(priority); 
  • GTP/trunk/Lib/Vis/Preprocessing/src/HierarchyManager.cpp

    r1889 r1893  
    284284 
    285285 
    286 float HierarchyManager::AvgRayContribution(const float pvs, const float rays) const 
    287 { 
    288         return (float)pvs / rays; 
    289 } 
    290  
    291  
    292286void HierarchyManager::EvalSubdivisionStats() 
    293287{ 
  • GTP/trunk/Lib/Vis/Preprocessing/src/HierarchyManager.h

    r1889 r1893  
    265265   
    266266        Intersectable *GetIntersectable(Intersectable *obj, const Vector3 &point) const; 
    267    
    268         float AvgRayContribution(const float pvs, const float rays) const; 
    269267 
    270268        /** Export object space partition bounding boxes. 
  • GTP/trunk/Lib/Vis/Preprocessing/src/VspTree.cpp

    r1845 r1893  
    827827                const int maxCostMisses = splitCandidate.mParentData.mMaxCostMisses; 
    828828                // max cost threshold violated? 
    829                 splitCandidate.SetMaxCostMisses(maxCostRatioViolated  ? maxCostMisses + 1: maxCostMisses); 
     829                splitCandidate.SetMaxCostMisses(maxCostRatioViolated ?  
     830                                                                                maxCostMisses + 1: maxCostMisses); 
    830831        } 
    831832         
     
    848849        const float factor = mRenderCostDecreaseWeight; 
    849850 
    850         float priority; 
    851  
    852         if (1) 
    853         { 
    854                 priority = factor * renderCostDecr + (1.0f - factor) * oldRenderCost; 
    855                 if (mHierarchyManager->mConsiderMemory) 
    856                 { 
    857                         priority /= ((float)splitCandidate.GetPvsEntriesIncr() + mMemoryConst); 
    858                 } 
    859         } 
    860         else 
    861         { 
    862                 if (!mHierarchyManager->mConsiderMemory) 
    863                 { 
    864                         priority = factor * renderCostDecr + (1.0f - factor) * oldRenderCost; 
    865                 } 
    866                 else 
    867                 { 
    868                         const float ratio =  
    869                                 renderCostDecr / ((float)splitCandidate.GetPvsEntriesIncr() + mMemoryConst); 
    870  
    871                         priority = factor * ratio + (1.0f - factor) * oldRenderCost; 
    872                 } 
     851        float priority = factor * renderCostDecr + (1.0f - factor) * oldRenderCost; 
     852 
     853        if (mHierarchyManager->mConsiderMemory) 
     854        { 
     855                priority /= ((float)splitCandidate.GetPvsEntriesIncr() + mMemoryConst); 
     856        } 
     857 
     858        ///////////// 
     859        // avg ray contri 
     860 
     861        const float avgRayContri = splitCandidate.mParentData.GetAvgRayContribution(); 
     862        cout << "vsp avgRayContri: " << avgRayContri << endl; 
     863 
     864        // avg ray contri very high. i.e., the result is influenced by undersampling 
     865        // => decrease priority 
     866        if (avgRayContri > 99925) 
     867        { 
     868                priority /= avgRayContri; 
    873869        } 
    874870 
     
    18691865        VspLeaf *leaf = dynamic_cast<VspLeaf *>(data.mNode); 
    18701866 
    1871  
    18721867        if (data.mPvs > mVspStats.maxPvs) 
    18731868        { 
     
    18851880        { 
    18861881        ++ mVspStats.maxDepthNodes; 
    1887                 //Debug << "new max depth: " << mVspStats.maxDepthNodes << endl; 
    18881882        } 
    18891883 
     
    19081902        ++ mCreatedViewCells; 
    19091903 
    1910 #ifdef GTPGTP_DEBUG 
     1904#ifdef GTP_DEBUG 
    19111905        Debug << "BSP stats: " 
    19121906                  << "Depth: " << data.mDepth << " (max: " << mTermMaxDepth << "), " 
Note: See TracChangeset for help on using the changeset viewer.