DeltaVR/Assets/Oculus/Spatializer/scripts/ONSPPropagationMaterial.cs
2023-05-08 15:56:10 +03:00

622 lines
26 KiB
C#

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* Licensed under the Oculus SDK License Agreement (the "License");
* you may not use the Oculus SDK except in compliance with the License,
* which is provided at the time of installation or download, or which
* otherwise accompanies this software in either electronic or hard copy form.
*
* You may obtain a copy of the License at
*
* https://developer.oculus.com/licenses/oculussdk/
*
* Unless required by applicable law or agreed to in writing, the Oculus SDK
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/************************************************************************************
* Filename : ONSPPropagationMaterial.cs
* Content : Propagation material class
Attach to geometry to define material properties
***********************************************************************************/
using System;
using System.Linq;
using System.Collections.Generic;
using UnityEngine;
using Oculus.Spatializer.Propagation;
public sealed class ONSPPropagationMaterial : MonoBehaviour
{
public enum Preset
{
Custom,
AcousticTile,
Brick,
BrickPainted,
Carpet,
CarpetHeavy,
CarpetHeavyPadded,
CeramicTile,
Concrete,
ConcreteRough,
ConcreteBlock,
ConcreteBlockPainted,
Curtain,
Foliage,
Glass,
GlassHeavy,
Grass,
Gravel,
GypsumBoard,
PlasterOnBrick,
PlasterOnConcreteBlock,
Soil,
SoundProof,
Snow,
Steel,
Water,
WoodThin,
WoodThick,
WoodFloor,
WoodOnConcrete
}
[Serializable]
public sealed class Point
{
public float frequency;
public float data;
public Point( float frequency = 0, float data = 0 )
{
this.frequency = frequency;
this.data = data;
}
public static implicit operator Point(Vector2 v)
{
return new Point(v.x, v.y);
}
public static implicit operator Vector2(Point point)
{
return new Vector2(point.frequency, point.data);
}
}
[Serializable]
public sealed class Spectrum
{
public int selection = int.MaxValue;
public List<Point> points = new List<Point>();
public float this[float f]
{
get
{
if (points.Count > 0)
{
Point lower = new Point(float.MinValue);
Point upper = new Point(float.MaxValue);
foreach (Point point in points)
{
if (point.frequency < f)
{
if (point.frequency > lower.frequency)
lower = point;
}
else
{
if (point.frequency < upper.frequency)
upper = point;
}
}
if (lower.frequency == float.MinValue)
lower.data = points.OrderBy(p => p.frequency).First().data;
if (upper.frequency == float.MaxValue)
upper.data = points.OrderBy(p => p.frequency).Last().data;
return lower.data + (f - lower.frequency) *
(upper.data - lower.data) / (upper.frequency - lower.frequency);
}
return 0f;
}
}
}
//***********************************************************************
// Private Fields
public IntPtr materialHandle = IntPtr.Zero;
//***********************************************************************
// Public Fields
[Tooltip("Absorption")]
public Spectrum absorption = new Spectrum();
[Tooltip("Transmission")]
public Spectrum transmission = new Spectrum();
[Tooltip("Scattering")]
public Spectrum scattering = new Spectrum();
[SerializeField]
private Preset preset_ = Preset.Custom;
public Preset preset
{
get { return preset_; }
set
{
this.SetPreset( value );
preset_ = value;
}
}
//***********************************************************************
// Start / Destroy
/// Initialize the audio material. This is called after Awake() and before the first Update().
void Start()
{
StartInternal();
}
public void StartInternal()
{
// Ensure that the material is not initialized twice.
if ( materialHandle != IntPtr.Zero )
return;
// Create the internal material.
if (ONSPPropagation.Interface.CreateAudioMaterial( out materialHandle ) != ONSPPropagationGeometry.OSPSuccess)
throw new Exception("Unable to create internal audio material");
// Run the updates to initialize the material.
UploadMaterial();
}
/// Destroy the audio scene. This is called when the scene is deleted.
void OnDestroy()
{
DestroyInternal();
}
public void DestroyInternal()
{
if ( materialHandle != IntPtr.Zero )
{
// Destroy the material.
ONSPPropagation.Interface.DestroyAudioMaterial(materialHandle);
materialHandle = IntPtr.Zero;
}
}
//***********************************************************************
// Upload
public void UploadMaterial()
{
if ( materialHandle == IntPtr.Zero )
return;
// Absorption
ONSPPropagation.Interface.AudioMaterialReset(materialHandle, MaterialProperty.ABSORPTION);
foreach ( Point p in absorption.points )
ONSPPropagation.Interface.AudioMaterialSetFrequency(materialHandle, MaterialProperty.ABSORPTION,
p.frequency, p.data );
// Transmission
ONSPPropagation.Interface.AudioMaterialReset(materialHandle, MaterialProperty.TRANSMISSION);
foreach (Point p in transmission.points)
ONSPPropagation.Interface.AudioMaterialSetFrequency(materialHandle, MaterialProperty.TRANSMISSION,
p.frequency, p.data);
// Scattering
ONSPPropagation.Interface.AudioMaterialReset(materialHandle, MaterialProperty.SCATTERING);
foreach (Point p in scattering.points)
ONSPPropagation.Interface.AudioMaterialSetFrequency(materialHandle, MaterialProperty.SCATTERING,
p.frequency, p.data);
}
//***********************************************************************
public void SetPreset(Preset preset )
{
ONSPPropagationMaterial material = this;
switch ( preset )
{
case Preset.AcousticTile: AcousticTile(ref material); break;
case Preset.Brick: Brick(ref material); break;
case Preset.BrickPainted: BrickPainted(ref material); break;
case Preset.Carpet: Carpet(ref material); break;
case Preset.CarpetHeavy: CarpetHeavy(ref material); break;
case Preset.CarpetHeavyPadded: CarpetHeavyPadded(ref material); break;
case Preset.CeramicTile: CeramicTile(ref material); break;
case Preset.Concrete: Concrete(ref material); break;
case Preset.ConcreteRough: ConcreteRough(ref material); break;
case Preset.ConcreteBlock: ConcreteBlock(ref material); break;
case Preset.ConcreteBlockPainted: ConcreteBlockPainted(ref material); break;
case Preset.Curtain: Curtain(ref material); break;
case Preset.Foliage: Foliage(ref material); break;
case Preset.Glass: Glass(ref material); break;
case Preset.GlassHeavy: GlassHeavy(ref material); break;
case Preset.Grass: Grass(ref material); break;
case Preset.Gravel: Gravel(ref material); break;
case Preset.GypsumBoard: GypsumBoard(ref material); break;
case Preset.PlasterOnBrick: PlasterOnBrick(ref material); break;
case Preset.PlasterOnConcreteBlock: PlasterOnConcreteBlock(ref material); break;
case Preset.Soil: Soil(ref material); break;
case Preset.SoundProof: SoundProof(ref material); break;
case Preset.Snow: Snow(ref material); break;
case Preset.Steel: Steel(ref material); break;
case Preset.Water: Water(ref material); break;
case Preset.WoodThin: WoodThin(ref material); break;
case Preset.WoodThick: WoodThick(ref material); break;
case Preset.WoodFloor: WoodFloor(ref material); break;
case Preset.WoodOnConcrete: WoodOnConcrete(ref material); break;
case Preset.Custom:
break;
default:
break;
}
}
//***********************************************************************
private static void AcousticTile(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .50f), new Point(250f, .70f), new Point(500f, .60f), new Point(1000f, .70f), new Point(2000f, .70f), new Point(4000f, .50f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .15f), new Point(500f, .20f), new Point(1000f, .20f), new Point(2000f, .25f), new Point(4000f, .30f) };
material.transmission.points = new List<Point>(){
new Point(125f, .05f), new Point(250f, .04f), new Point(500f, .03f), new Point(1000f, .02f), new Point(2000f, .005f), new Point(4000f, .002f) };
}
private static void Brick(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .02f), new Point(250f, .02f), new Point(500f, .03f), new Point(1000f, .04f), new Point(2000f, .05f), new Point(4000f, .07f) };
material.scattering.points = new List<Point>{
new Point(125f, .20f), new Point(250f, .25f), new Point(500f, .30f), new Point(1000f, .35f), new Point(2000f, .40f), new Point(4000f, .45f) };
material.transmission.points = new List<Point>(){
new Point(125f, .025f), new Point(250f, .019f), new Point(500f, .01f), new Point(1000f, .0045f), new Point(2000f, .0018f), new Point(4000f, .00089f) };
}
private static void BrickPainted(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .01f), new Point(250f, .01f), new Point(500f, .02f), new Point(1000f, .02f), new Point(2000f, .02f), new Point(4000f, .03f) };
material.scattering.points = new List<Point>{
new Point(125f, .15f), new Point(250f, .15f), new Point(500f, .20f), new Point(1000f, .20f), new Point(2000f, .20f), new Point(4000f, .25f) };
material.transmission.points = new List<Point>(){
new Point(125f, .025f), new Point(250f, .019f), new Point(500f, .01f), new Point(1000f, .0045f), new Point(2000f, .0018f), new Point(4000f, .00089f) };
}
private static void Carpet(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .01f), new Point(250f, .05f), new Point(500f, .10f), new Point(1000f, .20f), new Point(2000f, .45f), new Point(4000f, .65f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .10f), new Point(500f, .15f), new Point(1000f, .20f), new Point(2000f, .30f), new Point(4000f, .45f) };
material.transmission.points = new List<Point>(){
new Point(125f, .004f), new Point(250f, .0079f), new Point(500f, .0056f), new Point(1000f, .0016f), new Point(2000f, .0014f), new Point(4000f, .0005f) };
}
private static void CarpetHeavy(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .02f), new Point(250f, .06f), new Point(500f, .14f), new Point(1000f, .37f), new Point(2000f, .48f), new Point(4000f, .63f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .15f), new Point(500f, .20f), new Point(1000f, .25f), new Point(2000f, .35f), new Point(4000f, .50f) };
material.transmission.points = new List<Point>(){
new Point(125f, .004f), new Point(250f, .0079f), new Point(500f, .0056f), new Point(1000f, .0016f), new Point(2000f, .0014f), new Point(4000f, .0005f) };
}
private static void CarpetHeavyPadded(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .08f), new Point(250f, .24f), new Point(500f, .57f), new Point(1000f, .69f), new Point(2000f, .71f), new Point(4000f, .73f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .15f), new Point(500f, .20f), new Point(1000f, .25f), new Point(2000f, .35f), new Point(4000f, .50f) };
material.transmission.points = new List<Point>(){
new Point(125f, .004f), new Point(250f, .0079f), new Point(500f, .0056f), new Point(1000f, .0016f), new Point(2000f, .0014f), new Point(4000f, .0005f) };
}
private static void CeramicTile(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .01f), new Point(250f, .01f), new Point(500f, .01f), new Point(1000f, .01f), new Point(2000f, .02f), new Point(4000f, .02f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .12f), new Point(500f, .14f), new Point(1000f, .16f), new Point(2000f, .18f), new Point(4000f, .20f) };
material.transmission.points = new List<Point>(){
new Point(125f, .004f), new Point(250f, .0079f), new Point(500f, .0056f), new Point(1000f, .0016f), new Point(2000f, .0014f), new Point(4000f, .0005f) };
}
private static void Concrete(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .01f), new Point(250f, .01f), new Point(500f, .02f), new Point(1000f, .02f), new Point(2000f, .02f), new Point(4000f, .02f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .11f), new Point(500f, .12f), new Point(1000f, .13f), new Point(2000f, .14f), new Point(4000f, .15f) };
material.transmission.points = new List<Point>(){
new Point(125f, .004f), new Point(250f, .0079f), new Point(500f, .0056f), new Point(1000f, .0016f), new Point(2000f, .0014f), new Point(4000f, .0005f) };
}
private static void ConcreteRough(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .01f), new Point(250f, .02f), new Point(500f, .04f), new Point(1000f, .06f), new Point(2000f, .08f), new Point(4000f, .10f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .12f), new Point(500f, .15f), new Point(1000f, .20f), new Point(2000f, .25f), new Point(4000f, .30f) };
material.transmission.points = new List<Point>(){
new Point(125f, .004f), new Point(250f, .0079f), new Point(500f, .0056f), new Point(1000f, .0016f), new Point(2000f, .0014f), new Point(4000f, .0005f) };
}
private static void ConcreteBlock(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .36f), new Point(250f, .44f), new Point(500f, .31f), new Point(1000f, .29f), new Point(2000f, .39f), new Point(4000f, .21f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .12f), new Point(500f, .15f), new Point(1000f, .20f), new Point(2000f, .30f), new Point(4000f, .40f) };
material.transmission.points = new List<Point>(){
new Point(125f, .02f), new Point(250f, .01f), new Point(500f, .0063f), new Point(1000f, .0035f), new Point(2000f, .00011f), new Point(4000f, .00063f) };
}
private static void ConcreteBlockPainted(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .05f), new Point(500f, .06f), new Point(1000f, .07f), new Point(2000f, .09f), new Point(4000f, .08f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .11f), new Point(500f, .13f), new Point(1000f, .15f), new Point(2000f, .16f), new Point(4000f, .20f) };
material.transmission.points = new List<Point>(){
new Point(125f, .02f), new Point(250f, .01f), new Point(500f, .0063f), new Point(1000f, .0035f), new Point(2000f, .00011f), new Point(4000f, .00063f) };
}
private static void Curtain(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .07f), new Point(250f, .31f), new Point(500f, .49f), new Point(1000f, .75f), new Point(2000f, .70f), new Point(4000f, .60f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .15f), new Point(500f, .2f), new Point(1000f, .3f), new Point(2000f, .4f), new Point(4000f, .5f) };
material.transmission.points = new List<Point>(){
new Point(125f, .42f), new Point(250f, .39f), new Point(500f, .21f), new Point(1000f, .14f), new Point(2000f, .079f), new Point(4000f, .045f) };
}
private static void Foliage(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .03f), new Point(250f, .06f), new Point(500f, .11f), new Point(1000f, .17f), new Point(2000f, .27f), new Point(4000f, .31f) };
material.scattering.points = new List<Point>{
new Point(125f, .20f), new Point(250f, .3f), new Point(500f, .4f), new Point(1000f, .5f), new Point(2000f, .7f), new Point(4000f, .8f) };
material.transmission.points = new List<Point>(){
new Point(125f, .9f), new Point(250f, .9f), new Point(500f, .9f), new Point(1000f, .8f), new Point(2000f, .5f), new Point(4000f, .3f) };
}
private static void Glass(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .35f), new Point(250f, .25f), new Point(500f, .18f), new Point(1000f, .12f), new Point(2000f, .07f), new Point(4000f, .05f) };
material.scattering.points = new List<Point>{
new Point(125f, .05f), new Point(250f, .05f), new Point(500f, .05f), new Point(1000f, .05f), new Point(2000f, .05f), new Point(4000f, .05f) };
material.transmission.points = new List<Point>(){
new Point(125f, .125f), new Point(250f, .089f), new Point(500f, .05f), new Point(1000f, .028f), new Point(2000f, .022f), new Point(4000f, .079f) };
}
private static void GlassHeavy(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .18f), new Point(250f, .06f), new Point(500f, .04f), new Point(1000f, .03f), new Point(2000f, .02f), new Point(4000f, .02f) };
material.scattering.points = new List<Point>{
new Point(125f, .05f), new Point(250f, .05f), new Point(500f, .05f), new Point(1000f, .05f), new Point(2000f, .05f), new Point(4000f, .05f) };
material.transmission.points = new List<Point>(){
new Point(125f, .056f), new Point(250f, .039f), new Point(500f, .028f), new Point(1000f, .02f), new Point(2000f, .032f), new Point(4000f, .014f) };
}
private static void Grass(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .11f), new Point(250f, .26f), new Point(500f, .60f), new Point(1000f, .69f), new Point(2000f, .92f), new Point(4000f, .99f) };
material.scattering.points = new List<Point>{
new Point(125f, .30f), new Point(250f, .30f), new Point(500f, .40f), new Point(1000f, .50f), new Point(2000f, .60f), new Point(4000f, .70f) };
material.transmission.points = new List<Point>();
}
private static void Gravel(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .25f), new Point(250f, .60f), new Point(500f, .65f), new Point(1000f, .70f), new Point(2000f, .75f), new Point(4000f, .80f) };
material.scattering.points = new List<Point>{
new Point(125f, .20f), new Point(250f, .30f), new Point(500f, .40f), new Point(1000f, .50f), new Point(2000f, .60f), new Point(4000f, .70f) };
material.transmission.points = new List<Point>();
}
private static void GypsumBoard(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .29f), new Point(250f, .10f), new Point(500f, .05f), new Point(1000f, .04f), new Point(2000f, .07f), new Point(4000f, .09f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .11f), new Point(500f, .12f), new Point(1000f, .13f), new Point(2000f, .14f), new Point(4000f, .15f) };
material.transmission.points = new List<Point>(){
new Point(125f, .035f), new Point(250f, .0125f), new Point(500f, .0056f), new Point(1000f, .0025f), new Point(2000f, .0013f), new Point(4000f, .0032f) };
}
private static void PlasterOnBrick(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .01f), new Point(250f, .02f), new Point(500f, .02f), new Point(1000f, .03f), new Point(2000f, .04f), new Point(4000f, .05f) };
material.scattering.points = new List<Point>{
new Point(125f, .20f), new Point(250f, .25f), new Point(500f, .30f), new Point(1000f, .35f), new Point(2000f, .40f), new Point(4000f, .45f) };
material.transmission.points = new List<Point>(){
new Point(125f, .025f), new Point(250f, .019f), new Point(500f, .01f), new Point(1000f, .0045f), new Point(2000f, .0018f), new Point(4000f, .00089f) };
}
private static void PlasterOnConcreteBlock(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .12f), new Point(250f, .09f), new Point(500f, .07f), new Point(1000f, .05f), new Point(2000f, .05f), new Point(4000f, .04f) };
material.scattering.points = new List<Point>{
new Point(125f, .20f), new Point(250f, .25f), new Point(500f, .30f), new Point(1000f, .35f), new Point(2000f, .40f), new Point(4000f, .45f) };
material.transmission.points = new List<Point>(){
new Point(125f, .02f), new Point(250f, .01f), new Point(500f, .0063f), new Point(1000f, .0035f), new Point(2000f, .00011f), new Point(4000f, .00063f) };
}
private static void Soil(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .15f), new Point(250f, .25f), new Point(500f, .40f), new Point(1000f, .55f), new Point(2000f, .60f), new Point(4000f, .60f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .20f), new Point(500f, .25f), new Point(1000f, .40f), new Point(2000f, .55f), new Point(4000f, .70f) };
material.transmission.points = new List<Point>();
}
private static void SoundProof(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{ new Point(1000f, 1.0f) };
material.scattering.points = new List<Point>{ new Point(1000f, 0.0f) };
material.transmission.points = new List<Point>();
}
private static void Snow(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .45f), new Point(250f, .75f), new Point(500f, .90f), new Point(1000f, .95f), new Point(2000f, .95f), new Point(4000f, .95f) };
material.scattering.points = new List<Point>{
new Point(125f, .20f), new Point(250f, .30f), new Point(500f, .40f), new Point(1000f, .50f), new Point(2000f, .60f), new Point(4000f, .75f) };
material.transmission.points = new List<Point>();
}
private static void Steel(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .05f), new Point(250f, .10f), new Point(500f, .10f), new Point(1000f, .10f), new Point(2000f, .07f), new Point(4000f, .02f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .10f), new Point(500f, .10f), new Point(1000f, .10f), new Point(2000f, .10f), new Point(4000f, .10f) };
material.transmission.points = new List<Point>(){
new Point(125f, .25f), new Point(250f, .2f), new Point(500f, .17f), new Point(1000f, .089f), new Point(2000f, .089f), new Point(4000f, .0056f) };
}
private static void Water(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .01f), new Point(250f, .01f), new Point(500f, .01f), new Point(1000f, .02f), new Point(2000f, .02f), new Point(4000f, .03f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .10f), new Point(500f, .10f), new Point(1000f, .07f), new Point(2000f, .05f), new Point(4000f, .05f) };
material.transmission.points = new List<Point>(){
new Point(125f, .03f), new Point(250f, .03f), new Point(500f, .03f), new Point(1000f, .02f), new Point(2000f, .015f), new Point(4000f, .01f) };
}
private static void WoodThin(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .42f), new Point(250f, .21f), new Point(500f, .10f), new Point(1000f, .08f), new Point(2000f, .06f), new Point(4000f, .06f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .10f), new Point(500f, .10f), new Point(1000f, .10f), new Point(2000f, .10f), new Point(4000f, .15f) };
material.transmission.points = new List<Point>(){
new Point(125f, .2f), new Point(250f, .125f), new Point(500f, .079f), new Point(1000f, .1f), new Point(2000f, .089f), new Point(4000f, .05f) };
}
private static void WoodThick(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .19f), new Point(250f, .14f), new Point(500f, .09f), new Point(1000f, .06f), new Point(2000f, .06f), new Point(4000f, .05f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .10f), new Point(500f, .10f), new Point(1000f, .10f), new Point(2000f, .10f), new Point(4000f, .15f) };
material.transmission.points = new List<Point>(){
new Point(125f, .035f), new Point(250f, .028f), new Point(500f, .028f), new Point(1000f, .028f), new Point(2000f, .011f), new Point(4000f, .0071f) };
}
private static void WoodFloor(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .15f), new Point(250f, .11f), new Point(500f, .10f), new Point(1000f, .07f), new Point(2000f, .06f), new Point(4000f, .07f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .10f), new Point(500f, .10f), new Point(1000f, .10f), new Point(2000f, .10f), new Point(4000f, .15f) };
material.transmission.points = new List<Point>(){
new Point(125f, .071f), new Point(250f, .025f), new Point(500f, .0158f), new Point(1000f, .0056f), new Point(2000f, .0035f), new Point(4000f, .0016f) };
}
private static void WoodOnConcrete(ref ONSPPropagationMaterial material)
{
material.absorption.points = new List<Point>{
new Point(125f, .04f), new Point(250f, .04f), new Point(500f, .07f), new Point(1000f, .06f), new Point(2000f, .06f), new Point(4000f, .07f) };
material.scattering.points = new List<Point>{
new Point(125f, .10f), new Point(250f, .10f), new Point(500f, .10f), new Point(1000f, .10f), new Point(2000f, .10f), new Point(4000f, .15f) };
material.transmission.points = new List<Point>(){
new Point(125f, .004f), new Point(250f, .0079f), new Point(500f, .0056f), new Point(1000f, .0016f), new Point(2000f, .0014f), new Point(4000f, .0005f) };
}
}