- Timestamp:
- 01/24/06 10:06:58 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellsManager.cpp
r572 r573 88 88 89 89 90 int ViewCellsManager::CastPassSamples(int samplesPerPass, 91 int sampleType, 92 VssRayContainer *outRays) const 93 { 94 VssRayContainer passSamples; 95 SimpleRayContainer simpleRays; 96 97 preprocessor->GenerateRays(samplesPerPass, 98 sampleType, 99 simpleRays); 100 101 // shoot simple ray and add it to importance samples 102 preprocessor->CastRays(simpleRays, passSamples); 103 104 const int numSamples = (int)passSamples.size(); 105 106 if (outRays) 107 { 108 while (!passSamples.empty()) 109 outRays->push_back(passSamples.back()); 110 } 111 else 112 { 113 CLEAR_CONTAINER(passSamples); 114 } 115 116 return numSamples; 117 } 118 119 90 120 int ViewCellsManager::Construct(Preprocessor *preprocessor, VssRayContainer *outRays) 91 121 { 122 int numSamples = 0; 92 123 SimpleRayContainer simpleRays; 93 VssRayContainer constructionRays; 94 95 preprocessor->GenerateRays(mConstructionSamples, 96 Preprocessor::SPATIAL_BOX_BASED_DISTRIBUTION, 97 simpleRays); 98 99 Construct(preprocessor->mObjects, constructionRays); 100 101 int numRays = (int)simpleRays.size(); 102 103 static Ray traversalRay; 104 105 // shoot simple ray and add it to construction rays 106 while (!simpleRays.empty()) 107 { 108 SimpleRay sray = simpleRays.back(); 109 110 // TODO: shoot into kdtree 111 constructionRays.push_back(new VssRay(traversalRay)); 112 113 if (outRays) 114 outRays->push_back(constructionRays.back()); 115 116 simpleRays.pop_back(); 117 } 118 119 if (!outRays) 120 CLEAR_CONTAINER(constructionRays); 121 122 // guided rays 123 VssRayContainer importanceRays; 124 const int desiredImportanceRays = max(1000000, mPostProcessSamples); 125 preprocessor->GenerateRays(desiredImportanceRays, 126 Preprocessor::RSS_BASED_DISTRIBUTION, 127 simpleRays); 128 129 numRays += (int)simpleRays.size(); 130 131 // shoot simple ray and add it to construction rays 132 while (!simpleRays.empty()) 133 { 134 SimpleRay sray = simpleRays.back(); 135 136 // TODO: shoot into kdtree 137 importanceRays.push_back(new VssRay(traversalRay)); 138 139 if (outRays) 140 outRays->push_back(importanceRays.back()); 141 142 simpleRays.pop_back(); 143 } 144 145 if (!outRays) 146 CLEAR_CONTAINER(importanceRays); 147 124 125 VssRayContainer constructionSamples; 126 127 //-- construction rays => we use uniform samples for this 128 CastPassSamples(mConstructionSamples, 129 Preprocessor::SPATIAL_BOX_BASED_DISTRIBUTION, 130 &constructionSamples); 131 132 // construct view cells 133 const int initialSamples = Construct(preprocessor->mObjects, constructionSamples); 134 135 numSamples += initialSamples; 136 137 if (outRays) 138 { 139 while (!constructionSamples.empty()) 140 outRays->push_back(constructionSamples.back()); 141 } 142 else 143 { 144 CLEAR_CONTAINER(constructionSamples); 145 } 146 147 148 //-- guided rays are used for further sampling 149 const int desiredImportanceSamples = 5000000; 150 const int importanceRayPerPass = 1000000; 151 152 const int n = desiredImportanceSamples; //+initialSamples; 153 154 while (numSamples < n) 155 { 156 numSamples += CastPassSamples(importanceRayPerPass, 157 Preprocessor::RSS_BASED_DISTRIBUTION, 158 //Preprocessor::SPATIAL_BOX_BASED_DISTRIBUTION, 159 outRays); 160 } 161 162 163 //-- post processing 164 VssRayContainer postProcessSamples; 165 166 //-- construction rays => we use uniform samples for this 167 CastPassSamples(max(mPostProcessSamples, mVisualizationSamples), 168 Preprocessor::SPATIAL_BOX_BASED_DISTRIBUTION, 169 &postProcessSamples); 170 148 171 // merge the view cells 149 PostProcess(preprocessor->mObjects, importanceRays); 150 151 Visualize(preprocessor->mObjects, importanceRays); 152 153 154 return numRays; 172 PostProcess(preprocessor->mObjects, postProcessSamples); 173 // several visualizations 174 Visualize(preprocessor->mObjects, postProcessSamples); 175 176 if (outRays) 177 { 178 while (!postProcessSamples.empty()) 179 outRays->push_back(postProcessSamples.back()); 180 } 181 else 182 { 183 CLEAR_CONTAINER(postProcessSamples); 184 } 185 186 return numSamples; 155 187 } 156 188
Note: See TracChangeset
for help on using the changeset viewer.