Ignore:
Timestamp:
02/27/06 18:39:47 (19 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

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

    r663 r664  
    4545        environment->GetBoolValue("ViewCells.Visualization.exportGeometry", mExportGeometry); 
    4646        environment->GetFloatValue("ViewCells.maxPvsRatio", mMaxPvsRatio); 
     47         
    4748        bool emptyViewCells = false; 
    4849        environment->GetBoolValue("ViewCells.pruneEmptyViewCells", emptyViewCells); 
     50        mMinPvsSize = emptyViewCells ? 1 : 0; 
     51 
    4952        environment->GetBoolValue("ViewCells.processOnlyValidViewCells", mOnlyValidViewCells); 
    5053 
     
    5861        environment->GetBoolValue("ViewCells.exportToFile", mExportViewCells); 
    5962         
    60          
    6163        environment->GetIntValue("ViewCells.active", mNumActiveViewCells); 
    6264        environment->GetBoolValue("ViewCells.PostProcess.compress", mCompressViewCells); 
    6365        environment->GetBoolValue("ViewCells.Visualization.useClipPlane", mUseClipPlaneForViz); 
    64  
    6566        environment->GetBoolValue("ViewCells.PostProcess.merge", mMergeViewCells); 
    66  
    67         char samplingBuf[50]; 
    68         environment->GetStringValue("ViewCells.samplingType", samplingBuf); 
    69          
    70         if (strcmp(samplingBuf, "box") == 0) 
     67        environment->GetBoolValue("ViewCells.evaluateViewCells", mEvaluateViewCells); 
     68 
     69        char buf[100]; 
     70        environment->GetStringValue("ViewCells.samplingType", buf); 
     71 
     72         
     73        if (strcmp(buf, "box") == 0) 
    7174                mSamplingType = Preprocessor::SPATIAL_BOX_BASED_DISTRIBUTION; 
    72         else if (strcmp(samplingBuf, "directional") == 0) 
     75        else if (strcmp(buf, "directional") == 0) 
    7376                mSamplingType = Preprocessor::DIRECTION_BASED_DISTRIBUTION; 
    7477 
    7578#if 0 
    76  
    77                 char viewCellsStatsLog[100]; 
    78                 environment->GetStringValue("ViewCells.stats", viewCellsStats); 
    79                 mViewCellsStats.open(viewCellsStatsLog); 
     79        environment->GetStringValue("ViewCells.stats", buf); 
     80        mViewCellsStats.open(buf); 
    8081#endif 
    8182 
    82         mMinPvsSize = emptyViewCells ? 1 : 0; 
    83  
    84         char buf[50]; 
    8583        environment->GetStringValue("ViewCells.Visualization.colorCode", buf); 
    8684 
     
    9492                mColorCode = 0; 
    9593 
    96         Debug << "colorCode: " << mColorCode << endl; 
     94 
     95        Debug << "***********View Cells options ****************" << endl; 
     96        Debug << "color code: " << mColorCode << endl; 
     97 
     98        Debug << "export rays: " << mExportRays << endl; 
     99        Debug << "export geometry: " << mExportGeometry << endl; 
     100        Debug << "max pvs ratio: " << mMaxPvsRatio << endl; 
     101         
     102        Debug << "prune empty view cells: " << emptyViewCells << endl; 
     103         
     104        Debug << "process only valid view cells: " << mOnlyValidViewCells << endl; 
     105        Debug << "construction samples: " << mConstructionSamples << endl; 
     106        Debug << "post process samples: " << mPostProcessSamples << endl; 
     107        Debug << "post process use rays for merge: " << mUseRaysForMerge << endl; 
     108        Debug << "visualization samples: " << mVisualizationSamples << endl; 
     109        Debug << "construction samples per pass: " << mSamplesPerPass << endl; 
     110        Debug << "export to file: " << mExportViewCells << endl; 
     111         
     112        Debug << "active: " << mNumActiveViewCells << endl; 
     113        Debug << "post process compress: " << mCompressViewCells << endl; 
     114        Debug << "visualization use clipPlane: " << mUseClipPlaneForViz << endl;  
     115        Debug << "post process merge: " << mMergeViewCells << endl; 
     116        Debug << "evaluate view cells: " << mEvaluateViewCells << endl; 
     117        Debug << "sampling type: " << mSamplingType << endl; 
     118 
     119        Debug << endl; 
    97120} 
    98121 
     
    213236        const int n = mConstructionSamples; //+initialSamples; 
    214237 
    215         bool dirSamples = false; 
     238        bool dirSamples = mSamplingType; 
    216239 
    217240        while (numSamples < n) 
     
    298321        disposeRays(visualizationSamples, outRays); 
    299322 
     323        if (mEvaluateViewCells) 
     324        { 
     325                Debug << "Evaluatating view cells!!!" << endl; 
     326        EvalViewCellPartition(preprocessor); 
     327        } 
     328        else 
     329                Debug << "No evaluation!!" << endl; 
     330 
    300331        return numSamples; 
    301332} 
    302333 
    303334 
    304 void ViewCellsManager::EvalViewCellPartition() 
     335void ViewCellsManager::EvalViewCellPartition(Preprocessor *preprocessor) 
    305336{ 
    306337        int samplesPerPass; 
     
    308339        int castSamples = 0; 
    309340 
     341        char s[64];  
     342 
    310343        environment->GetIntValue("ViewCells.Evaluation.samplesPerPass", samplesPerPass); 
    311344        environment->GetIntValue("ViewCells.Evaluation.samples", numSamples); 
    312345 
    313         Debug << "view cells evaluation samples per pass: " << samplesPerPass << endl; 
    314         Debug << "view cells evaluation samples: " << numSamples << endl; 
     346        char statsPrefix[100]; 
     347        environment->GetStringValue("ViewCells.Evaluation.statsPrefix", statsPrefix); 
     348 
     349        Debug << "view cell evaluation samples per pass: " << samplesPerPass << endl; 
     350        Debug << "view cell evaluation samples: " << numSamples << endl; 
     351        Debug << "view cell stats prefix: " << statsPrefix << endl; 
     352 
     353        //VssRayContainer outRays; 
     354 
     355        int dirSamples = mSamplingType; 
     356 
     357        if (0) 
     358                mViewCellsTree->ResetPvs(); 
     359 
     360        cout << "Evaluating view cell partition" << endl; 
     361 
     362        ViewCellContainer leaves; 
     363        mViewCellsTree->CollectLeaves(mViewCellsTree->GetRoot(), leaves); 
    315364 
    316365        while (castSamples < numSamples) 
    317366        { 
    318  
    319         } 
    320         //char s[64]; sprintf(s, "bsp-pvs%04d.x3d", i); 
     367                VssRayContainer evaluationSamples; 
     368 
     369                const int samplingType =  
     370                        dirSamples ?  
     371                                                Preprocessor::DIRECTION_BASED_DISTRIBUTION : 
     372                                                Preprocessor::SPATIAL_BOX_BASED_DISTRIBUTION; 
     373 
     374                //-- construction rays => we use uniform samples for this 
     375                CastPassSamples(samplesPerPass, samplingType, evaluationSamples); 
     376                 
     377                castSamples += samplesPerPass; 
     378 
     379                cout << "casting " << (int)evaluationSamples.size() << " samples " << endl; 
     380 
     381                ComputeSampleContributions(evaluationSamples, true, false); 
     382 
     383                cout << "compute new statistics ... "; 
     384 
     385                ViewCellContainer::const_iterator it, it_end = leaves.end(); 
     386 
     387                for (it = leaves.begin(); it != it_end; ++ it) 
     388                { 
     389                        mViewCellsTree->PropagatePvs(*it); 
     390                } 
     391 
     392                // output stats 
     393                sprintf(s, "Stats-%09d-eval.log", castSamples); 
     394                string fileName = string(statsPrefix) + string(s); 
     395 
     396                mViewCellsTree->ExportStats(fileName); 
     397 
     398                cout << "finished" << endl; 
     399         
     400                disposeRays(evaluationSamples, NULL); 
     401        } 
    321402} 
    322403 
     
    446527 
    447528  float sum = 0.0f; 
    448   for (it = rays.begin(); it != it_end; ++ it) { 
    449         sum += ComputeSampleContributions(*(*it), addRays, storeViewCells); 
    450         //ComputeSampleContributions(*(*it), addRays); 
    451         //      sum += (*it)->mPvsContribution; 
     529  for (it = rays.begin(); it != it_end; ++ it)  
     530  { 
     531          sum += ComputeSampleContributions(*(*it), addRays, storeViewCells); 
     532          //ComputeSampleContributions(*(*it), addRays); 
     533          //    sum += (*it)->mPvsContribution; 
    452534  } 
     535 
    453536  return sum; 
    454537} 
     
    885968 
    886969        CastLineSegment(origin, termination, viewcells); 
    887          
     970 
    888971        // copy viewcells memory efficiently 
    889972        //const bool storeViewcells = !addRays; 
     
    897980        ViewCellContainer::const_iterator it = viewcells.begin(); 
    898981 
    899  
    900   for (; it != viewcells.end(); ++it) { 
    901         ViewCell *viewcell = *it; 
    902         if (viewcell->GetValid()) { 
    903           // if ray not outside of view space 
    904           float contribution; 
    905           if (viewcell->GetPvs().GetSampleContribution(ray.mTerminationObject, 
    906                                                                                                    ray.mPdf, 
    907                                                                                                    contribution 
    908                                                                                                    )) 
    909                 ray.mPvsContribution++; 
    910           ray.mRelativePvsContribution += contribution; 
    911         } 
    912   } 
    913  
    914   if (addRays) 
    915         for (it = viewcells.begin(); it != viewcells.end(); ++it) { 
    916           ViewCell *viewcell = *it; 
    917           if (viewcell->GetValid()) { 
    918                 // if ray not outside of view space 
    919                 viewcell->GetPvs().AddSample(ray.mTerminationObject, ray.mPdf); 
    920           } 
     982        for (; it != viewcells.end(); ++ it)  
     983        { 
     984                ViewCell *viewcell = *it; 
     985                if (viewcell->GetValid())  
     986                { 
     987                        // if ray not outside of view space 
     988                        float contribution; 
     989                        if (viewcell->GetPvs().GetSampleContribution(ray.mTerminationObject, 
     990                                                                                                                 ray.mPdf, 
     991                                                                                                                 contribution)) 
     992                        { 
     993                                ++ ray.mPvsContribution; 
     994                                ray.mRelativePvsContribution += contribution; 
     995                        } 
     996                } 
     997        } 
     998 
     999         
     1000        if (addRays) 
     1001        { 
     1002                for (it = viewcells.begin(); it != viewcells.end(); ++ it)  
     1003                { 
     1004                        ViewCell *viewcell = *it; 
     1005             
     1006                        if (viewcell->GetValid())  
     1007                        { 
     1008                                // if ray not outside of view space 
     1009                                viewcell->GetPvs().AddSample(ray.mTerminationObject, ray.mPdf); 
     1010                        } 
     1011                } 
    9211012        } 
    9221013 
     
    24712562        } 
    24722563        else  
    2473         { 
    2474                 // we can use the view cells tree hierarchy to get the right set 
     2564        {       // we can use the view cells tree hierarchy to get the right set 
    24752565                mViewCellsTree->CollectBestViewCellSet(mViewCells, mNumActiveViewCells); 
    24762566        } 
     
    25092599 
    25102600        Debug << "samples used for vsp bsp subdivision: " << mInitialSamples  
    2511                   << " rays: " << (int)rays.size() << endl; 
     2601                  << ", actual rays: " << (int)rays.size() << endl; 
    25122602 
    25132603        GetRaySets(rays, mInitialSamples, constructionRays, &savedRays); 
Note: See TracChangeset for help on using the changeset viewer.