Ignore:
Timestamp:
12/14/06 09:16:08 (18 years ago)
Author:
mattausch
Message:
 
File:
1 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); 
Note: See TracChangeset for help on using the changeset viewer.