MCPcopy Create free account
hub / github.com/AcademySoftwareFoundation/MaterialX / loadEnvironmentLight

Method loadEnvironmentLight

source/MaterialXView/Viewer.cpp:400–490  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

398}
399
400void Viewer::loadEnvironmentLight()
401{
402 // Load the requested radiance map.
403 mx::ImagePtr envRadianceMap = _imageHandler->acquireImage(_envRadianceFilename);
404 if (!envRadianceMap)
405 {
406 new ng::MessageDialog(this, ng::MessageDialog::Type::Warning, "Failed to load environment light");
407 return;
408 }
409
410 // If requested, normalize the environment upon loading.
411 if (_normalizeEnvironment)
412 {
413 envRadianceMap = mx::normalizeEnvironment(envRadianceMap, IDEAL_ENV_MAP_RADIANCE, MAX_ENV_TEXEL_RADIANCE);
414 if (_saveGeneratedLights)
415 {
416 _imageHandler->saveImage("NormalizedRadiance.hdr", envRadianceMap);
417 }
418 }
419
420 // If requested, split the environment into indirect and direct components.
421 if (_splitDirectLight)
422 {
423 splitDirectLight(envRadianceMap, envRadianceMap, _lightRigDoc);
424 if (_saveGeneratedLights)
425 {
426 _imageHandler->saveImage("IndirectRadiance.hdr", envRadianceMap);
427 mx::writeToXmlFile(_lightRigDoc, "DirectLightRig.mtlx");
428 }
429 }
430
431 // Look for an irradiance map using an expected filename convention.
432 mx::ImagePtr envIrradianceMap;
433 if (!_normalizeEnvironment && !_splitDirectLight)
434 {
435 mx::FilePath envIrradiancePath = _envRadianceFilename.getParentPath() / IRRADIANCE_MAP_FOLDER / _envRadianceFilename.getBaseName();
436 envIrradianceMap = _imageHandler->acquireImage(envIrradiancePath);
437 }
438
439 // If not found, then generate an irradiance map via spherical harmonics.
440 if (!envIrradianceMap || envIrradianceMap->getWidth() == 1)
441 {
442 if (_generateReferenceIrradiance)
443 {
444 envIrradianceMap = mx::renderReferenceIrradiance(envRadianceMap, IRRADIANCE_MAP_WIDTH, IRRADIANCE_MAP_HEIGHT);
445 if (_saveGeneratedLights)
446 {
447 _imageHandler->saveImage("ReferenceIrradiance.hdr", envIrradianceMap);
448 }
449 }
450 else
451 {
452 mx::Sh3ColorCoeffs shIrradiance = mx::projectEnvironment(envRadianceMap, true);
453 envIrradianceMap = mx::renderEnvironment(shIrradiance, IRRADIANCE_MAP_WIDTH, IRRADIANCE_MAP_HEIGHT);
454 if (_saveGeneratedLights)
455 {
456 _imageHandler->saveImage("SphericalHarmonicIrradiance.hdr", envIrradianceMap);
457 }

Callers

nothing calls this directly

Calls 12

normalizeEnvironmentFunction · 0.85
writeToXmlFileFunction · 0.85
projectEnvironmentFunction · 0.85
renderEnvironmentFunction · 0.85
readFromXmlFileFunction · 0.85
acquireImageMethod · 0.80
existsMethod · 0.80
createDocumentFunction · 0.50
saveImageMethod · 0.45
findMethod · 0.45

Tested by

no test coverage detected