OtfTransmittanceMapOccluder::OtfTransmittanceMapOccluder(Renderer::CPtr renderer, Camera::CPtr camera, const size_t numSamples) : m_renderer(renderer), m_camera(camera) { // Record resolution of camera m_resolution = m_camera->resolution(); m_floatRasterBounds = static_cast<Imath::V2f>(m_resolution); m_intRasterBounds = m_resolution - Imath::V2i(1); // Update transmittance map size and sample count m_transmittanceMap.setSize(m_resolution.x, m_resolution.y); m_transmittanceMap.setNumSamples(numSamples); // Reset the list of computed pixels m_computed.resize(m_resolution.x * m_resolution.y, 0); // Check if space behind camera is valid m_clipBehindCamera = !camera->canTransformNegativeCamZ(); }
TransmittanceMapOccluder::TransmittanceMapOccluder(Renderer::CPtr baseRenderer, Camera::CPtr camera, const size_t numSamples) : m_camera(camera) { // Clone Renderer to create a mutable copy Renderer::Ptr renderer = baseRenderer->clone(); // Configure Renderer renderer->setCamera(camera); renderer->setPrimaryEnabled(false); renderer->setTransmittanceMapEnabled(true); renderer->setNumDeepSamples(numSamples); // Execute render and grab transmittace map renderer->execute(); m_transmittanceMap = renderer->transmittanceMap(); // Record the bounds of the transmittance map m_rasterBounds = static_cast<Imath::V2f>(m_transmittanceMap->size()); // Check if space behind camera is valid m_clipBehindCamera = !camera->canTransformNegativeCamZ(); }