PXR_Audio_Spatializer_SceneMaterial.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // Copyright © 2015-2022 Pico Technology Co., Ltd. All Rights Reserved.
  2. using UnityEngine;
  3. public class PXR_Audio_Spatializer_SceneMaterial : MonoBehaviour
  4. {
  5. [SerializeField] public PXR_Audio.Spatializer.AcousticsMaterial
  6. materialPreset = PXR_Audio.Spatializer.AcousticsMaterial.AcousticTile;
  7. private PXR_Audio.Spatializer.AcousticsMaterial lastMaterialPreset =
  8. PXR_Audio.Spatializer.AcousticsMaterial.AcousticTile;
  9. [SerializeField] [Range(0.0f, 1.0f)] public float[] absorption = new float[4];
  10. [SerializeField] [Range(0.0f, 1.0f)] public float scattering = 0.0f;
  11. [SerializeField] [Range(0.0f, 1.0f)] public float transmission = 0.0f;
  12. private float[] absorptionForValidation = new float[4];
  13. private float scatteringForValidation = 0.0f;
  14. private float transmissionForValidation = 0.0f;
  15. private static PXR_Audio_Spatializer_Context spatialAudioContextRef;
  16. private void OnValidate()
  17. {
  18. if (spatialAudioContextRef == null)
  19. spatialAudioContextRef = FindObjectOfType<PXR_Audio_Spatializer_Context>();
  20. if (lastMaterialPreset != materialPreset) // material_preset is changed
  21. {
  22. if (materialPreset != PXR_Audio.Spatializer.AcousticsMaterial.Custom)
  23. {
  24. if (spatialAudioContextRef != null)
  25. {
  26. spatialAudioContextRef.PXR_Audio_Spatializer_Api.GetAbsorptionFactor(materialPreset,
  27. absorption);
  28. spatialAudioContextRef.PXR_Audio_Spatializer_Api.GetScatteringFactor(materialPreset,
  29. ref scattering);
  30. spatialAudioContextRef.PXR_Audio_Spatializer_Api.GetTransmissionFactor(
  31. materialPreset, ref transmission);
  32. lastMaterialPreset = materialPreset;
  33. }
  34. }
  35. else
  36. {
  37. lastMaterialPreset = materialPreset;
  38. }
  39. }
  40. else if (materialPreset != PXR_Audio.Spatializer.AcousticsMaterial.Custom &&
  41. spatialAudioContextRef !=
  42. null) // material_preset is not changed, but acoustic properties are changed manually
  43. {
  44. // Check if actual material parameters are different from current materialPreset
  45. spatialAudioContextRef.PXR_Audio_Spatializer_Api.GetAbsorptionFactor(materialPreset,
  46. absorptionForValidation);
  47. spatialAudioContextRef.PXR_Audio_Spatializer_Api.GetScatteringFactor(materialPreset,
  48. ref scatteringForValidation);
  49. spatialAudioContextRef.PXR_Audio_Spatializer_Api.GetTransmissionFactor(materialPreset,
  50. ref transmissionForValidation);
  51. if (Mathf.Abs(absorption[0] - absorptionForValidation[0]) > float.Epsilon ||
  52. Mathf.Abs(absorption[1] - absorptionForValidation[1]) > float.Epsilon ||
  53. Mathf.Abs(absorption[2] - absorptionForValidation[2]) > float.Epsilon ||
  54. Mathf.Abs(absorption[3] - absorptionForValidation[3]) > float.Epsilon ||
  55. Mathf.Abs(scattering - scatteringForValidation) > float.Epsilon ||
  56. Mathf.Abs(transmission - transmissionForValidation) > float.Epsilon)
  57. {
  58. materialPreset = PXR_Audio.Spatializer.AcousticsMaterial.Custom;
  59. lastMaterialPreset = PXR_Audio.Spatializer.AcousticsMaterial.Custom;
  60. }
  61. }
  62. }
  63. }
粤ICP备19079148号