// // Copies data from another object. // public void CopyFrom(SimulationSettingsValue other) { RealtimeRays = other.RealtimeRays; RealtimeBounces = other.RealtimeBounces; RealtimeSecondaryRays = other.RealtimeSecondaryRays; BakeRays = other.BakeRays; BakeSecondaryRays = other.BakeSecondaryRays; BakeBounces = other.BakeBounces; Duration = other.Duration; AmbisonicsOrder = other.AmbisonicsOrder; MaxSources = other.MaxSources; }
// // Copies data from another object. // public void CopyFrom(SimulationSettingsValue other) { RealtimeRays = other.RealtimeRays; RealtimeBounces = other.RealtimeBounces; RealtimeSecondaryRays = other.RealtimeSecondaryRays; RealtimeThreadsPercentage = other.RealtimeThreadsPercentage; BakeRays = other.BakeRays; BakeSecondaryRays = other.BakeSecondaryRays; BakeBounces = other.BakeBounces; BakeThreadsPercentage = other.BakeThreadsPercentage; Duration = other.Duration; AmbisonicsOrder = other.AmbisonicsOrder; MaxSources = other.MaxSources; IrradianceMinDistance = other.IrradianceMinDistance; }
// // Draws the inspector. // public override void OnInspectorGUI() { serializedObject.Update(); // Audio Engine GUI.enabled = !EditorApplication.isPlayingOrWillChangePlaymode; EditorGUILayout.Space(); EditorGUILayout.LabelField("Audio Engine Integration", EditorStyles.boldLabel); string[] engines = { "Unity", "FMOD Studio" }; var audioEngineProperty = serializedObject.FindProperty("audioEngine"); audioEngineProperty.enumValueIndex = EditorGUILayout.Popup("Audio Engine", audioEngineProperty.enumValueIndex, engines); // Scene Settings SteamAudioManager steamAudioManager = ((SteamAudioManager)target); EditorGUILayout.Space(); EditorGUILayout.LabelField("Global Material Settings", EditorStyles.boldLabel); EditorGUILayout.PropertyField(serializedObject.FindProperty("materialPreset")); if (serializedObject.FindProperty("materialPreset").enumValueIndex < 11) { MaterialValue actualValue = steamAudioManager.materialValue; actualValue.CopyFrom(MaterialPresetList.PresetValue( serializedObject.FindProperty("materialPreset").enumValueIndex)); } else { EditorGUILayout.PropertyField(serializedObject.FindProperty("materialValue")); } EditorGUILayout.Space(); EditorGUILayout.LabelField("Scene Export", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(" "); if (GUILayout.Button("Export to OBJ")) { steamAudioManager.ExportScene(true); } if (GUILayout.Button("Pre-Export Scene")) { steamAudioManager.ExportScene(false); } EditorGUILayout.EndHorizontal(); // Simulation Settings EditorGUILayout.Space(); EditorGUILayout.LabelField("Simulation Settings", EditorStyles.boldLabel); EditorGUILayout.PropertyField(serializedObject.FindProperty("simulationPreset")); if (serializedObject.FindProperty("simulationPreset").enumValueIndex < 3) { SimulationSettingsValue actualValue = steamAudioManager.simulationValue; actualValue.CopyFrom(SimulationSettingsPresetList.PresetValue( serializedObject.FindProperty("simulationPreset").enumValueIndex)); } else { EditorGUILayout.PropertyField(serializedObject.FindProperty("simulationValue")); SimulationSettingsValue actualValue = steamAudioManager.simulationValue; if (actualValue.AmbisonicsOrder > 2) { var numChannels = (actualValue.AmbisonicsOrder + 1) * (actualValue.AmbisonicsOrder + 1); EditorGUILayout.HelpBox("Ambisonics order " + actualValue.AmbisonicsOrder.ToString() + " uses " + numChannels.ToString() + " channels per source for processing indirect sound. " + "This may significantly increase CPU usage. Consider reducing this value unless necessary.", MessageType.Warning); } if (Application.isEditor && EditorApplication.isPlayingOrWillChangePlaymode) { IntPtr environment = steamAudioManager.GameEngineState().Environment().GetEnvironment(); if (environment != IntPtr.Zero) { PhononCore.iplSetNumBounces(environment, actualValue.RealtimeBounces); } } } // Fold Out for Advanced Settings EditorGUILayout.Space(); EditorGUILayout.LabelField("Advanced Options", EditorStyles.boldLabel); serializedObject.FindProperty("showLoadTimeOptions").boolValue = EditorGUILayout.Foldout(serializedObject.FindProperty("showLoadTimeOptions").boolValue, "Per Frame Query Optimization"); if (steamAudioManager.showLoadTimeOptions) { EditorGUILayout.PropertyField(serializedObject.FindProperty("updateComponents")); var updateComponents = serializedObject.FindProperty("updateComponents").boolValue; if (!updateComponents) { EditorGUILayout.PropertyField(serializedObject.FindProperty("currentAudioListener")); } } serializedObject.FindProperty("showMassBakingOptions").boolValue = EditorGUILayout.Foldout(serializedObject.FindProperty("showMassBakingOptions").boolValue, "Consolidated Baking Options"); if (steamAudioManager.showMassBakingOptions) { bool noSettingMessage = false; noSettingMessage = ProbeGenerationGUI() || noSettingMessage; noSettingMessage = BakeAllGUI() || noSettingMessage; noSettingMessage = BakedSourcesGUI(steamAudioManager) || noSettingMessage; noSettingMessage = BakedStaticListenerNodeGUI(steamAudioManager) || noSettingMessage; noSettingMessage = BakedReverbGUI(steamAudioManager) || noSettingMessage; if (!noSettingMessage) { EditorGUILayout.LabelField("Scene does not contain any baking related components."); } } GUI.enabled = true; EditorGUILayout.HelpBox("Do not manually add Steam Audio Manager component. " + "Click Window > Steam Audio.", MessageType.Info); EditorGUILayout.Space(); serializedObject.ApplyModifiedProperties(); }
public void Initialize(SimulationSettingsValue settings, ComponentCache componentCache, GameEngineStateInitReason reason) { PhononCore.iplCreateContext(LogMessage, IntPtr.Zero, IntPtr.Zero, ref context); var customSettings = componentCache.SteamAudioCustomSettings(); var useOpenCL = false; var computeDeviceType = ComputeDeviceType.Any; var numComputeUnits = 0; if (customSettings) { convolutionType = customSettings.convolutionOption; if (customSettings.convolutionOption == ConvolutionOption.TrueAudioNext) { useOpenCL = true; computeDeviceType = ComputeDeviceType.GPU; numComputeUnits = customSettings.numComputeUnits; } else if (customSettings.rayTracerOption == SceneType.RadeonRays) { useOpenCL = true; } } try { computeDevice.Create(context, useOpenCL, computeDeviceType, numComputeUnits); } catch (Exception e) { throw e; } var inEditor = !SteamAudioManager.IsAudioEngineInitializing(); simulationSettings = new SimulationSettings { sceneType = (customSettings) ? customSettings.rayTracerOption : SceneType.Phonon, rays = (inEditor) ? settings.BakeRays : settings.RealtimeRays, secondaryRays = (inEditor) ? settings.BakeSecondaryRays : settings.RealtimeSecondaryRays, bounces = (inEditor) ? settings.BakeBounces : settings.RealtimeBounces, irDuration = settings.Duration, ambisonicsOrder = settings.AmbisonicsOrder, maxConvolutionSources = settings.MaxSources }; if (reason != GameEngineStateInitReason.ExportingScene) { scene.Create(computeDevice, simulationSettings, context); } if (reason == GameEngineStateInitReason.Playing) { probeManager.Create(context); } if (reason != GameEngineStateInitReason.ExportingScene && reason != GameEngineStateInitReason.GeneratingProbes) { try { environment.Create(computeDevice, simulationSettings, scene, probeManager, context); } catch (Exception e) { throw e; } } }
public void Initialize(SimulationSettingsValue settings, ComponentCache componentCache, GameEngineStateInitReason reason) { PhononCore.iplCreateContext(LogMessage, IntPtr.Zero, IntPtr.Zero, ref context); if (reason != GameEngineStateInitReason.EditingProbes) { var customSettings = componentCache.SteamAudioCustomSettings(); var useOpenCL = false; var computeDeviceType = ComputeDeviceType.Any; var requiresTan = false; var minReservableCUs = 0; var maxCUsToReserve = 0; if (customSettings) { convolutionType = customSettings.ConvolutionType(); if (convolutionType == ConvolutionOption.TrueAudioNext) { useOpenCL = true; requiresTan = true; computeDeviceType = ComputeDeviceType.GPU; minReservableCUs = customSettings.minComputeUnitsToReserve; maxCUsToReserve = customSettings.maxComputeUnitsToReserve; } else if (customSettings.RayTracerType() == SceneType.RadeonRays) { useOpenCL = true; } } try { var deviceFilter = new ComputeDeviceFilter { type = computeDeviceType, requiresTrueAudioNext = (requiresTan) ? Bool.True : Bool.False, minReservableCUs = minReservableCUs, maxCUsToReserve = maxCUsToReserve }; computeDevice.Create(context, useOpenCL, deviceFilter); } catch (Exception e) { Debug.LogWarning(String.Format("Unable to initialize TrueAudio Next: {0}. Using Phonon convolution.", e.Message)); convolutionType = ConvolutionOption.Phonon; } var inEditor = !SteamAudioManager.IsAudioEngineInitializing(); var maxSources = settings.MaxSources; if (customSettings && convolutionType == ConvolutionOption.TrueAudioNext) { maxSources = customSettings.MaxSources; } if (customSettings && customSettings.RayTracerType() == SceneType.RadeonRays && reason == GameEngineStateInitReason.Baking) { maxSources = customSettings.BakingBatchSize; } var rayTracer = SceneType.Phonon; if (customSettings) { if (customSettings.RayTracerType() != SceneType.RadeonRays || reason != GameEngineStateInitReason.Playing) { rayTracer = customSettings.RayTracerType(); } } simulationSettings = new SimulationSettings { sceneType = rayTracer, occlusionSamples = settings.OcclusionSamples, rays = (inEditor) ? settings.BakeRays : settings.RealtimeRays, secondaryRays = (inEditor) ? settings.BakeSecondaryRays : settings.RealtimeSecondaryRays, bounces = (inEditor) ? settings.BakeBounces : settings.RealtimeBounces, threads = (inEditor) ? (int)Mathf.Max(1, (settings.BakeThreadsPercentage * SystemInfo.processorCount) / 100.0f) : (int)Mathf.Max(1, (settings.RealtimeThreadsPercentage * SystemInfo.processorCount) / 100.0f), irDuration = (customSettings && convolutionType == ConvolutionOption.TrueAudioNext) ? customSettings.Duration : settings.Duration, ambisonicsOrder = (customSettings && convolutionType == ConvolutionOption.TrueAudioNext) ? customSettings.AmbisonicsOrder : settings.AmbisonicsOrder, maxConvolutionSources = maxSources, bakingBatchSize = (customSettings && customSettings.RayTracerType() == SceneType.RadeonRays) ? customSettings.BakingBatchSize : 1 }; #if UNITY_EDITOR if (customSettings) { if (customSettings.RayTracerType() == SceneType.Embree) { if (!File.Exists(Directory.GetCurrentDirectory() + "/Assets/Plugins/x86_64/embree.dll")) { throw new Exception( "Steam Audio configured to use Embree, but Embree support package not installed. " + "Please import SteamAudio_Embree.unitypackage in order to use Embree support for " + "Steam Audio."); } } else if (customSettings.RayTracerType() == SceneType.RadeonRays) { if (!File.Exists(Directory.GetCurrentDirectory() + "/Assets/Plugins/x86_64/RadeonRays.dll")) { throw new Exception( "Steam Audio configured to use Radeon Rays, but Radeon Rays support package not " + "installed. Please import SteamAudio_RadeonRays.unitypackage in order to use Radeon " + "Rays support for Steam Audio."); } } if (customSettings.ConvolutionType() == ConvolutionOption.TrueAudioNext) { if (!File.Exists(Directory.GetCurrentDirectory() + "/Assets/Plugins/x86_64/tanrt64.dll")) { throw new Exception( "Steam Audio configured to use TrueAudio Next, but TrueAudio Next support package " + "not installed. Please import SteamAudio_TrueAudioNext.unitypackage in order to use " + "TrueAudio Next support for Steam Audio."); } } } #endif if (reason != GameEngineStateInitReason.ExportingScene) { scene.Create(computeDevice, simulationSettings, context); } if (reason == GameEngineStateInitReason.Playing) { probeManager.Create(context); } if (reason != GameEngineStateInitReason.ExportingScene && reason != GameEngineStateInitReason.GeneratingProbes) { try { environment.Create(computeDevice, simulationSettings, scene, probeManager, context); } catch (Exception e) { throw e; } } } }
public void Initialize(GameEngineStateInitReason reason, AudioEngine audioEngine, SimulationSettingsValue simulationValue, string[] sofaFileNames) { if (referenceCount == 0) { componentCache.Initialize(); gameEngineState.Initialize(simulationValue, componentCache, reason); if (reason == GameEngineStateInitReason.Playing) { audioEngineState = AudioEngineStateFactory.Create(audioEngine); audioEngineState.Initialize(componentCache, gameEngineState, sofaFileNames); } } ++referenceCount; }
public void Initialize(GameEngineStateInitReason reason, AudioEngine audioEngine, SimulationSettingsValue simulationValue) { if (referenceCount == 0) { componentCache.Initialize(); gameEngineState.Initialize(simulationValue, componentCache, reason); if (reason == GameEngineStateInitReason.Playing) { audioEngineState.Initialize(audioEngine, componentCache, gameEngineState); } } ++referenceCount; }
public void Initialize(SimulationSettingsValue settings, ComponentCache componentCache, GameEngineStateInitReason reason) { PhononCore.iplCreateContext(LogMessage, IntPtr.Zero, IntPtr.Zero, ref context); if (reason != GameEngineStateInitReason.EditingProbes) { var customSettings = componentCache.SteamAudioCustomSettings(); var useOpenCL = false; var computeDeviceType = ComputeDeviceType.Any; var requiresTan = false; var minReservableCUs = 0; var maxCUsToReserve = 0; if (customSettings) { convolutionType = customSettings.convolutionOption; if (customSettings.convolutionOption == ConvolutionOption.TrueAudioNext) { useOpenCL = true; requiresTan = true; computeDeviceType = ComputeDeviceType.GPU; minReservableCUs = customSettings.minComputeUnitsToReserve; maxCUsToReserve = customSettings.maxComputeUnitsToReserve; } else if (customSettings.rayTracerOption == SceneType.RadeonRays) { useOpenCL = true; } } try { var deviceFilter = new ComputeDeviceFilter { type = computeDeviceType, requiresTrueAudioNext = (requiresTan) ? Bool.True : Bool.False, minReservableCUs = minReservableCUs, maxCUsToReserve = maxCUsToReserve }; computeDevice.Create(context, useOpenCL, deviceFilter); } catch (Exception e) { Debug.LogWarning(String.Format("Unable to initialize TrueAudio Next: {0}. Using Phonon convolution.", e.Message)); customSettings.convolutionOption = ConvolutionOption.Phonon; } var inEditor = !SteamAudioManager.IsAudioEngineInitializing(); simulationSettings = new SimulationSettings { sceneType = (customSettings) ? customSettings.rayTracerOption : SceneType.Phonon, rays = (inEditor) ? settings.BakeRays : settings.RealtimeRays, secondaryRays = (inEditor) ? settings.BakeSecondaryRays : settings.RealtimeSecondaryRays, bounces = (inEditor) ? settings.BakeBounces : settings.RealtimeBounces, irDuration = (customSettings && customSettings.convolutionOption == ConvolutionOption.TrueAudioNext) ? customSettings.Duration : settings.Duration, ambisonicsOrder = (customSettings && customSettings.convolutionOption == ConvolutionOption.TrueAudioNext) ? customSettings.AmbisonicsOrder : settings.AmbisonicsOrder, maxConvolutionSources = (customSettings && customSettings.convolutionOption == ConvolutionOption.TrueAudioNext) ? customSettings.MaxSources : settings.MaxSources }; if (reason != GameEngineStateInitReason.ExportingScene) scene.Create(computeDevice, simulationSettings, context); if (reason == GameEngineStateInitReason.Playing) probeManager.Create(context); if (reason != GameEngineStateInitReason.ExportingScene && reason != GameEngineStateInitReason.GeneratingProbes) { try { environment.Create(computeDevice, simulationSettings, scene, probeManager, context); } catch (Exception e) { throw e; } } } }
// // Draws the inspector. // public override void OnInspectorGUI() { serializedObject.Update(); // Audio Engine GUI.enabled = !EditorApplication.isPlayingOrWillChangePlaymode; EditorGUILayout.Space(); EditorGUILayout.HelpBox("Do not manually add Steam Audio Manager component. " + "Click Window > Steam Audio.", MessageType.Info); EditorGUILayout.LabelField("Audio Engine Integration", EditorStyles.boldLabel); string[] engines = { "Unity", "FMOD Studio" }; var audioEngineProperty = serializedObject.FindProperty("audioEngine"); audioEngineProperty.enumValueIndex = EditorGUILayout.Popup("Audio Engine", audioEngineProperty.enumValueIndex, engines); EditorGUILayout.Space(); EditorGUILayout.LabelField("HRTF Settings", EditorStyles.boldLabel); EditorGUILayout.PropertyField(serializedObject.FindProperty("sofaFiles"), new GUIContent("SOFA Files"), true); SteamAudioManager steamAudioManager = (SteamAudioManager)target; var wasGUIEnabled = GUI.enabled; GUI.enabled = true; var sofaFiles = steamAudioManager.GetSOFAFileNames(); if (sofaFiles != null) { var sofaFileNames = new string[sofaFiles.Length]; for (var i = 0; i < sofaFileNames.Length; ++i) { sofaFileNames[i] = sofaFiles[i]; if (sofaFileNames[i].Length == 0 || sofaFileNames[i] == "") { sofaFileNames[i] = "Default"; } } var currentSOFAFileProperty = serializedObject.FindProperty("currentSOFAFile"); if (currentSOFAFileProperty.intValue >= sofaFiles.Length) { currentSOFAFileProperty.intValue = 0; } currentSOFAFileProperty.intValue = EditorGUILayout.Popup("Current SOFA File", currentSOFAFileProperty.intValue, sofaFileNames); } GUI.enabled = wasGUIEnabled; // Scene Settings EditorGUILayout.Space(); EditorGUILayout.LabelField("Global Material Settings", EditorStyles.boldLabel); EditorGUILayout.PropertyField(serializedObject.FindProperty("materialPreset")); if (serializedObject.FindProperty("materialPreset").enumValueIndex < 11) { MaterialValue actualValue = steamAudioManager.materialValue; actualValue.CopyFrom(MaterialPresetList.PresetValue( serializedObject.FindProperty("materialPreset").enumValueIndex)); } else { EditorGUILayout.PropertyField(serializedObject.FindProperty("materialValue")); } EditorGUILayout.Space(); EditorGUILayout.LabelField("Scene Export", EditorStyles.boldLabel); if (GUILayout.Button("Pre-Export Scene")) { steamAudioManager.ExportScene(false); } if (GUILayout.Button("Export All Dynamic Objects")) { ExportAllDynamicObjects(); } if (GUILayout.Button("Export to OBJ")) { steamAudioManager.ExportScene(true); } // Simulation Settings EditorGUILayout.Space(); EditorGUILayout.LabelField("Simulation Settings", EditorStyles.boldLabel); EditorGUILayout.PropertyField(serializedObject.FindProperty("simulationPreset")); if (serializedObject.FindProperty("simulationPreset").enumValueIndex < 3) { SimulationSettingsValue actualValue = steamAudioManager.simulationValue; actualValue.CopyFrom(SimulationSettingsPresetList.PresetValue( serializedObject.FindProperty("simulationPreset").enumValueIndex)); EditorGUILayout.Space(); UnityRayTracerGUI(true); } else { EditorGUILayout.PropertyField(serializedObject.FindProperty("simulationValue")); SimulationSettingsValue actualValue = steamAudioManager.simulationValue; if (actualValue.AmbisonicsOrder > 2) { var numChannels = (actualValue.AmbisonicsOrder + 1) * (actualValue.AmbisonicsOrder + 1); EditorGUILayout.HelpBox("Ambisonics order " + actualValue.AmbisonicsOrder.ToString() + " uses " + numChannels.ToString() + " channels per source for processing indirect sound. " + "This may significantly increase CPU usage. Consider reducing this value unless necessary.", MessageType.Warning); } UnityRayTracerGUI(false); if (Application.isEditor && EditorApplication.isPlayingOrWillChangePlaymode) { IntPtr environment = steamAudioManager.GameEngineState().Environment().GetEnvironment(); if (environment != IntPtr.Zero) { PhononCore.iplSetNumBounces(environment, actualValue.RealtimeBounces); } } } // Display information message about CPU usage. int realTimeThreads = (int)Mathf.Max(1, (steamAudioManager.simulationValue.RealtimeThreadsPercentage * SystemInfo.processorCount) / 100.0f); int bakingThreads = (int)Mathf.Max(1, (steamAudioManager.simulationValue.BakeThreadsPercentage * SystemInfo.processorCount) / 100.0f); string realTimeString = (realTimeThreads == 1) ? "1 of " + SystemInfo.processorCount + " logical processor" : realTimeThreads + " of " + SystemInfo.processorCount + " logical processors"; string bakingString = (bakingThreads == 1) ? "1 of " + SystemInfo.processorCount + " logical processor" : bakingThreads + " of " + SystemInfo.processorCount + " logical processors"; EditorGUILayout.HelpBox("On this machine setting realtime CPU cores to " + steamAudioManager.simulationValue.RealtimeThreadsPercentage + "% will use " + realTimeString + " and setting baking CPU cores to " + steamAudioManager.simulationValue.BakeThreadsPercentage + "% will use " + bakingString + ". The number of logical processors used on an end user's machine might be different.", MessageType.Info); // Fold Out for Advanced Settings EditorGUILayout.Space(); EditorGUILayout.LabelField("Advanced Options", EditorStyles.boldLabel); serializedObject.FindProperty("showLoadTimeOptions").boolValue = EditorGUILayout.Foldout(serializedObject.FindProperty("showLoadTimeOptions").boolValue, "Per Frame Query Optimization"); if (steamAudioManager.showLoadTimeOptions) { EditorGUILayout.PropertyField(serializedObject.FindProperty("updateComponents")); var updateComponents = serializedObject.FindProperty("updateComponents").boolValue; if (!updateComponents) { EditorGUILayout.PropertyField(serializedObject.FindProperty("currentAudioListener")); } } serializedObject.FindProperty("showMassBakingOptions").boolValue = EditorGUILayout.Foldout(serializedObject.FindProperty("showMassBakingOptions").boolValue, "Consolidated Baking Options"); if (steamAudioManager.showMassBakingOptions) { bool noSettingMessage = false; noSettingMessage = ProbeGenerationGUI() || noSettingMessage; noSettingMessage = BakeAllGUI() || noSettingMessage; noSettingMessage = BakedSourcesGUI(steamAudioManager) || noSettingMessage; noSettingMessage = BakedStaticListenerNodeGUI(steamAudioManager) || noSettingMessage; noSettingMessage = BakedReverbGUI(steamAudioManager) || noSettingMessage; if (!noSettingMessage) { EditorGUILayout.LabelField("Scene does not contain any baking related components."); } } GUI.enabled = true; EditorGUILayout.Space(); serializedObject.ApplyModifiedProperties(); }
// // Copy constructor. // public SimulationSettingsValue(SimulationSettingsValue other) { CopyFrom(other); }
public void Initialize(SimulationSettingsValue settings, ComponentCache componentCache, GameEngineStateInitReason reason) { PhononCore.iplCreateContext(LogMessage, IntPtr.Zero, IntPtr.Zero, ref context); if (reason != GameEngineStateInitReason.EditingProbes) { var customSettings = componentCache.SteamAudioCustomSettings(); var useOpenCL = false; var computeDeviceType = ComputeDeviceType.Any; var maxCUsToReserve = 0; var fractionCUsForIRUpdate = .0f; convolutionType = ConvolutionOption.Phonon; var rayTracer = SceneType.Phonon; // TAN is enabled for realtime. if (customSettings && customSettings.ConvolutionType() == ConvolutionOption.TrueAudioNext && reason == GameEngineStateInitReason.Playing) { convolutionType = customSettings.ConvolutionType(); useOpenCL = true; computeDeviceType = ComputeDeviceType.GPU; maxCUsToReserve = customSettings.maxComputeUnitsToReserve; fractionCUsForIRUpdate = customSettings.fractionComputeUnitsForIRUpdate; } // Enable some settings which are commong whether Radeon Rays is enabled for baking or realtime. if (customSettings && (reason == GameEngineStateInitReason.Baking || reason == GameEngineStateInitReason.GeneratingProbes || reason == GameEngineStateInitReason.Playing)) { if (customSettings.RayTracerType() != SceneType.RadeonRays) { rayTracer = customSettings.RayTracerType(); } else { useOpenCL = true; rayTracer = SceneType.RadeonRays; computeDeviceType = ComputeDeviceType.GPU; } } // Enable additional settings when Radeon Rays is enabled for realtime but TAN is not. if (customSettings && customSettings.RayTracerType() == SceneType.RadeonRays && customSettings.ConvolutionType() != ConvolutionOption.TrueAudioNext && reason == GameEngineStateInitReason.Playing) { maxCUsToReserve = customSettings.maxComputeUnitsToReserve; fractionCUsForIRUpdate = 1.0f; } try { var deviceFilter = new ComputeDeviceFilter { type = computeDeviceType, maxCUsToReserve = maxCUsToReserve, fractionCUsForIRUpdate = fractionCUsForIRUpdate }; computeDevice.Create(context, useOpenCL, deviceFilter); } catch (Exception e) { if (customSettings && convolutionType == ConvolutionOption.TrueAudioNext) { var eInEditor = !SteamAudioManager.IsAudioEngineInitializing(); if (eInEditor && (!File.Exists(Directory.GetCurrentDirectory() + "/Assets/Plugins/x86_64/tanrt64.dll"))) { throw new Exception( "Steam Audio configured to use TrueAudio Next, but TrueAudio Next support package " + "not installed. Please import SteamAudio_TrueAudioNext.unitypackage in order to use " + "TrueAudio Next support for Steam Audio."); } else { Debug.LogWarning(String.Format("Unable to create compute device: {0}. Using Phonon convolution and raytracer.", e.Message)); } } else { Debug.LogWarning(String.Format("Unable to create compute device: {0}. Using Phonon convolution and raytracer.", e.Message)); } convolutionType = ConvolutionOption.Phonon; rayTracer = SceneType.Phonon; } var inEditor = !SteamAudioManager.IsAudioEngineInitializing(); var maxSources = settings.MaxSources; if (customSettings && convolutionType == ConvolutionOption.TrueAudioNext) { maxSources = customSettings.MaxSources; } if (rayTracer == SceneType.RadeonRays && reason == GameEngineStateInitReason.Baking) { maxSources = customSettings.BakingBatchSize; } simulationSettings = new SimulationSettings { sceneType = rayTracer, maxOcclusionSamples = settings.MaxOcclusionSamples, rays = (inEditor) ? settings.BakeRays : settings.RealtimeRays, secondaryRays = (inEditor) ? settings.BakeSecondaryRays : settings.RealtimeSecondaryRays, bounces = (inEditor) ? settings.BakeBounces : settings.RealtimeBounces, threads = (inEditor) ? (int)Mathf.Max(1, (settings.BakeThreadsPercentage * SystemInfo.processorCount) / 100.0f) : (int)Mathf.Max(1, (settings.RealtimeThreadsPercentage * SystemInfo.processorCount) / 100.0f), irDuration = (customSettings && convolutionType == ConvolutionOption.TrueAudioNext) ? customSettings.Duration : settings.Duration, ambisonicsOrder = (customSettings && convolutionType == ConvolutionOption.TrueAudioNext) ? customSettings.AmbisonicsOrder : settings.AmbisonicsOrder, maxConvolutionSources = maxSources, bakingBatchSize = (rayTracer == SceneType.RadeonRays) ? customSettings.BakingBatchSize : 1, irradianceMinDistance = settings.IrradianceMinDistance }; #if UNITY_EDITOR if (customSettings) { if (rayTracer == SceneType.RadeonRays) { if (!File.Exists(Directory.GetCurrentDirectory() + "/Assets/Plugins/x86_64/RadeonRays.dll")) { throw new Exception( "Steam Audio configured to use Radeon Rays, but Radeon Rays support package not " + "installed. Please import SteamAudio_RadeonRays.unitypackage in order to use Radeon " + "Rays support for Steam Audio."); } } if (convolutionType == ConvolutionOption.TrueAudioNext) { if (!File.Exists(Directory.GetCurrentDirectory() + "/Assets/Plugins/x86_64/tanrt64.dll")) { throw new Exception( "Editor: Steam Audio configured to use TrueAudio Next, but TrueAudio Next support package " + "not installed. Please import SteamAudio_TrueAudioNext.unitypackage in order to use " + "TrueAudio Next support for Steam Audio."); } } } #endif if (reason != GameEngineStateInitReason.ExportingScene) { scene.Create(computeDevice, simulationSettings, context); } // Add other scenes in the hierarchy if (scene.GetScene() != IntPtr.Zero && (reason == GameEngineStateInitReason.GeneratingProbes || reason == GameEngineStateInitReason.Baking)) { for (int i = 0; i < SceneManager.sceneCount; ++i) { var unityScene = SceneManager.GetSceneAt(i); if (!unityScene.isLoaded) { continue; } if (unityScene == SceneManager.GetActiveScene()) { continue; } IntPtr additiveScene, additiveMesh; var error = scene.AddAdditiveScene(unityScene, scene.GetScene(), computeDevice, simulationSettings, context, out additiveScene, out additiveMesh); if (error != Error.None) { continue; } if (additiveScenes == null) { editorAdditiveScenes = new List <IntPtr>(); } editorAdditiveScenes.Add(additiveScene); if (editorAdditiveSceneMeshes == null) { editorAdditiveSceneMeshes = new List <IntPtr>(); } editorAdditiveSceneMeshes.Add(additiveMesh); } PhononCore.iplCommitScene(scene.GetScene()); } if (reason == GameEngineStateInitReason.Playing) { probeManager.Create(context); } if (reason != GameEngineStateInitReason.ExportingScene && reason != GameEngineStateInitReason.GeneratingProbes) { try { environment.Create(computeDevice, simulationSettings, scene, probeManager, context); } catch (Exception e) { throw e; } } } }