Changeset 1692


Ignore:
Timestamp:
10/27/06 21:31:39 (18 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/Lib/Vis/Preprocessing
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/scripts/vsposp_typical.env

    r1654 r1692  
    173173         
    174174        Evaluation { 
    175                 samplesPerPass 100000 
    176                 samples 100000 
     175                samplesPerPass 10000 
     176                samples 50000 
    177177                statsPrefix ../scripts/viewCells 
    178178        } 
     
    233233        Construction { 
    234234 
    235                 samples 200000 
     235                samples 20000 
    236236 
    237237                # type 0 = sequential computation, 1 = interleaved, 2 = gradient 
  • GTP/trunk/Lib/Vis/Preprocessing/src/BvHierarchy.cpp

    r1687 r1692  
    5959mMailbox(0), 
    6060mMemoryIncr(0), 
     61mRenderCostDecr(0),  
    6162mPvsEntriesIncr(0), 
    6263mTimeStamp(0) 
     
    7071mMailbox(0), 
    7172mMemoryIncr(0), 
     73mRenderCostDecr(0),  
    7274mPvsEntriesIncr(0), 
    7375mTimeStamp(0) 
     
    11041106{ 
    11051107        //-- insert object queries 
    1106         ObjectContainer *objects =  
    1107                 mUseGlobalSorting ? tData.mSortedObjects[axis] : &tData.mNode->mObjects; 
     1108        ObjectContainer *objects = mUseGlobalSorting ?  
     1109                tData.mSortedObjects[axis] : &tData.mNode->mObjects; 
    11081110 
    11091111        CreateLocalSubdivisionCandidates(*objects, &mSubdivisionCandidates, !mUseGlobalSorting, axis); 
     
    12841286                                } 
    12851287                                else 
    1286                                 {       cout << "e rays: " << tData.mNumRays << " "; 
     1288                                {       //cout << "e rays: " << tData.mNumRays << " "; 
    12871289                                        ////////////////// 
    12881290                                        //-- view cells not constructed yet     => use surface area heuristic                    
     
    21272129                BvhInterior *oldInterior = dynamic_cast<BvhInterior *>(oldNode); 
    21282130                 
     2131                sc->mFrontObjects.clear(); 
     2132                sc->mBackObjects.clear(); 
     2133 
    21292134                oldInterior->GetFront()->CollectObjects(sc->mFrontObjects); 
    21302135                oldInterior->GetBack()->CollectObjects(sc->mBackObjects); 
     
    21362141                currentNode = SubdivideNode(*sc, tFrontData, tBackData); 
    21372142         
    2138                 oldNode->mRenderCostDecr += sc->GetRenderCostDecrease(); 
    2139                 oldNode->mPvsEntriesIncr += sc->GetPvsEntriesIncr(); 
    2140 cout << "here5" << endl; 
     2143                //oldNode->mRenderCostDecr += sc->GetRenderCostDecrease(); 
     2144                //oldNode->mPvsEntriesIncr += sc->GetPvsEntriesIncr(); 
     2145                 
     2146                oldNode->mRenderCostDecr = sc->GetRenderCostDecrease(); 
     2147                oldNode->mPvsEntriesIncr = sc->GetPvsEntriesIncr(); 
     2148                 
    21412149                /////////////////////////// 
    21422150                //-- push the new split candidates on the queue 
  • GTP/trunk/Lib/Vis/Preprocessing/src/HierarchyManager.cpp

    r1687 r1692  
    16301630 
    16311631 
    1632 void HierarchyManager::EvaluateSubdivision(const VssRayContainer &sampleRays,                                                                                                                                              const ObjectContainer &objects, 
     1632void HierarchyManager::EvaluateSubdivision(const VssRayContainer &sampleRays,                                                                                                                                               
     1633                                                                                   const ObjectContainer &objects, 
    16331634                                                                                   const string &filename) 
    16341635{ 
     
    16811682        ViewCellContainer viewCells; 
    16821683        mVspTree->CollectViewCells(viewCells, false); 
    1683         CLEAR_CONTAINER(viewCells); 
    1684  
     1684         
    16851685        // helper trees can be destroyed 
    16861686        DEL_PTR(mVspTree); 
    16871687        DEL_PTR(mBvHierarchy); 
     1688 
     1689        CLEAR_CONTAINER(viewCells); 
    16881690 
    16891691        // reset hierarchies 
     
    17261728        { 
    17271729                SubdivisionCandidate *nextCandidate = NextSubdivisionCandidate(tQueue); 
    1728                  
    1729                 cout << "next candidate: " << nextCandidate->GetPriority() << endl; 
     1730                bool isLeaf; 
     1731                int timeStamp; 
     1732                float rcDecr;  
     1733                int entriesIncr;  
    17301734 
    17311735        if (nextCandidate->Type() == SubdivisionCandidate::VIEW_SPACE) 
    17321736                { 
    1733                         cout << "here8" << endl; 
    1734                         mVspTree->SubdivideAndCopy(tQueue, nextCandidate); 
    1735  
     1737                        timeStamp = (int)-nextCandidate->GetPriority(); 
     1738 
     1739                        VspNode *newNode = mVspTree->SubdivideAndCopy(tQueue, nextCandidate); 
    17361740                        VspNode *oldNode = (VspNode *)nextCandidate->mEvaluationHack; 
    17371741                         
    1738                         totalRenderCost -= oldNode->mRenderCostDecr; 
    1739                         entriesInPvs += oldNode->mPvsEntriesIncr; 
     1742                        isLeaf = newNode->IsLeaf(); 
     1743                        rcDecr = oldNode->mRenderCostDecr; 
     1744                        entriesIncr = oldNode->mPvsEntriesIncr; 
    17401745                } 
    17411746                else 
    1742                 {cout << "here9" << endl; 
    1743                         mBvHierarchy->SubdivideAndCopy(tQueue, nextCandidate); 
     1747                { 
     1748                        timeStamp = (int)-nextCandidate->GetPriority(); 
    17441749                         
     1750                        BvhNode *newNode = mBvHierarchy->SubdivideAndCopy(tQueue, nextCandidate); 
    17451751                        BvhNode *oldNode = (BvhNode *)nextCandidate->mEvaluationHack; 
    17461752                         
    1747                         totalRenderCost -= oldNode->mRenderCostDecr; 
    1748                         entriesInPvs += oldNode->mPvsEntriesIncr; 
     1753                        isLeaf = newNode->IsLeaf(); 
     1754                        rcDecr = oldNode->mRenderCostDecr; 
     1755                        entriesIncr = oldNode->mPvsEntriesIncr; 
    17491756                }                
    1750  
    1751                 ++ steps; 
    1752                 cout << "rc: " << nextCandidate->GetRenderCostDecrease() << endl; 
    1753                 cout << "pvs: " << nextCandidate->GetPvsEntriesIncr() << endl; 
    1754  
    1755                 const float memoryCost = (float)entriesInPvs * (float)ObjectPvs::GetEntrySize(); 
    1756                 UpdateStats(stats, steps, totalRenderCost, entriesInPvs, memoryCost, false); 
     1757                                 
     1758                if (!isLeaf) 
     1759                { 
     1760                        totalRenderCost -= rcDecr; 
     1761                        entriesInPvs += entriesIncr; 
     1762                        // if (rcDecr <= 0) 
     1763                        if (nextCandidate->Type() == SubdivisionCandidate::VIEW_SPACE)  
     1764                                cout << "v";//cout << "vsp t: " << timeStamp << " rc: " << rcDecr << " pvs: " << entriesIncr << endl; 
     1765                        else 
     1766                                cout << "o";//"osp t: " << timeStamp << " rc: " << rcDecr << " pvs: " << entriesIncr << endl; 
     1767 
     1768                        ++ steps; 
     1769 
     1770                        if ((steps % 500) == 499) 
     1771                                cout << steps << " steps taken" << endl; 
     1772                        const float memoryCost = (float)entriesInPvs * (float)ObjectPvs::GetEntrySize(); 
     1773                        UpdateStats(stats, steps, totalRenderCost, entriesInPvs, memoryCost, false); 
     1774                } 
     1775 
     1776                DEL_PTR(nextCandidate); 
    17571777        } 
    17581778 
  • GTP/trunk/Lib/Vis/Preprocessing/src/IntersectableWrapper.cpp

    r1587 r1692  
    6565        const float sum = a + b + c; 
    6666 
    67         // scale so we get value between zero and one 
     67        // scale so we get vaccumated value of 1 
    6868        if (sum) 
    6969        { 
     
    7373        } 
    7474 
    75         //cout << "a " << a << "b: " << b << "c: " << c << endl; 
     75        //cout << "a: " << a << " b: " << b << " c: " << c << " sum: " << sum << endl; 
    7676        point = mItem.mVertices[0] * a + mItem.mVertices[1] * b + mItem.mVertices[2] * c; 
    7777        normal = mItem.GetNormal(); 
  • GTP/trunk/Lib/Vis/Preprocessing/src/RayInfo.h

    r1149 r1692  
    9494 
    9595        friend void GetRayInfoSets(const RayInfoContainer &sourceRays, 
    96                 const int maxSize, 
    97                 RayInfoContainer &usedRays, 
    98                 RayInfoContainer *savedRays = NULL); 
     96                                                           const int maxSize, 
     97                                                           RayInfoContainer &usedRays, 
     98                                                           RayInfoContainer *savedRays = NULL); 
    9999}; 
    100100 
  • GTP/trunk/Lib/Vis/Preprocessing/src/SamplingStrategy.cpp

    r1588 r1692  
    3535        Vector3 point; 
    3636        Vector3 normal; 
    37            
     37        //cout << "y"; 
    3838        const int i = (int)RandomValue(0, (float)mPreprocessor.mObjects.size() - 0.5f); 
    3939 
     
    6666         
    6767        Vector3 normal; 
    68          
     68        //cout << "x"; 
    6969        object->GetRandomSurfacePoint(origin, normal); 
    7070        direction = UniformRandomVector(normal); 
     
    137137        mPreprocessor.mViewCellsManager->GetViewPoint(origin); 
    138138        direction = mPreprocessor.mKdTree->GetBox().GetRandomPoint() - origin; 
    139          
     139        //cout << "z"; 
    140140        const float c = Magnitude(direction); 
    141141 
  • GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsManager.cpp

    r1686 r1692  
    3838// HACK 
    3939const static bool SAMPLE_AFTER_SUBDIVISION = true; 
    40 const static bool CLAMP_TO_BOX = true; 
     40const static bool CLAMP_TO_BOX = false; 
    4141 
    4242template <typename T> class myless 
     
    56175617} 
    56185618 
    5619 #if 1 
     5619 
     5620#if 0 
    56205621#if TEST_EVALUATION 
    56215622void VspOspViewCellsManager::EvalViewCellPartition() 
     
    57445745    cout << "Evaluating view cell partition ... " << endl; 
    57455746 
     5747        VssRayContainer evaluationSamples; 
     5748 
    57465749        while (castSamples < numSamples) 
    57475750        {                
     
    57495752                //-- we have to use uniform sampling strategy for construction rays 
    57505753 
    5751                 VssRayContainer evaluationSamples; 
     5754                //VssRayContainer evaluationSamples; 
    57525755                const int samplingType = mEvaluationSamplingType; 
    57535756 
     
    57915794                Debug << "statistis compted in " << timeDiff * 1e-3 << " secs" << endl; 
    57925795         
    5793                 disposeRays(evaluationSamples, NULL); 
    5794         } 
     5796                //disposeRays(evaluationSamples, NULL); 
     5797        } 
     5798         
     5799        disposeRays(evaluationSamples, NULL); 
     5800 
    57955801} 
    57965802#endif 
  • GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsManager.h

    r1686 r1692  
    11021102 
    11031103//#if TEST_EVALUATION 
    1104         virtual void EvalViewCellPartition(); 
     1104        //virtual void EvalViewCellPartition(); 
    11051105//#endif 
    11061106 
  • GTP/trunk/Lib/Vis/Preprocessing/src/VspTree.cpp

    r1687 r1692  
    192192mTreeValid(true),  
    193193mMemoryIncr(0), 
     194mRenderCostDecr(0), 
    194195mPvsEntriesIncr(0), 
    195196mTimeStamp(0) 
     
    750751        if (newNode->IsLeaf()) // subdivision terminated 
    751752        { 
     753                VspLeaf *leaf = dynamic_cast<VspLeaf *>(newNode); 
     754                 
     755#if 0 
     756        ///////////// 
     757                //-- store pvs optained from rays 
     758 
    752759                // view cell is created during subdivision 
    753                 VspLeaf *leaf = dynamic_cast<VspLeaf *>(newNode); 
    754760                ViewCell *viewCell = leaf->GetViewCell(); 
    755761 
    756762                int conSamp = 0; 
    757763                float sampCon = 0.0f; 
    758  
    759 #if 0 
    760                 ///////////// 
    761                 //-- store pvs optained from rays 
    762764 
    763765                AddSamplesToPvs(leaf, *tData.mRays, sampCon, conSamp); 
     
    15171519 
    15181520                float t; 
     1521                 
     1522                // classify ray 
     1523                const int cf = rayInf.ComputeRayIntersection(candidatePlane.mAxis,  
     1524                                                                                                         candidatePlane.mPosition,  
     1525                                                                                                         t); 
     1526 
    15191527                VssRay *ray = rayInf.mRay; 
    1520  
    1521                 // classify ray 
    1522                 const int cf =  
    1523                         rayInf.ComputeRayIntersection(candidatePlane.mAxis,  
    1524                                                                                   candidatePlane.mPosition, t); 
    15251528 
    15261529                // evaluate contribution of ray endpoint to front  
    15271530                // and back pvs with respect to the classification 
    1528                 UpdateContributionsToPvs(*ray, true, cf, pvsFront, pvsBack, totalPvs);   
     1531                UpdateContributionsToPvs(*ray, true, cf, pvsFront, pvsBack, totalPvs); 
    15291532#if COUNT_ORIGIN_OBJECTS 
    15301533                UpdateContributionsToPvs(*ray, false, cf, pvsFront, pvsBack, totalPvs); 
    15311534#endif 
    15321535        } 
    1533  
     1536     
    15341537        AxisAlignedBox3 frontBox; 
    15351538        AxisAlignedBox3 backBox; 
     
    33033306                // create new interior node and two leaf node 
    33043307                const AxisAlignedPlane splitPlane = oldInterior->GetPlane(); 
    3305                  
     3308         
     3309                sc->mSplitPlane = splitPlane; 
     3310         
    33063311                // evaluate the changes in render cost and pvs entries 
    33073312                EvalSubdivisionCandidate(*sc, false); 
     
    33093314                newNode = SubdivideNode(splitPlane, tData, tFrontData, tBackData); 
    33103315         
    3311                 oldNode->mRenderCostDecr += sc->GetRenderCostDecrease(); 
    3312                 oldNode->mPvsEntriesIncr += sc->GetPvsEntriesIncr(); 
    3313 cout << "here4" << endl; 
    3314                  
     3316                //oldNode->mRenderCostDecr += sc->GetRenderCostDecrease(); 
     3317                //oldNode->mPvsEntriesIncr += sc->GetPvsEntriesIncr(); 
     3318 
     3319                oldNode->mRenderCostDecr = sc->GetRenderCostDecrease(); 
     3320                oldNode->mPvsEntriesIncr = sc->GetPvsEntriesIncr(); 
     3321 
    33153322                ///////////// 
    33163323                //-- evaluate new split candidates for global greedy cost heuristics 
     
    33383345        if (newNode->IsLeaf()) // subdivision terminated 
    33393346        { 
    3340                 // view cell is created during subdivision 
    3341                 VspLeaf *leaf = dynamic_cast<VspLeaf *>(newNode); 
    3342                 ViewCell *viewCell = leaf->GetViewCell(); 
    3343  
    3344                 int conSamp = 0; 
    3345                 float sampCon = 0.0f; 
    3346  
    3347 #if 0 
    3348                 ///////////// 
    3349                 //-- store pvs optained from rays 
    3350  
    3351                 AddSamplesToPvs(leaf, *tData.mRays, sampCon, conSamp); 
    3352  
    3353                 // update scalar pvs size value 
    3354                 ObjectPvs &pvs = viewCell->GetPvs(); 
    3355                 mViewCellsManager->UpdateScalarPvsSize(viewCell, pvs.CountObjectsInPvs(), pvs.GetSize()); 
    3356  
    3357                 mVspStats.contributingSamples += conSamp; 
    3358                 mVspStats.sampleContributions += (int)sampCon; 
    3359 #endif 
    3360                 if (mStoreRays) 
    3361                 { 
    3362                         ////////// 
    3363                         //-- store rays piercing this view cell 
    3364                         RayInfoContainer::const_iterator it, it_end = tData.mRays->end(); 
    3365                         for (it = tData.mRays->begin(); it != it_end; ++ it) 
    3366                         { 
    3367                                 (*it).mRay->Ref();                       
    3368                                 leaf->mVssRays.push_back((*it).mRay); 
    3369                                 //leaf->mVssRays.push_back(new VssRay(*(*it).mRay)); 
    3370                         } 
    3371                 } 
    3372  
    3373                 // finally evaluate statistics for this leaf 
    3374                 EvaluateLeafStats(tData); 
    3375                 // detach subdivision candidate: this leaf is no candidate for 
    3376                 // splitting anymore 
     3347                // detach subdivision candidate: this leaf is no candidate for splitting anymore 
    33773348                tData.mNode->SetSubdivisionCandidate(NULL);  
    33783349                // detach node so it won't get deleted 
Note: See TracChangeset for help on using the changeset viewer.