void UpdateCubemapStream()
        {
            if (environmentCubemap != cubemapEnabled)
            {
                if (environmentCubemap)
                {
                    if (onCubemapFrame.GetPersistentEventCount() > 0)
                    {
                        cubemapStream      = VarjoPluginMR.environmentCubemapStream;
                        environmentCubemap = cubemapStream.Start();
                    }
                }
                else
                {
                    if (cubemapStream != null)
                    {
                        cubemapStream.Stop();
                        environmentCubemap = false;
                    }
                }
                cubemapEnabled = environmentCubemap;
            }

            if (cubemapEnabled)
            {
                cubemapFrame = cubemapStream.GetFrame();
                if (cubemapFrame.timestamp != previousCubemapTimestamp)
                {
                    onCubemapFrame.Invoke(cubemapFrame);
                    previousCubemapTimestamp = cubemapFrame.timestamp;
                }
            }
        }
Exemplo n.º 2
0
 void UpdateEnvironmentReflections()
 {
     if (environmentReflections != environmentReflectionsEnabled)
     {
         if (environmentReflections)
         {
             if (VarjoPluginMR.environmentCubemapStream.IsSupported())
             {
                 if (!environmentSkyboxMaterial)
                 {
                     environmentSkyboxMaterial = new Material(Shader.Find("Skybox/Cubemap"));
                 }
                 RenderSettings.skybox  = environmentSkyboxMaterial;
                 environmentReflections = VarjoPluginMR.environmentCubemapStream.Start();
             }
             else
             {
                 VarjoPluginMR.environmentCubemapStream.Stop();
             }
         }
         environmentReflectionsEnabled = environmentReflections;
     }
     if (environmentReflectionsEnabled)
     {
         cubemapFrame = VarjoPluginMR.environmentCubemapStream.GetFrame();
         environmentSkyboxMaterial.SetTexture("_Tex", cubemapFrame.cubemap);
     }
 }
    void UpdateEnvironmentReflections()
    {
        if (environmentReflections != environmentReflectionsEnabled)
        {
            if (environmentReflections)
            {
                if (VarjoMixedReality.environmentCubemapStream.IsSupported())
                {
                    environmentReflections = VarjoMixedReality.environmentCubemapStream.Start();
                }

                if (VarjoMixedReality.cameraMetadataStream.IsSupported())
                {
                    metadataStreamEnabled = VarjoMixedReality.cameraMetadataStream.Start();
                }
                else
                {
                    metadataStreamEnabled = false;
                }
            }
            environmentReflectionsEnabled = environmentReflections;
        }

        if (environmentReflectionsEnabled && metadataStreamEnabled)
        {
            cubemapFrame = VarjoMixedReality.environmentCubemapStream.GetFrame();

            metadataFrame = VarjoMixedReality.cameraMetadataStream.GetFrame();
            float exposureValue = (float)metadataFrame.metadata.ev + Mathf.Log((float)metadataFrame.metadata.cameraCalibrationConstant, 2f);
            volumeExposure.fixedExposure.Override(exposureValue);

            volumeSky.hdriSky.Override(cubemapFrame.cubemap);
            volumeSky.updateMode.Override(EnvironmentUpdateMode.Realtime);
            volumeSky.updatePeriod.Override(1f / (float)reflectionRefreshRate);
            defaultSkyActive = false;

            volumeVSTWhiteBalance.intensity.Override(1f);

            // Set white balance normalization values
            Shader.SetGlobalColor("_CamWBGains", metadataFrame.metadata.wbNormalizationData.wbGains);
            Shader.SetGlobalMatrix("_CamInvCCM", metadataFrame.metadata.wbNormalizationData.invCCM);
            Shader.SetGlobalMatrix("_CamCCM", metadataFrame.metadata.wbNormalizationData.ccm);

            if (cubemapEventListenerSet)
            {
                onCubemapUpdate.Invoke();
            }
        }
        else if (!defaultSkyActive)
        {
            volumeSky.hdriSky.Override(defaultSky);
            volumeSky.updateMode.Override(EnvironmentUpdateMode.OnChanged);
            volumeExposure.fixedExposure.Override(6.5f);
            volumeVSTWhiteBalance.intensity.Override(0f);
            defaultSkyActive = true;
        }
    }