Ignore:
Timestamp:
12/15/05 18:45:12 (19 years ago)
Author:
mattausch
Message:

updated rendersimulator

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibilityPreprocessor/src/VssPreprocessor.cpp

    r466 r468  
    2727  environment->GetBoolValue("VssPreprocessor.useImportanceSampling", mUseImportanceSampling); 
    2828  environment->GetIntValue("BspTree.Construction.samples", mBspConstructionSamples); 
    29          
     29 
    3030  mStats.open("stats.log"); 
    3131} 
     
    3737 
    3838void 
    39 VssPreprocessor::SetupRay(Ray &ray,  
    40                                                   const Vector3 &point,  
     39VssPreprocessor::SetupRay(Ray &ray, 
     40                                                  const Vector3 &point, 
    4141                                                  const Vector3 &direction 
    4242                                                  ) 
     
    6262  if (!sbox.IsInside(viewPoint)) 
    6363        return 0; 
    64          
     64 
    6565  SetupRay(ray, viewPoint, direction); 
    6666  // cast ray to KD tree to find intersection with other objects 
     
    8181        } 
    8282        pointA = ray.Extrap(tmax); 
    83                  
     83 
    8484  } 
    8585 
    8686  bool detectEmptyViewSpace = true; 
    87          
     87 
    8888  if (detectEmptyViewSpace) { 
    8989        SetupRay(ray, pointA, -direction); 
    9090  } else 
    9191        SetupRay(ray, viewPoint, -direction); 
    92          
    93          
     92 
     93 
    9494  if (mKdTree->CastRay(ray)) { 
    95                  
     95 
    9696        objectB = ray.intersections[0].mObject; 
    9797        pointB = ray.Extrap(ray.intersections[0].mT); 
     
    105105          //                    cerr<<"ray"<<ray<<endl; 
    106106        } 
    107                  
     107 
    108108        pointB = ray.Extrap(tmax); 
    109109  } 
     
    118118        } 
    119119  } 
    120          
     120 
    121121  if (validSample) { 
    122122        if (objectA) { 
     
    128128          hits ++; 
    129129        } 
    130                  
     130 
    131131        if (objectB) { 
    132132          vssRay = new VssRay(pointA, 
     
    138138        } 
    139139  } 
    140          
     140 
    141141  return hits; 
    142142} 
     
    147147{ 
    148148  AxisAlignedBox3 box; 
    149          
     149 
    150150  if (viewSpaceBox) 
    151151        box =*viewSpaceBox; 
    152   else  
     152  else 
    153153        box = mKdTree->GetBox(); 
    154          
     154 
    155155  // shrink the box in the y direction 
    156156  return box.GetRandomPoint(); 
     
    170170  } else { 
    171171        AxisAlignedBox3 box; 
    172                  
     172 
    173173        if (viewSpaceBox) 
    174174          box =*viewSpaceBox; 
    175         else  
     175        else 
    176176          box = mKdTree->GetBox(); 
    177                  
     177 
    178178        point = box.GetRandomPoint(); 
    179179        point.y = viewpoint.y; 
    180180  } 
    181          
     181 
    182182  return point - viewpoint; 
    183183} 
     
    194194        float maxRayContribution; 
    195195        float avgRayContribution; 
    196                  
     196 
    197197        vssTree->GetRayContributionStatistics(minRayContribution, 
    198198                                                                                  maxRayContribution, 
    199199                                                                                  avgRayContribution); 
    200                  
     200 
    201201        cout<< 
    202202          "#MIN_RAY_CONTRIB\n"<<minRayContribution<<endl<< 
    203203          "#MAX_RAY_CONTRIB\n"<<maxRayContribution<<endl<< 
    204204          "#AVG_RAY_CONTRIB\n"<<avgRayContribution<<endl; 
    205                  
     205 
    206206        float p = desiredSamples/(float)(avgRayContribution*vssTree->stat.Leaves()); 
    207207        num = vssTree->GenerateRays(p, rays); 
     
    210210        num = vssTree->GenerateRays(desiredSamples, leaves, rays); 
    211211  } 
    212          
     212 
    213213  cout<<"Generated "<<num<<" rays."<<endl; 
    214          
     214 
    215215  return num; 
    216216} 
     
    224224{ 
    225225  cout<<"Exporting vss rays..."<<endl<<flush; 
    226          
     226 
    227227  float prob = number/(float)vssRays.size(); 
    228228 
     
    241241        exporter->ResetForcedMaterial(); 
    242242  } 
    243          
     243 
    244244  VssRayContainer rays; for (int i=0; i < vssRays.size(); i++) 
    245245        if (RandomValue(0,1) < prob) 
     
    247247 
    248248  exporter->ExportRays(rays, RgbColor(1, 0, 0)); 
    249          
     249 
    250250  delete exporter; 
    251251 
     
    280280  exporter->SetWireframe(); 
    281281  exporter->ExportKdTree(*mKdTree); 
    282          
     282 
    283283  if (mViewSpaceBox) { 
    284284        exporter->SetForcedMaterial(RgbColor(1,0,0)); 
     
    286286        exporter->ResetForcedMaterial(); 
    287287  } 
    288          
     288 
    289289  exporter->SetForcedMaterial(RgbColor(0,0,1)); 
    290290  exporter->ExportBox(tree->GetBBox(leaf)); 
    291291  exporter->ResetForcedMaterial(); 
    292          
     292 
    293293  VssRayContainer rays[4]; 
    294294  for (int i=0; i < leaf->rays.size(); i++) { 
     
    296296        rays[k].push_back(leaf->rays[i].mRay); 
    297297  } 
    298          
     298 
    299299  // SOURCE RAY 
    300300  exporter->ExportRays(rays[0], RgbColor(1, 0, 0)); 
     
    342342  for (it = viewcells.begin(); it != it_end; ++ it) 
    343343        sum += tree->GetPvsSize(*it); 
    344          
     344 
    345345  return sum/(float)viewcells.size(); 
    346346} 
     
    349349VssPreprocessor::ComputeVisibility() 
    350350{ 
    351    
     351 
    352352  mSceneGraph->CollectObjects(&mObjects); 
    353          
     353 
    354354  long startTime = GetTime(); 
    355    
     355 
    356356  int totalSamples = 0; 
    357357 
     
    368368        box->SetMax(box->Max() + translation); 
    369369  } else { 
    370                  
     370 
    371371        // sample city like heights 
    372372        box->SetMin(1, box->Min(1) + box->Size(1)*0.2); 
     
    376376  if (use2dSampling) 
    377377        box->SetMax(1, box->Min(1)); 
    378          
     378 
    379379  if (useViewSpaceBox) 
    380380        mViewSpaceBox = box; 
    381381  else 
    382382        mViewSpaceBox = NULL; 
    383                  
     383 
    384384 
    385385  VssTree *vssTree = NULL; 
     
    390390        int passSamples = 0; 
    391391        int index = 0; 
    392                  
     392 
    393393        int sampleContributions; 
    394                  
     394 
    395395        int s = Min(mSamplesPerPass, mInitialSamples); 
    396396        for (int k=0; k < s; k++) { 
    397                          
     397 
    398398          Vector3 viewpoint = GetViewpoint(mViewSpaceBox); 
    399399          Vector3 direction = GetDirection(viewpoint, mViewSpaceBox); 
    400                          
     400 
    401401          sampleContributions = CastRay(viewpoint, direction, mVssRays); 
    402                          
    403                          
     402 
     403 
    404404          //-- CORR matt: put block inside loop 
    405405          if (sampleContributions) { 
     
    410410          totalSamples++; 
    411411        } 
    412      
     412 
    413413        mPass++; 
    414                  
     414 
    415415        int pvsSize = 0; 
    416         float avgRayContrib = (passContributingSamples > 0) ?  
     416        float avgRayContrib = (passContributingSamples > 0) ? 
    417417          passSampleContributions/(float)passContributingSamples : 0; 
    418                  
     418 
    419419        cout << "#Pass " << mPass << " : t = " << TimeDiff(startTime, GetTime())*1e-3 << "s" << endl; 
    420         cout << "#TotalSamples=" << totalSamples/1000  
    421                  << "k   #SampleContributions=" << passSampleContributions << " ("  
     420        cout << "#TotalSamples=" << totalSamples/1000 
     421                 << "k   #SampleContributions=" << passSampleContributions << " (" 
    422422                 << 100*passContributingSamples/(float)passSamples<<"%)" << " avgPVS=" 
    423                  << pvsSize/(float)mObjects.size() << endl  
     423                 << pvsSize/(float)mObjects.size() << endl 
    424424                 << "avg ray contrib=" << avgRayContrib << endl; 
    425                  
     425 
    426426        mStats << 
    427427          "#Pass\n" <<mPass<<endl<< 
    428428          "#Time\n" << TimeDiff(startTime, GetTime())*1e-3 << endl<< 
    429429          "#TotalSamples\n" << totalSamples<< endl<< 
    430           "#SampleContributions\n" << passSampleContributions << endl <<  
     430          "#SampleContributions\n" << passSampleContributions << endl << 
    431431          "#PContributingSamples\n"<<100*passContributingSamples/(float)passSamples<<endl << 
    432432          "#AvgPVS\n"<< pvsSize/(float)mObjects.size() << endl << 
     
    435435 
    436436 
    437                  
    438   } 
    439          
     437 
     438  } 
     439 
    440440  cout << "#totalPvsSize=" << mKdTree->CollectLeafPvs() << endl; 
    441441  cout << "#totalRayStackSize=" << mVssRays.size() << endl <<flush; 
    442          
     442 
    443443  //int numExportRays = 10000; 
    444444  int numExportRays = 0; 
     
    449449        ExportRays(filename, mVssRays, numExportRays); 
    450450  } 
    451          
     451 
    452452  mSceneGraph->CollectObjects(&mObjects); 
    453453 
     
    457457  vssTree = new VssTree; 
    458458  // viewcells = Construct(mVssRays); 
    459          
     459 
    460460  vssTree->Construct(mVssRays, mViewSpaceBox); 
    461461  cout<<"VssTree root PVS size = "<<vssTree->GetRootPvsSize()<<endl; 
    462    
     462 
    463463  if (0) 
    464464  { 
     
    482482          if (RandomValue(0.0f,1.0f) < prob) 
    483483                kdViewcells.push_back(mKdTree->GetBox(*it)); 
    484                  
     484 
    485485        float avgPvs = GetAvgPvsSize(vssTree, kdViewcells); 
    486486        cout<<"Initial average PVS size = "<<avgPvs<<endl; 
    487487  } 
    488488 
    489          
     489 
    490490  int samples = 0; 
    491491  int pass = 0; 
     
    498498        SimpleRayContainer rays; 
    499499        VssRayContainer vssRays; 
    500                  
     500 
    501501        if (!mUseImportanceSampling) { 
    502502          for (int j=0; j < num; j++) { 
     
    508508          num = GenerateImportanceRays(vssTree, num, rays); 
    509509        } 
    510          
     510 
    511511        for (int i=0; i < rays.size(); i++) 
    512512          CastRay(rays[i].mOrigin, rays[i].mDirection, vssRays); 
    513                  
     513 
    514514        vssTree->AddRays(vssRays); 
    515                  
     515 
    516516        if (0) { 
    517517          int subdivided = vssTree->UpdateSubdivision(); 
     
    528528          else 
    529529                sprintf(filename, "vss-rays-%04d.x3d", pass); 
    530                          
     530 
    531531          ExportRays(filename, vssRays, numExportRays); 
    532532        } 
     
    547547  } 
    548548 
     549 
    549550  { 
    550551        VssRayContainer storedRays; 
     
    552553                                                                                 mViewCellsManager->GetPostProcessSamples(), 
    553554                                                                                 mViewCellsManager->GetVisualizationSamples())); 
    554          
     555 
    555556        //-- post process view cells 
    556557        mViewCellsManager->PostProcess(mObjects, storedRays); 
    557          
     558 
    558559        //-- several visualizations and statistics 
    559560        mViewCellsManager->PrintStatistics(Debug); 
     
    563564        CLEAR_CONTAINER(storedRays); 
    564565  } 
     566 
     567  //-- render simulation after merge 
     568  cout << "\nevaluating bsp view cells render time after merge ... "; 
    565569 
    566570  //-- render simulation after merge 
    567571  cout << "\nevaluating bsp view cells render time after merge ... "; 
    568572   
    569   const SimulationStatistics ss = mViewCellsManager->SimulateRendering(); 
    570    
     573  mRenderSimulator->RenderScene(); 
     574  SimulationStatistics ss; 
     575  mRenderSimulator->GetStatistics(ss); 
     576 
    571577  cout << " finished" << endl; 
    572578  cout << ss << endl; 
    573579  Debug << ss << endl; 
    574    
    575    
     580 
     581 
    576582  delete vssTree; 
    577    
     583 
    578584  return true; 
    579585} 
Note: See TracChangeset for help on using the changeset viewer.