Changeset 1112 for GTP/trunk/Lib/Vis/Preprocessing/src/RssPreprocessor.cpp
- Timestamp:
- 07/10/06 19:21:19 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/RssPreprocessor.cpp
r1027 r1112 23 23 static bool fromBoxVisibility = false; 24 24 25 25 #define ADD_RAYS_IN_PLACE 0 26 26 27 RssPreprocessor::RssPreprocessor(): 27 28 mPass(0), … … 67 68 GenerateImportanceRays(mRssTree, number, rays); 68 69 result = true; 69 // rays.NormalizePdf();70 70 } 71 71 break; … … 75 75 } 76 76 77 // rays.NormalizePdf(); 78 77 79 return result; 78 80 } … … 120 122 int hits = 0; 121 123 static Ray ray; 122 AxisAlignedBox3 box = mKdTree->GetBox(); 124 // AxisAlignedBox3 box = Union(mKdTree->GetBox(), mViewCellsManager->GetViewSpaceBox()); 125 126 AxisAlignedBox3 box = mViewCellsManager->GetViewSpaceBox(); 123 127 124 128 AxisAlignedBox3 sbox = box; … … 284 288 } else { 285 289 int leaves = rssTree->stat.Leaves()/1; 290 286 291 num = rssTree->GenerateRays(desiredSamples, leaves, rays); 287 292 } … … 302 307 Exporter *exporter = NULL; 303 308 exporter = Exporter::GetExporter(filename); 304 // exporter->SetWireframe(); 305 // exporter->ExportKdTree(*mKdTree); 309 if (0) { 310 exporter->SetWireframe(); 311 exporter->ExportKdTree(*mKdTree); 312 } 306 313 exporter->SetFilled(); 307 314 // $$JB temporarily do not export the scene … … 310 317 exporter->SetWireframe(); 311 318 312 if ( mViewSpaceBox) {319 if (1 || mViewSpaceBox) { 313 320 exporter->SetForcedMaterial(RgbColor(1,0,1)); 314 exporter->ExportBox( *mViewSpaceBox);321 exporter->ExportBox(mViewCellsManager->GetViewSpaceBox()); 315 322 exporter->ResetForcedMaterial(); 316 323 } 317 324 318 325 VssRayContainer rays; 319 326 320 vssRays.SelectRays( 327 vssRays.SelectRays(number, rays); 321 328 322 329 exporter->ExportRays(rays, RgbColor(1, 0, 0)); 330 331 delete exporter; 332 333 cout<<"done."<<endl<<flush; 334 335 return true; 336 } 337 338 bool 339 RssPreprocessor::ExportRayAnimation(const char *filename, 340 const vector<VssRayContainer> &vssRays 341 ) 342 { 343 cout<<"Exporting vss rays..."<<endl<<flush; 344 345 Exporter *exporter = NULL; 346 exporter = Exporter::GetExporter(filename); 347 if (0) { 348 exporter->SetWireframe(); 349 exporter->ExportKdTree(*mKdTree); 350 } 351 exporter->SetFilled(); 352 // $$JB temporarily do not export the scene 353 if (1) 354 exporter->ExportScene(mSceneGraph->mRoot); 355 exporter->SetWireframe(); 356 357 if (1 || mViewSpaceBox) { 358 exporter->SetForcedMaterial(RgbColor(1,0,1)); 359 exporter->ExportBox(mViewCellsManager->GetViewSpaceBox()); 360 exporter->ResetForcedMaterial(); 361 } 362 363 exporter->ExportRaySets(vssRays, RgbColor(1, 0, 0)); 323 364 324 365 delete exporter; … … 459 500 } 460 501 461 502 void 503 NormalizeRatios(float ratios[3]) 504 { 505 int i; 506 float sumRatios; 507 sumRatios = ratios[0] + ratios[1] + ratios[2]; 508 if (sumRatios == 0.0f) { 509 ratios[0] = ratios[1] = ratios[2] = 1.0f; 510 sumRatios = 3.0f; 511 } 512 513 for (i=0 ; i < 3; i++) 514 ratios[i]/=sumRatios; 515 #define MIN_RATIO 0.03f 516 for (i=0 ; i < 3; i++) 517 if (ratios[i] < MIN_RATIO) 518 ratios[i] = MIN_RATIO; 519 520 sumRatios = ratios[0] + ratios[1] + ratios[2]; 521 for (i=0 ; i < 3; i++) 522 ratios[i]/=sumRatios; 523 524 } 462 525 463 526 bool … … 472 535 Randomize(0); 473 536 474 537 vector<VssRayContainer> rayBuffer(50); 538 475 539 long startTime = GetTime(); 476 540 … … 480 544 481 545 // if not already loaded, construct view cells from file 482 if (!mLoadViewCells) {483 484 if ( 0)546 if (!mLoadViewCells) 547 { 548 if (1) 485 549 mViewCellsManager->SetViewSpaceBox(mKdTree->GetBox()); 486 550 else { 487 551 AxisAlignedBox3 box = mKdTree->GetBox(); 488 float s = box.Size(0); 489 box.Scale(0.1f); 490 box.SetMin(0, box.Min(0) + s); 491 box.SetMax(0, box.Max(0) + s); 552 553 if (1) { 554 // use a small box outside of the scene 555 box.Scale(Vector3(0.1f,0.5f,0.5f)); 556 box.Translate(Vector3(Magnitude(mKdTree->GetBox().Size())*0.5, 0, 0)); 557 } else { 558 float s = box.Size(0); 559 box.Scale(0.1f); 560 box.SetMin(0, box.Min(0) + s); 561 box.SetMax(0, box.Max(0) + s); 562 } 492 563 493 564 mViewCellsManager->SetViewSpaceBox(box); 494 565 } 495 496 497 498 499 500 501 502 } 503 504 566 567 // construct view cells using it's own set of samples 568 mViewCellsManager->Construct(this); 569 570 //-- several visualizations and statistics 571 Debug << "view cells construction finished: " << endl; 572 mViewCellsManager->PrintStatistics(Debug); 573 } 574 575 505 576 int rssPass = 0; 506 577 int rssSamples = 0; … … 515 586 cout<<"Generating initial rays..."<<endl<<flush; 516 587 517 GenerateRays(mInitialSamples/ 4, SPATIAL_BOX_BASED_DISTRIBUTION, rays);518 GenerateRays(mInitialSamples/ 4, OBJECT_BASED_DISTRIBUTION, rays);519 GenerateRays(mInitialSamples/ 4, DIRECTION_BASED_DISTRIBUTION, rays);520 GenerateRays(mInitialSamples/4, OBJECT_DIRECTION_BASED_DISTRIBUTION, rays);521 588 GenerateRays(mInitialSamples/3, SPATIAL_BOX_BASED_DISTRIBUTION, rays); 589 GenerateRays(mInitialSamples/3, OBJECT_BASED_DISTRIBUTION, rays); 590 GenerateRays(mInitialSamples/3, DIRECTION_BASED_DISTRIBUTION, rays); 591 // GenerateRays(mInitialSamples/4, OBJECT_DIRECTION_BASED_DISTRIBUTION, rays); 592 522 593 cout<<"Casting initial rays..."<<endl<<flush; 523 594 CastRays(rays, mVssRays); … … 537 608 sprintf(filename, "rss-rays-initial.x3d"); 538 609 ExportRays(filename, mVssRays, mExportNumRays); 610 611 mVssRays.SelectRays(mExportNumRays, rayBuffer[0], true); 539 612 540 613 } … … 562 635 { 563 636 VssRayContainer contributingRays; 564 mVssRays.GetContributingRays(contributingRays, mPass);637 mVssRays.GetContributingRays(contributingRays, 0); 565 638 mStats<<"#NUM_CONTRIBUTING_RAYS\n"<<(int)contributingRays.size()<<endl; 639 if (mExportRays) { 640 char filename[64]; 641 sprintf(filename, "rss-crays-%04d.x3d", 0); 642 ExportRays(filename, contributingRays, mExportNumRays); 643 } 566 644 } 567 645 … … 615 693 VssRayContainer tmpVssRays; 616 694 617 float ratios[] = {0.8f,0.1f,0.1f}; 618 695 static float ratios[] = {0.9f,0.05f,0.05f}; 696 //float ratios[] = {1.0f,0.0f,0.0f}; 697 698 int nrays[3]; 699 float contributions[3]; 700 float times[3]; 701 702 long t1, t2; 703 704 t1 = GetTime(); 705 619 706 GenerateRays(mRssSamplesPerPass*ratios[0], RSS_BASED_DISTRIBUTION, rays); 707 708 rays.NormalizePdf(rays.size()); 709 620 710 CastRays(rays, tmpVssRays); 621 711 castRays += rays.size(); 622 float c1 = mViewCellsManager->ComputeSampleContributions(tmpVssRays, false, true); 623 mStats<<"#RssRelContrib"<<endl<<c1/rays.size()<<endl; 624 712 #if ADD_RAYS_IN_PLACE 713 contributions[0] = mViewCellsManager->ComputeSampleContributions(tmpVssRays, true, false); 714 #else 715 contributions[0] = mViewCellsManager->ComputeSampleContributions(tmpVssRays, false, true); 716 #endif 717 times[0] = TimeDiff(t1, GetTime()); 718 nrays[0] = rays.size(); 719 720 mStats<<"#RssRelContrib"<<endl<<contributions[0]/nrays[0]<<endl; 721 625 722 vssRays.insert(vssRays.end(), tmpVssRays.begin(), tmpVssRays.end() ); 626 723 rays.clear(); 627 724 tmpVssRays.clear(); 628 629 725 if (ratios[1]!=0.0f) { 726 t1 = GetTime(); 630 727 GenerateRays(mRssSamplesPerPass*ratios[1], SPATIAL_BOX_BASED_DISTRIBUTION, rays); 631 728 CastRays(rays, tmpVssRays); 632 729 castRays += rays.size(); 633 float c2 = mViewCellsManager->ComputeSampleContributions(tmpVssRays, false, true); 634 mStats<<"#SpatialRelContrib"<<endl<<c2/rays.size()<<endl; 730 #if ADD_RAYS_IN_PLACE 731 contributions[1] = mViewCellsManager->ComputeSampleContributions(tmpVssRays, true, false); 732 #else 733 contributions[1] = mViewCellsManager->ComputeSampleContributions(tmpVssRays, false, true); 734 #endif 735 times[1] = TimeDiff(t1, GetTime()); 736 nrays[1] = rays.size(); 737 738 mStats<<"#SpatialRelContrib"<<endl<<contributions[1]/nrays[1]<<endl; 635 739 636 740 vssRays.insert(vssRays.end(), tmpVssRays.begin(), tmpVssRays.end() ); … … 642 746 643 747 if (ratios[2]!=0.0f) { 748 t1 = GetTime(); 644 749 GenerateRays(mRssSamplesPerPass*ratios[2], DIRECTION_BASED_DISTRIBUTION, rays); 645 750 CastRays(rays, tmpVssRays); 646 751 castRays += rays.size(); 647 float c3 = mViewCellsManager->ComputeSampleContributions(tmpVssRays, false, true); 648 mStats<<"#DirectionalRelContrib"<<endl<<c3/rays.size()<<endl; 752 #if ADD_RAYS_IN_PLACE 753 contributions[2] = mViewCellsManager->ComputeSampleContributions(tmpVssRays, true, false); 754 #else 755 contributions[2] = mViewCellsManager->ComputeSampleContributions(tmpVssRays, false, true); 756 #endif 757 times[2] = TimeDiff(t1, GetTime()); 758 nrays[2] = rays.size(); 759 760 mStats<<"#DirectionalRelContrib"<<endl<<contributions[2]/nrays[2]<<endl; 649 761 650 762 vssRays.insert(vssRays.end(), tmpVssRays.begin(), tmpVssRays.end() ); … … 654 766 } 655 767 768 769 // now evaluate the ratios for the next pass 770 #define TIMES 0 771 772 #if TIMES 773 ratios[0] = sqr(contributions[0]/times[0]); 774 ratios[1] = sqr(contributions[1]/times[1]); 775 ratios[2] = sqr(contributions[2]/times[2]); 776 #else 777 ratios[0] = sqr(contributions[0]/nrays[0]); 778 ratios[1] = sqr(contributions[1]/nrays[1]); 779 ratios[2] = sqr(contributions[2]/nrays[2]); 780 #endif 781 NormalizeRatios(ratios); 782 783 cout<<"New ratios: "<<ratios[0]<<" "<<ratios[1]<<" "<<ratios[2]<<endl; 784 656 785 // add contributions of all rays at once... 786 #if !ADD_RAYS_IN_PLACE 657 787 mViewCellsManager->AddSampleContributions(vssRays); 658 788 #endif 659 789 } 660 790 else { … … 723 853 sprintf(filename, "rss-rays-%04d.x3d", rssPass); 724 854 855 856 857 vssRays.SelectRays(mExportNumRays, rayBuffer[mPass], true); 858 725 859 ExportRays(filename, vssRays, mExportNumRays); 726 860 727 861 // now export all contributing rays 728 862 VssRayContainer contributingRays; … … 731 865 sprintf(filename, "rss-crays-%04d.x3d", rssPass); 732 866 ExportRays(filename, contributingRays, mExportNumRays); 867 733 868 } 734 869 … … 798 933 799 934 } 800 935 936 937 if (mExportRays && mUseImportanceSampling) { 938 char filename[64]; 939 sprintf(filename, "rss-rays-i.x3d"); 940 941 rayBuffer.resize(mPass); 942 ExportRayAnimation(filename, rayBuffer); 943 } 944 801 945 Debug<<"Deleting RSS tree...\n"; 802 946 delete mRssTree; … … 804 948 805 949 806 // 950 // mViewCellsManager->ExportViewCells("visibility.xml", 807 951 // true); 808 952
Note: See TracChangeset
for help on using the changeset viewer.