From 42646a636fc92d79585bdff90e0bb98e0af09911 Mon Sep 17 00:00:00 2001 From: "skrwns304@gmail.com" Date: Thu, 16 Apr 2026 04:58:10 +0900 Subject: [PATCH] =?UTF-8?q?2026-04-16=20=EC=98=A4=EB=B8=8C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EA=B7=B8=EB=A6=BC=EC=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vsconfig | 6 + Assets/01_Scenes/MyProject/GameScene.unity | 4 +- .../Quality URP Config.asset | 4 +- .../Standalone Preset.asset | 4 +- Assets/99_Settings/Shadow.meta | 8 + Assets/99_Settings/Shadow/Umbra Profile.asset | 3 + .../Shadow/Umbra Profile.asset.meta | 8 + .../Materials/Grocery Store Racks_BaseMap.mat | 9 +- .../FBX/Materials/Floor1.mat | 4 +- Assets/UmbraSoftShadows.meta | 8 + Assets/UmbraSoftShadows/Demo.meta | 8 + .../Demo/Demo Transparent Receiver.unity | 3 + .../Demo/Demo Transparent Receiver.unity.meta | 14 + Assets/UmbraSoftShadows/Demo/Demo.unity | 3 + Assets/UmbraSoftShadows/Demo/Demo.unity.meta | 14 + .../Demo/New Umbra Profile 1.asset | 3 + .../Demo/New Umbra Profile 1.asset.meta | 8 + .../Demo/New Umbra Profile.asset | 3 + .../Demo/New Umbra Profile.asset.meta | 8 + Assets/UmbraSoftShadows/Demo/Scene.meta | 8 + .../Demo/Scene/DemoSettings.lighting | 63 + .../Demo/Scene/DemoSettings.lighting.meta | 15 + .../Demo/Scene/SimpleShader.shader | 131 + .../Demo/Scene/SimpleShader.shader.meta | 16 + .../Demo/Scene/URP Settings.meta | 8 + .../URP-HighFidelity-Renderer.asset | 3 + .../URP-HighFidelity-Renderer.asset.meta | 15 + .../Scene/URP Settings/URP-HighFidelity.asset | 3 + .../URP Settings/URP-HighFidelity.asset.meta | 15 + ...niversalRenderPipelineGlobalSettings.asset | 3 + ...salRenderPipelineGlobalSettings.asset.meta | 15 + Assets/UmbraSoftShadows/Demo/Scene/Venus.fbx | 3 + .../Demo/Scene/Venus.fbx.meta | 116 + Assets/UmbraSoftShadows/Demo/Scene/Venus.mat | 139 + .../Demo/Scene/Venus.mat.meta | 15 + .../UmbraSoftShadows/Demo/Scene/Venus.prefab | 3 + .../Demo/Scene/Venus.prefab.meta | 14 + .../Demo/Scene/occluderMat.mat | 139 + .../Demo/Scene/occluderMat.mat.meta | 15 + .../Demo/Scene/stylizedMask.png | 3 + .../Demo/Scene/stylizedMask.png.meta | 134 + Assets/UmbraSoftShadows/Documentation.meta | 8 + .../Documentation/Documentation Online.url | 2 + .../Documentation Online.url.meta | 14 + .../Documentation/Documentation PDF.url | 2 + .../Documentation/Documentation PDF.url.meta | 14 + .../Documentation/Kronnect Assets.url | 2 + .../Documentation/Kronnect Assets.url.meta | 14 + .../Documentation/Support.url | 2 + .../Documentation/Support.url.meta | 14 + Assets/UmbraSoftShadows/Editor.meta | 8 + .../Editor/UmbraEditor.asmdef | 18 + .../Editor/UmbraEditor.asmdef.meta | 14 + .../Editor/UmbraProfileEditor.cs | 317 ++ .../Editor/UmbraProfileEditor.cs.meta | 18 + .../Editor/UmbraSoftShadowsEditor.cs | 152 + .../Editor/UmbraSoftShadowsEditor.cs.meta | 18 + Assets/UmbraSoftShadows/README.txt | 119 + Assets/UmbraSoftShadows/README.txt.meta | 14 + Assets/UmbraSoftShadows/Runtime.meta | 8 + .../UmbraSoftShadows/Runtime/Resources.meta | 8 + .../Runtime/Resources/Umbra.meta | 8 + .../Runtime/Resources/Umbra/Shaders.meta | 8 + .../Resources/Umbra/Shaders/Common.hlsl | 124 + .../Resources/Umbra/Shaders/Common.hlsl.meta | 14 + .../Umbra/Shaders/ContactShadows.hlsl | 221 + .../Umbra/Shaders/ContactShadows.hlsl.meta | 14 + .../Resources/Umbra/Shaders/ShadowBlur.hlsl | 287 ++ .../Umbra/Shaders/ShadowBlur.hlsl.meta | 14 + .../Resources/Umbra/Shaders/ShadowCast.hlsl | 341 ++ .../Umbra/Shaders/ShadowCast.hlsl.meta | 14 + .../Umbra/Shaders/Transparent Receiver.meta | 8 + .../Transparent Receiver/ShadowFunctions.hlsl | 15 + .../ShadowFunctions.hlsl.meta | 15 + .../ShadowReceiverTransparent.shadergraph | 804 ++++ ...ShadowReceiverTransparent.shadergraph.meta | 18 + .../Transparent Floor.mat | 136 + .../Transparent Floor.mat.meta | 16 + .../Shaders/UmbraScreenSpaceShadows.shader | 219 + .../UmbraScreenSpaceShadows.shader.meta | 17 + .../Runtime/Resources/Umbra/Textures.meta | 8 + .../Resources/Umbra/Textures/NoiseTex.png | 3 + .../Umbra/Textures/NoiseTex.png.meta | 147 + Assets/UmbraSoftShadows/Runtime/Scripts.meta | 8 + .../Scripts/UmbraPointLightContactShadows.cs | 75 + .../UmbraPointLightContactShadows.cs.meta | 18 + .../Runtime/Scripts/UmbraProfile.cs | 351 ++ .../Runtime/Scripts/UmbraProfile.cs.meta | 18 + .../Runtime/Scripts/UmbraRenderFeature.RG.cs | 484 ++ .../Scripts/UmbraRenderFeature.RG.cs.meta | 18 + .../Runtime/Scripts/UmbraRenderFeature.cs | 915 ++++ .../Scripts/UmbraRenderFeature.cs.meta | 18 + .../Runtime/Scripts/UmbraSoftShadows.cs | 61 + .../Runtime/Scripts/UmbraSoftShadows.cs.meta | 18 + .../Runtime/UmbraAsmRef.asmref | 3 + .../Runtime/UmbraAsmRef.asmref.meta | 14 + .../XR/AndroidXR/AndroidXRSettingsInitializer | 2 +- .../XR/Settings/OpenXR Package Settings.asset | 4 +- .../Documentation.meta | 8 + .../Realtime Area Light for URP.pdf | 3 + .../Realtime Area Light for URP.pdf.meta | 15 + .../Editor.meta | 8 + .../Editor/AreaLightSettingsDrawer.cs | 138 + .../Editor/AreaLightSettingsDrawer.cs.meta | 9 + .../Editor/AreaLightShadowSettingsDrawer.cs | 136 + .../AreaLightShadowSettingsDrawer.cs.meta | 9 + .../Editor/AreaLightingEditor.cs | 41 + .../Editor/AreaLightingEditor.cs.meta | 9 + .../Editor/BGAreaLightEditor.cs | 98 + .../Editor/BGAreaLightEditor.cs.meta | 9 + .../Editor/Material.meta | 8 + .../Editor/Material/LTCAreaLight.meta | 8 + .../Editor/Material/LTCAreaLight/LTC.cs | 350 ++ .../Editor/Material/LTCAreaLight/LTC.cs.meta | 9 + .../LTCAreaLight/LTCTableGenerator.cs | 407 ++ .../LTCAreaLight/LTCTableGenerator.cs.meta | 9 + .../LTCAreaLight/LTCTableGeneratorEditor.cs | 152 + .../LTCTableGeneratorEditor.cs.meta | 9 + .../Material/LTCAreaLight/NelderMead.cs | 166 + .../Material/LTCAreaLight/NelderMead.cs.meta | 9 + .../Editor/Material/PreIntegratedFGD.meta | 8 + .../PreIntegratedFGDWindow.cs | 222 + .../PreIntegratedFGDWindow.cs.meta | 9 + .../Editor/ShadowAtlasResolutionDrawer.cs | 66 + .../ShadowAtlasResolutionDrawer.cs.meta | 9 + ...m.baddog.rendering.arealight.editor.asmdef | 21 + ...dog.rendering.arealight.editor.asmdef.meta | 14 + .../Runtime.meta | 8 + .../Runtime/AreaLighting.cs | 115 + .../Runtime/AreaLighting.cs.meta | 9 + .../Runtime/AreaLightingShaderIDs.cs | 40 + .../Runtime/AreaLightingShaderIDs.cs.meta | 9 + .../Runtime/BGAreaLight.cs | 311 ++ .../Runtime/BGAreaLight.cs.meta | 9 + .../Runtime/BGAreaLightManager.cs | 300 ++ .../Runtime/BGAreaLightManager.cs.meta | 9 + .../Runtime/Material.meta | 8 + .../Runtime/Material/LTCAreaLight.meta | 8 + .../Runtime/Material/LTCAreaLight/BRDF.meta | 8 + .../LTCAreaLight/BRDF/BRDF_Charlie.cs | 98 + .../LTCAreaLight/BRDF/BRDF_Charlie.cs.meta | 9 + .../LTCAreaLight/BRDF/BRDF_CookTorrance.cs | 60 + .../BRDF/BRDF_CookTorrance.cs.meta | 9 + .../Material/LTCAreaLight/BRDF/BRDF_Disney.cs | 83 + .../LTCAreaLight/BRDF/BRDF_Disney.cs.meta | 9 + .../Material/LTCAreaLight/BRDF/BRDF_GGX.cs | 74 + .../LTCAreaLight/BRDF/BRDF_GGX.cs.meta | 9 + .../LTCAreaLight/BRDF/BRDF_Interface.cs | 38 + .../LTCAreaLight/BRDF/BRDF_Interface.cs.meta | 9 + .../BRDF/BRDF_KajiyaKaySpecular.cs | 112 + .../BRDF/BRDF_KajiyaKaySpecular.cs.meta | 9 + .../LTCAreaLight/BRDF/BRDF_Marschner.cs | 27 + .../LTCAreaLight/BRDF/BRDF_Marschner.cs.meta | 9 + .../LTCAreaLight/BRDF/BRDF_OrenNayar.cs | 80 + .../LTCAreaLight/BRDF/BRDF_OrenNayar.cs.meta | 9 + .../Material/LTCAreaLight/BRDF/BRDF_Ward.cs | 65 + .../LTCAreaLight/BRDF/BRDF_Ward.cs.meta | 9 + .../Material/LTCAreaLight/Generated.meta | 8 + .../Generated/LtcData.BRDF_Charlie.cs | 4248 +++++++++++++++++ .../Generated/LtcData.BRDF_Charlie.cs.meta | 9 + .../Generated/LtcData.BRDF_CookTorrance.cs | 4248 +++++++++++++++++ .../LtcData.BRDF_CookTorrance.cs.meta | 9 + .../Generated/LtcData.BRDF_Disney.cs | 4248 +++++++++++++++++ .../Generated/LtcData.BRDF_Disney.cs.meta | 9 + .../Generated/LtcData.BRDF_GGX.cs | 4248 +++++++++++++++++ .../Generated/LtcData.BRDF_GGX.cs.meta | 9 + .../LtcData.BRDF_KajiyaKaySpecular.cs | 4248 +++++++++++++++++ .../LtcData.BRDF_KajiyaKaySpecular.cs.meta | 9 + .../Generated/LtcData.BRDF_Marschner.cs | 4248 +++++++++++++++++ .../Generated/LtcData.BRDF_Marschner.cs.meta | 9 + .../Generated/LtcData.BRDF_OrenNayar.cs | 4248 +++++++++++++++++ .../Generated/LtcData.BRDF_OrenNayar.cs.meta | 9 + .../Generated/LtcData.BRDF_Ward.cs | 4248 +++++++++++++++++ .../Generated/LtcData.BRDF_Ward.cs.meta | 9 + .../Material/LTCAreaLight/LTCAreaLight.cs | 135 + .../LTCAreaLight/LTCAreaLight.cs.meta | 9 + .../Runtime/Material/PreIntegratedFGD.meta | 8 + .../PreIntegratedFGD/PreIntegratedFGD.cs | 168 + .../PreIntegratedFGD/PreIntegratedFGD.cs.meta | 9 + .../PreIntegratedFGDShaderIDs.cs | 16 + .../PreIntegratedFGDShaderIDs.cs.meta | 9 + .../Runtime/Passes.meta | 8 + .../Runtime/Passes/AreaLightingPass.Legacy.cs | 308 ++ .../Passes/AreaLightingPass.Legacy.cs.meta | 9 + .../Passes/AreaLightingPass.RenderGraph.cs | 355 ++ .../AreaLightingPass.RenderGraph.cs.meta | 9 + .../Runtime/Passes/AreaLightingPass.cs | 445 ++ .../Runtime/Passes/AreaLightingPass.cs.meta | 9 + .../Passes/AreaLightsShadowAtlasLayout.cs | 383 ++ .../AreaLightsShadowAtlasLayout.cs.meta | 9 + .../Runtime/Passes/AreaShadowUtils.cs | 331 ++ .../Runtime/Passes/AreaShadowUtils.cs.meta | 9 + .../Passes/NativeArrayExtensionsCompat.cs | 24 + .../NativeArrayExtensionsCompat.cs.meta | 9 + .../com.baddog.rendering.arealight.asmdef | 19 + ...com.baddog.rendering.arealight.asmdef.meta | 14 + .../Samples.meta | 8 + .../Samples/Materials.meta | 8 + .../Samples/Materials/BGAreaLit.mat | 136 + .../Samples/Materials/BGAreaLit.mat.meta | 15 + .../Samples/Materials/BGAreaSimpleLit.mat | 140 + .../Materials/BGAreaSimpleLit.mat.meta | 15 + .../Samples/Materials/BGAreaTerrainLit.mat | 203 + .../Materials/BGAreaTerrainLit.mat.meta | 15 + .../Samples/Materials/Fire.mat | 168 + .../Samples/Materials/Fire.mat.meta | 15 + .../Samples/Materials/Light.mat | 138 + .../Samples/Materials/Light.mat.meta | 15 + .../Samples/Materials/Wall.mat | 137 + .../Samples/Materials/Wall.mat.meta | 15 + .../Samples/Prefabs.meta | 8 + .../Samples/Prefabs/fire.prefab | 3 + .../Samples/Prefabs/fire.prefab.meta | 14 + .../Samples/Scenes.meta | 8 + .../Samples/Scenes/New Terrain.asset | 3 + .../Samples/Scenes/New Terrain.asset.meta | 15 + .../Samples/Scenes/SampleSceneProfile.asset | 3 + .../Scenes/SampleSceneProfile.asset.meta | 15 + .../Samples/Scenes/Test.unity | 3 + .../Samples/Scenes/Test.unity.meta | 14 + .../Samples/Scenes/Test02.unity | 3 + .../Samples/Scenes/Test02.unity.meta | 14 + .../Samples/Scenes/TestLit.unity | 3 + .../Samples/Scenes/TestLit.unity.meta | 14 + .../Samples/Scenes/TestParticleLit.unity | 3 + .../Samples/Scenes/TestParticleLit.unity.meta | 14 + .../Samples/Scenes/TestSimpleLit.unity | 3 + .../Samples/Scenes/TestSimpleLit.unity.meta | 14 + .../Samples/Scenes/TestSpine.unity | 3 + .../Samples/Scenes/TestSpine.unity.meta | 14 + .../Samples/Scenes/TestTerrainLit.unity | 3 + .../Samples/Scenes/TestTerrainLit.unity.meta | 14 + .../Samples/Scripts.meta | 8 + .../Samples/Scripts/AreaLightTestPanel.cs | 321 ++ .../Scripts/AreaLightTestPanel.cs.meta | 9 + ....baddog.rendering.arealight.samples.asmdef | 18 + ...og.rendering.arealight.samples.asmdef.meta | 14 + .../Samples/Settings.meta | 8 + .../Samples/Settings/URPSampleAsset.asset | 3 + .../Settings/URPSampleAsset.asset.meta | 15 + .../Settings/URPSampleAsset_Renderer.asset | 3 + .../URPSampleAsset_Renderer.asset.meta | 15 + .../Samples/Spine.meta | 8 + .../Samples/Spine/README.txt | 3 + .../Samples/Spine/README.txt.meta | 14 + .../Samples/Spine/spineboy.mat | 66 + .../Samples/Spine/spineboy.mat.meta | 15 + .../Samples/Spine/spineboy.png | 3 + .../Samples/Spine/spineboy.png.meta | 825 ++++ .../Samples/Spine/spineboymesh.asset | 3 + .../Samples/Spine/spineboymesh.asset.meta | 15 + .../Samples/Textures.meta | 8 + .../Samples/Textures/smokeA.psd | 3 + .../Samples/Textures/smokeA.psd.meta | 124 + .../Samples/Textures/smokeN.psd | 3 + .../Samples/Textures/smokeN.psd.meta | 124 + .../Shaders.meta | 8 + .../Shaders/BadDog.meta | 8 + .../Shaders/BadDog/BGAreaLit.shader | 456 ++ .../Shaders/BadDog/BGAreaLit.shader.meta | 16 + .../Shaders/BadDog/BGAreaLitForwardPass.hlsl | 280 ++ .../BadDog/BGAreaLitForwardPass.hlsl.meta | 14 + .../Shaders/BadDog/BGAreaParticleLit.shader | 389 ++ .../BadDog/BGAreaParticleLit.shader.meta | 16 + .../BadDog/BGAreaParticleLitForwardPass.hlsl | 162 + .../BGAreaParticleLitForwardPass.hlsl.meta | 14 + .../Shaders/BadDog/BGAreaSimpleLit.shader | 408 ++ .../BadDog/BGAreaSimpleLit.shader.meta | 16 + .../BadDog/BGAreaSimpleLitForwardPass.hlsl | 247 + .../BGAreaSimpleLitForwardPass.hlsl.meta | 14 + .../Shaders/BadDog/BGAreaSpineLit.shader | 229 + .../Shaders/BadDog/BGAreaSpineLit.shader.meta | 16 + .../BadDog/BGAreaSpineLitForwardPass.hlsl | 601 +++ .../BGAreaSpineLitForwardPass.hlsl.meta | 14 + .../Shaders/BadDog/BGAreaTerrainLit.shader | 257 + .../BadDog/BGAreaTerrainLit.shader.meta | 16 + .../BadDog/BGAreaTerrainLitForwardPasses.hlsl | 614 +++ .../BGAreaTerrainLitForwardPasses.hlsl.meta | 14 + .../Shaders/Include.meta | 8 + .../Shaders/Include/BGAreaLightShadows.hlsl | 150 + .../Include/BGAreaLightShadows.hlsl.meta | 14 + .../Shaders/Include/BGAreaLighting.hlsl | 565 +++ .../Shaders/Include/BGAreaLighting.hlsl.meta | 14 + .../Shaders/Include/HDPCSS.hlsl | 293 ++ .../Shaders/Include/HDPCSS.hlsl.meta | 14 + .../Shaders/Include/LTCAreaLight.cs.hlsl | 22 + .../Shaders/Include/LTCAreaLight.cs.hlsl.meta | 14 + .../Shaders/Include/LTCAreaLight.hlsl | 75 + .../Shaders/Include/LTCAreaLight.hlsl.meta | 14 + .../Shaders/Include/PreIntegratedFGD.hlsl | 81 + .../Include/PreIntegratedFGD.hlsl.meta | 14 + .../Shaders/PreIntegratedFGD.cs.hlsl | 14 + .../Shaders/PreIntegratedFGD.cs.hlsl.meta | 14 + ...eIntegratedFGD_CharlieFabricLambert.shader | 111 + ...gratedFGD_CharlieFabricLambert.shader.meta | 16 + .../PreIntegratedFGD_GGXDisneyDiffuse.shader | 72 + ...IntegratedFGD_GGXDisneyDiffuse.shader.meta | 16 + .../Shaders/PreIntegratedFGD_Marschner.shader | 65 + .../PreIntegratedFGD_Marschner.shader.meta | 16 + .../package.json | 23 + .../package.json.meta | 14 + Packages/packages-lock.json | 8 + ProjectSettings/QualitySettings.asset | 2 +- 303 files changed, 54374 insertions(+), 20 deletions(-) create mode 100644 .vsconfig create mode 100644 Assets/99_Settings/Shadow.meta create mode 100644 Assets/99_Settings/Shadow/Umbra Profile.asset create mode 100644 Assets/99_Settings/Shadow/Umbra Profile.asset.meta create mode 100644 Assets/UmbraSoftShadows.meta create mode 100644 Assets/UmbraSoftShadows/Demo.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Demo Transparent Receiver.unity create mode 100644 Assets/UmbraSoftShadows/Demo/Demo Transparent Receiver.unity.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Demo.unity create mode 100644 Assets/UmbraSoftShadows/Demo/Demo.unity.meta create mode 100644 Assets/UmbraSoftShadows/Demo/New Umbra Profile 1.asset create mode 100644 Assets/UmbraSoftShadows/Demo/New Umbra Profile 1.asset.meta create mode 100644 Assets/UmbraSoftShadows/Demo/New Umbra Profile.asset create mode 100644 Assets/UmbraSoftShadows/Demo/New Umbra Profile.asset.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/DemoSettings.lighting create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/DemoSettings.lighting.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/SimpleShader.shader create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/SimpleShader.shader.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/URP Settings.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity-Renderer.asset create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity-Renderer.asset.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity.asset create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity.asset.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/UniversalRenderPipelineGlobalSettings.asset create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/UniversalRenderPipelineGlobalSettings.asset.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/Venus.fbx create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/Venus.fbx.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/Venus.mat create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/Venus.mat.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/Venus.prefab create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/Venus.prefab.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/occluderMat.mat create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/occluderMat.mat.meta create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/stylizedMask.png create mode 100644 Assets/UmbraSoftShadows/Demo/Scene/stylizedMask.png.meta create mode 100644 Assets/UmbraSoftShadows/Documentation.meta create mode 100644 Assets/UmbraSoftShadows/Documentation/Documentation Online.url create mode 100644 Assets/UmbraSoftShadows/Documentation/Documentation Online.url.meta create mode 100644 Assets/UmbraSoftShadows/Documentation/Documentation PDF.url create mode 100644 Assets/UmbraSoftShadows/Documentation/Documentation PDF.url.meta create mode 100644 Assets/UmbraSoftShadows/Documentation/Kronnect Assets.url create mode 100644 Assets/UmbraSoftShadows/Documentation/Kronnect Assets.url.meta create mode 100644 Assets/UmbraSoftShadows/Documentation/Support.url create mode 100644 Assets/UmbraSoftShadows/Documentation/Support.url.meta create mode 100644 Assets/UmbraSoftShadows/Editor.meta create mode 100644 Assets/UmbraSoftShadows/Editor/UmbraEditor.asmdef create mode 100644 Assets/UmbraSoftShadows/Editor/UmbraEditor.asmdef.meta create mode 100644 Assets/UmbraSoftShadows/Editor/UmbraProfileEditor.cs create mode 100644 Assets/UmbraSoftShadows/Editor/UmbraProfileEditor.cs.meta create mode 100644 Assets/UmbraSoftShadows/Editor/UmbraSoftShadowsEditor.cs create mode 100644 Assets/UmbraSoftShadows/Editor/UmbraSoftShadowsEditor.cs.meta create mode 100644 Assets/UmbraSoftShadows/README.txt create mode 100644 Assets/UmbraSoftShadows/README.txt.meta create mode 100644 Assets/UmbraSoftShadows/Runtime.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Common.hlsl create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Common.hlsl.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ContactShadows.hlsl create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ContactShadows.hlsl.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowBlur.hlsl create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowBlur.hlsl.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowCast.hlsl create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowCast.hlsl.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowFunctions.hlsl create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowFunctions.hlsl.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowReceiverTransparent.shadergraph create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowReceiverTransparent.shadergraph.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/Transparent Floor.mat create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/Transparent Floor.mat.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/UmbraScreenSpaceShadows.shader create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/UmbraScreenSpaceShadows.shader.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures/NoiseTex.png create mode 100644 Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures/NoiseTex.png.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts/UmbraPointLightContactShadows.cs create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts/UmbraPointLightContactShadows.cs.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts/UmbraProfile.cs create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts/UmbraProfile.cs.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.RG.cs create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.RG.cs.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.cs create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.cs.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts/UmbraSoftShadows.cs create mode 100644 Assets/UmbraSoftShadows/Runtime/Scripts/UmbraSoftShadows.cs.meta create mode 100644 Assets/UmbraSoftShadows/Runtime/UmbraAsmRef.asmref create mode 100644 Assets/UmbraSoftShadows/Runtime/UmbraAsmRef.asmref.meta create mode 100644 Packages/com.baddog.rendering.arealight/Documentation.meta create mode 100644 Packages/com.baddog.rendering.arealight/Documentation/Realtime Area Light for URP.pdf create mode 100644 Packages/com.baddog.rendering.arealight/Documentation/Realtime Area Light for URP.pdf.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/AreaLightSettingsDrawer.cs create mode 100644 Packages/com.baddog.rendering.arealight/Editor/AreaLightSettingsDrawer.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/AreaLightShadowSettingsDrawer.cs create mode 100644 Packages/com.baddog.rendering.arealight/Editor/AreaLightShadowSettingsDrawer.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/AreaLightingEditor.cs create mode 100644 Packages/com.baddog.rendering.arealight/Editor/AreaLightingEditor.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/BGAreaLightEditor.cs create mode 100644 Packages/com.baddog.rendering.arealight/Editor/BGAreaLightEditor.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTC.cs create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTC.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGenerator.cs create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGenerator.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGeneratorEditor.cs create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGeneratorEditor.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/NelderMead.cs create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/NelderMead.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD/PreIntegratedFGDWindow.cs create mode 100644 Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD/PreIntegratedFGDWindow.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/ShadowAtlasResolutionDrawer.cs create mode 100644 Packages/com.baddog.rendering.arealight/Editor/ShadowAtlasResolutionDrawer.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Editor/com.baddog.rendering.arealight.editor.asmdef create mode 100644 Packages/com.baddog.rendering.arealight/Editor/com.baddog.rendering.arealight.editor.asmdef.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/AreaLighting.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/AreaLighting.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/AreaLightingShaderIDs.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/AreaLightingShaderIDs.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/BGAreaLight.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/BGAreaLight.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/BGAreaLightManager.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/BGAreaLightManager.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Charlie.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Charlie.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_CookTorrance.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_CookTorrance.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Disney.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Disney.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_GGX.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_GGX.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Interface.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Interface.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_KajiyaKaySpecular.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_KajiyaKaySpecular.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Marschner.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Marschner.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_OrenNayar.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_OrenNayar.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Ward.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Ward.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Charlie.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Charlie.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_CookTorrance.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_CookTorrance.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Disney.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Disney.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_GGX.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_GGX.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_KajiyaKaySpecular.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_KajiyaKaySpecular.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Marschner.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Marschner.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_OrenNayar.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_OrenNayar.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Ward.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Ward.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/LTCAreaLight.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/LTCAreaLight.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGD.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGD.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGDShaderIDs.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGDShaderIDs.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.Legacy.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.Legacy.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.RenderGraph.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.RenderGraph.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightsShadowAtlasLayout.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightsShadowAtlasLayout.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaShadowUtils.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaShadowUtils.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/NativeArrayExtensionsCompat.cs create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/Passes/NativeArrayExtensionsCompat.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/com.baddog.rendering.arealight.asmdef create mode 100644 Packages/com.baddog.rendering.arealight/Runtime/com.baddog.rendering.arealight.asmdef.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaLit.mat create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaLit.mat.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaSimpleLit.mat create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaSimpleLit.mat.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaTerrainLit.mat create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaTerrainLit.mat.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/Fire.mat create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/Fire.mat.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/Light.mat create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/Light.mat.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/Wall.mat create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Materials/Wall.mat.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Prefabs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Prefabs/fire.prefab create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Prefabs/fire.prefab.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/New Terrain.asset create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/New Terrain.asset.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/SampleSceneProfile.asset create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/SampleSceneProfile.asset.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/Test.unity create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/Test.unity.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/Test02.unity create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/Test02.unity.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/TestLit.unity create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/TestLit.unity.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/TestParticleLit.unity create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/TestParticleLit.unity.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSimpleLit.unity create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSimpleLit.unity.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSpine.unity create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSpine.unity.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/TestTerrainLit.unity create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scenes/TestTerrainLit.unity.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scripts.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scripts/AreaLightTestPanel.cs create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scripts/AreaLightTestPanel.cs.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scripts/com.baddog.rendering.arealight.samples.asmdef create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Scripts/com.baddog.rendering.arealight.samples.asmdef.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Settings.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset.asset create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset.asset.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset_Renderer.asset create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset_Renderer.asset.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Spine.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Spine/README.txt create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Spine/README.txt.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.mat create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.mat.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.png create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.png.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Spine/spineboymesh.asset create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Spine/spineboymesh.asset.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Textures.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Textures/smokeA.psd create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Textures/smokeA.psd.meta create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Textures/smokeN.psd create mode 100644 Packages/com.baddog.rendering.arealight/Samples/Textures/smokeN.psd.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLit.shader create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLit.shader.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLitForwardPass.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLitForwardPass.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLit.shader create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLit.shader.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLitForwardPass.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLitForwardPass.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLit.shader create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLit.shader.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLitForwardPass.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLitForwardPass.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLit.shader create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLit.shader.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLit.shader create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLit.shader.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLightShadows.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLightShadows.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/HDPCSS.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/HDPCSS.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.cs.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.cs.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/PreIntegratedFGD.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/Include/PreIntegratedFGD.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_CharlieFabricLambert.shader create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_CharlieFabricLambert.shader.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_GGXDisneyDiffuse.shader create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_GGXDisneyDiffuse.shader.meta create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_Marschner.shader create mode 100644 Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_Marschner.shader.meta create mode 100644 Packages/com.baddog.rendering.arealight/package.json create mode 100644 Packages/com.baddog.rendering.arealight/package.json.meta diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 00000000..f019fd0a --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/01_Scenes/MyProject/GameScene.unity b/Assets/01_Scenes/MyProject/GameScene.unity index eb499348..09e540a8 100644 --- a/Assets/01_Scenes/MyProject/GameScene.unity +++ b/Assets/01_Scenes/MyProject/GameScene.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0b0bb31aca943874bde3e3abfeccc3898a4d5c9e6451bc8eb3f3554410a46db -size 13010030 +oid sha256:d8072848c56e353a8d007a84be3d25ed2506805cb63aecfa6e2199aa49bf8a33 +size 13014695 diff --git a/Assets/99_Settings/Project Configuration/Quality URP Config.asset b/Assets/99_Settings/Project Configuration/Quality URP Config.asset index 1063b43f..9227288c 100644 --- a/Assets/99_Settings/Project Configuration/Quality URP Config.asset +++ b/Assets/99_Settings/Project Configuration/Quality URP Config.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3515357ca67da3b9e9e652279c9022eba0b5c03375fb94338c0270d164b4ea2b -size 4612 +oid sha256:d4595379af26e12f5d11afeaa4a9a09e277323cd69fbc4c50161e8a583b18554 +size 4614 diff --git a/Assets/99_Settings/Project Configuration/Standalone Preset.asset b/Assets/99_Settings/Project Configuration/Standalone Preset.asset index 3ca5e176..0c8eec75 100644 --- a/Assets/99_Settings/Project Configuration/Standalone Preset.asset +++ b/Assets/99_Settings/Project Configuration/Standalone Preset.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04f8b788c7dd117aed94422a979349cdc027386eea8aa8001c38ee0c226a7da4 -size 3128 +oid sha256:44385247285264c20f0606e2c430385d3f97cf909896498ffc84dd05b3237753 +size 4771 diff --git a/Assets/99_Settings/Shadow.meta b/Assets/99_Settings/Shadow.meta new file mode 100644 index 00000000..e3ff4be5 --- /dev/null +++ b/Assets/99_Settings/Shadow.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd261a1eba77eca468c517f3ba3e97ef +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/99_Settings/Shadow/Umbra Profile.asset b/Assets/99_Settings/Shadow/Umbra Profile.asset new file mode 100644 index 00000000..206fb4df --- /dev/null +++ b/Assets/99_Settings/Shadow/Umbra Profile.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bf6d39b68415349884d2ea0be131672313490e9030e95743ec3b6a6397e623d +size 2071 diff --git a/Assets/99_Settings/Shadow/Umbra Profile.asset.meta b/Assets/99_Settings/Shadow/Umbra Profile.asset.meta new file mode 100644 index 00000000..d9732a78 --- /dev/null +++ b/Assets/99_Settings/Shadow/Umbra Profile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e1889fe709cead44891090d2a27058ac +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Supermarket Store/FBX/Assets/Materials/Grocery Store Racks_BaseMap.mat b/Assets/Supermarket Store/FBX/Assets/Materials/Grocery Store Racks_BaseMap.mat index 2982a8dc..84c3eda7 100644 --- a/Assets/Supermarket Store/FBX/Assets/Materials/Grocery Store Racks_BaseMap.mat +++ b/Assets/Supermarket Store/FBX/Assets/Materials/Grocery Store Racks_BaseMap.mat @@ -21,16 +21,12 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Grocery Store Racks_BaseMap - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 4800000, guid: deab2e321dbdc8a469635b200f36c496, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _METALLICSPECGLOSSMAP - m_InvalidKeywords: - - _DISABLE_SSR_TRANSPARENT - - _MASKMAP - - _METALLICGLOSSMAP - - _NORMALMAP_TANGENT_SPACE + m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -42,7 +38,6 @@ Material: - TransparentDepthPostpass - TransparentBackface - RayTracingPrepass - - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 diff --git a/Assets/Supermarket Store/FBX/Materials/Floor1.mat b/Assets/Supermarket Store/FBX/Materials/Floor1.mat index 0f854321..ec82e7ca 100644 --- a/Assets/Supermarket Store/FBX/Materials/Floor1.mat +++ b/Assets/Supermarket Store/FBX/Materials/Floor1.mat @@ -41,9 +41,7 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] - m_InvalidKeywords: - - _DISABLE_SSR_TRANSPARENT - - _NORMALMAP_TANGENT_SPACE + m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 diff --git a/Assets/UmbraSoftShadows.meta b/Assets/UmbraSoftShadows.meta new file mode 100644 index 00000000..999201f2 --- /dev/null +++ b/Assets/UmbraSoftShadows.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 502dc5fe84c33494ab0a60f2b172a97b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Demo.meta b/Assets/UmbraSoftShadows/Demo.meta new file mode 100644 index 00000000..d4566804 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1315e8563efe14f819495166c8627adf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Demo/Demo Transparent Receiver.unity b/Assets/UmbraSoftShadows/Demo/Demo Transparent Receiver.unity new file mode 100644 index 00000000..35643814 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Demo Transparent Receiver.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:880ef55491459662c538c04066e388cba293042f4ea35b7ea9fe624df248d017 +size 25021 diff --git a/Assets/UmbraSoftShadows/Demo/Demo Transparent Receiver.unity.meta b/Assets/UmbraSoftShadows/Demo/Demo Transparent Receiver.unity.meta new file mode 100644 index 00000000..f6d1b22d --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Demo Transparent Receiver.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: a50c95cfd73b44394a1769a630485130 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Demo Transparent Receiver.unity + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/Demo.unity b/Assets/UmbraSoftShadows/Demo/Demo.unity new file mode 100644 index 00000000..cf9392f1 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Demo.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d2fadd58f4b6dd0ca2148865f20ce075adce32d44d8f2d12c4f2319abac9940 +size 849962 diff --git a/Assets/UmbraSoftShadows/Demo/Demo.unity.meta b/Assets/UmbraSoftShadows/Demo/Demo.unity.meta new file mode 100644 index 00000000..216fbd7e --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Demo.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 5da633c0cce214fe0a39af798dec1a2c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Demo.unity + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/New Umbra Profile 1.asset b/Assets/UmbraSoftShadows/Demo/New Umbra Profile 1.asset new file mode 100644 index 00000000..80ea200d --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/New Umbra Profile 1.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e26d4a896c41d3025eba16df7368d948b8dd62f0bc1850fddcee9dc2ee51d6b5 +size 2082 diff --git a/Assets/UmbraSoftShadows/Demo/New Umbra Profile 1.asset.meta b/Assets/UmbraSoftShadows/Demo/New Umbra Profile 1.asset.meta new file mode 100644 index 00000000..0560a1bd --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/New Umbra Profile 1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fe04e7c6c17d8414f858b14aa98114bd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Demo/New Umbra Profile.asset b/Assets/UmbraSoftShadows/Demo/New Umbra Profile.asset new file mode 100644 index 00000000..2e721ed4 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/New Umbra Profile.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f9610d4ca2c051212c61816b5def7bf1b1dda338cf72f7577f6e4785a4fc40c +size 2080 diff --git a/Assets/UmbraSoftShadows/Demo/New Umbra Profile.asset.meta b/Assets/UmbraSoftShadows/Demo/New Umbra Profile.asset.meta new file mode 100644 index 00000000..dd91659f --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/New Umbra Profile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4177e5add8dfba840a0a7ef242f3d85c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Demo/Scene.meta b/Assets/UmbraSoftShadows/Demo/Scene.meta new file mode 100644 index 00000000..1f851ac9 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0fc43b0d4446343258ea2a7167aad98e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Demo/Scene/DemoSettings.lighting b/Assets/UmbraSoftShadows/Demo/Scene/DemoSettings.lighting new file mode 100644 index 00000000..cfe94da1 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/DemoSettings.lighting @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DemoSettings + serializedVersion: 3 + m_GIWorkflowMode: 1 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 0 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_TextureCompression: 1 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 0 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 256 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentMIS: 1 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/DemoSettings.lighting.meta b/Assets/UmbraSoftShadows/Demo/Scene/DemoSettings.lighting.meta new file mode 100644 index 00000000..943cf32c --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/DemoSettings.lighting.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 64f0d92f8042f4e1eb4acf9092024365 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Scene/DemoSettings.lighting + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/SimpleShader.shader b/Assets/UmbraSoftShadows/Demo/Scene/SimpleShader.shader new file mode 100644 index 00000000..ca047c77 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/SimpleShader.shader @@ -0,0 +1,131 @@ +Shader "Kronnect/UmbraScreenSpaceShadows/SimpleShader" +{ + Properties + { + [MainTexture] _BaseMap ("Base Map", 2D) = "white" {} + [MainColor] _BaseColor ("Color", Color) = (1,1,1,1) + } + + SubShader + { + Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Opaque" "Queue"="Geometry" } + LOD 100 + + Pass + { + Name "UniversalForward" + Tags { "LightMode"="UniversalForward" } + Cull Back + ZWrite On + ZTest LEqual + Blend One Zero + + HLSLPROGRAM + #pragma vertex Vertex + #pragma fragment Fragment + #pragma target 2.0 + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN + #pragma multi_compile_fragment _ _SHADOWS_SOFT + #pragma multi_compile_fragment _ _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl" + + TEXTURE2D(_BaseMap); + SAMPLER(sampler_BaseMap); + + CBUFFER_START(UnityPerMaterial) + float4 _BaseMap_ST; + float4 _BaseColor; + CBUFFER_END + + struct Attributes + { + float4 positionOS : POSITION; + float2 uv : TEXCOORD0; + }; + + struct Varyings + { + float4 positionHCS : SV_POSITION; + float4 shadowCoord : TEXCOORD0; + float2 uv : TEXCOORD1; + }; + + Varyings Vertex(Attributes input) + { + Varyings output; + VertexPositionInputs posInputs = GetVertexPositionInputs(input.positionOS.xyz); + output.positionHCS = posInputs.positionCS; + output.shadowCoord = GetShadowCoord(posInputs); + output.uv = input.uv * _BaseMap_ST.xy + _BaseMap_ST.zw; + return output; + } + + half4 Fragment(Varyings input) : SV_Target + { + half shadowAtten = MainLightRealtimeShadow(input.shadowCoord); + half4 baseMap = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv); + return _BaseColor * baseMap * shadowAtten; + } + ENDHLSL + } + + Pass + { + Name "DepthOnly" + Tags { "LightMode"="DepthOnly" } + Cull Back + ZWrite On + ZTest LEqual + + HLSLPROGRAM + #pragma vertex DepthOnlyVertex + #pragma fragment DepthOnlyFragment + #pragma target 2.0 + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl" + ENDHLSL + } + + Pass + { + Name "DepthNormals" + Tags { "LightMode"="DepthNormals" } + Cull Back + ZWrite On + + HLSLPROGRAM + #pragma target 2.0 + #pragma vertex DepthNormalsVertex + #pragma fragment DepthNormalsFragment + + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitDepthNormalsPass.hlsl" + ENDHLSL + } + + Pass + { + Name "ShadowCaster" + Tags { "LightMode"="ShadowCaster" } + Cull Back + ZWrite On + + HLSLPROGRAM + #pragma vertex ShadowPassVertex + #pragma fragment ShadowPassFragment + #pragma target 2.0 + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl" + ENDHLSL + } + } + + Fallback "Hidden/Universal Render Pipeline/FallbackError" +} + + + diff --git a/Assets/UmbraSoftShadows/Demo/Scene/SimpleShader.shader.meta b/Assets/UmbraSoftShadows/Demo/Scene/SimpleShader.shader.meta new file mode 100644 index 00000000..caac1093 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/SimpleShader.shader.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: 654a3befbf7254f0084192d9acb9d73a +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Scene/SimpleShader.shader + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/URP Settings.meta b/Assets/UmbraSoftShadows/Demo/Scene/URP Settings.meta new file mode 100644 index 00000000..bb5d5ae8 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/URP Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9997d11ed9828479194425d3923a2cc8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity-Renderer.asset b/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity-Renderer.asset new file mode 100644 index 00000000..69d03bb2 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity-Renderer.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fff39123f51bb945d778324d2494177477a885dbee2916d594d636da6a24af9 +size 3099 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity-Renderer.asset.meta b/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity-Renderer.asset.meta new file mode 100644 index 00000000..2c7a13bc --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity-Renderer.asset.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 6c1ac87607ed940e7ac3fbd7abe0db6b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity-Renderer.asset + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity.asset b/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity.asset new file mode 100644 index 00000000..0ee79907 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69c4f7a22ab678797c2aa471fafe7172baf3d5a872f84ce1cac5c62c57a8c13a +size 4625 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity.asset.meta b/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity.asset.meta new file mode 100644 index 00000000..d8ebf093 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity.asset.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 4fb072dbb668147069c21f7dc52a6d36 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Scene/URP Settings/URP-HighFidelity.asset + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/UniversalRenderPipelineGlobalSettings.asset b/Assets/UmbraSoftShadows/Demo/Scene/UniversalRenderPipelineGlobalSettings.asset new file mode 100644 index 00000000..83829b82 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/UniversalRenderPipelineGlobalSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad47c9a555fa0774e8982e52f039ce9c33a21b1524c18d7e430d1505708bb014 +size 1183 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/UniversalRenderPipelineGlobalSettings.asset.meta b/Assets/UmbraSoftShadows/Demo/Scene/UniversalRenderPipelineGlobalSettings.asset.meta new file mode 100644 index 00000000..6bc26ad5 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/UniversalRenderPipelineGlobalSettings.asset.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 1a990a7ceed7343abbec3af44353f819 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Scene/UniversalRenderPipelineGlobalSettings.asset + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/Venus.fbx b/Assets/UmbraSoftShadows/Demo/Scene/Venus.fbx new file mode 100644 index 00000000..bf76f42e --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/Venus.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68d6c76b1743b8a391b04e4b44e22a3c66a96b57fb8e4252541b7fc80f0b209f +size 588192 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/Venus.fbx.meta b/Assets/UmbraSoftShadows/Demo/Scene/Venus.fbx.meta new file mode 100644 index 00000000..5cb63969 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/Venus.fbx.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: 004577dce373a4b8b9c0f00570675e2e +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 0 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 1 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 0.1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 0.1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 0 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Scene/Venus.fbx + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/Venus.mat b/Assets/UmbraSoftShadows/Demo/Scene/Venus.mat new file mode 100644 index 00000000..70f52351 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/Venus.mat @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2054341761090198542 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Venus + m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossinessSource: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Shininess: 0 + - _Smoothness: 0.5 + - _SmoothnessSource: 0 + - _SmoothnessTextureChannel: 0 + - _SpecSource: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/Venus.mat.meta b/Assets/UmbraSoftShadows/Demo/Scene/Venus.mat.meta new file mode 100644 index 00000000..6b37a8ed --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/Venus.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 54aca384ab99641c996e59fc0e3abd6c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Scene/Venus.mat + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/Venus.prefab b/Assets/UmbraSoftShadows/Demo/Scene/Venus.prefab new file mode 100644 index 00000000..adb6f9b8 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/Venus.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee570c59800702db6bc93fc31c82dde8ae533d00e804d117a33301b2ae44705c +size 2430 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/Venus.prefab.meta b/Assets/UmbraSoftShadows/Demo/Scene/Venus.prefab.meta new file mode 100644 index 00000000..b5409fab --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/Venus.prefab.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 9078fc8703eb440dbaeedb8051e96a6a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Scene/Venus.prefab + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/occluderMat.mat b/Assets/UmbraSoftShadows/Demo/Scene/occluderMat.mat new file mode 100644 index 00000000..9001aad8 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/occluderMat.mat @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-5578493846381785671 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: occluderMat + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _ENVIRONMENTREFLECTIONS_OFF + - _SPECULARHIGHLIGHTS_OFF + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 74975d324705846da90cd745e830c6e3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 2800000, guid: dd70140ee26c54c978eca5e7315847e8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 0 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.9716981, g: 0.9716981, b: 0.9716981, a: 1} + - _Color: {r: 0.9716981, g: 0.9716981, b: 0.9716981, a: 1} + - _EmissionColor: {r: 0.21586053, g: 0.21586053, b: 0.21586053, a: 1} + - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/occluderMat.mat.meta b/Assets/UmbraSoftShadows/Demo/Scene/occluderMat.mat.meta new file mode 100644 index 00000000..3aaaa4de --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/occluderMat.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 822f1759e1ad642138396daa25d45d49 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Scene/occluderMat.mat + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/stylizedMask.png b/Assets/UmbraSoftShadows/Demo/Scene/stylizedMask.png new file mode 100644 index 00000000..0b38dcc3 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/stylizedMask.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a40fa2b43001781b8bebc5b2f21642b2687bb4343b5afe134b0922488616ede4 +size 22735 diff --git a/Assets/UmbraSoftShadows/Demo/Scene/stylizedMask.png.meta b/Assets/UmbraSoftShadows/Demo/Scene/stylizedMask.png.meta new file mode 100644 index 00000000..0f5db2c2 --- /dev/null +++ b/Assets/UmbraSoftShadows/Demo/Scene/stylizedMask.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: c4ffcd5fed0aa4c139ff5c1edc969390 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 1 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 10 + textureShape: 1 + singleChannelComponent: 1 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Demo/Scene/stylizedMask.png + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Documentation.meta b/Assets/UmbraSoftShadows/Documentation.meta new file mode 100644 index 00000000..5e6665d2 --- /dev/null +++ b/Assets/UmbraSoftShadows/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07db272b096d6494683a775c205b870b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Documentation/Documentation Online.url b/Assets/UmbraSoftShadows/Documentation/Documentation Online.url new file mode 100644 index 00000000..672e2d5c --- /dev/null +++ b/Assets/UmbraSoftShadows/Documentation/Documentation Online.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=https://kronnect.com/docs/umbra/ \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Documentation/Documentation Online.url.meta b/Assets/UmbraSoftShadows/Documentation/Documentation Online.url.meta new file mode 100644 index 00000000..a3e04047 --- /dev/null +++ b/Assets/UmbraSoftShadows/Documentation/Documentation Online.url.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 33e7bf8fb943e4f09bf35f62155e9490 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Documentation/Documentation Online.url + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Documentation/Documentation PDF.url b/Assets/UmbraSoftShadows/Documentation/Documentation PDF.url new file mode 100644 index 00000000..cd4aa1b2 --- /dev/null +++ b/Assets/UmbraSoftShadows/Documentation/Documentation PDF.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=https://www.dropbox.com/scl/fo/6wh4i77k9617dqycdr5r3/AP84Vyn8qerkagGHIXgb0E0?rlkey=lvmgabqvcblo3rkl6v3t9305o&dl=0 \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Documentation/Documentation PDF.url.meta b/Assets/UmbraSoftShadows/Documentation/Documentation PDF.url.meta new file mode 100644 index 00000000..abc0607e --- /dev/null +++ b/Assets/UmbraSoftShadows/Documentation/Documentation PDF.url.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 01244bfa5c42b48c5b1e09d00ab5020b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Documentation/Documentation PDF.url + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Documentation/Kronnect Assets.url b/Assets/UmbraSoftShadows/Documentation/Kronnect Assets.url new file mode 100644 index 00000000..d4772915 --- /dev/null +++ b/Assets/UmbraSoftShadows/Documentation/Kronnect Assets.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=https://kronnect.com \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Documentation/Kronnect Assets.url.meta b/Assets/UmbraSoftShadows/Documentation/Kronnect Assets.url.meta new file mode 100644 index 00000000..ea18deb2 --- /dev/null +++ b/Assets/UmbraSoftShadows/Documentation/Kronnect Assets.url.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 28c4950a1656140338b5c2d42496d7c7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Documentation/Kronnect Assets.url + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Documentation/Support.url b/Assets/UmbraSoftShadows/Documentation/Support.url new file mode 100644 index 00000000..672e2d5c --- /dev/null +++ b/Assets/UmbraSoftShadows/Documentation/Support.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=https://kronnect.com/docs/umbra/ \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Documentation/Support.url.meta b/Assets/UmbraSoftShadows/Documentation/Support.url.meta new file mode 100644 index 00000000..6d261b38 --- /dev/null +++ b/Assets/UmbraSoftShadows/Documentation/Support.url.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 4112410640b8942c9b62813e431f025d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Documentation/Support.url + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Editor.meta b/Assets/UmbraSoftShadows/Editor.meta new file mode 100644 index 00000000..916cf87d --- /dev/null +++ b/Assets/UmbraSoftShadows/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1063b516634d54e4fb020287047514c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Editor/UmbraEditor.asmdef b/Assets/UmbraSoftShadows/Editor/UmbraEditor.asmdef new file mode 100644 index 00000000..eb16aef2 --- /dev/null +++ b/Assets/UmbraSoftShadows/Editor/UmbraEditor.asmdef @@ -0,0 +1,18 @@ +{ + "name": "UmbraEditor", + "rootNamespace": "", + "references": [ + "GUID:15fc0a57446b3144c949da3e2b9737a9" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Editor/UmbraEditor.asmdef.meta b/Assets/UmbraSoftShadows/Editor/UmbraEditor.asmdef.meta new file mode 100644 index 00000000..03581b9e --- /dev/null +++ b/Assets/UmbraSoftShadows/Editor/UmbraEditor.asmdef.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 2b22e76c0de5e464e8e6540a80bd2b31 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Editor/UmbraEditor.asmdef + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Editor/UmbraProfileEditor.cs b/Assets/UmbraSoftShadows/Editor/UmbraProfileEditor.cs new file mode 100644 index 00000000..56a12857 --- /dev/null +++ b/Assets/UmbraSoftShadows/Editor/UmbraProfileEditor.cs @@ -0,0 +1,317 @@ +using UnityEditor; +using UnityEngine; + +namespace Umbra { + + [CustomEditor(typeof(UmbraProfile))] + public class UmbraProfileEditor : Editor { + + SerializedProperty shadowSource; + SerializedProperty enableContactHardening, contactStrength, contactStrengthKnee, normalsSource; + SerializedProperty occludersCount, occludersSearchRadius, sampleCount, lightSize, distantSpread; + SerializedProperty blurIterations, blurType, blurSpread, blurEdgeSharpness, posterization; + SerializedProperty overlayShadows, overlayShadowsIntensity, overlayShadowsColor; + SerializedProperty preserveEdges, blurEdgeTolerance; + SerializedProperty blurDepthAttenStart, blurDepthAttenLength, blurGrazingAttenuation; + SerializedProperty blendCascades, cascade1BlendingStrength, cascade2BlendingStrength, cascade3BlendingStrength; + SerializedProperty cascade1Scale, cascade2Scale, cascade3Scale, cascade4Scale; + SerializedProperty loopStepOptimization, frameSkipOptimization, skipFrameMaxCameraDisplacement, skipFrameMaxCameraRotation, downsample, forceDepthPrepass; + SerializedProperty style, maskTexture, maskScale; + SerializedProperty contactShadows, contactShadowsInjectionPoint, contactShadowsSampleCount, contactShadowsStepping; + SerializedProperty contactShadowsThicknessNear, contactShadowsThicknessDistanceMultiplier, contactShadowsJitter, contactShadowsBias, contactShadowsBiasFar; + SerializedProperty contactShadowsIntensityMultiplier, contactShadowsDistanceFade, contactShadowsStartDistance, contactShadowsStartDistanceFade, contactShadowsNormalBias, contactShadowsVignetteSize; + SerializedProperty contactShadowsEdgeSoftness, contactShadowsSoftEdges, contactShadowsPlanarShadows; + SerializedProperty transparentReceiverPlane, receiverPlaneAltitude; + SerializedProperty earlyOutSamples; + + static GUIStyle titleLabelStyle; + static Color titleColor; + + Light thisLight; + + private void OnEnable () { + if (target == null) return; + titleColor = EditorGUIUtility.isProSkin ? new Color(0.52f, 0.66f, 0.9f) : new Color(0.12f, 0.16f, 0.4f); + + shadowSource = serializedObject.FindProperty("shadowSource"); + sampleCount = serializedObject.FindProperty("sampleCount"); + enableContactHardening = serializedObject.FindProperty("enableContactHardening"); + contactStrength = serializedObject.FindProperty("contactStrength"); + contactStrengthKnee = serializedObject.FindProperty("contactStrengthKnee"); + distantSpread = serializedObject.FindProperty("distantSpread"); + occludersCount = serializedObject.FindProperty("occludersCount"); + occludersSearchRadius = serializedObject.FindProperty("occludersSearchRadius"); + lightSize = serializedObject.FindProperty("lightSize"); + blurIterations = serializedObject.FindProperty("blurIterations"); + blurType = serializedObject.FindProperty("blurType"); + blurSpread = serializedObject.FindProperty("blurSpread"); + blurEdgeSharpness = serializedObject.FindProperty("blurEdgeSharpness"); + posterization = serializedObject.FindProperty("posterization"); + preserveEdges = serializedObject.FindProperty("preserveEdges"); + blurEdgeTolerance = serializedObject.FindProperty("blurEdgeTolerance"); + blurDepthAttenStart = serializedObject.FindProperty("blurDepthAttenStart"); + blurDepthAttenLength = serializedObject.FindProperty("blurDepthAttenLength"); + blurGrazingAttenuation = serializedObject.FindProperty("blurGrazingAttenuation"); + overlayShadows = serializedObject.FindProperty("overlayShadows"); + overlayShadowsIntensity = serializedObject.FindProperty("overlayShadowsIntensity"); + overlayShadowsColor = serializedObject.FindProperty("overlayShadowsColor"); + normalsSource = serializedObject.FindProperty("normalsSource"); + blendCascades = serializedObject.FindProperty("blendCascades"); + cascade1BlendingStrength = serializedObject.FindProperty("cascade1BlendingStrength"); + cascade2BlendingStrength = serializedObject.FindProperty("cascade2BlendingStrength"); + cascade3BlendingStrength = serializedObject.FindProperty("cascade3BlendingStrength"); + cascade1Scale = serializedObject.FindProperty("cascade1Scale"); + cascade2Scale = serializedObject.FindProperty("cascade2Scale"); + cascade3Scale = serializedObject.FindProperty("cascade3Scale"); + cascade4Scale = serializedObject.FindProperty("cascade4Scale"); + loopStepOptimization = serializedObject.FindProperty("loopStepOptimization"); + frameSkipOptimization = serializedObject.FindProperty("frameSkipOptimization"); + skipFrameMaxCameraDisplacement = serializedObject.FindProperty("skipFrameMaxCameraDisplacement"); + skipFrameMaxCameraRotation = serializedObject.FindProperty("skipFrameMaxCameraRotation"); + downsample = serializedObject.FindProperty("downsample"); + forceDepthPrepass = serializedObject.FindProperty("forceDepthPrepass"); + style = serializedObject.FindProperty("style"); + maskTexture = serializedObject.FindProperty("maskTexture"); + maskScale = serializedObject.FindProperty("maskScale"); + contactShadows = serializedObject.FindProperty("contactShadows"); + contactShadowsInjectionPoint = serializedObject.FindProperty("contactShadowsInjectionPoint"); + contactShadowsSampleCount = serializedObject.FindProperty("contactShadowsSampleCount"); + contactShadowsStepping = serializedObject.FindProperty("contactShadowsStepping"); + contactShadowsThicknessNear = serializedObject.FindProperty("contactShadowsThicknessNear"); + contactShadowsThicknessDistanceMultiplier = serializedObject.FindProperty("contactShadowsThicknessDistanceMultiplier"); + contactShadowsJitter = serializedObject.FindProperty("contactShadowsJitter"); + contactShadowsBias = serializedObject.FindProperty("contactShadowsBias"); + contactShadowsBiasFar = serializedObject.FindProperty("contactShadowsBiasFar"); + contactShadowsDistanceFade = serializedObject.FindProperty("contactShadowsDistanceFade"); + contactShadowsStartDistance = serializedObject.FindProperty("contactShadowsStartDistance"); + contactShadowsStartDistanceFade = serializedObject.FindProperty("contactShadowsStartDistanceFade"); + contactShadowsNormalBias = serializedObject.FindProperty("contactShadowsNormalBias"); + contactShadowsVignetteSize = serializedObject.FindProperty("contactShadowsVignetteSize"); + contactShadowsIntensityMultiplier = serializedObject.FindProperty("contactShadowsIntensityMultiplier"); + contactShadowsEdgeSoftness = serializedObject.FindProperty("contactShadowsEdgeSoftness"); + contactShadowsSoftEdges = serializedObject.FindProperty("contactShadowsSoftEdges"); + contactShadowsPlanarShadows = serializedObject.FindProperty("contactShadowsPlanarShadows"); + transparentReceiverPlane = serializedObject.FindProperty("transparentReceiverPlane"); + receiverPlaneAltitude = serializedObject.FindProperty("receiverPlaneAltitude"); + earlyOutSamples = serializedObject.FindProperty("earlyOutSamples"); + +#if UNITY_2023_1_OR_NEWER + UmbraSoftShadows umbraSoftShadows = FindAnyObjectByType(FindObjectsInactive.Include); +#else + UmbraSoftShadows umbraSoftShadows = FindObjectOfType(true); +#endif + if (umbraSoftShadows != null) { + thisLight = umbraSoftShadows.GetComponent(); + } + } + + public override void OnInspectorGUI () { + + serializedObject.Update(); + + DrawSectionTitle("General Settings"); + EditorGUILayout.PropertyField(shadowSource); + + if (thisLight != null) { + if (shadowSource.intValue != (int)ShadowSource.OnlyContactShadows && thisLight.shadows == LightShadows.None) { + EditorGUILayout.HelpBox("Light has no shadows. Umbra Soft Shadows will not work.", MessageType.Warning); + } + else if (shadowSource.intValue == (int)ShadowSource.OnlyContactShadows && thisLight.shadows != LightShadows.None) { + EditorGUILayout.HelpBox("Disable light shadows to use just contact shadows.", MessageType.Info); + } + } + if (shadowSource.intValue == (int)ShadowSource.UmbraShadows) { + EditorGUILayout.PropertyField(sampleCount); + EditorGUILayout.PropertyField(lightSize); + EditorGUILayout.PropertyField(enableContactHardening, new GUIContent("Contact Hardening")); + if (enableContactHardening.boolValue) { + EditorGUI.indentLevel++; +#if UNITY_WEBGL + EditorGUILayout.HelpBox("Contact hardening not suppoted on WebGL.", MessageType.Warning); + GUI.enabled = false; +#endif + + EditorGUILayout.PropertyField(contactStrength); + if (contactStrength.floatValue > 0) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(contactStrengthKnee, new GUIContent("Knee")); + EditorGUI.indentLevel--; + } + EditorGUILayout.PropertyField(distantSpread); + EditorGUILayout.PropertyField(occludersCount); + if (occludersCount.intValue > 0) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(occludersSearchRadius, new GUIContent("Search Radius")); + EditorGUI.indentLevel--; + } + GUI.enabled = true; + EditorGUI.indentLevel--; + } + if (UmbraSoftShadows.isDeferred) { + EditorGUILayout.PropertyField(normalsSource); + } + else { + // In forward mode, show normals source but handle GBufferNormals fallback + if (normalsSource.intValue == (int)NormalSource.GBufferNormals) { + EditorGUILayout.HelpBox("GBuffer Normals is only available in Deferred rendering. Falling back to Reconstruct From Depth.", MessageType.Info); + } + EditorGUILayout.PropertyField(normalsSource); + } + } + + if (shadowSource.intValue != (int)ShadowSource.OnlyContactShadows) { + EditorGUILayout.PropertyField(contactShadows); + EditorGUI.indentLevel++; + } + else { + // In OnlyContactShadows mode, show normals source but handle GBufferNormals fallback + if (!UmbraSoftShadows.isDeferred && normalsSource.intValue == (int)NormalSource.GBufferNormals) { + EditorGUILayout.HelpBox("GBuffer Normals is only available in Deferred rendering. Falling back to Reconstruct From Depth.", MessageType.Info); + } + EditorGUILayout.PropertyField(normalsSource); + EditorGUILayout.Separator(); + DrawSectionTitle("Contact Shadows Settings"); + } + if (shadowSource.intValue == (int)ShadowSource.OnlyContactShadows || contactShadows.boolValue) { + EditorGUILayout.PropertyField(contactShadowsIntensityMultiplier, new GUIContent("Intensity")); + EditorGUILayout.PropertyField(contactShadowsDistanceFade, new GUIContent("Distance Fade")); + EditorGUILayout.PropertyField(contactShadowsSampleCount, new GUIContent("Sample Count")); + EditorGUILayout.PropertyField(contactShadowsStepping, new GUIContent("Stepping")); + EditorGUILayout.PropertyField(contactShadowsThicknessNear, new GUIContent("Thickness Near")); + EditorGUILayout.PropertyField(contactShadowsThicknessDistanceMultiplier, new GUIContent("Thickness Distance Multiplier")); + EditorGUILayout.PropertyField(contactShadowsPlanarShadows, new GUIContent("Planar Shadows")); + EditorGUILayout.PropertyField(contactShadowsJitter, new GUIContent("Jitter")); + EditorGUILayout.PropertyField(contactShadowsStartDistance, new GUIContent("Start Distance")); + EditorGUILayout.PropertyField(contactShadowsStartDistanceFade, new GUIContent("Start Distance Fade")); + EditorGUILayout.PropertyField(contactShadowsBias, new GUIContent("Depth Bias Near")); + EditorGUILayout.PropertyField(contactShadowsBiasFar, new GUIContent("Depth Bias Far")); + EditorGUILayout.PropertyField(contactShadowsNormalBias, new GUIContent("Normal Bias")); + EditorGUILayout.PropertyField(contactShadowsSoftEdges, new GUIContent("Soft Edges")); + if (contactShadowsSoftEdges.boolValue) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(contactShadowsEdgeSoftness, new GUIContent("Edge Softness")); + EditorGUI.indentLevel--; + } + EditorGUILayout.PropertyField(contactShadowsVignetteSize, new GUIContent("Vignette Size")); + if (shadowSource.intValue == (int)ShadowSource.UmbraShadows) { + EditorGUILayout.PropertyField(contactShadowsInjectionPoint, new GUIContent("Injection Point")); + if (contactShadowsInjectionPoint.intValue == (int)ContactShadowsInjectionPoint.AfterOpaque) { + EditorGUILayout.HelpBox("Computes contact shadows and blend result over the opaque texture. This option allows contact shadows over large distances (contact shadows integrated into shadow texture are limited by the shadow distance).", MessageType.Info); + } + } + else { + GUI.enabled = false; + EditorGUILayout.LabelField("Injection Point", "After Opaque"); + GUI.enabled = true; + } + } + if (shadowSource.intValue != (int)ShadowSource.OnlyContactShadows) { + EditorGUI.indentLevel--; + } + + if (shadowSource.intValue == (int)ShadowSource.UmbraShadows) { + DrawSectionTitle("Look"); + EditorGUILayout.PropertyField(style); + switch (style.intValue) { + case (int)Style.Textured: + EditorGUILayout.PropertyField(maskTexture, new GUIContent("Mask Texture")); + EditorGUILayout.PropertyField(maskScale, new GUIContent("Scale")); + break; + case (int)Style.Default: + EditorGUILayout.PropertyField(blurIterations); + if (blurIterations.intValue > 0) { + EditorGUILayout.PropertyField(blurType); + EditorGUILayout.PropertyField(blurSpread, new GUIContent("Spread")); + EditorGUILayout.PropertyField(blurEdgeTolerance, new GUIContent("Edge Tolerance")); + EditorGUILayout.PropertyField(blurEdgeSharpness, new GUIContent("Edge Sharpness")); + EditorGUILayout.PropertyField(posterization); + if (!transparentReceiverPlane.boolValue) { + EditorGUILayout.PropertyField(blurDepthAttenStart, new GUIContent("Blur Distance Attenuation", "Distance where blur starts reducing")); + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(blurDepthAttenLength, new GUIContent("Attenuation Length", "Length of the blur attenuation")); + EditorGUI.indentLevel--; + EditorGUILayout.PropertyField(blurGrazingAttenuation, new GUIContent("Grazing Angle Attenuation")); + } + } + break; + } + EditorGUILayout.PropertyField(overlayShadows); + if (overlayShadows.boolValue) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(overlayShadowsIntensity, new GUIContent("Intensity")); + EditorGUILayout.PropertyField(overlayShadowsColor, new GUIContent("Color")); + EditorGUI.indentLevel--; + } + } + + DrawSectionTitle("Advanced"); + if (shadowSource.intValue != (int)ShadowSource.OnlyContactShadows) { + EditorGUILayout.PropertyField(downsample); + if (downsample.boolValue) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(preserveEdges, new GUIContent("Edge Preserve")); + EditorGUI.indentLevel--; + } + } + EditorGUILayout.PropertyField(forceDepthPrepass); + if (shadowSource.intValue != (int)ShadowSource.UnityShadows) { + EditorGUILayout.PropertyField(loopStepOptimization, new GUIContent("Loop Optimization")); + } + if (shadowSource.intValue != (int)ShadowSource.OnlyContactShadows) { + EditorGUILayout.PropertyField(frameSkipOptimization, new GUIContent("Frame Skip Optimization")); + if (frameSkipOptimization.boolValue) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(skipFrameMaxCameraDisplacement, new GUIContent("Max Camera Displacement")); + EditorGUILayout.PropertyField(skipFrameMaxCameraRotation, new GUIContent("Max Camera Rotation")); + EditorGUI.indentLevel--; + } + EditorGUILayout.PropertyField(earlyOutSamples); + if (shadowSource.intValue == (int)ShadowSource.UmbraShadows) { + EditorGUILayout.PropertyField(blendCascades); + if (blendCascades.boolValue) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(cascade1BlendingStrength, new GUIContent("Cascade 1 Blending")); + EditorGUILayout.PropertyField(cascade2BlendingStrength, new GUIContent("Cascade 2 Blending")); + EditorGUILayout.PropertyField(cascade3BlendingStrength, new GUIContent("Cascade 3 Blending")); + if (cascade1BlendingStrength.floatValue > 5f || cascade2BlendingStrength.floatValue > 5f || cascade3BlendingStrength.floatValue > 5f) { + EditorGUILayout.HelpBox("Setting a high value in blending can introduce artifacts between the cascades. Reduce this value if this happens.", MessageType.Info); + } + EditorGUI.indentLevel--; + } + EditorGUILayout.PropertyField(cascade1Scale); + EditorGUILayout.PropertyField(cascade2Scale); + EditorGUILayout.PropertyField(cascade3Scale); + EditorGUILayout.PropertyField(cascade4Scale); + } + } + EditorGUILayout.PropertyField(transparentReceiverPlane); + if (transparentReceiverPlane.boolValue) { + EditorGUI.indentLevel++; + if (contactShadows.boolValue) { + EditorGUILayout.HelpBox("Contact Shadows are not compatible with the transparent receiver plane option.", MessageType.Warning); + } + EditorGUILayout.PropertyField(receiverPlaneAltitude, new GUIContent("Altitude")); + EditorGUI.indentLevel--; + } + + + serializedObject.ApplyModifiedProperties(); + } + + void DrawSectionTitle (string s) { + if (titleLabelStyle == null) { + GUIStyle skurikenModuleTitleStyle = "ShurikenModuleTitle"; + titleLabelStyle = new GUIStyle(skurikenModuleTitleStyle); + titleLabelStyle.contentOffset = new Vector2(5f, -2f); + titleLabelStyle.normal.textColor = titleColor; + titleLabelStyle.fixedHeight = 22; + titleLabelStyle.fontStyle = FontStyle.Bold; + } + + EditorGUILayout.Separator(); + GUILayout.Label(s, titleLabelStyle); + } + + } + +} \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Editor/UmbraProfileEditor.cs.meta b/Assets/UmbraSoftShadows/Editor/UmbraProfileEditor.cs.meta new file mode 100644 index 00000000..3dce42f0 --- /dev/null +++ b/Assets/UmbraSoftShadows/Editor/UmbraProfileEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: f6f6dbb62acb7471d9f7543902c4799e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Editor/UmbraProfileEditor.cs + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Editor/UmbraSoftShadowsEditor.cs b/Assets/UmbraSoftShadows/Editor/UmbraSoftShadowsEditor.cs new file mode 100644 index 00000000..af618dd7 --- /dev/null +++ b/Assets/UmbraSoftShadows/Editor/UmbraSoftShadowsEditor.cs @@ -0,0 +1,152 @@ +using System.IO; +using UnityEditor; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace Umbra { + + [CustomEditor(typeof(UmbraSoftShadows))] + public class UmbraSoftShadowsEditor : Editor { + + SerializedProperty profile, debugShadows; + SerializedProperty contactShadowsSource; + SerializedProperty pointLightsTrigger; + + static UmbraPreset preset = UmbraPreset.None; + static GUIStyle boxStyle; + UmbraProfile cachedProfile; + Editor cachedProfileEditor; + + private void OnEnable() { + profile = serializedObject.FindProperty("profile"); + debugShadows = serializedObject.FindProperty("debugShadows"); + contactShadowsSource = serializedObject.FindProperty("contactShadowsSource"); + pointLightsTrigger = serializedObject.FindProperty("pointLightsTrigger"); + } + + public override void OnInspectorGUI() { + + if (boxStyle == null) { + boxStyle = new GUIStyle(GUI.skin.box); + boxStyle.padding = new RectOffset(15, 10, 5, 5); + } + + UniversalRenderPipelineAsset pipe = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset; + if (pipe == null) { + EditorGUILayout.HelpBox("Universal Rendering Pipeline asset is not set in 'Project Settings / Graphics' !", MessageType.Error); + EditorGUILayout.Separator(); + } else if (!UmbraSoftShadows.installed) { + EditorGUILayout.HelpBox("Umbra Render Feature must be added to the rendering pipeline renderer.", MessageType.Error); + if (GUILayout.Button("Go to Universal Rendering Pipeline Asset")) { + Selection.activeObject = pipe; + } + EditorGUILayout.Separator(); + } + + serializedObject.Update(); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(profile); + if (profile.objectReferenceValue != null) { + if (GUILayout.Button("Save To Asset", GUILayout.Width(120))) { + ExportProfile(); + } + } else { + if (GUILayout.Button("Create Profile", GUILayout.Width(120))) { + CreateProfile(); + } + } + EditorGUILayout.EndHorizontal(); + + if (profile.objectReferenceValue == null) return; + + EditorGUILayout.BeginHorizontal(); + preset = (UmbraPreset)EditorGUILayout.EnumPopup(new GUIContent("Sample Preset"), preset); + if (GUILayout.Button("Apply", GUILayout.Width(60))) { + UmbraSoftShadows settings = (UmbraSoftShadows)target; + settings.profile.ApplyPreset(preset); + EditorUtility.SetDirty(target); + } + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.PropertyField(debugShadows); + EditorGUILayout.PropertyField(contactShadowsSource); + + if (contactShadowsSource.enumValueIndex == (int)ContactShadowsSource.PointLights) { + EditorGUILayout.PropertyField(pointLightsTrigger); + if (UmbraPointLightContactShadows.umbraPointLights.Count == 0) { + EditorGUILayout.HelpBox("No suitable point lights found. Add a UmbraPointLightContactShadows component to a point light to enable contact shadows on the light.", MessageType.Info); + } + } + + if (profile.objectReferenceValue != null) { + if (cachedProfile != profile.objectReferenceValue) { + cachedProfile = null; + } + if (cachedProfile == null) { + cachedProfile = (UmbraProfile)profile.objectReferenceValue; + cachedProfileEditor = CreateEditor(profile.objectReferenceValue); + } + + // Drawing the profile editor + EditorGUILayout.BeginVertical(boxStyle); + cachedProfileEditor.OnInspectorGUI(); + + EditorGUILayout.EndVertical(); + } + + serializedObject.ApplyModifiedProperties(); + } + + void CreateProfile() { + + var fp = CreateInstance(); + fp.name = "New Umbra Profile"; + + string path = "Assets"; + foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.Assets)) { + path = AssetDatabase.GetAssetPath(obj); + if (File.Exists(path)) { + path = Path.GetDirectoryName(path); + } + break; + } + + string fullPath = path + "/" + fp.name + ".asset"; + fullPath = AssetDatabase.GenerateUniqueAssetPath(fullPath); + + AssetDatabase.CreateAsset(fp, fullPath); + AssetDatabase.SaveAssets(); + profile.objectReferenceValue = fp; + EditorGUIUtility.PingObject(fp); + } + + void ExportProfile() { + var fp = (UmbraProfile)profile.objectReferenceValue; + var newProfile = Instantiate(fp); + + string path = AssetDatabase.GetAssetPath(fp); + string fullPath = path; + if (string.IsNullOrEmpty(path)) { + path = "Assets"; + foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.Assets)) { + path = AssetDatabase.GetAssetPath(obj); + if (File.Exists(path)) { + path = Path.GetDirectoryName(path); + } + break; + } + fullPath = path + "/" + fp.name + ".asset"; + } + fullPath = AssetDatabase.GenerateUniqueAssetPath(fullPath); + AssetDatabase.CreateAsset(newProfile, fullPath); + AssetDatabase.SaveAssets(); + profile.objectReferenceValue = newProfile; + EditorGUIUtility.PingObject(fp); + + } + + } + +} \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Editor/UmbraSoftShadowsEditor.cs.meta b/Assets/UmbraSoftShadows/Editor/UmbraSoftShadowsEditor.cs.meta new file mode 100644 index 00000000..74393ca1 --- /dev/null +++ b/Assets/UmbraSoftShadows/Editor/UmbraSoftShadowsEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 25ee00eb7253b430a895a39dc1115063 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Editor/UmbraSoftShadowsEditor.cs + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/README.txt b/Assets/UmbraSoftShadows/README.txt new file mode 100644 index 00000000..92413270 --- /dev/null +++ b/Assets/UmbraSoftShadows/README.txt @@ -0,0 +1,119 @@ +************************************** +* UMBRA SOFT SHADOWS * +* by Kronnect * +* README FILE * +************************************** + + +Quick help: how to use this asset? +---------------------------------- + +1. Add "Umbra Render Feature" to the URP Renderer. +2. Add "Umbra Soft Shadows" to the directional light in the scene and customize the settings. + + +Help & Support Forum +-------------------- + +Check the Documentation folder for detailed instructions: + +Have any question or issue? +* Support-Web: https://kronnect.com/docs/umbra/ +* Support-Discord: https://discord.gg/EH2GMaM +* Email: contact@kronnect.com +* Twitter: @Kronnect + +If you like Umbra Soft Shadows, please rate it on the Asset Store. It encourages us to keep improving it! Thanks! + + +Future updates +-------------- + +All our assets follow an incremental development process by which a few beta releases are published on our support forum (kronnect.com). +We encourage you to signup and engage our forum. The forum is the primary support and feature discussions medium. + +Of course, all updates of Umbra will be eventually available on the Asset Store. + + + +More Cool Assets! +----------------- +Check out our other assets here: +https://assetstore.unity.com/publishers/15018 + + + +Version history +--------------- + +Version 10.1 +- [Fix] Fixed ImportTexture compatibility with Unity 6 Render Graph + +Version 10.0 +- Added support for Unity 6.4 + +Version 7.1 +- Added "Force Depth Prepass" option in Advanced Section. Useful to support forward-only materials in deferred rendering path. +- [Fix] Fixes for Unity 6.3 + +Version 7.0.1 +- [Fix] Fixed compatibility with forward opaques in deferred rendering path (also must choose Normals Source = Reconstruct From Depth) + +Version 7.0 +- Contact shadows: added support for point lights +- More options for constat shadows: depth bias far, edge softness, planar shadows + +Version 6.1 +- Added early out samples option +- Added option to render only contact shadows +- Added bias option to contact shadows + +Version 6.0 +- Added "Overlay Shadows" option which allows additional customization options + +Version 5.0.1 +- Render Graph optimizations + +Version 5.0 +- Added transparent soft shadows receiver plane support + +Versio 4.2.3 +- [Fix] Fixes an issue with URP Render Graph in deferred rendering path in Unity 6 + +Version 4.2.2.1 +- [Fix] Fixed missing shadows on surfaces parallel to camera + +Version 4.2.2 +- Added support for orthographic camera + +Version 4.2.1 +- [Fix] Fixed contact shadows shader warning message + +Version 4.2 +- Improved support for multiple directional lights (note: in URP only the brightest directional light can cast shadows) +- [Fix] Fixes an issue with terrain normals + +Version 4.1 +- Improved contact shadows quality by adding "Vignette Size" and "Normal Bias" options + +Version 4.0 +- Added Contact Shadows feature + +Version 3.0 +- Added Render Graph support +- Added Unity native shadows support +- Cascade blending now supports up to 4 cascades + +Version 2.0 +- Added new options for stylized looks +- Added posterization option to default style with blur +- New optimization options + +Version 1.1.2 +- [Fix] Fixed shadow intensity issue with blur option + +Version 1.1.1 +- WebGL/mobile optimizations and fixes + +Version 1.1 (May/2024) +- First release diff --git a/Assets/UmbraSoftShadows/README.txt.meta b/Assets/UmbraSoftShadows/README.txt.meta new file mode 100644 index 00000000..35dd7ad4 --- /dev/null +++ b/Assets/UmbraSoftShadows/README.txt.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: d14c1841eb9a24564b69a6d06e4f1e30 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/README.txt + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime.meta b/Assets/UmbraSoftShadows/Runtime.meta new file mode 100644 index 00000000..f511f57f --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 931679de89fcd4b7dab7dc5ee27940fc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Runtime/Resources.meta b/Assets/UmbraSoftShadows/Runtime/Resources.meta new file mode 100644 index 00000000..3b7e1198 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3cd48523710754e7fb63556087fafce7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra.meta new file mode 100644 index 00000000..faea8789 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7997da25fef5647d2a56b20fa2942ae9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders.meta new file mode 100644 index 00000000..a2f37d43 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cd9666e1302f84659a44ae61cdc184c7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Common.hlsl b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Common.hlsl new file mode 100644 index 00000000..827dc58c --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Common.hlsl @@ -0,0 +1,124 @@ +#pragma once + +TEXTURE2D_X(_MainTex); +float4 _MainTex_ST; +float4 _MainTex_TexelSize; + +float4 _ShadowData; +#define SHADOW_SAMPLES _ShadowData.x +#define POSTERIZATION _ShadowData.y +#define DEPTH_REJECTION _ShadowData.z +#define SHADOW_MAX_BLUR_DEPTH _ShadowData.w + +float4 _ShadowData2; +#define CONTACT_STRENGTH _ShadowData2.x +#define MAX_SHADOW_SPREAD _ShadowData2.y +#define SHADOW_MAX_DEPTH _ShadowData2.z +#define LIGHT_SIZE _ShadowData2.w + +float4 _ShadowData3; +#define BLUR_DEPTH_ATTEN_START _ShadowData3.x +#define BLUR_DEPTH_ATTEN_LENGTH _ShadowData3.y +#define BLUR_GRAZING_ATTEN_STRENGTH _ShadowData3.z +#define BLUR_EDGE_SHARPNESS _ShadowData3.w + +float _BlurSpread; +#define BLUR_SPREAD _BlurSpread + +float4 _ShadowData4; +#define OCCLUDERS_COUNT _ShadowData4.x +#define OCCLUDERS_SEARCH_RADIUS _ShadowData4.y +#define CONTACT_STRENGTH_KNEE _ShadowData4.z +#define MASK_SCALE _ShadowData4.w + +float _BlurScale; + +float4 _BlendCascadeData; +#define BLEND_CASCADE_DATA _BlendCascadeData + +float2 _SourceSize; + +float _ReceiverPlaneAltitude; + +int _EarlyOutSamples; + +#define dot2(x) dot(x,x) + +struct AttributesSimple { + float4 positionOS : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + + +struct VaryingsSimple { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; + + +VaryingsSimple VertSimple(AttributesSimple v) { + VaryingsSimple o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.positionCS = v.positionOS; + o.positionCS.y *= _ProjectionParams.x; + o.uv = v.uv; + return o; +} + + +float GetLinearDepth(float2 uv) { + float rawDepth = SampleSceneDepth(uv); + float depthPersp = Linear01Depth(rawDepth, _ZBufferParams); + float depthOrtho = rawDepth; + #if UNITY_REVERSED_Z + depthOrtho = 1.0 - depthOrtho; + #endif + float depth = lerp(depthPersp, depthOrtho, unity_OrthoParams.w); + return depth; +} + +float3 GetWorldPosition(float2 uv, float rawDepth) { + #if UNITY_REVERSED_Z + float depth = rawDepth; + #else + float depth = lerp(UNITY_NEAR_CLIP_VALUE, 1, rawDepth); + #endif + + float3 worldPos = ComputeWorldSpacePosition(uv, depth, UNITY_MATRIX_I_VP); + return worldPos; +} + + +float3 GetNormalFromWPOS(float3 wpos) { + float3 dx = ddx(wpos); + float3 dy = ddy(wpos); + float3 cr = cross(dy, dx); + float len = length(cr); + if (len == 0) { + return -UNITY_MATRIX_IT_MV[2].xyz; + } + return cr / len; +} + + +float3 GetNormalFromUV(float2 uv, float depth) { + float3 wpos = GetWorldPosition(uv, depth); + return GetNormalFromWPOS(wpos); +} + +half InvLerp(half b, half t) { + half oneMinusT = 1 - t; + return oneMinusT + b * t; +} + +bool IsSkyBox(float rawDepth) { + #if UNITY_REVERSED_Z + return rawDepth <= 0; + #else + return rawDepth >= 1; + #endif +} + diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Common.hlsl.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Common.hlsl.meta new file mode 100644 index 00000000..06dd5be4 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Common.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: b4011d16d47104fac8fb0ab72211d911 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Common.hlsl + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ContactShadows.hlsl b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ContactShadows.hlsl new file mode 100644 index 00000000..86d2ec9b --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ContactShadows.hlsl @@ -0,0 +1,221 @@ +int _ContactShadowsSampleCount; +#define SAMPLE_COUNT _ContactShadowsSampleCount + +float4 _ContactShadowsData1; +#define STEPPING _ContactShadowsData1.x +#define INTENSITY_MULTIPLIER _ContactShadowsData1.y +#define JITTER _ContactShadowsData1.z +#define DISTANCE_FADE _ContactShadowsData1.w + +float4 _ContactShadowsData2; +#define CONTACT_SHADOWS_MIN_DISTANCE _ContactShadowsData2.x +#define CONTACT_SHADOWS_MIN_DISTANCE_FADE _ContactShadowsData2.y +#define CONTACT_SHADOWS_MAX_DISTANCE _ContactShadowsData2.z +#define CONTACT_SHADOWS_NORMAL_BIAS _ContactShadowsData2.w + +float4 _ContactShadowsData3; +#define THICKNESS_NEAR _ContactShadowsData3.x +#define THICKNESS_DEPTH_MULTIPLIER _ContactShadowsData3.y +#define VIGNETTE_SIZE _ContactShadowsData3.z +#define BIAS _ContactShadowsData3.w + +float4 _ContactShadowsData4; +#define BIAS_FAR _ContactShadowsData4.x +#define EDGE_SOFTNESS _ContactShadowsData4.y +#define SHADOWS_3D _ContactShadowsData4.z + +float4 _PointLightPosition; + +#if _LOOP_STEP_X3 + #define LOOP_STEP 3 +#elif _LOOP_STEP_X2 + #define LOOP_STEP 2 +#else + #define LOOP_STEP 1 +#endif + +#define SHADER_API_WEBGL ((SHADER_API_GLES || SHADER_API_GLES3) && SHADER_API_DESKTOP) + +#if SHADER_API_MOBILE || SHADER_API_WEBGL + #define LOOP(index, count) UNITY_UNROLL for(int index=0;index<64;index+=LOOP_STEP) if (index < count) { +#else + #define LOOP(index, count) for(int index=0;index= CONTACT_SHADOWS_MAX_DISTANCE || depth01 < CONTACT_SHADOWS_MIN_DISTANCE) + return half4(0, 0, 0, 0); + #else + if (depth01 >= SHADOW_MAX_DEPTH || depth01 < CONTACT_SHADOWS_MIN_DISTANCE) + return half4(1, 0, 0, 1); + #endif + + float3 wpos0 = GetWorldPosition(uv, rawDepth); + + #if _NORMALS_TEXTURE + float3 norm = SampleSceneNormals(uv); + #else + float3 norm = GetNormalFromWPOS(wpos0); + #endif + wpos0 += norm * CONTACT_SHADOWS_NORMAL_BIAS; + + #if _RECEIVER_PLANE + if (wpos0.y < _ReceiverPlaneAltitude) { + float3 cameraToWpos = wpos0 - _WorldSpaceCameraPos; + float t = (_ReceiverPlaneAltitude - _WorldSpaceCameraPos.y) / cameraToWpos.y; + wpos0 = _WorldSpaceCameraPos + t * cameraToWpos; + #if _NORMALS_TEXTURE + norm = float3(0, 1, 0); + #endif + } + #endif + + float3 lightDirection; + #if _USE_POINT_LIGHT + _PointLightPosition.y = lerp(wpos0.y - 0.05f, _PointLightPosition.y, SHADOWS_3D); + lightDirection = normalize(_PointLightPosition.xyz - wpos0); + #else + lightDirection = _MainLightPosition.xyz; + #endif + + float3 step = lightDirection * STEPPING; + + half randomVal = InterleavedGradientNoise(uv * _SourceSize.xy, 0); + wpos0 += step * (randomVal * JITTER); + + float bias = depth01 * lerp(BIAS, BIAS_FAR, depth01); + float thickness = THICKNESS_NEAR + depth01 * THICKNESS_DEPTH_MULTIPLIER; + float maxDist = STEPPING * SAMPLE_COUNT; + + half shadow = 1.0; + half dist = 0; + + #if _SOFT_EDGES + // Complex loop with edge softness + float softestShadow = 1.0; + + LOOP(k, SAMPLE_COUNT) + + float3 wpos = wpos0 + step * k; + float3 coords = GetSSCoords(wpos); + + if (any(floor(coords.xy)!=0)) break; + float depth = GetLinearDepth01(coords.xy); + + float depthDiff = coords.z - depth; + if (depthDiff > bias && depthDiff < thickness) { + // Soft edge calculation based on how close we are to the bias threshold + float edgeFade = saturate((depthDiff - bias) / (thickness * EDGE_SOFTNESS)); + + dist = STEPPING * k; + float distanceFade = lerp(0, DISTANCE_FADE, (float)k / SAMPLE_COUNT); + + // Additional softening based on distance + float distanceSoftness = saturate(dist / (STEPPING * SAMPLE_COUNT * 0.5)); + distanceFade = lerp(distanceFade, 1.0, distanceSoftness * 0.3); + + float currentShadow = lerp(1.0, distanceFade, edgeFade); + softestShadow = min(softestShadow, currentShadow); + + // Continue sampling for softer edges + if (edgeFade > 0.98 && k > SAMPLE_COUNT * 0.5) break; + } + + END_LOOP + + shadow = softestShadow; + #else + // Simple loop that exits immediately on hit + LOOP(k, SAMPLE_COUNT) + + float3 wpos = wpos0 + step * k; + float3 coords = GetSSCoords(wpos); + + if (any(floor(coords.xy)!=0)) break; + float depth = GetLinearDepth01(coords.xy); + + float depthDiff = coords.z - depth; + if (depthDiff > bias && depthDiff < thickness) { + dist = STEPPING * k; + shadow = lerp(0, DISTANCE_FADE, (float)k / SAMPLE_COUNT); + break; + } + + END_LOOP + #endif + + shadow = saturate( shadow + 1.0 - saturate((depth01 - CONTACT_SHADOWS_MIN_DISTANCE) / CONTACT_SHADOWS_MIN_DISTANCE_FADE) ); + + // apply shadow intensity + half4 shadowParams = GetMainLightShadowParams(); + if (all(shadowParams.xy == 0)) shadowParams.x = 1; // if shadows are disabled, shadowParams is not set + half shadowIntensity = shadowParams.x * INTENSITY_MULTIPLIER; + + if (VIGNETTE_SIZE > 0) { + float2 screenCoord = uv * _SourceSize; + float2 distanceToEdges = min(screenCoord, _SourceSize - screenCoord); + float edgeDistance = min(distanceToEdges.x, distanceToEdges.y); + half vignette = edgeDistance / (VIGNETTE_SIZE * min(_SourceSize.x, _SourceSize.y)); + vignette = saturate(vignette); + shadow = lerp(1, shadow, vignette); + } + + shadow = InvLerp(shadow, shadowIntensity); + + #if defined(CONTACT_SHADOWS_AFTER_OPAQUE) + return half4(0, 0, 0, 1.0 - shadow); + #else + return half4(shadow, dist, 0, 0); + #endif + +} diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ContactShadows.hlsl.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ContactShadows.hlsl.meta new file mode 100644 index 00000000..1b389a57 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ContactShadows.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 8c459ab4b3eba4c6f910b2049df58ddf +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ContactShadows.hlsl + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowBlur.hlsl b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowBlur.hlsl new file mode 100644 index 00000000..89b760a0 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowBlur.hlsl @@ -0,0 +1,287 @@ +TEXTURE2D_X_FLOAT(_DownsampledDepth); +float4 _DownsampledDepth_TexelSize; + +half4 _OverlayShadowColor; + + struct VaryingsCross { + float4 positionCS : SV_POSITION; + float2 uv: TEXCOORD0; + float2 dir : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO + }; + + VaryingsCross VertBlur(AttributesSimple v) { + VaryingsCross o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.positionCS = v.positionOS; + o.positionCS.y *= _ProjectionParams.x; + o.uv = v.uv; + #if defined(BLUR_VERT) + o.dir = float2(0, _MainTex_TexelSize.y * _BlurScale); + #else + o.dir = float2(_MainTex_TexelSize.x * _BlurScale, 0); + #endif + return o; + } + +#if _BLUR_HQ + static const float weights[] = { 0.14446445, 0.13543542, 0.11153505, 0.08055309, 0.05087564, 0.02798160, 0.01332457, 0.00545096 }; + #define SAMPLE_COUNT 7 +#else + static const float weights[] = { 0.2270270270, 0.3162162162, 0.0702702703 }; + #define SAMPLE_COUNT 2 +#endif + + +half2 BlurShadowGaussian(VaryingsCross i, float depth) { + + float2 uv = UnityStereoTransformScreenSpaceTex(i.uv); + + half2 shadow = SAMPLE_TEXTURE2D_X_LOD(_MainTex, sampler_LinearClamp, uv, 0).xy; + if (depth > SHADOW_MAX_BLUR_DEPTH) return shadow; + + float referenceDepth = 10.0 / _ProjectionParams.z; + float spread = BLUR_SPREAD * clamp(referenceDepth / depth, 1.0, 10.0); +#if _CONTACT_HARDENING + spread *= lerp(1, shadow.y, CONTACT_STRENGTH); +#endif + spread = clamp(spread, 0.5, 10); + + half2 shadowBlur = 0; + half sum = 0.0000001; + + UNITY_UNROLL + for (int index = -SAMPLE_COUNT; index <= SAMPLE_COUNT; index++) { + float2 uv = i.uv + i.dir * (index * spread); + float2 shadowN = SAMPLE_TEXTURE2D_X_LOD(_MainTex, sampler_LinearClamp, UnityStereoTransformScreenSpaceTex(uv), 0).xy; + float depthN = GetLinearDepth(uv); + float depthDiff = abs(depthN - depth); + float r2 = depthDiff * DEPTH_REJECTION; + float g = exp(-r2 * r2); + float w = g * weights[abs(index)]; + shadowBlur += w * shadowN; + sum += w; + } + + shadowBlur /= sum; + + return shadowBlur; +} + +half2 BlurShadowBox(VaryingsSimple i, float depth) { + + float2 uv = UnityStereoTransformScreenSpaceTex(i.uv); + + half2 shadow = SAMPLE_TEXTURE2D_X_LOD(_MainTex, sampler_LinearClamp, uv, 0).xy; + if (depth > SHADOW_MAX_BLUR_DEPTH) return shadow; + + float referenceDepth = 10.0 / _ProjectionParams.z; + float spread = BLUR_SPREAD * clamp(referenceDepth / depth, 1.0, 10.0); +#if _CONTACT_HARDENING + spread *= lerp(1, shadow.y, CONTACT_STRENGTH); +#endif + spread = clamp(spread, 1, 10); + + half2 shadowBlur = 0; + half sum = 0.0000001; + + float2 blurSize = _MainTex_TexelSize.xy * spread; + UNITY_UNROLL + for(int y=-1;y<=1;y++) { + UNITY_UNROLL + for (int x = -1; x <= 1; x++) { + float2 uv = i.uv + float2(x,y) * blurSize; + float2 shadowN = SAMPLE_TEXTURE2D_X_LOD(_MainTex, sampler_LinearClamp, UnityStereoTransformScreenSpaceTex(uv), 0).xy; + float depthN = GetLinearDepth(uv); + float depthDiff = abs(depthN - depth); + float r2 = depthDiff * DEPTH_REJECTION; + float g = exp(-r2 * r2); + float w = g; + shadowBlur += w * shadowN; + sum += w; + } + } + + shadowBlur /= sum; + + return shadowBlur; +} + + half4 FragBlurGaussian (VaryingsCross i): SV_Target { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + + float depth = GetLinearDepth(i.uv); + if (depth >= SHADOW_MAX_DEPTH) return 1; + + half2 shadow = BlurShadowGaussian(i, depth); + return half4(shadow, 0, 0); + } + + half4 FragBlurBox (VaryingsSimple i): SV_Target { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + + float depth = GetLinearDepth(i.uv); + if (depth >= SHADOW_MAX_DEPTH) return 1; + + half2 shadow = BlurShadowBox(i, depth); + return half4(shadow, 0, 0); + } + + + half4 FragCompose (VaryingsSimple i): SV_Target { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + + float rawDepth = SampleSceneDepth(i.uv); + float depthPersp = Linear01Depth(rawDepth, _ZBufferParams); + float depthOrtho = rawDepth; + #if UNITY_REVERSED_Z + depthOrtho = 1.0 - depthOrtho; + #endif + float depth = lerp(depthPersp, depthOrtho, unity_OrthoParams.w); + if (depth >= SHADOW_MAX_DEPTH) return 1; + + float2 uv = UnityStereoTransformScreenSpaceTex(i.uv); + +#if _PRESERVE_EDGES + const float threshold = 0.00005; + const float t = 0.5; + float2 uv00 = UnityStereoTransformScreenSpaceTex(i.uv + _DownsampledDepth_TexelSize.xy * float2(-t, -t)); + float2 uv10 = UnityStereoTransformScreenSpaceTex(i.uv + _DownsampledDepth_TexelSize.xy * float2(t, -t)); + float2 uv01 = UnityStereoTransformScreenSpaceTex(i.uv + _DownsampledDepth_TexelSize.xy * float2(-t, t)); + float2 uv11 = UnityStereoTransformScreenSpaceTex(i.uv + _DownsampledDepth_TexelSize.xy * float2(t, t)); + float4 depths; + depths.x = SAMPLE_TEXTURE2D_X(_DownsampledDepth, sampler_PointClamp, uv00).r; + depths.y = SAMPLE_TEXTURE2D_X(_DownsampledDepth, sampler_PointClamp, uv10).r; + depths.z = SAMPLE_TEXTURE2D_X(_DownsampledDepth, sampler_PointClamp, uv01).r; + depths.w = SAMPLE_TEXTURE2D_X(_DownsampledDepth, sampler_PointClamp, uv11).r; + float4 diffs = abs(depth.xxxx - depths); + + float2 minUV = UnityStereoTransformScreenSpaceTex(uv); + if (any(diffs > threshold)) { + // Check 10 vs 00 + float minDiff = lerp(diffs.x, diffs.y, diffs.y < diffs.x); + minUV = lerp(uv00, uv10, diffs.y < diffs.x); + // Check against 01 + minUV = lerp(minUV, uv01, diffs.z < minDiff); + minDiff = lerp(minDiff, diffs.z, diffs.z < minDiff); + // Check against 11 + minUV = lerp(minUV, uv11, diffs.w < minDiff); + } + + half2 shadow = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, minUV).xy; +#else + half2 shadow = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv).xy; +#endif + + // improve shadow edge +#if _CONTACT_HARDENING + half penumbra = lerp(1.0 - BLUR_EDGE_SHARPNESS, 1.0, shadow.y); +#else + half penumbra = 1.0 - BLUR_EDGE_SHARPNESS; +#endif + half u0 = 0.5 - penumbra * 0.5; + half u1 = 0.5 + penumbra * 0.5; + // lerp between fine and smooth edge based on distance to occluder + half edged = smoothstep(u0, u1, shadow.x); + shadow.x = lerp(shadow.x, edged, BLUR_EDGE_SHARPNESS); + + shadow = round(shadow * POSTERIZATION) / POSTERIZATION; + + half blendingFactor = 1.0; + + #if defined(COMPOSE_WITH_BLENDING) + // reduce blur with distance + blendingFactor -= saturate((depth - BLUR_DEPTH_ATTEN_START) / BLUR_DEPTH_ATTEN_LENGTH); + + // under skewed view, reduce blur + if (BLUR_GRAZING_ATTEN_STRENGTH > 0) { + float3 wpos = GetWorldPosition(uv, rawDepth); + float3 viewDir = normalize(wpos - GetCameraPositionWS()); + #if _NORMALS_TEXTURE + float3 norm = SampleSceneNormals(uv); + #else + float3 norm = GetNormalFromWPOS(wpos); + #endif + blendingFactor *= lerp(1, abs(dot(norm, viewDir)), BLUR_GRAZING_ATTEN_STRENGTH); + } + #endif + + return half4(shadow.x, 0, 0, blendingFactor); + } + + float4 FragDownsampleDepth (VaryingsSimple i): SV_Target { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + float depth = GetLinearDepth(i.uv); + if (depth >= SHADOW_MAX_DEPTH) return 1; + return depth; + } + + + half4 FragComposeUnity (VaryingsSimple i): SV_Target { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + + float rawDepth = SampleSceneDepth(i.uv); + #if !_RECEIVER_PLANE + if (IsSkyBox(rawDepth)) return 1; + #endif + + float2 uv = UnityStereoTransformScreenSpaceTex(i.uv); + +#if _PRESERVE_EDGES + float depth = Linear01Depth(rawDepth, _ZBufferParams); + const float threshold = 0.00005; + const float t = 0.5; + float2 uv00 = UnityStereoTransformScreenSpaceTex(i.uv + _DownsampledDepth_TexelSize.xy * float2(-t, -t)); + float2 uv10 = UnityStereoTransformScreenSpaceTex(i.uv + _DownsampledDepth_TexelSize.xy * float2(t, -t)); + float2 uv01 = UnityStereoTransformScreenSpaceTex(i.uv + _DownsampledDepth_TexelSize.xy * float2(-t, t)); + float2 uv11 = UnityStereoTransformScreenSpaceTex(i.uv + _DownsampledDepth_TexelSize.xy * float2(t, t)); + float4 depths; + depths.x = SAMPLE_TEXTURE2D_X(_DownsampledDepth, sampler_PointClamp, uv00).r; + depths.y = SAMPLE_TEXTURE2D_X(_DownsampledDepth, sampler_PointClamp, uv10).r; + depths.z = SAMPLE_TEXTURE2D_X(_DownsampledDepth, sampler_PointClamp, uv01).r; + depths.w = SAMPLE_TEXTURE2D_X(_DownsampledDepth, sampler_PointClamp, uv11).r; + float4 diffs = abs(depth.xxxx - depths); + + float2 minUV = UnityStereoTransformScreenSpaceTex(uv); + if (any(diffs > threshold)) { + // Check 10 vs 00 + float minDiff = lerp(diffs.x, diffs.y, diffs.y < diffs.x); + minUV = lerp(uv00, uv10, diffs.y < diffs.x); + // Check against 01 + minUV = lerp(minUV, uv01, diffs.z < minDiff); + minDiff = lerp(minDiff, diffs.z, diffs.z < minDiff); + // Check against 11 + minUV = lerp(minUV, uv11, diffs.w < minDiff); + } + + half shadow = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, minUV).x; +#else + half shadow = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv).x; +#endif + + return half4(shadow, 0, 0, 0); + } + + + half4 FragDebugShadows(Varyings input) : SV_Target { + + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord.xy); + + half shadow = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv).x; + return shadow.xxxx; + } + + + + half4 FragOverlayShadows(Varyings input) : SV_Target { + + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord.xy); + + half shadow = SAMPLE_TEXTURE2D_X(_ScreenSpaceShadowmapTexture, sampler_LinearClamp, uv).x; + return half4(1, 1, 1, 1 - shadow) * _OverlayShadowColor; +} diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowBlur.hlsl.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowBlur.hlsl.meta new file mode 100644 index 00000000..c497c052 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowBlur.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: e319766b9a5a64e008d361eaac8a7079 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowBlur.hlsl + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowCast.hlsl b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowCast.hlsl new file mode 100644 index 00000000..344ac509 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowCast.hlsl @@ -0,0 +1,341 @@ +TEXTURE2D(_NoiseTex); +float4 _NoiseTex_TexelSize; +float4 _UmbraCascadeRects[4]; +float _UmbraCascadeScales[4]; + +static const float2 randomOffsets[64] = { +float2(0.000000, 0.000000), +float2(-0.737277, 0.675590), +float2(0.123257, -1.408832), +float2(1.054406, 1.374128), +float2(-1.969616, -0.347296), +float2(1.885881, -1.201438), +float2(-0.633975, 2.366025), +float2(-1.221672, -2.346810), +float2(2.657852, 0.967379), +float2(-2.771639, 1.148050), +float2(1.336436, -2.865997), +float2(0.997328, 3.163121), +float2(-3.000000, -1.732051), +float2(3.520085, -0.780384), +float2(-2.146127, 3.064986), +float2(-0.505526, -3.839849), +float2(3.064178, 2.571150), +float2(-4.119181, 0.179847), +float2(3.000000, -3.000000), +float2(-0.190133, 4.354750), +float2(-2.874634, -3.425855), +float2(4.543371, 0.598146), +float2(-3.842164, 2.690312), +float2(1.038008, -4.682151), +float2(2.449490, 4.242641), +float2(-4.768585, -1.503529), +float2(4.621281, -2.154939), +float2(-1.988481, 4.800619), +float2(-1.809800, -4.972386), +float2(4.776700, 2.486592), +float2(-5.290594, 1.417610), +float2(2.991558, -4.695805), +float2(0.982302, 5.570914), +float2(-4.557468, -3.497068), +float2(5.808763, -0.508201), +float2(-3.996846, 4.361792), +float2(-0.000000, -6.000000), +float2(4.109455, 4.484683), +float2(-6.140957, -0.537264), +float2(4.954490, -3.801714), +float2(-1.098248, 6.228471), +float2(-3.440396, -5.400340), +float2(6.259915, 1.677339), +float2(-5.816519, 3.027888), +float2(2.268705, -6.233216), +float2(2.567119, 6.197572), +float2(-6.146878, -2.866337), +float2(6.538354, -2.061535), +float2(-3.464102, 6.000000), +float2(-1.515077, -6.834072), +float2(5.792280, 4.055798), +float2(-7.080333, 0.932143), +float2(4.635207, -5.524025), +float2(0.317554, 7.273181), +float2(-5.196152, -5.196152), +float2(7.409140, 0.323490), +float2(-5.732552, 4.810182), +float2(0.985451, -7.485245), +float2(4.368228, 6.238476), +float2(-7.499072, -1.662504), +float2(6.708204, -3.872983), +float2(-2.348587, 7.448768), +float2(-3.327700, -7.136275), +float2(7.333066, 3.037456) +}; + +#if _LOOP_STEP_X3 + #define LOOP_STEP 3 +#elif _LOOP_STEP_X2 + #define LOOP_STEP 2 +#else + #define LOOP_STEP 1 +#endif + +#define SHADER_API_WEBGL ((SHADER_API_GLES || SHADER_API_GLES3) && SHADER_API_DESKTOP) + +#if SHADER_API_MOBILE || SHADER_API_WEBGL + #define LOOP(index, count) UNITY_UNROLL for(int index=0;index<64;index+=LOOP_STEP) if (index < count) { +#else + #define LOOP(index, count) for(int index=0;index blendFactors.y) { + blendFactor = blendFactors.x; + return saturate(1 - cascadeIndex); + } + if (blendFactors.y > blendFactors.z) { + blendFactor = blendFactors.y; + return clamp(3 - cascadeIndex, 1, 2); + } + blendFactor = blendFactors.z; + return clamp(5 - cascadeIndex, 2, 3); +} + + +float4 CustomTransformWorldToShadowCoord(float3 positionWS, out half cascadeIndex, out half blendFactor) +{ +#ifdef _MAIN_LIGHT_SHADOWS_CASCADE + cascadeIndex = ComputeCascadeIndexWithBlending(positionWS, blendFactor); +#else + cascadeIndex = 0; + blendFactor = 0; +#endif + + float4 shadowCoord = mul(_MainLightWorldToShadow[cascadeIndex], float4(positionWS, 1.0)); + + return float4(shadowCoord.xyz, 0); +} + +float4 CustomTransformWorldToShadowCoord(float3 positionWS, out half cascadeIndex) +{ +#ifdef _MAIN_LIGHT_SHADOWS_CASCADE + cascadeIndex = ComputeCascadeIndex(positionWS); +#else + cascadeIndex = 0; +#endif + + float4 shadowCoord = mul(_MainLightWorldToShadow[cascadeIndex], float4(positionWS, 1.0)); + + return float4(shadowCoord.xyz, 0); +} + + +inline float3 InterpolateShadowmapCoord(float3 coords, float3 dx, float3 dy, float2 offset) { + return coords + dx * offset.x + dy * offset.y; +} + +#if _MASK_TEXTURE + +TEXTURE2D(_MaskTex); + +half ComputeMaskWorldSpace(float3 wpos, float3 normalWS) { + float3 maskUV = wpos * MASK_SCALE; + half n1 = SAMPLE_TEXTURE2D(_MaskTex, sampler_LinearRepeat, maskUV.zy).r; + half n2 = SAMPLE_TEXTURE2D(_MaskTex, sampler_LinearRepeat, maskUV.xz).r; + half n3 = SAMPLE_TEXTURE2D(_MaskTex, sampler_LinearRepeat, maskUV.xy).r; + float3 triW = abs(normalWS); + float3 weights = triW / (triW.x + triW.y + triW.z); + half mask = dot(half3(n1, n2, n3), weights); + return mask; +} +#endif + +half4 FragCast(Varyings input) : SV_Target { + + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + float2 uv = input.texcoord.xy; + + float rawDepth = SampleSceneDepth(uv); + + #if !_RECEIVER_PLANE + if (IsSkyBox(rawDepth)) return half4(1, 0, 0, 0); + #endif + + half cascadeIndex; + + // normal provided by normals texture + #if _NORMALS_TEXTURE + float3 norm = SampleSceneNormals(uv); + #endif + + float3 wpos = GetWorldPosition(uv, rawDepth); + + #if _RECEIVER_PLANE + if (wpos.y < _ReceiverPlaneAltitude) { + float3 cameraToWpos = wpos - _WorldSpaceCameraPos; + float t = (_ReceiverPlaneAltitude - _WorldSpaceCameraPos.y) / cameraToWpos.y; + wpos = _WorldSpaceCameraPos + t * cameraToWpos; + #if _NORMALS_TEXTURE + norm = float3(0, 1, 0); + #endif + } + #endif + + // compute normal at world position + #if !_NORMALS_TEXTURE + float3 norm = GetNormalFromWPOS(wpos); + #endif + + // get cascade and shadowmap coordinate + #if defined(_BLEND_CASCADE) + half blendFactor; + float4 coords = CustomTransformWorldToShadowCoord(wpos, cascadeIndex, blendFactor); + if (blendFactor <= 0 || blendFactor >= 0.5) discard; + #else + float4 coords = CustomTransformWorldToShadowCoord(wpos, cascadeIndex); + #endif + + if (BEYOND_SHADOW_FAR(coords)) return half4(1, 0, 0, 0); + + // prepare noise + float2 pos = uv * _SourceSize; + float2 noise = normalize(SAMPLE_TEXTURE2D_LOD(_NoiseTex, sampler_PointRepeat, pos * _NoiseTex_TexelSize.xy, 0).xy - 0.5); + + // pick tangent & binormal that are orthogonal to light direction + float3 v = _MainLightPosition.xyz; + v.y = abs(norm.y) < 0.9; + v = normalize(v); + float3 tangent = normalize(cross(norm, v)); + float3 binormal = cross(norm, tangent); + + // compute shadowmap axis coordinates for later interpolation + float3 cr0 = mul(_MainLightWorldToShadow[cascadeIndex], float4(wpos + tangent, 1.0)).xyz; + float3 cr1 = mul(_MainLightWorldToShadow[cascadeIndex], float4(wpos + binormal, 1.0)).xyz; + float3 dx = cr0 - coords.xyz; + float3 dy = cr1 - coords.xyz; + + // clamp to cascade boundary + #if _MAIN_LIGHT_SHADOWS_CASCADE + float4 cascadeRect = _UmbraCascadeRects[cascadeIndex]; + #endif + + #if _CONTACT_HARDENING + + // contact hardening + float depthAvg = 0; + float occluders = 0; + float3 dxSearch = dx * OCCLUDERS_SEARCH_RADIUS; + float3 dySearch = dy * OCCLUDERS_SEARCH_RADIUS; +#if SHADER_API_MOBILE + //UNITY_UNROLLX(32) +#endif + LOOP(i, OCCLUDERS_COUNT) + float2 offset = reflect(randomOffsets[i], noise); + float3 cr2 = InterpolateShadowmapCoord(coords.xyz, dxSearch, dySearch, offset); + #if _MAIN_LIGHT_SHADOWS_CASCADE + cr2.xy = clamp(cr2.xy, cascadeRect.xy, cascadeRect.zw); + #endif + float d = SAMPLE_TEXTURE2D_LOD(_MainLightShadowmapTexture, sampler_LinearClamp, cr2.xy, 0).x; + if (d > cr2.z) { + depthAvg += d; + occluders++; + } + END_LOOP + + if (occluders < 1) return half4(1, 0, 0, 0); + + depthAvg = depthAvg / occluders + 0.00001; + float distAvg = depthAvg - coords.z; + #if _MAIN_LIGHT_SHADOWS_CASCADE + distAvg *= _UmbraCascadeScales[cascadeIndex]; + #endif + float smoothness = distAvg / depthAvg; + + float distanceFactor = lerp(CONTACT_STRENGTH, MAX_SHADOW_SPREAD, saturate(distAvg / CONTACT_STRENGTH_KNEE) * smoothness) * LIGHT_SIZE; + #else + float distanceFactor = LIGHT_SIZE; + #endif + + // compute shadow term + dx *= distanceFactor; + dy *= distanceFactor; + half shadow = 0; + half samples = 0; + +#if SHADER_API_MOBILE + //SHADOW_SAMPLES = min(SHADOW_SAMPLES, 32); + //UNITY_UNROLLX(32) +#endif + LOOP(j, SHADOW_SAMPLES) + float2 offset = reflect(randomOffsets[j], noise); + float3 cr2 = InterpolateShadowmapCoord(coords.xyz, dx, dy, offset); + #if _MAIN_LIGHT_SHADOWS_CASCADE + cr2.xy = clamp(cr2.xy, cascadeRect.xy, cascadeRect.zw); + #endif + shadow += SAMPLE_TEXTURE2D_SHADOW(_MainLightShadowmapTexture, sampler_MainLightShadowmapTexture, cr2); + samples++; + if (samples > _EarlyOutSamples && (shadow <= 0 || shadow >= samples)) break; + END_LOOP + shadow /= samples; + +#if _MASK_TEXTURE + half mask = ComputeMaskWorldSpace(wpos, norm); + shadow = saturate(shadow + mask); +#endif + + // apply shadow intensity + half4 shadowParams = GetMainLightShadowParams(); + half shadowIntensity = shadowParams.x; + shadow = InvLerp(shadow, shadowIntensity); + + // output with alpha if cascade blending is used + #if defined(_BLEND_CASCADE) + return half4(shadow, distanceFactor, 0, blendFactor); + #else + return half4(shadow, distanceFactor, 0, 1); + #endif +} + + + half4 FragUnityShadows(Varyings input) : SV_Target + { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + +#if UNITY_REVERSED_Z + float deviceDepth = SAMPLE_TEXTURE2D_X(_CameraDepthTexture, sampler_PointClamp, input.texcoord.xy).r; +#else + float deviceDepth = SAMPLE_TEXTURE2D_X(_CameraDepthTexture, sampler_PointClamp, input.texcoord.xy).r; + deviceDepth = deviceDepth * 2.0 - 1.0; +#endif + + //Fetch shadow coordinates for cascade. + float3 wpos = ComputeWorldSpacePosition(input.texcoord.xy, deviceDepth, unity_MatrixInvVP); + float4 coords = TransformWorldToShadowCoord(wpos); + + // Screenspace shadowmap is only used for directional lights which use orthogonal projection. + half realtimeShadow = MainLightRealtimeShadow(coords); + + return realtimeShadow; + } + + + diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowCast.hlsl.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowCast.hlsl.meta new file mode 100644 index 00000000..3a96fe46 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowCast.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: ec87f1a05845843d3bb05b576314b62a +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/ShadowCast.hlsl + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver.meta new file mode 100644 index 00000000..4c6025be --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c3132133fcd34506aa421c69014901d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowFunctions.hlsl b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowFunctions.hlsl new file mode 100644 index 00000000..af945b5b --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowFunctions.hlsl @@ -0,0 +1,15 @@ +#ifndef UMBRA_SHADOW_FUNCTIONS_INCLUDED +#define UMBRA_SHADOW_FUNCTIONS_INCLUDED + +#ifdef SHADERGRAPH_PREVIEW + void GetMainShadow_float(float3 worldPos, out half shadowAtten){ + shadowAtten = 1; + } +#else + void GetMainShadow_float(float3 worldPos, out half shadowAtten){ + float4 shadowCoord = ComputeScreenPos(TransformWorldToHClip(worldPos)); + shadowAtten = SampleScreenSpaceShadowmap(shadowCoord); + } +#endif + +#endif // UMBRA_SHADOW_FUNCTIONS_INCLUDED \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowFunctions.hlsl.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowFunctions.hlsl.meta new file mode 100644 index 00000000..6235ac97 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowFunctions.hlsl.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 97b280ff217a64e4fbf524cc3adf374a +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent + Receiver/ShadowFunctions.hlsl + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowReceiverTransparent.shadergraph b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowReceiverTransparent.shadergraph new file mode 100644 index 00000000..59785ef1 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowReceiverTransparent.shadergraph @@ -0,0 +1,804 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "313d9d1fe28a4561bfcd174269782ca6", + "m_Properties": [ + { + "m_Id": "5f2fa682a67d4b9bb3ce0c032b99524c" + } + ], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "fbc63f3198b944c0ae62acc54dfb7583" + } + ], + "m_Nodes": [ + { + "m_Id": "9a45fa2786da4e9a8880b2416e884c1f" + }, + { + "m_Id": "792ce8177b4b40f2b49db74b402ef06f" + }, + { + "m_Id": "745ea9abdb724f25952d4740bf30c020" + }, + { + "m_Id": "533b2f26ee9a43fdaa385258dc054356" + }, + { + "m_Id": "15e6e2478d6b4b82aff4190884ad03de" + }, + { + "m_Id": "0d8b270b1d8f40d8ac19121eb472db47" + }, + { + "m_Id": "0e1e3ddeb5424df7a0afa5fe3064b5fb" + }, + { + "m_Id": "046e55d7fa1f4aca841e660634642385" + }, + { + "m_Id": "dc71a03354764aa4b2793dcec9e02920" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "046e55d7fa1f4aca841e660634642385" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "533b2f26ee9a43fdaa385258dc054356" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "0d8b270b1d8f40d8ac19121eb472db47" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "15e6e2478d6b4b82aff4190884ad03de" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "15e6e2478d6b4b82aff4190884ad03de" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dc71a03354764aa4b2793dcec9e02920" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "dc71a03354764aa4b2793dcec9e02920" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "0e1e3ddeb5424df7a0afa5fe3064b5fb" + }, + "m_SlotId": 0 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 165.0, + "y": 184.0 + }, + "m_Blocks": [ + { + "m_Id": "9a45fa2786da4e9a8880b2416e884c1f" + }, + { + "m_Id": "792ce8177b4b40f2b49db74b402ef06f" + }, + { + "m_Id": "745ea9abdb724f25952d4740bf30c020" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": 165.0, + "y": 401.0 + }, + "m_Blocks": [ + { + "m_Id": "533b2f26ee9a43fdaa385258dc054356" + }, + { + "m_Id": "0e1e3ddeb5424df7a0afa5fe3064b5fb" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 1, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_SubDatas": [], + "m_ActiveTargets": [ + { + "m_Id": "e36cc0dd20a44f22923e392b9bfccc84" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "046e55d7fa1f4aca841e660634642385", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -239.0000457763672, + "y": 183.99993896484376, + "width": 147.0, + "height": 34.00004577636719 + } + }, + "m_Slots": [ + { + "m_Id": "7459cf9619dd4269918e7e62a14828e4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "5f2fa682a67d4b9bb3ce0c032b99524c" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "073a43107aba4af6b619005c8ec766ea", + "m_Id": 0, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 2, + "m_Value": 1.0, + "m_DefaultValue": 1.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.PositionNode", + "m_ObjectId": "0d8b270b1d8f40d8ac19121eb472db47", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1064.0, + "y": 257.9999694824219, + "width": 208.0, + "height": 314.4999694824219 + } + }, + "m_Slots": [ + { + "m_Id": "fe302a6ca1e9493d92edbeb37dd9d398" + } + ], + "synonyms": [ + "location" + ], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Space": 2, + "m_PositionSource": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "0e1e3ddeb5424df7a0afa5fe3064b5fb", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Alpha", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "073a43107aba4af6b619005c8ec766ea" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Alpha" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "13ee747054f84538ba3da482273283c7", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "14b5565b46d3477daee496d9ab92b620", + "m_Id": 1, + "m_DisplayName": "attenuation", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "attenuation", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "15e6e2478d6b4b82aff4190884ad03de", + "m_Group": { + "m_Id": "" + }, + "m_Name": "GetMainShadow (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -802.5, + "y": 262.0000305175781, + "width": 262.5, + "height": 277.9999694824219 + } + }, + "m_Slots": [ + { + "m_Id": "a8408df2e5c84a1380869614a19939c2" + }, + { + "m_Id": "14b5565b46d3477daee496d9ab92b620" + } + ], + "synonyms": [ + "code", + "HLSL" + ], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GetMainShadow", + "m_FunctionSource": "97b280ff217a64e4fbf524cc3adf374a", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalUnlitSubTarget", + "m_ObjectId": "16533883a7c0489eaecf612ab54498ff" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "26741a9638224fc6bcd1bfa42507da22", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "533b2f26ee9a43fdaa385258dc054356", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "13ee747054f84538ba3da482273283c7" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "5f2fa682a67d4b9bb3ce0c032b99524c", + "m_Guid": { + "m_GuidSerialized": "e3787be8-4877-4493-8455-7d929ee3a994" + }, + "m_Name": "ShadowColor", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "ShadowColor", + "m_DefaultReferenceName": "_ShadowColor", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "isMainColor": false, + "m_ColorMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "7459cf9619dd4269918e7e62a14828e4", + "m_Id": 0, + "m_DisplayName": "ShadowColor", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "745ea9abdb724f25952d4740bf30c020", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "8be0770c35914fe2951ec373bae178ed" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "792ce8177b4b40f2b49db74b402ef06f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "c900a2e48237468ba5e76c3677280076" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "8be0770c35914fe2951ec373bae178ed", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "9a45fa2786da4e9a8880b2416e884c1f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "df25a6de5fd648879475811c09b1810a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "a8408df2e5c84a1380869614a19939c2", + "m_Id": 0, + "m_DisplayName": "worldPos", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "worldPos", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "c900a2e48237468ba5e76c3677280076", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "d364eb86aab34fd08179bcb500ede32c", + "m_Id": 1, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.OneMinusNode", + "m_ObjectId": "dc71a03354764aa4b2793dcec9e02920", + "m_Group": { + "m_Id": "" + }, + "m_Name": "One Minus", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -487.0000305175781, + "y": 262.0000305175781, + "width": 208.0, + "height": 277.9999694824219 + } + }, + "m_Slots": [ + { + "m_Id": "26741a9638224fc6bcd1bfa42507da22" + }, + { + "m_Id": "d364eb86aab34fd08179bcb500ede32c" + } + ], + "synonyms": [ + "complement", + "invert", + "opposite" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "df25a6de5fd648879475811c09b1810a", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "e36cc0dd20a44f22923e392b9bfccc84", + "m_Datas": [], + "m_ActiveSubTarget": { + "m_Id": "16533883a7c0489eaecf612ab54498ff" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 1, + "m_ZTestMode": 4, + "m_ZWriteControl": 0, + "m_AlphaMode": 0, + "m_RenderFace": 0, + "m_AlphaClip": false, + "m_CastShadows": false, + "m_ReceiveShadows": false, + "m_SupportsLODCrossFade": false, + "m_CustomEditorGUI": "", + "m_SupportVFX": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "fbc63f3198b944c0ae62acc54dfb7583", + "m_Name": "", + "m_ChildObjectList": [ + { + "m_Id": "5f2fa682a67d4b9bb3ce0c032b99524c" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "fe302a6ca1e9493d92edbeb37dd9d398", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowReceiverTransparent.shadergraph.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowReceiverTransparent.shadergraph.meta new file mode 100644 index 00000000..aa10f986 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/ShadowReceiverTransparent.shadergraph.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 2653b59b7388e4f53806f4ab964d71c8 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent + Receiver/ShadowReceiverTransparent.shadergraph + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/Transparent Floor.mat b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/Transparent Floor.mat new file mode 100644 index 00000000..e7ee133f --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/Transparent Floor.mat @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Transparent Floor + m_Shader: {fileID: -6465566751694194690, guid: 2653b59b7388e4f53806f4ab964d71c8, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _DstBlendAlpha: 10 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueControl: 0 + - _QueueOffset: 0 + - _ReceiveShadows: 0 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 1 + - _WorkflowMode: 1 + - _ZWrite: 0 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _ShadowColor: {r: 0.028301895, g: 0.028301895, b: 0.028301895, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &4464394433452166678 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 10 diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/Transparent Floor.mat.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/Transparent Floor.mat.meta new file mode 100644 index 00000000..99645875 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent Receiver/Transparent Floor.mat.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: a2dfb70d5172b43e29db28656b0948e5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/Transparent + Receiver/Transparent Floor.mat + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/UmbraScreenSpaceShadows.shader b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/UmbraScreenSpaceShadows.shader new file mode 100644 index 00000000..ac0882d2 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/UmbraScreenSpaceShadows.shader @@ -0,0 +1,219 @@ +Shader "Hidden/Kronnect/UmbraScreenSpaceShadows" +{ + Properties { + // _MainTex ("Main Tex", 2D) = "white" {} + // _Color ("Color", Color) = (1, 1, 1, 1) + [NoScaleoffset] _NoiseTex("Noise Tex", 2D) = "white" {} + _ContactShadowsBlend ("Contact Shadows Blend", Int) = 10 // OneMinusSrcAlpha + } + SubShader + { + Tags{ "RenderPipeline" = "UniversalPipeline" "IgnoreProjector" = "True"} + ZTest Always ZWrite Off Cull Off + + HLSLINCLUDE + #pragma target 3.0 + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/EntityLighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/ImageBasedLighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl" + + #include "Common.hlsl" + + ENDHLSL + + Pass + { + Name "Umbra Shadows" + HLSLPROGRAM + #pragma multi_compile _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE + #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT + #pragma multi_compile_local_fragment _ _NORMALS_TEXTURE + #pragma multi_compile_local_fragment _ _CONTACT_HARDENING + #pragma multi_compile_local_fragment _ _LOOP_STEP_X2 _LOOP_STEP_X3 + #pragma multi_compile_local_fragment _ _MASK_TEXTURE + #pragma multi_compile_local_fragment _ _RECEIVER_PLANE + #pragma vertex Vert + #pragma fragment FragCast + #include "ShadowCast.hlsl" + ENDHLSL + } + + Pass + { + Name "Blur Horiz" + HLSLPROGRAM + #pragma multi_compile_local_fragment _ _BLUR_HQ + #pragma multi_compile_local_fragment _ _CONTACT_HARDENING + #pragma vertex VertBlur + #pragma fragment FragBlurGaussian + #include "ShadowBlur.hlsl" + ENDHLSL + } + + Pass + { + Name "Blur Vert" + HLSLPROGRAM + #pragma multi_compile_local_fragment _ _BLUR_HQ + #pragma multi_compile_local_fragment _ _CONTACT_HARDENING + #pragma vertex VertBlur + #pragma fragment FragBlurGaussian + #define BLUR_VERT + #include "ShadowBlur.hlsl" + ENDHLSL + } + + Pass + { + Name "Box Blur" + HLSLPROGRAM + #pragma multi_compile_local_fragment _ _CONTACT_HARDENING + #pragma vertex VertSimple + #pragma fragment FragBlurBox + #define BOX_BLUR + #include "ShadowBlur.hlsl" + ENDHLSL + } + + Pass + { + Name "Compose with Blending" + Blend SrcAlpha OneMinusSrcAlpha + HLSLPROGRAM + #pragma multi_compile_local_fragment _ _PRESERVE_EDGES + #pragma multi_compile_local_fragment _ _NORMALS_TEXTURE + #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT + #pragma vertex VertSimple + #pragma fragment FragCompose + #define COMPOSE_WITH_BLENDING + #include "ShadowBlur.hlsl" + ENDHLSL + } + + Pass + { + Name "Downsample Depth" + HLSLPROGRAM + #pragma vertex VertSimple + #pragma fragment FragDownsampleDepth + #include "ShadowBlur.hlsl" + ENDHLSL + } + + Pass + { + Name "Umbra Cascade Blending" + Blend SrcAlpha OneMinusSrcAlpha + HLSLPROGRAM + #pragma multi_compile _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE + #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT + #pragma multi_compile_local_fragment _ _NORMALS_TEXTURE + #pragma multi_compile_local_fragment _ _CONTACT_HARDENING + #pragma multi_compile_local_fragment _ _LOOP_STEP_X2 _LOOP_STEP_X3 + #pragma multi_compile_local_fragment _ _MASK_TEXTURE + #define _BLEND_CASCADE + #pragma vertex Vert + #pragma fragment FragCast + #include "ShadowCast.hlsl" + ENDHLSL + } + + Pass + { + Name "ScreenSpaceShadows" + HLSLPROGRAM + #pragma multi_compile _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE + #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH + #pragma vertex Vert + #pragma fragment FragUnityShadows + #include "ShadowCast.hlsl" + ENDHLSL + } + + Pass + { + Name "Compose Unity Shadows" + HLSLPROGRAM + #pragma multi_compile_local_fragment _ _PRESERVE_EDGES + #pragma vertex VertSimple + #pragma fragment FragComposeUnity + #include "ShadowBlur.hlsl" + ENDHLSL + } + + Pass + { + Name "Contact Shadows" + Blend One One + BlendOp Min + HLSLPROGRAM + #pragma vertex Vert + #pragma fragment FragContactShadows + #pragma multi_compile_local_fragment _ _LOOP_STEP_X2 _LOOP_STEP_X3 + #pragma multi_compile_local_fragment _ _NORMALS_TEXTURE + #pragma multi_compile_local_fragment _ _RECEIVER_PLANE + #pragma multi_compile_local_fragment _ _USE_POINT_LIGHT + #pragma multi_compile_local_fragment _ _SOFT_EDGES + #include "ContactShadows.hlsl" + ENDHLSL + } + + Pass + { + Name "Compose" + HLSLPROGRAM + #pragma multi_compile_local_fragment _ _PRESERVE_EDGES + #pragma vertex VertSimple + #pragma fragment FragCompose + #include "ShadowBlur.hlsl" + ENDHLSL + } + + Pass + { + Name "Debug Shadows" + HLSLPROGRAM + #pragma multi_compile_local_fragment _ _PRESERVE_EDGES + #pragma vertex Vert + #pragma fragment FragDebugShadows + #include "ShadowBlur.hlsl" + ENDHLSL + } + + Pass + { + Name "Contact Shadows After Opaque" + Blend SrcAlpha [_ContactShadowsBlend] + HLSLPROGRAM + #pragma vertex Vert + #pragma fragment FragContactShadows + #pragma multi_compile_local_fragment _ _LOOP_STEP_X2 _LOOP_STEP_X3 + #pragma multi_compile_local_fragment _ _NORMALS_TEXTURE + #pragma multi_compile_local_fragment _ _RECEIVER_PLANE + #pragma multi_compile_local_fragment _ _USE_POINT_LIGHT + #pragma multi_compile_local_fragment _ _SOFT_EDGES + #define CONTACT_SHADOWS_AFTER_OPAQUE + #include "ContactShadows.hlsl" + ENDHLSL + } + + Pass + { + Name "Overlay Shadows" + Blend SrcAlpha OneMinusSrcAlpha + HLSLPROGRAM + #pragma vertex Vert + #pragma fragment FragOverlayShadows + #include "ShadowBlur.hlsl" + ENDHLSL + } + + + } +} diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/UmbraScreenSpaceShadows.shader.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/UmbraScreenSpaceShadows.shader.meta new file mode 100644 index 00000000..20a9fd4b --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/UmbraScreenSpaceShadows.shader.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: d461f5567983941438cff09455e8b8f4 +ShaderImporter: + externalObjects: {} + defaultTextures: + - _BlueNoise: {fileID: 2800000, guid: e48811f1a66574b199fbc047d7139f79, type: 3} + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Shaders/UmbraScreenSpaceShadows.shader + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures.meta new file mode 100644 index 00000000..78df0dec --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b377dac2021c4e30923e01c90299f79 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures/NoiseTex.png b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures/NoiseTex.png new file mode 100644 index 00000000..ef80a340 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures/NoiseTex.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ff304f41d9c66711f47e6f043d5b962f8e66dc2dea14395cbf6098ca0d87c99 +size 93696 diff --git a/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures/NoiseTex.png.meta b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures/NoiseTex.png.meta new file mode 100644 index 00000000..a8f35b2f --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures/NoiseTex.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 32293bd0d9827458cb949a5cc32b3027 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 1 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Resources/Umbra/Textures/NoiseTex.png + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts.meta b/Assets/UmbraSoftShadows/Runtime/Scripts.meta new file mode 100644 index 00000000..f785c2eb --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 728e006b190ca466b95d89b38279a52f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraPointLightContactShadows.cs b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraPointLightContactShadows.cs new file mode 100644 index 00000000..f005d4b4 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraPointLightContactShadows.cs @@ -0,0 +1,75 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Umbra { + + [RequireComponent(typeof(Light))] + [ExecuteAlways] + [HelpURL("https://kronnect.com/docs/umbra/")] + public class UmbraPointLightContactShadows : MonoBehaviour { + + public BoxCollider boxCollider; + public float fadeDistance = 1f; + + public static readonly Dictionary umbraPointLights = new Dictionary(); + Light attachedLight; + + + void OValidate () { + fadeDistance = Mathf.Max(fadeDistance, 0f); + } + + private void OnEnable() { + attachedLight = GetComponent(); + if (attachedLight == null) { + Debug.LogError("UmbraPointLightContactShadows requires a Light component on the same GameObject."); + return; + } + + if (attachedLight.type != LightType.Point) { + Debug.LogWarning("UmbraPointLightContactShadows is designed for Point lights but found " + attachedLight.type + " light."); + return; + } + + // Initialize or get the BoxCollider + boxCollider = GetComponent(); + if (boxCollider == null) { + boxCollider = gameObject.AddComponent(); + boxCollider.isTrigger = true; + boxCollider.size = Vector3.one * 20f; + } + + umbraPointLights[attachedLight] = this; + } + + private void OnDisable() { + if (attachedLight != null) { + umbraPointLights.Remove(attachedLight); + } + } + + + /// + /// Check if a world position is inside this point light's volume + /// + /// World space position to check + /// True if the position is inside the volume + public float ComputeVolumeFade(Vector3 worldPosition) { + + if (boxCollider == null) return 0; + + Bounds bounds = boxCollider.bounds; + + Vector3 diff = bounds.center - worldPosition; + diff.x = diff.x < 0 ? -diff.x : diff.x; + diff.y = diff.y < 0 ? -diff.y : diff.y; + diff.z = diff.z < 0 ? -diff.z : diff.z; + Vector3 gap = diff - bounds.extents; + float maxDiff = gap.x > gap.y ? gap.x : gap.y; + maxDiff = maxDiff > gap.z ? maxDiff : gap.z; + return 1f - Mathf.Clamp01(maxDiff / (fadeDistance + 0.0001f)); + } + + + } +} \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraPointLightContactShadows.cs.meta b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraPointLightContactShadows.cs.meta new file mode 100644 index 00000000..ca4a537e --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraPointLightContactShadows.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Scripts/UmbraPointLightContactShadows.cs + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraProfile.cs b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraProfile.cs new file mode 100644 index 00000000..69a16bb5 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraProfile.cs @@ -0,0 +1,351 @@ +using UnityEngine; + +namespace Umbra { + + public enum ShadowSource { + UnityShadows, + UmbraShadows, + OnlyContactShadows + } + + public enum ContactShadowsInjectionPoint { + ShadowTexture, + AfterOpaque + } + + public enum UmbraPreset { + [InspectorName("")] + None = 0, + Hard = 10, + Soft = 20, + Smooth = 30, + ExtraSmooth = 40, + Blurred = 50, + Fast = 60 + } + + public enum BlurType { + [InspectorName("Gaussian (15 taps, 2 passes)")] + Gaussian15 = 10, + [InspectorName("Gaussian (5 taps, 2 passes)")] + Gaussian5 = 20, + [InspectorName("Box Blur (9 taps, 1 pass)")] + Box = 30 + } + + public enum NormalSource { + ReconstructFromDepth, + NormalsPass, + [InspectorName("GBuffer Normals")] + GBufferNormals + } + + public enum LoopStep { + Default, + x2, + x3 + } + + public enum Style { + Default, + Textured + } + + + [CreateAssetMenu(fileName = "UmbraProfile", menuName = "Umbra Profile", order = 251)] + [HelpURL("https://kronnect.com/docs/umbra/")] + public class UmbraProfile : ScriptableObject { + + [Tooltip("Which shadow generation system should be used")] + public ShadowSource shadowSource = ShadowSource.UmbraShadows; + + [Tooltip("Translates to the number of shadow map samples used to resolve shadows")] + [Range(1, 64)] + public int sampleCount = 16; + + [Tooltip("Number of samples to early out if shadow is already fully resolved")] + [Range(1, 64)] + public int earlyOutSamples = 32; + + [Tooltip("Size of the directional light which influences the penumbra size")] + [Range(0f, 32)] + public float lightSize = 6; + + [Tooltip("Makes shadows sharper nearer to the occluder")] + public bool enableContactHardening = true; + + [Tooltip("Makes shadows sharper and stronger near the occluder")] + [Range(0, 1)] + public float contactStrength = 0.5f; + + [Tooltip("Usual value is 5. Modify to alter the shadow edge appearance.")] + public float contactStrengthKnee = 0.0001f; + + [Tooltip("Makes shadows smoother when far from occluder")] + [Range(1, 16)] + public float distantSpread = 1f; + + [Tooltip("Number of shadow map samples to find occluders which improve the penumbra radius calculation")] + [Range(1, 64)] + public int occludersCount = 8; + + [Tooltip("Multiplier to the occluder search radius in texture space. A higher value creates more diffused penumbra.")] + public float occludersSearchRadius = 8f; + + [Tooltip("Number of blur passes. Each blur pass increases shadow softness but reduces performance.")] + [Range(0, 3)] + public int blurIterations; + + [Tooltip("Specifies the blur method. Gaussian blur uses two passes per iteration and produces smoother results.")] + public BlurType blurType = BlurType.Gaussian15; + + [Tooltip("Blur kerner radius multiplier. Improves softness but can introduce artifacts")] + [Range(0.5f, 5)] + public float blurSpread = 1f; + + [Tooltip("Increases the contrast on the shadow border to create sharper shadows when blur is used")] + [Range(0, 1)] + public float blurEdgeSharpness; + + [Tooltip("Strength of the edge weight when blurring")] + public float blurEdgeTolerance = 5f; + + [Tooltip("Reduces blur on distance from camera")] + public float blurDepthAttenStart = 50; + + [Tooltip("Blur reduction intensity")] + public float blurDepthAttenLength = 50; + + [Tooltip("Blur reduction when viewing shadow from a grazing angle")] + [Range(0, 1)] + public float blurGrazingAttenuation; + + public bool blendCascades; + + [Range(1, 10)] + public int posterization = 1; + + public float cascade1BlendingStrength = 0.1f; + public float cascade2BlendingStrength = 0.1f; + public float cascade3BlendingStrength = 0.1f; + + [Tooltip("Manual adjustment of shadow smoothness multiplier for this cascade")] + public float cascade1Scale = 1f; + [Tooltip("Manual adjustment of shadow smoothness multiplier for this cascade")] + public float cascade2Scale = 1f; + [Tooltip("Manual adjustment of shadow smoothness multiplier for this cascade")] + public float cascade3Scale = 1f; + [Tooltip("Manual adjustment of shadow smoothness multiplier for this cascade")] + public float cascade4Scale = 1f; + + [Tooltip("Method used to obtain surface normals. Reconstruct from depth is fastest, normals pass is more accurate, and GBuffer normals (deferred only) uses existing GBuffer data.")] + public NormalSource normalsSource = NormalSource.ReconstructFromDepth; + + /// + /// Gets the effective normals source, falling back to ReconstructFromDepth when GBufferNormals is selected but not in deferred mode + /// + public NormalSource effectiveNormalsSource => + normalsSource == NormalSource.GBufferNormals && !UmbraSoftShadows.isDeferred + ? NormalSource.ReconstructFromDepth + : normalsSource; + + [Tooltip("Reduces the number of samples while keeping the shadow size")] + public LoopStep loopStepOptimization = LoopStep.Default; + + [Tooltip("Resolves shadowmap every two frames, reusing the result from previous frame")] + public bool frameSkipOptimization; + + [Tooltip("Distance threshold - if camera has moved this distance from previous frame, ignore cached shadowmap")] + public float skipFrameMaxCameraDisplacement = 0.1f; + + [Tooltip("Rotation threshold - if camera has rotated this angle from previous frame, ignore cached shadowmap")] + public float skipFrameMaxCameraRotation = 5f; + + [Tooltip("Resolves screen space shadows in a reduced buffer of half of screen size")] + public bool downsample; + + [Tooltip("Forces a depth prepass so depth and normals are available even for forward-only materials (useful in Deferred when using forward only materials).")] + public bool forceDepthPrepass; + + [Tooltip("Prevents shadow blurring on geometry edges")] + public bool preserveEdges = true; + + [Tooltip("Stylized look for shadows")] + public Style style = Style.Default; + + [Tooltip("Optional mask texture to create stylized shadows")] + public Texture2D maskTexture; + + public float maskScale = 1f; + + public bool contactShadows; + + [Range(0, 1)] + public float contactShadowsIntensityMultiplier = 0.85f; + + public ContactShadowsInjectionPoint contactShadowsInjectionPoint = ContactShadowsInjectionPoint.ShadowTexture; + + public ContactShadowsInjectionPoint actualContactShadowsInjectionPoint => shadowSource == ShadowSource.OnlyContactShadows || contactShadowsInjectionPoint == ContactShadowsInjectionPoint.AfterOpaque ? ContactShadowsInjectionPoint.AfterOpaque : contactShadowsInjectionPoint; + + [Range(1, 64)] + public int contactShadowsSampleCount = 16; + + public float contactShadowsStepping = 0.01f; + + public float contactShadowsThicknessNear = 0.5f; + + public float contactShadowsThicknessDistanceMultiplier; + + public float contactShadowsJitter = 0.3f; + + [Range(0, 1)] + [Tooltip("Attenuates shadow intensity with distance to occluder")] + public float contactShadowsDistanceFade = 0.75f; + + public float contactShadowsStartDistance; + public float contactShadowsStartDistanceFade = 0.01f; + + [Tooltip("Adds an offset to the pixel position to avoid self-occlusion")] + [Range(0.0001f, 0.25f)] + public float contactShadowsNormalBias = 0.1f; + + [Tooltip("Attenuates contact shadows on the edges of screen")] + [Range(0, 0.5f)] + public float contactShadowsVignetteSize = 0.15f; + + [Tooltip("Adds an offset to the pixel position to avoid self-occlusion")] + [Range(0f, 1f)] + public float contactShadowsBias = 0.001f; + + [Tooltip("Bias applied at far distances. Use only if self-shadowing occurs on certain surfaces.")] + [Range(0, 1)] + public float contactShadowsBiasFar = 0.4f; + + [Tooltip("Softens the edges of contact shadows. Higher values create softer edges.")] + [Range(0.01f, 0.5f)] + public float contactShadowsEdgeSoftness = 0.1f; + + [Tooltip("Enables soft edges for contact shadows. When disabled, shadows have hard edges for better performance.")] + public bool contactShadowsSoftEdges; + + [Tooltip("Makes contact shadows planar by ignoring the Y component of the light direction. Useful for ground shadows.")] + public bool contactShadowsPlanarShadows; + + [Tooltip("Adds an extra pass after opaque with custom colored shadows")] + public bool overlayShadows; + public float overlayShadowsIntensity = 0.5f; + [ColorUsage(showAlpha: false, hdr: false)] + public Color overlayShadowsColor = Color.black; + + [Tooltip("Enables a receiver plane to cast shadows from transparent objects. Check demo scene Transparent Receiver for an example.")] + public bool transparentReceiverPlane; + public float receiverPlaneAltitude; + + + void OnValidate() { + blurDepthAttenLength = Mathf.Max(0.001f, blurDepthAttenLength); + blurEdgeTolerance = Mathf.Max(0, blurEdgeTolerance); + blurDepthAttenStart = Mathf.Max(0, blurDepthAttenStart); + blurDepthAttenLength = Mathf.Max(0, blurDepthAttenLength); + blurGrazingAttenuation = Mathf.Max(0, blurGrazingAttenuation); + occludersSearchRadius = Mathf.Max(0.01f, occludersSearchRadius); + contactStrengthKnee = Mathf.Max(0.0001f, contactStrengthKnee); + cascade1BlendingStrength = Mathf.Max(0.01f, cascade1BlendingStrength); + cascade2BlendingStrength = Mathf.Max(0.01f, cascade2BlendingStrength); + cascade3BlendingStrength = Mathf.Max(0.01f, cascade3BlendingStrength); + cascade1Scale = Mathf.Max(0, cascade1Scale); + cascade2Scale = Mathf.Max(0, cascade2Scale); + cascade3Scale = Mathf.Max(0, cascade3Scale); + cascade4Scale = Mathf.Max(0, cascade4Scale); + maskScale = Mathf.Max(maskScale, 0); + skipFrameMaxCameraRotation = Mathf.Max(skipFrameMaxCameraRotation, 0); + skipFrameMaxCameraDisplacement = Mathf.Max(skipFrameMaxCameraDisplacement, 0); + contactShadowsStepping = Mathf.Max(0.0001f, contactShadowsStepping); + contactShadowsThicknessNear = Mathf.Max(0.0f, contactShadowsThicknessNear); + contactShadowsThicknessDistanceMultiplier = Mathf.Max(0.0f, contactShadowsThicknessDistanceMultiplier); + contactShadowsJitter = Mathf.Max(0f, contactShadowsJitter); + contactShadowsStartDistance = Mathf.Max(0, contactShadowsStartDistance); + contactShadowsStartDistanceFade = Mathf.Max(0.00001f, contactShadowsStartDistanceFade); + overlayShadowsIntensity = Mathf.Max(0, overlayShadowsIntensity); + } + + + public void ApplyPreset(UmbraPreset preset) { + shadowSource = ShadowSource.UmbraShadows; + switch (preset) { + case UmbraPreset.Fast: + sampleCount = 12; + lightSize = 12; + occludersCount = 6; + occludersSearchRadius = 5f; + enableContactHardening = true; + contactStrength = 0.5f; + contactStrengthKnee = 0.0001f; + blurIterations = 0; + distantSpread = 1f; + break; + case UmbraPreset.Hard: + sampleCount = 1; + lightSize = 0.5f; + enableContactHardening = false; + blurIterations = 1; + blurType = BlurType.Box; + blurSpread = 1f; + blurEdgeTolerance = 5f; + blurEdgeSharpness = 1f; + blurDepthAttenStart = 75; + blurDepthAttenLength = 50; + blurGrazingAttenuation = 0; + break; + case UmbraPreset.Soft: + sampleCount = 16; + lightSize = 8; + enableContactHardening = true; + occludersCount = 8; + occludersSearchRadius = 8f; + contactStrength = 0.5f; + contactStrengthKnee = 0.0001f; + distantSpread = 1f; + blurIterations = 0; + break; + case UmbraPreset.Smooth: + sampleCount = 16; + lightSize = 13; + enableContactHardening = true; + occludersCount = 9; + occludersSearchRadius = 8f; + contactStrength = 0.5f; + contactStrengthKnee = 0.0001f; + distantSpread = 1.2f; + blurIterations = 0; + break; + case UmbraPreset.ExtraSmooth: + sampleCount = 20; + lightSize = 16; + enableContactHardening = true; + occludersCount = 16; + occludersSearchRadius = 10; + contactStrength = 0.8f; + contactStrengthKnee = 0.0001f; + distantSpread = 1.4f; + blurIterations = 0; + break; + case UmbraPreset.Blurred: + sampleCount = 32; + lightSize = 16; + enableContactHardening = true; + occludersCount = 24; + occludersSearchRadius = 16; + contactStrength = 0.4f; + contactStrengthKnee = 0.0001f; + blurIterations = 0; + distantSpread = 2f; + break; + } + } + + } + + + +} \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraProfile.cs.meta b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraProfile.cs.meta new file mode 100644 index 00000000..e26e26f2 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraProfile.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 6751c6668ce8047e5bcc50f8586c1fe7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Scripts/UmbraProfile.cs + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.RG.cs b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.RG.cs new file mode 100644 index 00000000..5222debd --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.RG.cs @@ -0,0 +1,484 @@ +#if UNITY_2023_3_OR_NEWER +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +using UnityEngine.Rendering.RenderGraphModule; +using System.Collections.Generic; + +namespace Umbra { + + internal partial class UmbraRenderFeature : ScreenSpaceShadows { + + private partial class UmbraScreenSpaceShadowsPass : ScriptableRenderPass { + + class PassData { + public UmbraScreenSpaceShadowsPass pass; + public UniversalShadowData shadowData; + public UniversalLightData lightData; + public UniversalCameraData cameraData; + public UniversalRenderingData renderingData; + public TextureHandle rtCameraDepthTexture; + public TextureHandle rtCameraNormalsTexture; + } + + public override void RecordRenderGraph (RenderGraph renderGraph, ContextContainer frameData) { + + if (mat == null) { + Debug.LogError("Umbra material not initialized"); + return; + } + + using (var builder = renderGraph.AddUnsafePass("Umbra Soft Shadows", out var passData, m_ProfilingSampler)) { + + UniversalResourceData resourceData = frameData.Get(); + UniversalCameraData cameraData = frameData.Get(); + desc = cameraData.cameraTargetDescriptor; + desc.depthBufferBits = 0; + desc.msaaSamples = 1; + desc.graphicsFormat = screenShadowTextureFormat; + + UmbraProfile profile = settings.profile; + + if (profile.downsample && !profile.preserveEdges) { + desc.width /= 2; + desc.height /= 2; + } + + Camera cam = cameraData.camera; +#if UNITY_EDITOR + if (profile.frameSkipOptimization && Application.isPlaying) { +#else + if (profile.frameSkipOptimization) { +#endif + newShadowmap = !shadowTextures.TryGetValue(cam, out m_RenderTarget); + } + + if (RenderingUtils.ReAllocateHandleIfNeeded(ref m_RenderTarget, desc, FilterMode.Point, TextureWrapMode.Clamp, name: "_ScreenSpaceShadowmapTexture")) { + newShadowmap = true; + } + if (newShadowmap) { + shadowTextures[cam] = m_RenderTarget; + } + + builder.AllowGlobalStateModification(true); + +#if UNITY_6000_0_OR_NEWER + TextureHandle shadowmap = renderGraph.ImportTexture(m_RenderTarget, new RenderTargetInfo { + width = desc.width, + height = desc.height, + volumeDepth = 1, + msaaSamples = 1, + format = desc.graphicsFormat + }); +#else + TextureHandle shadowmap = renderGraph.ImportTexture(m_RenderTarget); +#endif + builder.UseTexture(shadowmap, AccessFlags.ReadWrite); + + if (UmbraSoftShadows.isDeferred && resourceData.gBuffer[2].IsValid()) { + passData.rtCameraNormalsTexture = resourceData.gBuffer[2]; + builder.UseTexture(passData.rtCameraNormalsTexture, AccessFlags.Read); + } + passData.rtCameraDepthTexture = resourceData.cameraDepthTexture; + builder.UseTexture(resourceData.cameraDepthTexture, AccessFlags.Read); + if ((input & ScriptableRenderPassInput.Normal) != 0) { + builder.UseTexture(resourceData.cameraNormalsTexture, AccessFlags.Read); + } + passData.pass = this; + passData.cameraData = cameraData; + passData.lightData = frameData.Get(); + passData.shadowData = frameData.Get(); + passData.renderingData = frameData.Get(); + builder.SetRenderFunc(static (PassData data, UnsafeGraphContext rgContext) => { + if (data.rtCameraDepthTexture.IsValid()) { + mat.SetTexture(ShaderParams.CameraDepthTexture, data.rtCameraDepthTexture); + } + if (data.rtCameraNormalsTexture.IsValid()) { + mat.SetTexture(ShaderParams.CameraNormalsTexture, data.rtCameraNormalsTexture); + } + CommandBuffer cmd = CommandBufferHelpers.GetNativeCommandBuffer(rgContext.cmd); + cmd.SetGlobalTexture(m_RenderTarget.name, m_RenderTarget.nameID); + ExecutePass(cmd, data); + }); + } + } + + + static void ExecutePass (CommandBuffer cmd, PassData passData) { + + UmbraProfile profile = settings.profile; + int frameCount = Time.frameCount; +#if UNITY_EDITOR + bool useFrame = !Application.isPlaying || !profile.frameSkipOptimization || newShadowmap || !usesCachedShadowmap; +#else + bool useFrame = !profile.frameSkipOptimization || newShadowmap || !usesCachedShadowmap; +#endif + if (useFrame) { + cachedShadowmapTimestap = frameCount; + newShadowmap = false; + + RTHandle shadowsHandle; + + if (profile.downsample && profile.preserveEdges) { + desc.width /= 2; + desc.height /= 2; +#if UNITY_6000_0_OR_NEWER + RenderingUtils.ReAllocateHandleIfNeeded(ref m_DownscaledRenderTarget, desc, FilterMode.Point, TextureWrapMode.Clamp); +#else + RenderingUtils.ReAllocateIfNeeded(ref m_DownscaledRenderTarget, desc, FilterMode.Point, TextureWrapMode.Clamp); +#endif + shadowsHandle = m_DownscaledRenderTarget; + } + else { + shadowsHandle = m_RenderTarget; + } + + float farClipPlane = passData.cameraData.camera.farClipPlane; + int cascadeCount = passData.shadowData.mainLightShadowCascadesCount; + UniversalRenderPipelineAsset urpAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset; + float shadowMaxDistance = urpAsset.shadowDistance; + + Pass castShadowsPass; + + if (profile.shadowSource == ShadowSource.UnityShadows) { + castShadowsPass = Pass.UnityShadows; + } + else { + castShadowsPass = Pass.UmbraCastShadows; + + if (profile.transparentReceiverPlane) { + mat.EnableKeyword(ShaderParams.SKW_RECEIVER_PLANE); + cmd.SetGlobalFloat(ShaderParams.ReceiverPlaneAltitude, profile.receiverPlaneAltitude); + } + else { + mat.DisableKeyword(ShaderParams.SKW_RECEIVER_PLANE); + } + + cmd.SetGlobalVector(ShaderParams.ShadowData, new Vector4(profile.sampleCount, 1024 / Mathf.Pow(2, profile.posterization), profile.blurEdgeTolerance * 1000f, (profile.blurDepthAttenStart + profile.blurDepthAttenLength) / farClipPlane)); + float shadowMaxDepth = profile.transparentReceiverPlane ? 2 : shadowMaxDistance / farClipPlane; + cmd.SetGlobalVector(ShaderParams.ShadowData2, new Vector4(1f - profile.contactStrength, profile.distantSpread, shadowMaxDepth, profile.lightSize * 0.02f)); + cmd.SetGlobalVector(ShaderParams.ShadowData3, new Vector4(profile.blurDepthAttenStart / farClipPlane, profile.blurDepthAttenLength / farClipPlane, profile.blurGrazingAttenuation, profile.blurEdgeSharpness)); + cmd.SetGlobalVector(ShaderParams.ShadowData4, new Vector4(profile.occludersCount, profile.occludersSearchRadius * 0.02f, profile.contactStrength > 0 ? profile.contactStrengthKnee * 0.1f : 0.00001f, profile.maskScale)); + cmd.SetGlobalVector(ShaderParams.SourceSize, new Vector4(desc.width, desc.height, 0, 0)); + cmd.SetGlobalInt(ShaderParams.EarlyOutSamples, profile.earlyOutSamples); + + if (cascadeCount > 1) { + VisibleLight shadowLight = passData.lightData.visibleLights[shadowLightIndex]; + float shadowNearPlane = shadowLight.light.shadowNearPlane; + + for (int k = 0; k < cascadeCount; k++) { + passData.renderingData.cullResults.ComputeDirectionalShadowMatricesAndCullingPrimitives(shadowLightIndex, + k, cascadeCount, passData.shadowData.mainLightShadowCascadesSplit, urpAsset.mainLightShadowmapResolution, shadowNearPlane, out _, out Matrix4x4 proj, + out _); + Matrix4x4 invProj = proj.inverse; + autoCascadeScales[k] = Mathf.Abs(invProj.MultiplyPoint(ShaderParams.Vector3Back).z - invProj.MultiplyPoint(ShaderParams.Vector3Forward).z) / 100f; + } + + Vector4[] cascadeRectsTemp = cascadeRectsWithPadding[cascadeCount - 1]; + float texel = 1f / urpAsset.mainLightShadowmapResolution; + float padding = texel; + for (int c = 0; c < 4; c++) { + Vector4 defaultRect = cascadeRects[cascadeCount - 1][c]; + Vector4 rect = cascadeRectsTemp[c]; + rect.x = defaultRect.x + padding; + rect.y = defaultRect.y + padding; + rect.z = defaultRect.z - padding; + rect.w = defaultRect.w - padding; + cascadeRectsTemp[c] = rect; + } + cmd.SetGlobalVectorArray(ShaderParams.UmbraCascadeRects, cascadeRectsTemp); + cascadeScales[0] = profile.cascade1Scale * autoCascadeScales[0]; + cascadeScales[1] = profile.cascade2Scale * autoCascadeScales[1]; + cascadeScales[2] = profile.cascade3Scale * autoCascadeScales[2]; + cascadeScales[3] = profile.cascade4Scale * autoCascadeScales[3]; + cmd.SetGlobalFloatArray(ShaderParams.UmbraCascadeScales, cascadeScales); + } + + if ((UmbraSoftShadows.isDeferred && profile.normalsSource == NormalSource.GBufferNormals) || profile.effectiveNormalsSource == NormalSource.NormalsPass || profile.downsample) { + mat.EnableKeyword(ShaderParams.SKW_NORMALS_TEXTURE); + } + else { + mat.DisableKeyword(ShaderParams.SKW_NORMALS_TEXTURE); + } + +#if !UNITY_WEBGL + if (profile.enableContactHardening) { + mat.EnableKeyword(ShaderParams.SKW_CONTACT_HARDENING); + } + else +#endif + { + mat.DisableKeyword(ShaderParams.SKW_CONTACT_HARDENING); + } + + mat.DisableKeyword(ShaderParams.SKW_LOOP_STEP_X3); + mat.DisableKeyword(ShaderParams.SKW_LOOP_STEP_X2); + if (profile.loopStepOptimization == LoopStep.x3) { + mat.EnableKeyword(ShaderParams.SKW_LOOP_STEP_X3); + } + else if (profile.loopStepOptimization == LoopStep.x2) { + mat.EnableKeyword(ShaderParams.SKW_LOOP_STEP_X2); + } + + if (profile.style == Style.Textured && profile.maskTexture != null) { + mat.EnableKeyword(ShaderParams.SKW_MASK_TEXTURE); + mat.SetTexture(ShaderParams.MaskTexture, profile.maskTexture); + } + else { + mat.DisableKeyword(ShaderParams.SKW_MASK_TEXTURE); + } + } + + // Resolve screen space shadows + Blitter.BlitCameraTexture(cmd, m_RenderTarget, shadowsHandle, mat, (int)castShadowsPass); + + // Blend cascades 0 & 1 + if (profile.shadowSource == ShadowSource.UmbraShadows) { + if (profile.blendCascades && cascadeCount > 1) { + cmd.SetGlobalVector(ShaderParams.BlendCascadeData, new Vector4(profile.cascade1BlendingStrength * 100f, profile.cascade2BlendingStrength * 100f, profile.cascade3BlendingStrength * 100f, 1f)); + Blitter.BlitCameraTexture(cmd, shadowsHandle, shadowsHandle, mat, (int)Pass.CascadeBlending); + } + } + + // Add contact shadows + if (profile.contactShadows && SetupContactShadowsMaterial(passData.cameraData.camera, profile, mat)) { + if (!settings.debugShadows && profile.actualContactShadowsInjectionPoint == ContactShadowsInjectionPoint.ShadowTexture) { + Blitter.BlitCameraTexture(cmd, shadowsHandle, shadowsHandle, mat, (int)Pass.ContactShadows); + } + } + + // Downscale depth for upscaler + if (profile.downsample && profile.preserveEdges) { + RenderTextureDescriptor downscampledDepthDesc = desc; + downscampledDepthDesc.colorFormat = RenderTextureFormat.RFloat; + cmd.GetTemporaryRT(ShaderParams.DownsampledDepth, downscampledDepthDesc); + FullScreenBlit(cmd, ShaderParams.DownsampledDepth, mat, (int)Pass.DownsampledDepth); + mat.EnableKeyword(ShaderParams.SKW_PRESERVE_EDGES); + } + else { + mat.DisableKeyword(ShaderParams.SKW_PRESERVE_EDGES); + } + + if (profile.shadowSource == ShadowSource.UnityShadows) { + if (profile.downsample && profile.preserveEdges) { + // upscale + FullScreenBlit(cmd, m_DownscaledRenderTarget, m_RenderTarget, mat, (int)Pass.ComposeUnity); + } + } + else { + if (profile.style == Style.Default && profile.blurIterations > 0) { + cmd.SetGlobalFloat(ShaderParams.BlurSpread, profile.blurSpread); + + // perform blur + cmd.GetTemporaryRT(ShaderParams.BlurTemp, desc); + cmd.GetTemporaryRT(ShaderParams.BlurTemp2, desc); + cmd.SetGlobalFloat(ShaderParams.BlurScale, 1f); + RenderTargetIdentifier shadowsRT = shadowsHandle; + RenderTargetIdentifier blurredRT = ShaderParams.BlurTemp2; + if (profile.blurType == BlurType.Box) { + for (int k = 0; k < profile.blurIterations; k++) { + blurredRT = (k % 2) == 0 ? ShaderParams.BlurTemp2 : ShaderParams.BlurTemp; + FullScreenBlit(cmd, shadowsRT, blurredRT, mat, (int)Pass.BoxBlur); + shadowsRT = blurredRT; + cmd.SetGlobalFloat(ShaderParams.BlurScale, k + 1f); + } + } + else { + if (profile.blurType == BlurType.Gaussian15) { + mat.EnableKeyword(ShaderParams.SKW_BLUR_HQ); + } + else { + mat.DisableKeyword(ShaderParams.SKW_BLUR_HQ); + } + FullScreenBlit(cmd, shadowsRT, ShaderParams.BlurTemp, mat, (int)Pass.BlurHoriz); + cmd.SetGlobalFloat(ShaderParams.BlurScale, 1f); + for (int k = 0; k < profile.blurIterations - 1; k++) { + FullScreenBlit(cmd, ShaderParams.BlurTemp, ShaderParams.BlurTemp2, mat, (int)Pass.BlurVert); + cmd.SetGlobalFloat(ShaderParams.BlurScale, k + 2f); + FullScreenBlit(cmd, ShaderParams.BlurTemp2, ShaderParams.BlurTemp, mat, (int)Pass.BlurHoriz); + } + FullScreenBlit(cmd, ShaderParams.BlurTemp, ShaderParams.BlurTemp2, mat, (int)Pass.BlurVert); + } + + // blit blurred shadows + FullScreenBlit(cmd, blurredRT, m_RenderTarget, mat, (int)Pass.ComposeWithBlending); + } + else if (profile.downsample && profile.preserveEdges) { + // upscale + FullScreenBlit(cmd, m_DownscaledRenderTarget, m_RenderTarget, mat, (int)Pass.Compose); + } + } + } + + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MainLightShadows, false); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MainLightShadowCascades, false); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MainLightShadowScreen, true); + + } + + } + + private partial class UmbraScreenSpaceShadowsPostPass : ScriptableRenderPass { + + internal class PassData { + internal UniversalShadowData shadowData; + } + + private static void ExecutePass (RasterCommandBuffer cmd, UniversalShadowData shadowData) { + int cascadesCount = shadowData.mainLightShadowCascadesCount; + bool mainLightShadows = shadowData.supportsMainLightShadows; + bool receiveShadowsNoCascade = mainLightShadows && cascadesCount == 1; + bool receiveShadowsCascades = mainLightShadows && cascadesCount > 1; + + // Before transparent object pass, force to disable screen space shadow of main light + cmd.SetKeyword(ShaderGlobalKeywords.MainLightShadowScreen, false); + + // then enable main light shadows with or without cascades + cmd.SetKeyword(ShaderGlobalKeywords.MainLightShadows, receiveShadowsNoCascade); + cmd.SetKeyword(ShaderGlobalKeywords.MainLightShadowCascades, receiveShadowsCascades); + } + + public override void RecordRenderGraph (RenderGraph renderGraph, ContextContainer frameData) { + using (var builder = renderGraph.AddRasterRenderPass("Umbra Screen Space Shadow Post Pass", out var passData, m_ProfilingSampler)) { + UniversalResourceData resourceData = frameData.Get(); + + TextureHandle color = resourceData.activeColorTexture; + builder.SetRenderAttachment(color, 0, AccessFlags.Write); + passData.shadowData = frameData.Get(); + + builder.AllowGlobalStateModification(true); + + builder.SetRenderFunc(static (PassData data, RasterGraphContext rgContext) => { + ExecutePass(rgContext.cmd, data.shadowData); + }); + } + } + } + + private partial class UmbraDebugPass : ScriptableRenderPass { + + internal class PassData { + internal Camera cam; + } + + private static void ExecutePass (RasterCommandBuffer cmd, Camera cam) { + Material mat = UmbraScreenSpaceShadowsPass.mat; + if (mat == null) return; + + RTHandle shadows = null; + Dictionary shadowTextures = shadowPass.shadowTextures; + if (shadowTextures != null) { + shadows = shadowTextures[cam]; + } + + if (shadows == null) return; + + using (new ProfilingScope(cmd, m_ProfilingSampler)) { + Blitter.BlitTexture(cmd, shadows, new Vector4(1, 1, 0, 0), mat, (int)Pass.DebugShadows); + if (settings.debugShadows && settings.profile != null && settings.profile.contactShadows) { + Blitter.BlitTexture(cmd, shadows, new Vector4(1, 1, 0, 0), mat, (int)Pass.ContactShadowsAfterOpaque); + } + + } + } + + public override void RecordRenderGraph (RenderGraph renderGraph, ContextContainer frameData) { + + using (var builder = renderGraph.AddRasterRenderPass("Umbra Debug Pass", out var passData, m_ProfilingSampler)) { + UniversalResourceData resourceData = frameData.Get(); + + TextureHandle color = resourceData.activeColorTexture; + builder.SetRenderAttachment(color, 0, AccessFlags.Write); + passData.cam = frameData.Get().camera; + + builder.SetRenderFunc((PassData data, RasterGraphContext rgContext) => { + ExecutePass(rgContext.cmd, data.cam); + }); + } + } + } + + + private partial class UmbraContactShadowsAfterOpaquePass : ScriptableRenderPass { + + internal class PassData { + internal TextureHandle colorTexture; + internal TextureHandle depthTexture; + } + + private static void ExecutePass (RasterCommandBuffer cmd, RTHandle source, RTHandle depth) { + Material mat = UmbraScreenSpaceShadowsPass.mat; + if (mat == null) return; + + using (new ProfilingScope(cmd, m_ProfilingSampler)) { + mat.SetTexture(ShaderParams.CameraDepthTexture, depth); + UmbraProfile profile = settings.profile; + if (profile.transparentReceiverPlane) { + cmd.SetGlobalFloat(ShaderParams.ReceiverPlaneAltitude, profile.receiverPlaneAltitude); + } + cmd.SetGlobalVector(ShaderParams.SourceSize, new Vector4(source.rt.width, source.rt.height, 0, 0)); + Blitter.BlitTexture(cmd, source, new Vector4(1, 1, 0, 0), mat, (int)Pass.ContactShadowsAfterOpaque); + } + } + + public override void RecordRenderGraph (RenderGraph renderGraph, ContextContainer frameData) { + + using (var builder = renderGraph.AddRasterRenderPass("Umbra Contact Shadows After Opaque Pass", out var passData, m_ProfilingSampler)) { + UniversalResourceData resourceData = frameData.Get(); + + TextureHandle color = resourceData.activeColorTexture; + if (UmbraSoftShadows.isDeferred && resourceData.gBuffer[4].IsValid()) { + passData.depthTexture = resourceData.gBuffer[4]; + builder.UseTexture(passData.depthTexture, AccessFlags.Read); + } + else { + passData.depthTexture = resourceData.cameraDepthTexture; + builder.UseTexture(resourceData.cameraDepthTexture, AccessFlags.Read); + } + builder.AllowGlobalStateModification(true); + builder.SetRenderAttachment(color, 0, AccessFlags.Write); + passData.colorTexture = color; + + builder.SetRenderFunc((PassData data, RasterGraphContext rgContext) => { + ExecutePass(rgContext.cmd, data.colorTexture, data.depthTexture); + }); + } + } + } + + private partial class UmbraOverlayShadows : ScriptableRenderPass { + + internal class PassData { + internal TextureHandle colorTexture; + } + + private static void ExecutePass (RasterCommandBuffer cmd, RTHandle source) { + Material mat = UmbraScreenSpaceShadowsPass.mat; + if (mat == null) return; + + using (new ProfilingScope(cmd, m_ProfilingSampler)) { + Color shadowColor = settings.profile.overlayShadowsColor; + shadowColor.a = settings.profile.overlayShadowsIntensity; + mat.SetColor(ShaderParams.OverlayShadowColor, shadowColor); + Blitter.BlitTexture(cmd, source, new Vector4(1, 1, 0, 0), mat, (int)Pass.OverlayShadows); + } + } + + public override void RecordRenderGraph (RenderGraph renderGraph, ContextContainer frameData) { + + using (var builder = renderGraph.AddRasterRenderPass("Umbra Overlay Shadows", out var passData, m_ProfilingSampler)) { + UniversalResourceData resourceData = frameData.Get(); + + TextureHandle color = resourceData.activeColorTexture; + builder.SetRenderAttachment(color, 0, AccessFlags.Write); + passData.colorTexture = color; + + builder.SetRenderFunc((PassData data, RasterGraphContext rgContext) => { + ExecutePass(rgContext.cmd, data.colorTexture); + }); + } + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.RG.cs.meta b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.RG.cs.meta new file mode 100644 index 00000000..2f179671 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.RG.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: cb0594141e67f4a1aadba1722240bb79 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.RG.cs + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.cs b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.cs new file mode 100644 index 00000000..963aeb7b --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.cs @@ -0,0 +1,915 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Umbra { + + [DisallowMultipleRendererFeature("Umbra Render Feature")] + [Tooltip("Umbra Render Feature")] + internal partial class UmbraRenderFeature : ScreenSpaceShadows { +#if UNITY_EDITOR + [UnityEditor.ShaderKeywordFilter.SelectIf(true, keywordNames: ShaderKeywordStrings.MainLightShadowScreen)] + private const bool k_RequiresScreenSpaceShadowsKeyword = true; +#endif + + static class ShaderParams { + readonly public static int MainTex = Shader.PropertyToID("_MainTex"); + readonly public static int ShadowData = Shader.PropertyToID("_ShadowData"); + readonly public static int ShadowData2 = Shader.PropertyToID("_ShadowData2"); + readonly public static int ShadowData3 = Shader.PropertyToID("_ShadowData3"); + readonly public static int ShadowData4 = Shader.PropertyToID("_ShadowData4"); + readonly public static int BlurTemp = Shader.PropertyToID("_BlurTemp"); + readonly public static int BlurTemp2 = Shader.PropertyToID("_BlurTemp2"); + readonly public static int BlurScale = Shader.PropertyToID("_BlurScale"); + readonly public static int BlurSpread = Shader.PropertyToID("_BlurSpread"); + readonly public static int UmbraCascadeRects = Shader.PropertyToID("_UmbraCascadeRects"); + readonly public static int UmbraCascadeScales = Shader.PropertyToID("_UmbraCascadeScales"); + readonly public static int DownsampledDepth = Shader.PropertyToID("_DownsampledDepth"); + readonly public static int NoiseTex = Shader.PropertyToID("_NoiseTex"); + readonly public static int SourceSize = Shader.PropertyToID("_SourceSize"); + readonly public static int BlendCascadeData = Shader.PropertyToID("_BlendCascadeData"); + readonly public static int MaskTexture = Shader.PropertyToID("_MaskTex"); + readonly public static int CameraDepthTexture = Shader.PropertyToID("_CameraDepthTexture"); + readonly public static int CameraNormalsTexture = Shader.PropertyToID("_CameraNormalsTexture"); + readonly public static int ContactShadowsSampleCount = Shader.PropertyToID("_ContactShadowsSampleCount"); + readonly public static int ContactShadowsData1 = Shader.PropertyToID("_ContactShadowsData1"); + readonly public static int ContactShadowsData2 = Shader.PropertyToID("_ContactShadowsData2"); + readonly public static int ContactShadowsData3 = Shader.PropertyToID("_ContactShadowsData3"); + readonly public static int ContactShadowsData4 = Shader.PropertyToID("_ContactShadowsData4"); + readonly public static int ContactShadowsBlendMode = Shader.PropertyToID("_ContactShadowsBlend"); + readonly public static int ReceiverPlaneAltitude = Shader.PropertyToID("_ReceiverPlaneAltitude"); + readonly public static int OverlayShadowColor = Shader.PropertyToID("_OverlayShadowColor"); + readonly public static int EarlyOutSamples = Shader.PropertyToID("_EarlyOutSamples"); + readonly public static int PointLightPosition = Shader.PropertyToID("_PointLightPosition"); + + public static Vector3 Vector3Back = Vector3.back; + public static Vector3 Vector3Forward = Vector3.forward; + + public const string SKW_LOOP_STEP_X3 = "_LOOP_STEP_X3"; + public const string SKW_LOOP_STEP_X2 = "_LOOP_STEP_X2"; + public const string SKW_PRESERVE_EDGES = "_PRESERVE_EDGES"; + public const string SKW_BLUR_HQ = "_BLUR_HQ"; + public const string SKW_NORMALS_TEXTURE = "_NORMALS_TEXTURE"; + public const string SKW_CONTACT_HARDENING = "_CONTACT_HARDENING"; + public const string SKW_MASK_TEXTURE = "_MASK_TEXTURE"; + public const string SKW_RECEIVER_PLANE = "_RECEIVER_PLANE"; + public const string SKW_USE_POINT_LIGHT = "_USE_POINT_LIGHT"; + public const string SKW_CONTACT_SHADOWS_SOFT_EDGES = "_SOFT_EDGES"; + } + + enum Pass { + UmbraCastShadows, + BlurHoriz, + BlurVert, + BoxBlur, + ComposeWithBlending, + DownsampledDepth, + CascadeBlending, + UnityShadows, + ComposeUnity, + ContactShadows, + Compose, + DebugShadows, + ContactShadowsAfterOpaque, + OverlayShadows + } + + struct CameraLocation { + public Vector3 position; + public Vector3 forward; + } + + const string k_ShaderName = "Hidden/Kronnect/UmbraScreenSpaceShadows"; + + [Tooltip("Specify which cameras can render Umbra Soft Shadows")] + public LayerMask camerasLayerMask = -1; + + public static UmbraSoftShadows settings; + public static int shadowLightIndex; + + static int cachedShadowmapTimestap; + static bool usesCachedShadowmap; + + readonly Dictionary cameraPrevLocation = new Dictionary(); + static readonly Dictionary umbraSettings = new Dictionary(); + + Material mat; + UmbraScreenSpaceShadowsPass m_SSShadowsPass; + UmbraScreenSpaceShadowsPostPass m_SSShadowsPostPass; + UmbraDebugPass m_SSSShadowsDebugPass; + UmbraContactShadowsAfterOpaquePass m_ContactShadowsAfterOpaquePass; + UmbraOverlayShadows m_OverlayShadowsPass; + + public static void RegisterUmbraLight (UmbraSoftShadows settings) { + Light light = settings.GetComponent(); + if (light != null) { + if (light.type == LightType.Directional) { + umbraSettings[light] = settings; + } + else { + Debug.LogError("Umbra Soft Shadows only work on directiona light."); + } + } + } + + public static void UnregisterUmbraLight (UmbraSoftShadows settings) { + Light light = settings.GetComponent(); + if (light != null && umbraSettings.ContainsKey(light)) { + umbraSettings.Remove(light); + } + } + + + public override void Create () { + if (m_SSShadowsPass == null) { + m_SSShadowsPass = new UmbraScreenSpaceShadowsPass(); + } + if (m_SSShadowsPostPass == null) { + m_SSShadowsPostPass = new UmbraScreenSpaceShadowsPostPass(); + } + if (m_ContactShadowsAfterOpaquePass == null) { + m_ContactShadowsAfterOpaquePass = new UmbraContactShadowsAfterOpaquePass(); + } + if (m_SSSShadowsDebugPass == null) { + m_SSSShadowsDebugPass = new UmbraDebugPass(); + } + if (m_OverlayShadowsPass == null) { + m_OverlayShadowsPass = new UmbraOverlayShadows(); + } + + cachedShadowmapTimestap = -100; + + LoadMaterial(); + + m_SSShadowsPass.renderPassEvent = RenderPassEvent.AfterRenderingGbuffer; + m_SSShadowsPostPass.renderPassEvent = RenderPassEvent.BeforeRenderingTransparents; + m_OverlayShadowsPass.renderPassEvent = RenderPassEvent.AfterRenderingOpaques + 1; + m_ContactShadowsAfterOpaquePass.renderPassEvent = RenderPassEvent.AfterRenderingOpaques + 1; + m_SSSShadowsDebugPass.renderPassEvent = RenderPassEvent.AfterRenderingTransparents; + + } + + void OnDisable () { + UmbraSoftShadows.installed = false; + } + + protected override void Dispose (bool disposing) { + m_SSShadowsPass?.Dispose(); + m_SSShadowsPass = null; + CoreUtils.Destroy(mat); + } + + static bool SetupContactShadowsMaterial (Camera cam, UmbraProfile profile, Material mat) { + + float intensityMultiplier = profile.contactShadowsIntensityMultiplier; + // Check if we should use point lights for contact shadows + mat.DisableKeyword(ShaderParams.SKW_USE_POINT_LIGHT); + if (settings.contactShadowsSource == ContactShadowsSource.PointLights) { + if (settings.pointLightsTrigger == null && Camera.main != null) { + settings.pointLightsTrigger = Camera.main.transform; + } + float fade = 0; + if (settings.pointLightsTrigger != null) { + Vector3 triggerPosition = settings.pointLightsTrigger.position; + + // Find the point light that contains the trigger position + foreach (var kvp in UmbraPointLightContactShadows.umbraPointLights) { + UmbraPointLightContactShadows pointLightComponent = kvp.Value; + if (pointLightComponent == null) continue; + fade = pointLightComponent.ComputeVolumeFade(triggerPosition); + if (fade > 0) { + // Set point light data for the shader + Vector3 pointLightPosition = pointLightComponent.transform.position; + mat.SetVector(ShaderParams.PointLightPosition, new Vector4(pointLightPosition.x, pointLightPosition.y, pointLightPosition.z, 1.0f)); + mat.EnableKeyword(ShaderParams.SKW_USE_POINT_LIGHT); + break; // Use the first point light found + } + } + } + if (fade <= 0) return false; + intensityMultiplier *= fade; + } + + float farClipPlane = cam.farClipPlane; + UniversalRenderPipelineAsset urpAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset; + float shadowMaxDistance = urpAsset.shadowDistance; + + mat.SetInt(ShaderParams.ContactShadowsSampleCount, profile.contactShadowsSampleCount); + float contactShadowsMaxDistance; + if (settings.profile.shadowSource == ShadowSource.UnityShadows || settings.profile.actualContactShadowsInjectionPoint == ContactShadowsInjectionPoint.AfterOpaque) { + contactShadowsMaxDistance = 1; + } + else { + contactShadowsMaxDistance = shadowMaxDistance / farClipPlane; + } + mat.SetVector(ShaderParams.ContactShadowsData1, new Vector4(profile.contactShadowsStepping, intensityMultiplier, profile.contactShadowsJitter, profile.contactShadowsDistanceFade)); + mat.SetVector(ShaderParams.ContactShadowsData2, new Vector4(profile.contactShadowsStartDistance / farClipPlane, profile.contactShadowsStartDistanceFade / farClipPlane, contactShadowsMaxDistance, profile.contactShadowsNormalBias)); + mat.SetVector(ShaderParams.ContactShadowsData3, new Vector4(profile.contactShadowsThicknessNear / farClipPlane, profile.contactShadowsThicknessDistanceMultiplier * 0.1f, profile.contactShadowsVignetteSize, profile.contactShadowsBias)); + mat.SetVector(ShaderParams.ContactShadowsData4, new Vector4(profile.contactShadowsBiasFar + 0.0025f, profile.contactShadowsEdgeSoftness, profile.contactShadowsPlanarShadows ? 0f : 1f, 0)); + mat.SetInt(ShaderParams.ContactShadowsBlendMode, settings.debugShadows ? (int)BlendMode.SrcAlpha : (int)BlendMode.OneMinusSrcAlpha); + + // Enable/disable soft edges keyword + if (profile.contactShadowsSoftEdges) { + mat.EnableKeyword(ShaderParams.SKW_CONTACT_SHADOWS_SOFT_EDGES); + } + else { + mat.DisableKeyword(ShaderParams.SKW_CONTACT_SHADOWS_SOFT_EDGES); + } + + return true; + } + + static void SetupContactShadowsAfterOpaqueOnlyMaterial (UmbraProfile profile, Material mat) { + if ((UmbraSoftShadows.isDeferred && profile.normalsSource == NormalSource.GBufferNormals) || profile.effectiveNormalsSource == NormalSource.NormalsPass) { + mat.EnableKeyword(ShaderParams.SKW_NORMALS_TEXTURE); + } + else { + mat.DisableKeyword(ShaderParams.SKW_NORMALS_TEXTURE); + } + mat.DisableKeyword(ShaderParams.SKW_LOOP_STEP_X3); + mat.DisableKeyword(ShaderParams.SKW_LOOP_STEP_X2); + if (profile.loopStepOptimization == LoopStep.x3) { + mat.EnableKeyword(ShaderParams.SKW_LOOP_STEP_X3); + } + else if (profile.loopStepOptimization == LoopStep.x2) { + mat.EnableKeyword(ShaderParams.SKW_LOOP_STEP_X2); + } + if (profile.transparentReceiverPlane) { + mat.EnableKeyword(ShaderParams.SKW_RECEIVER_PLANE); + } + else { + mat.DisableKeyword(ShaderParams.SKW_RECEIVER_PLANE); + } + } + + static bool IsOffscreenDepthTexture (ref CameraData cameraData) => cameraData.targetTexture != null && cameraData.targetTexture.format == RenderTextureFormat.Depth; + + public override void AddRenderPasses (ScriptableRenderer renderer, ref RenderingData renderingData) { + + UmbraSoftShadows.installed = true; + + if (IsOffscreenDepthTexture(ref renderingData.cameraData)) + return; + + if (!LoadMaterial()) { + Debug.LogError("Umbra: can't load material"); + return; + } + + // Fetch settings from current main directional light + Light light = null; + shadowLightIndex = renderingData.lightData.mainLightIndex; + if (shadowLightIndex < 0) { + // fallback to static instance search in case that "Only Contact Shadows" option is used + if (UmbraSoftShadows.instance != null) { + light = UmbraSoftShadows.instance.GetComponent(); + } + } + else { + light = renderingData.lightData.visibleLights[shadowLightIndex].light; + } + if (light == null) return; + + if (!umbraSettings.TryGetValue(light, out settings)) return; + if (settings == null) return; + + Camera cam = renderingData.cameraData.camera; + + usesCachedShadowmap = cachedShadowmapTimestap == Time.frameCount - 1 && settings != null && settings.profile != null && settings.profile.frameSkipOptimization && Application.isPlaying; + if (usesCachedShadowmap) { + // test camera rotation/movement + Transform t = cam.transform; + Vector3 pos = t.position; + Vector3 fwd = t.forward; + bool camMoved = true; + if (cameraPrevLocation.TryGetValue(cam, out CameraLocation prevLocation)) { + float dx = pos.x - prevLocation.position.x; + float dy = pos.y - prevLocation.position.y; + float dz = pos.z - prevLocation.position.z; + if (dx < 0) dx = -dx; + if (dy < 0) dy = -dy; + if (dz < 0) dz = -dz; + float thresholdPosition = settings.profile.skipFrameMaxCameraDisplacement; + if (dx <= thresholdPosition && dy <= thresholdPosition && dz <= thresholdPosition) { + if (Vector3.Angle(prevLocation.forward, fwd) <= settings.profile.skipFrameMaxCameraRotation) { + camMoved = false; + } + } + } + if (camMoved) { + prevLocation.position = pos; + prevLocation.forward = fwd; + cameraPrevLocation[cam] = prevLocation; + usesCachedShadowmap = false; + } + } + + UmbraSoftShadows.isDeferred = renderer is UniversalRenderer && ((UniversalRenderer)renderer).renderingModeRequested == RenderingMode.Deferred; + bool shouldEnqueue = ((camerasLayerMask & (1 << cam.gameObject.layer)) != 0) && m_SSShadowsPass.Setup(mat); + + if (shouldEnqueue) { + bool allowMainLightShadows = renderingData.shadowData.supportsMainLightShadows && renderingData.lightData.mainLightIndex != -1 && renderingData.lightData.visibleLights[renderingData.lightData.mainLightIndex].light.shadowStrength > 0; + bool allowScreenSpaceShadows = allowMainLightShadows && (settings.profile == null || settings.profile.shadowSource != ShadowSource.OnlyContactShadows); + if (allowScreenSpaceShadows) { + m_SSShadowsPass.renderPassEvent = UmbraSoftShadows.isDeferred + ? RenderPassEvent.AfterRenderingGbuffer + : RenderPassEvent.AfterRenderingPrePasses + 1; // We add 1 to ensure this happens after depth priming depth copy pass that might be scheduled + + renderer.EnqueuePass(m_SSShadowsPass); + renderer.EnqueuePass(m_SSShadowsPostPass); + } + + if (settings.profile != null) { + if (!settings.debugShadows && allowScreenSpaceShadows && settings.profile.overlayShadows && settings.profile.overlayShadowsIntensity > 0) { + renderer.EnqueuePass(m_OverlayShadowsPass); + } + if (settings.profile.contactShadows || settings.profile.shadowSource == ShadowSource.OnlyContactShadows) { + if (SetupContactShadowsMaterial(cam, settings.profile, mat)) { + if (settings.profile.shadowSource != ShadowSource.UmbraShadows || settings.profile.actualContactShadowsInjectionPoint == ContactShadowsInjectionPoint.AfterOpaque) { + SetupContactShadowsAfterOpaqueOnlyMaterial(settings.profile, mat); + m_ContactShadowsAfterOpaquePass.Setup(); + renderer.EnqueuePass(m_ContactShadowsAfterOpaquePass); + } + } + } + } + + if (allowScreenSpaceShadows && settings.debugShadows) { + m_SSSShadowsDebugPass.Setup(m_SSShadowsPass); + renderer.EnqueuePass(m_SSSShadowsDebugPass); + } + } + } + + private bool LoadMaterial () { + if (mat != null) { + return true; + } + + Shader shader = Shader.Find(k_ShaderName); + if (shader == null) { + return false; + } + + mat = CoreUtils.CreateEngineMaterial(shader); + Texture2D noiseTex = Resources.Load("Umbra/Textures/NoiseTex"); + mat.SetTexture(ShaderParams.NoiseTex, noiseTex); + + return mat != null; + } + + private partial class UmbraScreenSpaceShadowsPass : ScriptableRenderPass { + + static string m_ProfilerTag = "UmbraSoftShadows"; + static ProfilingSampler m_ProfilingSampler = new ProfilingSampler(m_ProfilerTag); + public static Material mat; + static RTHandle m_RenderTarget, m_DownscaledRenderTarget; + static readonly Vector4[][] cascadeRects = { + new Vector4[] { new Vector4(0, 0, 1, 1), new Vector4(0, 0, 1, 1), new Vector4(0, 0, 1, 1), new Vector4(0, 0, 1, 1) }, + new Vector4[] { new Vector4(0, 0, 0.5f, 1f), new Vector4(0.5f, 0, 1, 1f), new Vector4(0, 0, 1, 1), new Vector4(0, 0, 1, 1) }, + new Vector4[] { new Vector4(0, 0, 0.5f, 0.5f), new Vector4(0.5f, 0, 1, 0.5f), new Vector4(0, 0.5f, 0.5f, 1), new Vector4(0.5f, 0.5f, 1, 1) }, + new Vector4[] { new Vector4(0, 0, 0.5f, 0.5f), new Vector4(0.5f, 0, 1, 0.5f), new Vector4(0, 0.5f, 0.5f, 1), new Vector4(0.5f, 0.5f, 1, 1) } + }; + static readonly Vector4[][] cascadeRectsWithPadding = { + new Vector4[] { new Vector4(0, 0, 1, 1), new Vector4(0, 0, 1, 1), new Vector4(0, 0, 1, 1), new Vector4(0, 0, 1, 1) }, + new Vector4[] { new Vector4(0, 0, 0.5f, 1f), new Vector4(0.5f, 0, 1, 1f), new Vector4(0, 0, 1, 1), new Vector4(0, 0, 1, 1) }, + new Vector4[] { new Vector4(0, 0, 0.5f, 0.5f), new Vector4(0.5f, 0, 1, 0.5f), new Vector4(0, 0.5f, 0.5f, 1), new Vector4(0.5f, 0.5f, 1, 1) }, + new Vector4[] { new Vector4(0, 0, 0.5f, 0.5f), new Vector4(0.5f, 0, 1, 0.5f), new Vector4(0, 0.5f, 0.5f, 1), new Vector4(0.5f, 0.5f, 1, 1) } + }; + static readonly float[] cascadeScales = { 1, 1, 1, 1 }; + static RenderTextureDescriptor desc; + GraphicsFormat screenShadowTextureFormat; + public readonly Dictionary shadowTextures = new Dictionary(); + static bool newShadowmap = true; + static readonly float[] autoCascadeScales = new float[4]; + + + public void Dispose () { + foreach (var rt in shadowTextures.Values) { + rt?.Release(); + } + shadowTextures.Clear(); + m_RenderTarget?.Release(); + m_DownscaledRenderTarget?.Release(); + } + + internal bool Setup (Material material) { + if (settings == null || !settings.enabled || settings.profile == null) return false; + mat = material; + UmbraProfile profile = settings.profile; + + GraphicsFormat desiredFormat = profile.shadowSource == ShadowSource.UmbraShadows && profile.blurIterations > 0 && profile.enableContactHardening ? GraphicsFormat.R8G8_UNorm : GraphicsFormat.R8_UNorm; +#if UNITY_2023_1_OR_NEWER + screenShadowTextureFormat = SystemInfo.IsFormatSupported(desiredFormat, GraphicsFormatUsage.Linear | GraphicsFormatUsage.Render) +#else + screenShadowTextureFormat = RenderingUtils.SupportsGraphicsFormat(desiredFormat, FormatUsage.Linear | FormatUsage.Render) +#endif + ? desiredFormat + : GraphicsFormat.B8G8R8A8_UNorm; + if (usesCachedShadowmap) { + ConfigureInput(ScriptableRenderPassInput.None); + } + else { + if (profile.shadowSource == ShadowSource.UmbraShadows && (profile.effectiveNormalsSource == NormalSource.NormalsPass || profile.downsample || profile.forceDepthPrepass)) { + ConfigureInput(ScriptableRenderPassInput.Depth | ScriptableRenderPassInput.Normal); + } + else { + ConfigureInput(ScriptableRenderPassInput.Depth); + } + } + return mat != null; + } + +#if !UNITY_6000_3_OR_NEWER +#if UNITY_2023_3_OR_NEWER + [Obsolete] +#endif + public override void OnCameraSetup (CommandBuffer cmd, ref RenderingData renderingData) { + + desc = renderingData.cameraData.cameraTargetDescriptor; + desc.depthBufferBits = 0; + desc.msaaSamples = 1; + desc.graphicsFormat = screenShadowTextureFormat; + + if (settings == null || settings.profile == null) return; + + UmbraProfile profile = settings.profile; + + if (profile.downsample && !profile.preserveEdges) { + desc.width /= 2; + desc.height /= 2; + } + + Camera cam = renderingData.cameraData.camera; +#if UNITY_EDITOR + if (profile.frameSkipOptimization && Application.isPlaying) { +#else + if (profile.frameSkipOptimization) { +#endif + newShadowmap = !shadowTextures.TryGetValue(cam, out m_RenderTarget); + } + +#if UNITY_6000_0_OR_NEWER + if (RenderingUtils.ReAllocateHandleIfNeeded(ref m_RenderTarget, desc, FilterMode.Point, TextureWrapMode.Clamp, name: "_ScreenSpaceShadowmapTexture")) { +#else + if (RenderingUtils.ReAllocateIfNeeded(ref m_RenderTarget, desc, FilterMode.Point, TextureWrapMode.Clamp, name: "_ScreenSpaceShadowmapTexture")) { +#endif + newShadowmap = true; + } + if (newShadowmap) { + shadowTextures[cam] = m_RenderTarget; + } + + cmd.SetGlobalTexture(m_RenderTarget.name, m_RenderTarget.nameID); + + ConfigureTarget(m_RenderTarget); + ConfigureClear(ClearFlag.None, Color.white); + } +#endif + + +#if !UNITY_6000_3_OR_NEWER +#if UNITY_2023_3_OR_NEWER + [Obsolete] +#endif + public override void Execute (ScriptableRenderContext context, ref RenderingData renderingData) { + + if (mat == null) { + Debug.LogError("Umbra material not initialized"); + return; + } + UmbraProfile profile = settings.profile; + + var cmd = renderingData.commandBuffer; + using (new ProfilingScope(cmd, m_ProfilingSampler)) { + + int frameCount = Time.frameCount; +#if UNITY_EDITOR + bool useFrame = !Application.isPlaying || !profile.frameSkipOptimization || newShadowmap || !usesCachedShadowmap; +#else + bool useFrame = !profile.frameSkipOptimization || newShadowmap || !usesCachedShadowmap; +#endif + if (useFrame) { + cachedShadowmapTimestap = frameCount; + newShadowmap = false; + + RTHandle shadowsHandle; + + if (profile.downsample && profile.preserveEdges) { + desc.width /= 2; + desc.height /= 2; +#if UNITY_6000_0_OR_NEWER + RenderingUtils.ReAllocateHandleIfNeeded(ref m_DownscaledRenderTarget, desc, FilterMode.Point, TextureWrapMode.Clamp); +#else + RenderingUtils.ReAllocateIfNeeded(ref m_DownscaledRenderTarget, desc, FilterMode.Point, TextureWrapMode.Clamp); +#endif + shadowsHandle = m_DownscaledRenderTarget; + } + else { + shadowsHandle = m_RenderTarget; + } + + int cascadeCount = renderingData.shadowData.mainLightShadowCascadesCount; + float farClipPlane = renderingData.cameraData.camera.farClipPlane; + UniversalRenderPipelineAsset urpAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset; + float shadowMaxDistance = urpAsset.shadowDistance; + + Pass castShadowsPass; + + if (profile.shadowSource == ShadowSource.UnityShadows) { + castShadowsPass = Pass.UnityShadows; + } + else { + castShadowsPass = Pass.UmbraCastShadows; + + if (profile.transparentReceiverPlane) { + mat.EnableKeyword(ShaderParams.SKW_RECEIVER_PLANE); + cmd.SetGlobalFloat(ShaderParams.ReceiverPlaneAltitude, profile.receiverPlaneAltitude); + cmd.SetGlobalVector(ShaderParams.ShadowData3, new Vector4(10f, 0.001f, 0, profile.blurEdgeSharpness)); + } + else { + mat.DisableKeyword(ShaderParams.SKW_RECEIVER_PLANE); + cmd.SetGlobalVector(ShaderParams.ShadowData3, new Vector4(profile.blurDepthAttenStart / farClipPlane, profile.blurDepthAttenLength / farClipPlane, profile.blurGrazingAttenuation, profile.blurEdgeSharpness)); + } + + cmd.SetGlobalVector(ShaderParams.ShadowData, new Vector4(profile.sampleCount, 1024 / Mathf.Pow(2, profile.posterization), profile.blurEdgeTolerance * 1000f, (profile.blurDepthAttenStart + profile.blurDepthAttenLength) / farClipPlane)); + float shadowMaxDepth = profile.transparentReceiverPlane ? 2 : shadowMaxDistance / farClipPlane; + cmd.SetGlobalVector(ShaderParams.ShadowData2, new Vector4(1f - profile.contactStrength, profile.distantSpread, shadowMaxDepth, profile.lightSize * 0.02f)); + cmd.SetGlobalVector(ShaderParams.ShadowData4, new Vector4(profile.occludersCount, profile.occludersSearchRadius * 0.02f, profile.contactStrength > 0 ? profile.contactStrengthKnee * 0.1f : 0.00001f, profile.maskScale)); + cmd.SetGlobalVector(ShaderParams.SourceSize, new Vector4(desc.width, desc.height, 0, 0)); + cmd.SetGlobalInt(ShaderParams.EarlyOutSamples, profile.earlyOutSamples); + + if (cascadeCount > 1) { + VisibleLight shadowLight = renderingData.lightData.visibleLights[shadowLightIndex]; + float shadowNearPlane = shadowLight.light.shadowNearPlane; + + for (int k = 0; k < cascadeCount; k++) { + renderingData.cullResults.ComputeDirectionalShadowMatricesAndCullingPrimitives(shadowLightIndex, + k, cascadeCount, renderingData.shadowData.mainLightShadowCascadesSplit, urpAsset.mainLightShadowmapResolution, shadowNearPlane, out _, out Matrix4x4 proj, + out _); + Matrix4x4 invProj = proj.inverse; + autoCascadeScales[k] = Mathf.Abs(invProj.MultiplyPoint(ShaderParams.Vector3Back).z - invProj.MultiplyPoint(ShaderParams.Vector3Forward).z) / 100f; + } + + Vector4[] cascadeRectsTemp = cascadeRectsWithPadding[cascadeCount - 1]; + float texel = 1f / urpAsset.mainLightShadowmapResolution; + float padding = texel; + for (int c = 0; c < 4; c++) { + Vector4 defaultRect = cascadeRects[cascadeCount - 1][c]; + Vector4 rect = cascadeRectsTemp[c]; + rect.x = defaultRect.x + padding; + rect.y = defaultRect.y + padding; + rect.z = defaultRect.z - padding; + rect.w = defaultRect.w - padding; + cascadeRectsTemp[c] = rect; + } + cmd.SetGlobalVectorArray(ShaderParams.UmbraCascadeRects, cascadeRectsTemp); + cascadeScales[0] = profile.cascade1Scale * autoCascadeScales[0]; + cascadeScales[1] = profile.cascade2Scale * autoCascadeScales[1]; + cascadeScales[2] = profile.cascade3Scale * autoCascadeScales[2]; + cascadeScales[3] = profile.cascade4Scale * autoCascadeScales[3]; + cmd.SetGlobalFloatArray(ShaderParams.UmbraCascadeScales, cascadeScales); + } + + if ((UmbraSoftShadows.isDeferred && profile.normalsSource == NormalSource.GBufferNormals) || profile.effectiveNormalsSource == NormalSource.NormalsPass || profile.downsample) { + mat.EnableKeyword(ShaderParams.SKW_NORMALS_TEXTURE); + } + else { + mat.DisableKeyword(ShaderParams.SKW_NORMALS_TEXTURE); + } + +#if !UNITY_WEBGL + if (profile.enableContactHardening) { + mat.EnableKeyword(ShaderParams.SKW_CONTACT_HARDENING); + } + else +#endif + { + mat.DisableKeyword(ShaderParams.SKW_CONTACT_HARDENING); + } + + mat.DisableKeyword(ShaderParams.SKW_LOOP_STEP_X3); + mat.DisableKeyword(ShaderParams.SKW_LOOP_STEP_X2); + if (profile.loopStepOptimization == LoopStep.x3) { + mat.EnableKeyword(ShaderParams.SKW_LOOP_STEP_X3); + } + else if (profile.loopStepOptimization == LoopStep.x2) { + mat.EnableKeyword(ShaderParams.SKW_LOOP_STEP_X2); + } + + if (profile.style == Style.Textured && profile.maskTexture != null) { + mat.EnableKeyword(ShaderParams.SKW_MASK_TEXTURE); + mat.SetTexture(ShaderParams.MaskTexture, profile.maskTexture); + } + else { + mat.DisableKeyword(ShaderParams.SKW_MASK_TEXTURE); + } + } + + // Resolve screen space shadows + Blitter.BlitCameraTexture(cmd, m_RenderTarget, shadowsHandle, mat, (int)castShadowsPass); + + // Blend cascades 0 & 1 + if (profile.shadowSource == ShadowSource.UmbraShadows) { + if (profile.blendCascades && cascadeCount > 1) { + cmd.SetGlobalVector(ShaderParams.BlendCascadeData, new Vector4(profile.cascade1BlendingStrength * 100f, profile.cascade2BlendingStrength * 100f, profile.cascade3BlendingStrength * 100f, 1f)); + Blitter.BlitCameraTexture(cmd, shadowsHandle, shadowsHandle, mat, (int)Pass.CascadeBlending); + } + } + + // Add contact shadows + if (profile.contactShadows) { + if (!settings.debugShadows && profile.actualContactShadowsInjectionPoint == ContactShadowsInjectionPoint.ShadowTexture) { + Blitter.BlitCameraTexture(cmd, shadowsHandle, shadowsHandle, mat, (int)Pass.ContactShadows); + } + } + + // Downscale depth for upscaler + if (profile.downsample && profile.preserveEdges) { + RenderTextureDescriptor downscampledDepthDesc = desc; + downscampledDepthDesc.colorFormat = RenderTextureFormat.RFloat; + cmd.GetTemporaryRT(ShaderParams.DownsampledDepth, downscampledDepthDesc); + FullScreenBlit(cmd, ShaderParams.DownsampledDepth, mat, (int)Pass.DownsampledDepth); + mat.EnableKeyword(ShaderParams.SKW_PRESERVE_EDGES); + } + else { + mat.DisableKeyword(ShaderParams.SKW_PRESERVE_EDGES); + } + + if (profile.shadowSource == ShadowSource.UnityShadows) { + if (profile.downsample && profile.preserveEdges) { + // upscale + FullScreenBlit(cmd, m_DownscaledRenderTarget, m_RenderTarget, mat, (int)Pass.ComposeUnity); + } + } + else { + if (profile.style == Style.Default && profile.blurIterations > 0) { + cmd.SetGlobalFloat(ShaderParams.BlurSpread, profile.blurSpread); + + // perform blur + cmd.GetTemporaryRT(ShaderParams.BlurTemp, desc); + cmd.GetTemporaryRT(ShaderParams.BlurTemp2, desc); + cmd.SetGlobalFloat(ShaderParams.BlurScale, 1f); + RenderTargetIdentifier shadowsRT = shadowsHandle; + RenderTargetIdentifier blurredRT = ShaderParams.BlurTemp2; + if (profile.blurType == BlurType.Box) { + for (int k = 0; k < profile.blurIterations; k++) { + blurredRT = (k % 2) == 0 ? ShaderParams.BlurTemp2 : ShaderParams.BlurTemp; + FullScreenBlit(cmd, shadowsRT, blurredRT, mat, (int)Pass.BoxBlur); + shadowsRT = blurredRT; + cmd.SetGlobalFloat(ShaderParams.BlurScale, k + 1f); + } + } + else { + if (profile.blurType == BlurType.Gaussian15) { + mat.EnableKeyword(ShaderParams.SKW_BLUR_HQ); + } + else { + mat.DisableKeyword(ShaderParams.SKW_BLUR_HQ); + } + FullScreenBlit(cmd, shadowsRT, ShaderParams.BlurTemp, mat, (int)Pass.BlurHoriz); + cmd.SetGlobalFloat(ShaderParams.BlurScale, 1f); + for (int k = 0; k < profile.blurIterations - 1; k++) { + FullScreenBlit(cmd, ShaderParams.BlurTemp, ShaderParams.BlurTemp2, mat, (int)Pass.BlurVert); + cmd.SetGlobalFloat(ShaderParams.BlurScale, k + 2f); + FullScreenBlit(cmd, ShaderParams.BlurTemp2, ShaderParams.BlurTemp, mat, (int)Pass.BlurHoriz); + } + FullScreenBlit(cmd, ShaderParams.BlurTemp, ShaderParams.BlurTemp2, mat, (int)Pass.BlurVert); + } + + // blit blurred shadows + FullScreenBlit(cmd, blurredRT, m_RenderTarget, mat, (int)Pass.ComposeWithBlending); + } + else if (profile.downsample && profile.preserveEdges) { + // upscale + FullScreenBlit(cmd, m_DownscaledRenderTarget, m_RenderTarget, mat, (int)Pass.Compose); + } + } + } + + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MainLightShadows, false); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MainLightShadowCascades, false); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MainLightShadowScreen, true); + } + } +#endif + + static Mesh _fullScreenMesh; + + static Mesh fullscreenMesh { + get { + if (_fullScreenMesh != null) { + return _fullScreenMesh; + } + float num = 1f; + float num2 = 0f; + Mesh val = new Mesh(); + _fullScreenMesh = val; + _fullScreenMesh.SetVertices(new List { + new Vector3 (-1f, -1f, 0f), + new Vector3 (-1f, 1f, 0f), + new Vector3 (1f, -1f, 0f), + new Vector3 (1f, 1f, 0f) + }); + _fullScreenMesh.SetUVs(0, new List { + new Vector2 (0f, num2), + new Vector2 (0f, num), + new Vector2 (1f, num2), + new Vector2 (1f, num) + }); + _fullScreenMesh.SetIndices(new int[6] { 0, 1, 2, 2, 1, 3 }, (MeshTopology)0, 0, false); + _fullScreenMesh.UploadMeshData(true); + return _fullScreenMesh; + } + } + + static void FullScreenBlit (CommandBuffer cmd, RenderTargetIdentifier destination, Material material, int passIndex) { + destination = new RenderTargetIdentifier(destination, 0, CubemapFace.Unknown, -1); + cmd.SetRenderTarget(destination); + cmd.DrawMesh(fullscreenMesh, Matrix4x4.identity, material, 0, passIndex); + } + + static void FullScreenBlit (CommandBuffer cmd, RenderTargetIdentifier source, RenderTargetIdentifier destination, Material material, int passIndex) { + destination = new RenderTargetIdentifier(destination, 0, CubemapFace.Unknown, -1); + cmd.SetRenderTarget(destination); + cmd.SetGlobalTexture(ShaderParams.MainTex, source); + cmd.DrawMesh(fullscreenMesh, Matrix4x4.identity, material, 0, passIndex); + } + + } + + private partial class UmbraScreenSpaceShadowsPostPass : ScriptableRenderPass { + + // Profiling tag + private static string m_ProfilerTag = "Umbra Screen Space Shadows Post Pass"; + private static ProfilingSampler m_ProfilingSampler = new ProfilingSampler(m_ProfilerTag); + private static readonly RTHandle k_CurrentActive = RTHandles.Alloc(BuiltinRenderTextureType.CurrentActive); + +#if !UNITY_6000_3_OR_NEWER +#if UNITY_2023_3_OR_NEWER + [Obsolete] +#endif + public override void Configure (CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) { + ConfigureTarget(k_CurrentActive); + } + +#endif +#if !UNITY_6000_3_OR_NEWER +#if UNITY_2023_3_OR_NEWER + [Obsolete] +#endif + public override void Execute (ScriptableRenderContext context, ref RenderingData renderingData) { + var cmd = renderingData.commandBuffer; + using (new ProfilingScope(cmd, m_ProfilingSampler)) { + ShadowData shadowData = renderingData.shadowData; + int cascadesCount = shadowData.mainLightShadowCascadesCount; + bool mainLightShadows = renderingData.shadowData.supportsMainLightShadows; + bool receiveShadowsNoCascade = mainLightShadows && cascadesCount == 1; + bool receiveShadowsCascades = mainLightShadows && cascadesCount > 1; + + // Before transparent object pass, force to disable screen space shadow of main light + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MainLightShadowScreen, false); + + // then enable main light shadows with or without cascades + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MainLightShadows, receiveShadowsNoCascade); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MainLightShadowCascades, receiveShadowsCascades); + } + } +#endif + } + + + private partial class UmbraDebugPass : ScriptableRenderPass { + + // Profiling tag + private static string m_ProfilerTag = "Umbra Debug Pass"; + private static ProfilingSampler m_ProfilingSampler = new ProfilingSampler(m_ProfilerTag); + + RTHandle source; + static UmbraScreenSpaceShadowsPass shadowPass; + + public void Setup (UmbraScreenSpaceShadowsPass shadowPass) { + UmbraDebugPass.shadowPass = shadowPass; + if (settings.debugShadows) { + ConfigureInput(ScriptableRenderPassInput.Depth); + } + } + +#if !UNITY_6000_3_OR_NEWER +#if UNITY_2023_3_OR_NEWER + [Obsolete] +#endif + public override void OnCameraSetup (CommandBuffer cmd, ref RenderingData renderingData) { + source = renderingData.cameraData.renderer.cameraColorTargetHandle; + } + +#if UNITY_2023_3_OR_NEWER + [Obsolete] +#endif + public override void Execute (ScriptableRenderContext context, ref RenderingData renderingData) { + Material mat = UmbraScreenSpaceShadowsPass.mat; + if (mat == null) return; + + RTHandle shadows = null; + Camera cam = renderingData.cameraData.camera; + Dictionary shadowTextures = shadowPass.shadowTextures; + if (shadowTextures != null) { + shadows = shadowTextures[cam]; + } + + if (shadows == null) return; + + var cmd = renderingData.commandBuffer; + using (new ProfilingScope(cmd, m_ProfilingSampler)) { + Blitter.BlitCameraTexture(cmd, shadows, source, mat, (int)Pass.DebugShadows); + if (settings.debugShadows && settings.profile != null && settings.profile.contactShadows) { + Blitter.BlitCameraTexture(cmd, source, source, mat, (int)Pass.ContactShadowsAfterOpaque); + } + } + } +#endif + } + + private partial class UmbraContactShadowsAfterOpaquePass : ScriptableRenderPass { + + // Profiling tag + private static string m_ProfilerTag = "Umbra Contact Shadows After Opaque Pass"; + private static ProfilingSampler m_ProfilingSampler = new ProfilingSampler(m_ProfilerTag); + + RTHandle source; + + public void Setup () { + ConfigureInput(ScriptableRenderPassInput.Depth); + } + +#if !UNITY_6000_3_OR_NEWER +#if UNITY_2023_3_OR_NEWER + [Obsolete] +#endif + public override void OnCameraSetup (CommandBuffer cmd, ref RenderingData renderingData) { + source = renderingData.cameraData.renderer.cameraColorTargetHandle; + ConfigureTarget(source); + } + +#if UNITY_2023_3_OR_NEWER + [Obsolete] +#endif + public override void Execute (ScriptableRenderContext context, ref RenderingData renderingData) { + Material mat = UmbraScreenSpaceShadowsPass.mat; + if (mat == null || source.rt == null) return; + var cmd = renderingData.commandBuffer; + using (new ProfilingScope(cmd, m_ProfilingSampler)) { + UmbraProfile profile = settings.profile; + if (profile.transparentReceiverPlane) { + cmd.SetGlobalFloat(ShaderParams.ReceiverPlaneAltitude, profile.receiverPlaneAltitude); + } + cmd.SetGlobalVector(ShaderParams.SourceSize, new Vector4(source.rt.width, source.rt.height, 0, 0)); + Blitter.BlitCameraTexture(cmd, source, source, mat, (int)Pass.ContactShadowsAfterOpaque); + } + } +#endif + } + + + private partial class UmbraOverlayShadows : ScriptableRenderPass { + + // Profiling tag + private static string m_ProfilerTag = "Umbra Overlay Shadows"; + private static ProfilingSampler m_ProfilingSampler = new ProfilingSampler(m_ProfilerTag); + + RTHandle source; + +#if !UNITY_6000_3_OR_NEWER +#if UNITY_2023_3_OR_NEWER + [Obsolete] +#endif + public override void OnCameraSetup (CommandBuffer cmd, ref RenderingData renderingData) { + source = renderingData.cameraData.renderer.cameraColorTargetHandle; + ConfigureTarget(source); + } + +#if UNITY_2023_3_OR_NEWER + [Obsolete] +#endif + public override void Execute (ScriptableRenderContext context, ref RenderingData renderingData) { + Material mat = UmbraScreenSpaceShadowsPass.mat; + if (mat == null || source == null) return; + var cmd = renderingData.commandBuffer; + using (new ProfilingScope(cmd, m_ProfilingSampler)) { + Color shadowColor = settings.profile.overlayShadowsColor; + shadowColor.a = settings.profile.overlayShadowsIntensity; + mat.SetColor(ShaderParams.OverlayShadowColor, shadowColor); + Blitter.BlitCameraTexture(cmd, source, source, mat, (int)Pass.OverlayShadows); + } + } +#endif + } + + } +} diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.cs.meta b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.cs.meta new file mode 100644 index 00000000..290013a7 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 163d34cee9b7a428d9899ab92abd7e0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Scripts/UmbraRenderFeature.cs + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraSoftShadows.cs b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraSoftShadows.cs new file mode 100644 index 00000000..848335c9 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraSoftShadows.cs @@ -0,0 +1,61 @@ +using UnityEngine; + +namespace Umbra { + + public enum ContactShadowsSource { + DirectionalLight, + PointLights + } + + [ExecuteAlways] + [HelpURL("https://kronnect.com/docs/umbra/")] + public class UmbraSoftShadows : MonoBehaviour { + + [Tooltip("Currently used umbra profile with settings")] + public UmbraProfile profile; + + [Tooltip("Source of contact shadows")] + public ContactShadowsSource contactShadowsSource = ContactShadowsSource.DirectionalLight; + + [Tooltip("Object whose position is used to determine if it's inside point light volumes")] + public Transform pointLightsTrigger; + + public bool debugShadows; + + public static bool installed; + public static bool isDeferred; + public static UmbraSoftShadows instance; + + + private void OnEnable () { + CheckProfile(); + instance = this; + } + + private void OnDisable () { + UmbraRenderFeature.UnregisterUmbraLight(this); + instance = null; + } + + void OnValidate () { + CheckProfile(); + } + + private void Reset () { + CheckProfile(); + } + + void CheckProfile () { + if (profile == null) { + profile = ScriptableObject.CreateInstance(); + profile.name = "New Umbra Profile"; +#if UNITY_EDITOR + UnityEditor.EditorUtility.SetDirty(this); +#endif + } + UmbraRenderFeature.RegisterUmbraLight(this); + } + + } + +} \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraSoftShadows.cs.meta b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraSoftShadows.cs.meta new file mode 100644 index 00000000..4f93cc7a --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/Scripts/UmbraSoftShadows.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 7e828e348ac39438eb8ae845fe499ae5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/Scripts/UmbraSoftShadows.cs + uploadId: 868458 diff --git a/Assets/UmbraSoftShadows/Runtime/UmbraAsmRef.asmref b/Assets/UmbraSoftShadows/Runtime/UmbraAsmRef.asmref new file mode 100644 index 00000000..cb3b0b05 --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/UmbraAsmRef.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:15fc0a57446b3144c949da3e2b9737a9" +} \ No newline at end of file diff --git a/Assets/UmbraSoftShadows/Runtime/UmbraAsmRef.asmref.meta b/Assets/UmbraSoftShadows/Runtime/UmbraAsmRef.asmref.meta new file mode 100644 index 00000000..6ec2b34b --- /dev/null +++ b/Assets/UmbraSoftShadows/Runtime/UmbraAsmRef.asmref.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 7aeef6f5814744ae3a7b75542a11ec53 +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 282485 + packageName: Umbra Soft Shadows - Better Directional & Contact Shadows for URP + packageVersion: 10.0.1 + assetPath: Assets/UmbraSoftShadows/Runtime/UmbraAsmRef.asmref + uploadId: 868458 diff --git a/Assets/XR/AndroidXR/AndroidXRSettingsInitializer b/Assets/XR/AndroidXR/AndroidXRSettingsInitializer index ba1ef72f..f9a9372d 100644 --- a/Assets/XR/AndroidXR/AndroidXRSettingsInitializer +++ b/Assets/XR/AndroidXR/AndroidXRSettingsInitializer @@ -11,5 +11,5 @@ MonoBehaviour: m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: d7e9a0ba2b7f40ebbb3dad8385aa807b, type: 3} m_Name: - m_EditorClassIdentifier: + m_EditorClassIdentifier: Unity.XR.AndroidOpenXR.Editor::UnityEditor.XR.OpenXR.Features.Android.AndroidXRSettingsInitializer isInitialized: 0 diff --git a/Assets/XR/Settings/OpenXR Package Settings.asset b/Assets/XR/Settings/OpenXR Package Settings.asset index 599bdd99..cef8b15d 100644 --- a/Assets/XR/Settings/OpenXR Package Settings.asset +++ b/Assets/XR/Settings/OpenXR Package Settings.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:10e477d16858e90460e343cee5c09b106d43342d0d09399e25482d369267f54b -size 48665 +oid sha256:a8cff970c1fe71f6267dd9cf4e2e69275db06774305192118636e6df789a8133 +size 67027 diff --git a/Packages/com.baddog.rendering.arealight/Documentation.meta b/Packages/com.baddog.rendering.arealight/Documentation.meta new file mode 100644 index 00000000..4fcba5bf --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa41aa4504bb16e4c9983c6d1d784beb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Documentation/Realtime Area Light for URP.pdf b/Packages/com.baddog.rendering.arealight/Documentation/Realtime Area Light for URP.pdf new file mode 100644 index 00000000..c8f16b6e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Documentation/Realtime Area Light for URP.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7ba079b3e369725001c074650c76ec95f1d5d9ca7f3268224addec670a60f8e +size 2747117 diff --git a/Packages/com.baddog.rendering.arealight/Documentation/Realtime Area Light for URP.pdf.meta b/Packages/com.baddog.rendering.arealight/Documentation/Realtime Area Light for URP.pdf.meta new file mode 100644 index 00000000..893d6e11 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Documentation/Realtime Area Light for URP.pdf.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: caa1f6f91ff1ff04cabce7491b3d7e09 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Documentation/Realtime Area + Light for URP.pdf + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor.meta b/Packages/com.baddog.rendering.arealight/Editor.meta new file mode 100644 index 00000000..0e8b7652 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a26d7590efabca742b438c15235b54f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Editor/AreaLightSettingsDrawer.cs b/Packages/com.baddog.rendering.arealight/Editor/AreaLightSettingsDrawer.cs new file mode 100644 index 00000000..2e0bf8f8 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/AreaLightSettingsDrawer.cs @@ -0,0 +1,138 @@ +using UnityEngine; +using UnityEditor; + +namespace BadDog.Rendering.AreaLight +{ + /// + /// Custom property drawer for AreaLightSettings + /// + [CustomPropertyDrawer(typeof(AreaLightSettings))] + public class AreaLightSettingsDrawer : PropertyDrawer + { + private SerializedProperty m_MaxAreaLights; + private SerializedProperty m_PreIntegratedFGD_GGXDisneyDiffuse; + private SerializedProperty m_PreIntegratedFGD_CharlieFabricLambert; + private SerializedProperty m_PreIntegratedFGD_Marschner; + + private string m_CachedPropertyPath; + + private void FindProperties(SerializedProperty property) + { + string currentPath = property.propertyPath; + + if (m_CachedPropertyPath != currentPath) + { + m_MaxAreaLights = property.FindPropertyRelative("maxAreaLights"); + m_PreIntegratedFGD_GGXDisneyDiffuse = property.FindPropertyRelative("preIntegratedFGD_GGXDisneyDiffuse"); + m_PreIntegratedFGD_CharlieFabricLambert = property.FindPropertyRelative("preIntegratedFGD_CharlieFabricLambert"); + m_PreIntegratedFGD_Marschner = property.FindPropertyRelative("preIntegratedFGD_Marschner"); + m_CachedPropertyPath = currentPath; + } + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + FindProperties(property); + + EditorGUI.BeginProperty(position, label, property); + + Rect foldoutRect = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight); + property.isExpanded = EditorGUI.Foldout(foldoutRect, property.isExpanded, label, true); + + if (!property.isExpanded) + { + EditorGUI.EndProperty(); + return; + } + + EditorGUI.indentLevel++; + float yOffset = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + + if (HasMissingShaders()) + { + property.serializedObject.Update(); + AutoFindShaders(); + property.serializedObject.ApplyModifiedProperties(); + } + + DrawProperty(m_MaxAreaLights, ref yOffset, position); + DrawProperty(m_PreIntegratedFGD_GGXDisneyDiffuse, ref yOffset, position); + DrawProperty(m_PreIntegratedFGD_CharlieFabricLambert, ref yOffset, position); + DrawProperty(m_PreIntegratedFGD_Marschner, ref yOffset, position); + + EditorGUI.indentLevel--; + EditorGUI.EndProperty(); + } + + private void AutoFindShaders() + { + const string packageShadersPath = "Packages/com.baddog.rendering.arealight/Shaders/"; + + TryLoadShader(m_PreIntegratedFGD_GGXDisneyDiffuse, packageShadersPath + "PreIntegratedFGD_GGXDisneyDiffuse.shader", "PreIntegratedFGD GGX Disney Diffuse"); + TryLoadShader(m_PreIntegratedFGD_CharlieFabricLambert, packageShadersPath + "PreIntegratedFGD_CharlieFabricLambert.shader", "PreIntegratedFGD Charlie Fabric Lambert"); + TryLoadShader(m_PreIntegratedFGD_Marschner, packageShadersPath + "PreIntegratedFGD_Marschner.shader", "PreIntegratedFGD Marschner"); + } + + private void TryLoadShader(SerializedProperty shaderRef, string path, string displayName) + { + if (shaderRef != null && shaderRef.objectReferenceValue == null) + { + var shader = AssetDatabase.LoadAssetAtPath(path); + if (shader != null) + { + shaderRef.objectReferenceValue = shader; + } + } + } + + private bool HasMissingShaders() + { + return (m_PreIntegratedFGD_GGXDisneyDiffuse != null && m_PreIntegratedFGD_GGXDisneyDiffuse.objectReferenceValue == null) || + (m_PreIntegratedFGD_CharlieFabricLambert != null && m_PreIntegratedFGD_CharlieFabricLambert.objectReferenceValue == null) || + (m_PreIntegratedFGD_Marschner != null && m_PreIntegratedFGD_Marschner.objectReferenceValue == null); + } + + private void DrawProperty(SerializedProperty prop, ref float yOffset, Rect position) + { + if (prop != null) + { + Rect rect = new Rect(position.x, position.y + yOffset, position.width, EditorGUI.GetPropertyHeight(prop)); + EditorGUI.PropertyField(rect, prop, true); + yOffset += EditorGUI.GetPropertyHeight(prop) + EditorGUIUtility.standardVerticalSpacing; + } + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + // Base height for foldout + float height = EditorGUIUtility.singleLineHeight; + + // If not expanded, return just the foldout height + if (!property.isExpanded) + { + return height; + } + + // Find properties to calculate height + FindProperties(property); + + // Add height for all properties using cached references + height += GetPropertyHeight(m_MaxAreaLights); + height += GetPropertyHeight(m_PreIntegratedFGD_GGXDisneyDiffuse); + height += GetPropertyHeight(m_PreIntegratedFGD_CharlieFabricLambert); + height += GetPropertyHeight(m_PreIntegratedFGD_Marschner); + + return height; + } + + private float GetPropertyHeight(SerializedProperty prop) + { + if (prop != null) + { + return EditorGUI.GetPropertyHeight(prop) + EditorGUIUtility.standardVerticalSpacing; + } + return 0f; + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/AreaLightSettingsDrawer.cs.meta b/Packages/com.baddog.rendering.arealight/Editor/AreaLightSettingsDrawer.cs.meta new file mode 100644 index 00000000..25a1e770 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/AreaLightSettingsDrawer.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6b01fe5d42b568a42864bdea19e82bbb +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/AreaLightSettingsDrawer.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor/AreaLightShadowSettingsDrawer.cs b/Packages/com.baddog.rendering.arealight/Editor/AreaLightShadowSettingsDrawer.cs new file mode 100644 index 00000000..2b4ccf61 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/AreaLightShadowSettingsDrawer.cs @@ -0,0 +1,136 @@ +using UnityEngine; +using UnityEditor; + +namespace BadDog.Rendering.AreaLight +{ + /// + /// Custom property drawer for AreaLightShadowSettings + /// + [CustomPropertyDrawer(typeof(AreaLightShadowSettings))] + public class AreaLightShadowSettingsDrawer : PropertyDrawer + { + private SerializedProperty m_ShadowAtlasResolution; + private SerializedProperty m_MaxShadowCastingLights; + private SerializedProperty m_ShadowFilter; + private SerializedProperty m_PcssShadowSoftness; + private SerializedProperty m_PcssBlockerSampleCount; + private SerializedProperty m_PcssFilterSampleCount; + + private string m_CachedPropertyPath; + + private void FindProperties(SerializedProperty property) + { + string currentPath = property.propertyPath; + + if (m_CachedPropertyPath != currentPath) + { + m_ShadowAtlasResolution = property.FindPropertyRelative("shadowAtlasResolution"); + m_MaxShadowCastingLights = property.FindPropertyRelative("maxShadowCastingLights"); + m_ShadowFilter = property.FindPropertyRelative("shadowFilter"); + m_PcssShadowSoftness = property.FindPropertyRelative("pcssShadowSoftness"); + m_PcssBlockerSampleCount = property.FindPropertyRelative("pcssBlockerSampleCount"); + m_PcssFilterSampleCount = property.FindPropertyRelative("pcssFilterSampleCount"); + m_CachedPropertyPath = currentPath; + } + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + FindProperties(property); + + EditorGUI.BeginProperty(position, label, property); + + Rect foldoutRect = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight); + property.isExpanded = EditorGUI.Foldout(foldoutRect, property.isExpanded, label, true); + + if (!property.isExpanded) + { + EditorGUI.EndProperty(); + return; + } + + EditorGUI.indentLevel++; + float yOffset = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + + DrawProperty(m_ShadowAtlasResolution, ref yOffset, position); + DrawProperty(m_MaxShadowCastingLights, ref yOffset, position); + + Rect shadowFilterRect = new Rect(position.x, position.y + yOffset, position.width, EditorGUIUtility.singleLineHeight); + EditorGUI.PropertyField(shadowFilterRect, m_ShadowFilter, new GUIContent("Shadow Filter")); + yOffset += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + + if (m_ShadowFilter != null) + { + AreaLightShadowSettings.BGAreaLightShadowMode shadowFilterMode = + (AreaLightShadowSettings.BGAreaLightShadowMode)m_ShadowFilter.enumValueIndex; + + if (shadowFilterMode == AreaLightShadowSettings.BGAreaLightShadowMode.PCSS) + { + Rect headerRect = new Rect(position.x, position.y + yOffset, position.width, EditorGUIUtility.singleLineHeight); + EditorGUI.LabelField(headerRect, "PCSS", EditorStyles.boldLabel); + yOffset += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + + DrawProperty(m_PcssShadowSoftness, ref yOffset, position); + DrawProperty(m_PcssBlockerSampleCount, ref yOffset, position); + DrawProperty(m_PcssFilterSampleCount, ref yOffset, position); + } + } + + EditorGUI.indentLevel--; + EditorGUI.EndProperty(); + } + + private void DrawProperty(SerializedProperty prop, ref float yOffset, Rect position) + { + if (prop != null) + { + Rect rect = new Rect(position.x, position.y + yOffset, position.width, EditorGUI.GetPropertyHeight(prop)); + EditorGUI.PropertyField(rect, prop, true); + yOffset += EditorGUI.GetPropertyHeight(prop) + EditorGUIUtility.standardVerticalSpacing; + } + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + float height = EditorGUIUtility.singleLineHeight; + + if (!property.isExpanded) + { + return height; + } + + FindProperties(property); + + height += GetPropertyHeight(m_ShadowAtlasResolution); + height += GetPropertyHeight(m_MaxShadowCastingLights); + + if (m_ShadowFilter != null) + { + height += EditorGUI.GetPropertyHeight(m_ShadowFilter) + EditorGUIUtility.standardVerticalSpacing; + + AreaLightShadowSettings.BGAreaLightShadowMode shadowFilterMode = + (AreaLightShadowSettings.BGAreaLightShadowMode)m_ShadowFilter.enumValueIndex; + + if (shadowFilterMode == AreaLightShadowSettings.BGAreaLightShadowMode.PCSS) + { + height += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + height += GetPropertyHeight(m_PcssShadowSoftness); + height += GetPropertyHeight(m_PcssBlockerSampleCount); + height += GetPropertyHeight(m_PcssFilterSampleCount); + } + } + + return height; + } + + private float GetPropertyHeight(SerializedProperty prop) + { + if (prop != null) + { + return EditorGUI.GetPropertyHeight(prop) + EditorGUIUtility.standardVerticalSpacing; + } + return 0f; + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/AreaLightShadowSettingsDrawer.cs.meta b/Packages/com.baddog.rendering.arealight/Editor/AreaLightShadowSettingsDrawer.cs.meta new file mode 100644 index 00000000..f4709174 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/AreaLightShadowSettingsDrawer.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f79bc32ed4d4c8d4ebc5ad6468522cc9 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/AreaLightShadowSettingsDrawer.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor/AreaLightingEditor.cs b/Packages/com.baddog.rendering.arealight/Editor/AreaLightingEditor.cs new file mode 100644 index 00000000..45109dba --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/AreaLightingEditor.cs @@ -0,0 +1,41 @@ +using UnityEngine; +using UnityEditor; + +namespace BadDog.Rendering.AreaLight +{ + /// + /// Custom editor for AreaLighting Renderer Feature + /// + [CustomEditor(typeof(AreaLighting))] + public class AreaLightingEditor : UnityEditor.Editor + { + private SerializedProperty m_LightSettingsProp; + private SerializedProperty m_ShadowSettingsProp; + + private void OnEnable() + { + m_LightSettingsProp = serializedObject.FindProperty("m_LightSettings"); + m_ShadowSettingsProp = serializedObject.FindProperty("m_ShadowSettings"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.PropertyField(serializedObject.FindProperty("m_Script")); + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_LightSettingsProp, new GUIContent("Light Settings"), true); + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_ShadowSettingsProp, new GUIContent("Shadow Settings"), true); + + serializedObject.ApplyModifiedProperties(); + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/AreaLightingEditor.cs.meta b/Packages/com.baddog.rendering.arealight/Editor/AreaLightingEditor.cs.meta new file mode 100644 index 00000000..ad053508 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/AreaLightingEditor.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2c1265e98fbe0b0419b0e22b927a87b2 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/AreaLightingEditor.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor/BGAreaLightEditor.cs b/Packages/com.baddog.rendering.arealight/Editor/BGAreaLightEditor.cs new file mode 100644 index 00000000..1e90ab77 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/BGAreaLightEditor.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using UnityEditor; +using UnityEngine.Rendering; +using BadDog.Rendering.AreaLight; + +namespace BadDog.Rendering.AreaLight.Editor +{ + [CustomEditor(typeof(BGAreaLight))] + [CanEditMultipleObjects] + public class BGAreaLightEditor : UnityEditor.Editor + { + private SerializedProperty m_CastShadows; + private SerializedProperty m_UseCustomShadow; + private SerializedProperty m_CustomShadowResolution; + private SerializedProperty m_ShadowCone; + private SerializedProperty m_ShadowStrength; + private SerializedProperty m_ShadowNormalBias; + private SerializedProperty m_ShadowDepthBias; + private SerializedProperty m_ShadowNearPlane; + private SerializedProperty m_RenderingLayerMask; + + private void OnEnable() + { + m_CastShadows = serializedObject.FindProperty("m_CastShadows"); + m_UseCustomShadow = serializedObject.FindProperty("m_UseCustomShadow"); + m_CustomShadowResolution = serializedObject.FindProperty("m_CustomShadowResolution"); + m_ShadowCone = serializedObject.FindProperty("m_ShadowCone"); + m_ShadowStrength = serializedObject.FindProperty("m_ShadowStrength"); + m_ShadowNormalBias = serializedObject.FindProperty("m_ShadowNormalBias"); + m_ShadowDepthBias = serializedObject.FindProperty("m_ShadowDepthBias"); + m_ShadowNearPlane = serializedObject.FindProperty("m_ShadowNearPlane"); + m_RenderingLayerMask = serializedObject.FindProperty("m_RenderingLayerMask"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + // Cast Shadows toggle + EditorGUILayout.PropertyField(m_CastShadows, new GUIContent("Cast Shadows", "Enable shadow casting for this area light.")); + + EditorGUILayout.Space(); + + // Disable all shadow settings if Cast Shadows is off + EditorGUI.BeginDisabledGroup(!m_CastShadows.boolValue); + + EditorGUILayout.PropertyField(m_UseCustomShadow, new GUIContent("Custom Shadow", "Enable custom shadow settings for this area light.")); + + EditorGUILayout.Space(); + + EditorGUI.indentLevel++; + + if (!m_UseCustomShadow.boolValue) + { + m_CustomShadowResolution.intValue = 0; + m_ShadowCone.floatValue = AreaShadowUtils.k_DefaultAreaLightShadowCone; + m_ShadowStrength.floatValue = 1f; + m_ShadowNormalBias.floatValue = 0.0f; + m_ShadowDepthBias.floatValue = 0.05f; + m_ShadowNearPlane.floatValue = 0.05f; + } + + EditorGUI.BeginDisabledGroup(!m_UseCustomShadow.boolValue); + EditorGUILayout.PropertyField(m_CustomShadowResolution); + EditorGUILayout.PropertyField(m_ShadowCone); + EditorGUILayout.PropertyField(m_ShadowStrength); + EditorGUILayout.PropertyField(m_ShadowNormalBias); + EditorGUILayout.PropertyField(m_ShadowDepthBias); + EditorGUILayout.PropertyField(m_ShadowNearPlane); + EditorGUI.EndDisabledGroup(); + + EditorGUI.indentLevel--; + + EditorGUI.EndDisabledGroup(); // End Cast Shadows disabled group + + EditorGUILayout.Space(); + DrawRenderingLayersField(); + + serializedObject.ApplyModifiedProperties(); + } + + private void DrawRenderingLayersField() + { + EditorGUI.showMixedValue = m_RenderingLayerMask.hasMultipleDifferentValues; + EditorGUI.BeginChangeCheck(); + uint mask = m_RenderingLayerMask.uintValue; + mask = EditorGUILayout.RenderingLayerMaskField( + new GUIContent("Rendering Layers", "Rendering Layer Mask used for area light lighting/shadow filtering."), + mask); + if (EditorGUI.EndChangeCheck()) + { + m_RenderingLayerMask.uintValue = mask; + } + EditorGUI.showMixedValue = false; + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/BGAreaLightEditor.cs.meta b/Packages/com.baddog.rendering.arealight/Editor/BGAreaLightEditor.cs.meta new file mode 100644 index 00000000..87c412bb --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/BGAreaLightEditor.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 184bbf0b5e653a2468797f461744672d +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/BGAreaLightEditor.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material.meta b/Packages/com.baddog.rendering.arealight/Editor/Material.meta new file mode 100644 index 00000000..fae162a6 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: daa9c22d3d6be47409943f017363acb4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight.meta b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight.meta new file mode 100644 index 00000000..ce80adca --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 803dead2a59b2d845ba66743a62b6d28 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTC.cs b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTC.cs new file mode 100644 index 00000000..3a7f66c8 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTC.cs @@ -0,0 +1,350 @@ +/* +Copyright(c) 2017, Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* If you use(or adapt) the source code in your own work, please include a + reference to the paper: + + Real-Time Polygonal-Light Shading with Linearly Transformed Cosines. + Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt. + ACM Transactions on Graphics (Proceedings of ACM SIGGRAPH 2016) 35(4), 2016. + Project page: https://eheitzresearch.wordpress.com/415-2/ + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +// Content adapted from https://github.com/selfshadow/ltc_code + +using System; +using UnityEngine; + +namespace BadDog.Rendering.AreaLight.LTC +{ + public struct Vec3 + { + public double x; + public double y; + public double z; + }; + + public class Vec3Utilities + { + public static double Length(Vec3 vec3) + { + return Math.Sqrt(vec3.x * vec3.x + vec3.y * vec3.y + vec3.z * vec3.z); + } + } + + public struct Matrix + { + public double m00; + public double m01; + public double m02; + public double m10; + public double m11; + public double m12; + public double m20; + public double m21; + public double m22; + }; + + public class MatrixUtilities + { + public static void Initialize(out Matrix m) + { + m.m00 = 0; + m.m01 = 0; + m.m02 = 0; + + m.m10 = 0; + m.m11 = 0; + m.m12 = 0; + + m.m20 = 0; + m.m21 = 0; + m.m22 = 0; + } + } + + public struct LTCData + { + // Lobe magnitude + public double magnitude; + // Average Schlick Fresnel term + public double fresnel; + // Parametric representation (used by the fitter only!) + public Vec3 X; + public Vec3 Y; + public Vec3 Z; + public double m11; + public double m22; + public double m13; + public Matrix M; + // Last fitting error + public double error; + // Last amount of iterations + public int iterationsCount; + // Runtime matrix representation + public Matrix invM; + // Determinant of the matrix + public double detM; + } + + public class LTCDataUtilities + { + static public void Initialize(out LTCData ltcData) + { + ltcData.magnitude = 1; + ltcData.fresnel = 1; + + ltcData.X.x = 1; + ltcData.X.y = 0; + ltcData.X.z = 0; + + ltcData.Y.x = 0; + ltcData.Y.y = 1; + ltcData.Y.z = 0; + + ltcData.Z.x = 0; + ltcData.Z.y = 0; + ltcData.Z.z = 1; + + ltcData.m11 = 1; + ltcData.m22 = 1; + ltcData.m13 = 0; + + ltcData.error = 0; + ltcData.iterationsCount = 0; + ltcData.detM = 0; + + MatrixUtilities.Initialize(out ltcData.M); + MatrixUtilities.Initialize(out ltcData.invM); + } + + static public double[] GetFittingParms(in LTCData ltcData) + { + double[] tempParams = new double[] + { + ltcData.m11, + ltcData.m22, + ltcData.m13, + }; + return tempParams; + } + + static public void SetFittingParms(ref LTCData ltcData, double[] parameters, bool isotropic) + { + float tempM11 = Mathf.Max((float)parameters[0], 1e-7f); + float tempM22 = Mathf.Max((float)parameters[1], 1e-7f); + float tempM13 = (float)parameters[2]; + + if (isotropic) + { + ltcData.m11 = tempM11; + ltcData.m22 = tempM11; + ltcData.m13 = 0.0f; + } + else + { + ltcData.m11 = tempM11; + ltcData.m22 = tempM22; + ltcData.m13 = tempM13; + } + + // Update the matrices + Update(ref ltcData); + } + + static public void ComputeAverageTerms(IBRDF brdf, ref Vector3 tsView, float roughness, int sampleCount, ref LTCData ltcData) + { + // Initialize the values for the accumulation + ltcData.magnitude = 0.0f; + ltcData.fresnel = 0.0f; + ltcData.Z.x = 0.0f; + ltcData.Z.y = 0.0f; + ltcData.Z.z = 0.0f; + ltcData.error = 0.0f; + + for (int j = 0; j < sampleCount; ++j) + { + for (int i = 0; i < sampleCount; ++i) + { + float U1 = (i + 0.5f) / sampleCount; + float U2 = (j + 0.5f) / sampleCount; + + // sample + Vector3 tsLight = Vector3.zero; + brdf.GetSamplingDirection(ref tsView, roughness, U1, U2, ref tsLight); + + // eval + double pdf; + double eval = brdf.Eval(ref tsView, ref tsLight, roughness, out pdf); + if (pdf == 0.0) + continue; + + Vector3 H = Vector3.Normalize(tsView + tsLight); + + // accumulate + double weight = eval / pdf; + if (double.IsNaN(weight)) + { + // Should not happen + } + + ltcData.magnitude += weight; + ltcData.fresnel += weight * Mathf.Pow(1 - Mathf.Max(0.0f, Vector3.Dot(tsView, H)), 5.0f); + ltcData.Z.x += weight * tsLight.x; + ltcData.Z.y += weight * tsLight.y; + ltcData.Z.z += weight * tsLight.z; + } + } + ltcData.magnitude /= (float)(sampleCount * sampleCount); + ltcData.fresnel /= (float)(sampleCount * sampleCount); + + // Finish building the average TBN orthogonal basis + // clear y component, which should be zero with isotropic BRDFs + ltcData.Z.y = 0.0f; + double length = Vec3Utilities.Length(ltcData.Z); + if (length > 0.0) + { + ltcData.Z.x /= length; + ltcData.Z.y /= length; + ltcData.Z.z /= length; + } + else + { + ltcData.Z.x = 0; + ltcData.Z.y = 0; + ltcData.Z.z = 1; + } + + ltcData.X.x = ltcData.Z.z; + ltcData.X.y = 0; + ltcData.X.z = -ltcData.Z.x; + + ltcData.Y.x = 0; + ltcData.Y.y = 1; + ltcData.Y.z = 0; + } + + // Heitz & Hill Method => Fit M, inverse to obtain target matrix + static public void Update(ref LTCData ltcData) + { + // Build the source matrix M for which we're exploring the parameter space + ltcData.M.m00 = ltcData.m11 * ltcData.X.x; + ltcData.M.m01 = ltcData.m22 * ltcData.Y.x; + ltcData.M.m02 = ltcData.m13 * ltcData.X.x + ltcData.Z.x; + + ltcData.M.m10 = ltcData.m11 * ltcData.X.y; + ltcData.M.m11 = ltcData.m22 * ltcData.Y.y; + ltcData.M.m12 = ltcData.m13 * ltcData.X.y + ltcData.Z.y; + + ltcData.M.m20 = ltcData.m11 * ltcData.X.z; + ltcData.M.m21 = ltcData.m22 * ltcData.Y.z; + ltcData.M.m22 = ltcData.m13 * ltcData.X.z + ltcData.Z.z; + + // Build the final matrix required at runtime for LTC evaluation + ltcData.detM = Invert(in ltcData.M, ref ltcData.invM); + if (ltcData.detM < 0.0) + { + // SHOULD NEVER HAPPEN + } + + // Kill useless coeffs in matrix + ltcData.invM.m01 = 0; // Row 0 - Col 1 + ltcData.invM.m10 = 0; // Row 1 - Col 0 + ltcData.invM.m12 = 0; // Row 1 - Col 2 + ltcData.invM.m21 = 0; // Row 2 - Col 1 + } + + static double Invert(in Matrix _A, ref Matrix _B) + { + double det = (_A.m00 * _A.m11 * _A.m22 + _A.m01 * _A.m12 * _A.m20 + _A.m02 * _A.m10 * _A.m21) + - (_A.m20 * _A.m11 * _A.m02 + _A.m21 * _A.m12 * _A.m00 + _A.m22 * _A.m10 * _A.m01); + if (Math.Abs(det) < double.Epsilon) + { + // SHOULD NEVER HAPPEN + } + + double invDet = 1.0 / det; + + _B.m00 = +(_A.m11 * _A.m22 - _A.m21 * _A.m12) * invDet; + _B.m10 = -(_A.m10 * _A.m22 - _A.m20 * _A.m12) * invDet; + _B.m20 = +(_A.m10 * _A.m21 - _A.m20 * _A.m11) * invDet; + + _B.m01 = -(_A.m01 * _A.m22 - _A.m21 * _A.m02) * invDet; + _B.m11 = +(_A.m00 * _A.m22 - _A.m20 * _A.m02) * invDet; + _B.m21 = -(_A.m00 * _A.m21 - _A.m20 * _A.m01) * invDet; + + _B.m02 = +(_A.m01 * _A.m12 - _A.m11 * _A.m02) * invDet; + _B.m12 = -(_A.m00 * _A.m12 - _A.m10 * _A.m02) * invDet; + _B.m22 = +(_A.m00 * _A.m11 - _A.m10 * _A.m01) * invDet; + + return det; + } + + public static void GetSamplingDirection(LTCData ltcData, float _U1, float _U2, ref Vector3 _direction) + { + // float theta = Mathf.Asin(Mathf.Sqrt(_U1)); + float theta = Mathf.Acos(Mathf.Sqrt(_U1)); + float phi = 2.0f * Mathf.PI * _U2; + Vector3 D = new Vector3(Mathf.Sin(theta) * Mathf.Cos(phi), Mathf.Sin(theta) * Mathf.Sin(phi), Mathf.Cos(theta)); + + Transform(ltcData.M, D, ref _direction); + + _direction.Normalize(); + } + + public static double Eval(LTCData ltcData, ref Vector3 _tsLight) + { + // Transform into original distribution space + Vector3 Loriginal = Vector3.zero; + Transform(ltcData.invM, _tsLight, ref Loriginal); + float l = Loriginal.magnitude; + Loriginal /= l; + + // Estimate original distribution (a clamped cosine lobe) + double D = Math.Max(0.0, Loriginal.z) / Math.PI; + + // Compute the Jacobian, roundDwo / roundDw + double jacobian = 1.0 / (ltcData.detM * l * l * l); + + // Scale distribution + return ltcData.magnitude * D * jacobian; + } + + public static void Transform(Matrix a, Vector3 b, ref Vector3 c) + { + // Annoying GLM library details: + // return vec3( + // m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, + // m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, (thank God, they didn't change the math!) + // m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z); + + + c.x = (float)(b.x * a.m00 + b.y * a.m01 + b.z * a.m02); + c.y = (float)(b.x * a.m10 + b.y * a.m11 + b.z * a.m12); + c.z = (float)(b.x * a.m20 + b.y * a.m21 + b.z * a.m22); + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTC.cs.meta b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTC.cs.meta new file mode 100644 index 00000000..a5abd3ce --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTC.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c098ee5b80917ce448a1020af0828fcf +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTC.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGenerator.cs b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGenerator.cs new file mode 100644 index 00000000..212f0841 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGenerator.cs @@ -0,0 +1,407 @@ +using System; +using System.IO; +using Unity.Collections; +using Unity.Jobs; +using UnityEngine; +using BadDog.Rendering.AreaLight; + +namespace BadDog.Rendering.AreaLight.LTC +{ + public class LTCTableGenerator + { + public enum LTCTableParametrization + { + CosTheta, + Theta + } + + // Minimal roughness to avoid singularities + const float k_MinRoughness = 0.001f; + const int k_MaxIterations = 100; + const float k_FitExploreDelta = 0.05f; + const float k_Tolerance = 1e-5f; + + // Holds all the information required to achieve a LTC table generation + public class BRDFGenerator + { + public Type type; + public IBRDF brdf; + public LTCTableParametrization parametrization; + public bool shouldGenerate; + public int tableResolution; + public int sampleCount; + public string outputDir; + + public BRDFGenerator(Type targetType, int tableResolution, int sampleCount, LTCTableParametrization parametrization, string outputDir) + { + this.type = targetType; + this.brdf = (IBRDF)Activator.CreateInstance(targetType); + this.shouldGenerate = true; + this.tableResolution = tableResolution; + this.sampleCount = sampleCount; + this.outputDir = outputDir; + this.parametrization = parametrization; + } + }; + + struct BRDFGeneratorJob : IJobParallelFor + { + [NativeDisableParallelForRestriction] + public NativeArray ltcData; + public int tableResolution; + public int sampleCount; + public LTCLightingModel lightingModel; + public LTCTableParametrization parametrization; + + public void Fit(int roughnessIndex, int thetaIndex, NelderMead fitter, IBRDF brdf) + { + // Compute the roughness and cosTheta for this sample + float roughness, cosTheta; + GetRoughnessAndAngle(roughnessIndex, thetaIndex, tableResolution, parametrization, out roughness, out cosTheta); + + // Compute the matching view vector + Vector3 tsView = new Vector3(Mathf.Sqrt(1 - cosTheta * cosTheta), 0, cosTheta); + + // Compute BRDF's magnitude and average direction + LTCData currentLTCData; + LTCDataUtilities.Initialize(out currentLTCData); + LTCDataUtilities.ComputeAverageTerms(brdf, ref tsView, roughness, sampleCount, ref currentLTCData); + + // Otherwise use average direction as Z vector + int previousLTCDataIndex = (thetaIndex - 1) * tableResolution + roughnessIndex; + LTCData previousLTC = ltcData[previousLTCDataIndex]; + currentLTCData.m11 = previousLTC.m11; + currentLTCData.m22 = previousLTC.m22; + currentLTCData.m13 = previousLTC.m13; + + LTCDataUtilities.Update(ref currentLTCData); + + // Find best-fit LTC lobe (scale, alphax, alphay) + if (currentLTCData.magnitude > 1e-6) + { + double[] startFit = LTCDataUtilities.GetFittingParms(in currentLTCData); + double[] resultFit = new double[startFit.Length]; + + int localSampleCount = sampleCount; + currentLTCData.error = (float)fitter.FindFit(resultFit, startFit, (double)k_FitExploreDelta, (double)k_Tolerance, k_MaxIterations, (double[] parameters) => + { + LTCDataUtilities.SetFittingParms(ref currentLTCData, parameters, false); + return ComputeError(currentLTCData, brdf, localSampleCount, ref tsView, roughness); + }); + currentLTCData.iterationsCount = fitter.m_lastIterationsCount; + + // Update LTC with final best fitting values + LTCDataUtilities.SetFittingParms(ref currentLTCData, resultFit, false); + } + + // Store new valid result + int currentLTCDataIndex = thetaIndex * tableResolution + roughnessIndex; + ltcData[currentLTCDataIndex] = currentLTCData; + } + + public void Execute(int roughnessIndex) + { + // Create the fitter + NelderMead fitter = new NelderMead(3); + IBRDF brdf = LTCAreaLight.GetBRDFInterface(lightingModel); + // Compute all the missing LTCData (0 of the first line is already done) + for (int thetaIndex = 1; thetaIndex < tableResolution; thetaIndex++) + { + Fit(roughnessIndex, thetaIndex, fitter, brdf); + } + } + } + + static void GetRoughnessAndAngle(int roughnessIndex, int thetaIndex, int tableResolution, LTCTableParametrization parametrization, out float alpha, out float cosTheta) + { + float perceptualRoughness = (float)roughnessIndex / (tableResolution - 1); + alpha = Mathf.Max(k_MinRoughness, perceptualRoughness * perceptualRoughness); + + if (parametrization == LTCTableParametrization.CosTheta) + { + // Parameterised by sqrt(1 - cos(theta)) + float v = (float)thetaIndex / (tableResolution - 1); + cosTheta = 1.0f - v * v; + // Clamp to cos(1.57) + cosTheta = Mathf.Max(3.7540224885647058065387021283285e-4f, cosTheta); + } + else + { + float theta = Mathf.Min(1.57f, thetaIndex / (float)(tableResolution - 1) * 1.57079f); + cosTheta = Mathf.Cos(theta); + } + } + + static public void FitInitial(BRDFGenerator brdfGenerator, NelderMead fitter, NativeArray ltcData, int roughnessIndex, int thetaIndex) + { + // Compute the roughness and cosTheta for this sample + float roughness, cosTheta; + GetRoughnessAndAngle(roughnessIndex, thetaIndex, brdfGenerator.tableResolution, brdfGenerator.parametrization, out roughness, out cosTheta); + + // Compute the matching view vector + Vector3 tsView = new Vector3(Mathf.Sqrt(1 - cosTheta * cosTheta), 0, cosTheta); + + // Compute BRDF's magnitude and average direction + LTCData currentLTCData; + LTCDataUtilities.Initialize(out currentLTCData); + LTCDataUtilities.ComputeAverageTerms(brdfGenerator.brdf, ref tsView, roughness, brdfGenerator.sampleCount, ref currentLTCData); + + // if theta == 0 the lobe is rotationally symmetric and aligned with Z = (0 0 1) + currentLTCData.X.x = 1; + currentLTCData.X.y = 0; + currentLTCData.X.z = 0; + + currentLTCData.Y.x = 0; + currentLTCData.Y.y = 1; + currentLTCData.Y.z = 0; + + currentLTCData.Z.x = 0; + currentLTCData.Z.y = 0; + currentLTCData.Z.z = 1; + + if (roughnessIndex == (brdfGenerator.tableResolution - 1)) + { + // roughness = 1 or no available result + currentLTCData.m11 = 1.0f; + currentLTCData.m22 = 1.0f; + } + else + { + // init with roughness of previous fit + LTCData previousLTC = ltcData[roughnessIndex + 1]; + currentLTCData.m11 = previousLTC.m11; + currentLTCData.m22 = previousLTC.m22; + } + currentLTCData.m13 = 0; + + LTCDataUtilities.Update(ref currentLTCData); + + // Find best-fit LTC lobe (scale, alphax, alphay) + if (currentLTCData.magnitude > 1e-6) + { + double[] startFit = LTCDataUtilities.GetFittingParms(in currentLTCData); + double[] resultFit = new double[startFit.Length]; + + currentLTCData.error = (float)fitter.FindFit(resultFit, startFit, k_FitExploreDelta, k_Tolerance, k_MaxIterations, (double[] parameters) => + { + LTCDataUtilities.SetFittingParms(ref currentLTCData, parameters, true); + return ComputeError(currentLTCData, brdfGenerator.brdf, brdfGenerator.sampleCount, ref tsView, roughness); + }); + currentLTCData.iterationsCount = fitter.m_lastIterationsCount; + + // Update LTC with final best fitting values + LTCDataUtilities.SetFittingParms(ref currentLTCData, resultFit, true); + } + + // Store new valid result + ltcData[roughnessIndex] = currentLTCData; + } + + // Compute the error between the BRDF and the LTC using Multiple Importance Sampling + static float ComputeError(LTCData ltcData, IBRDF brdf, int sampleCount, ref Vector3 _tsView, float _alpha) + { + Vector3 tsLight = Vector3.zero; + + double pdf_BRDF, eval_BRDF; + double pdf_LTC, eval_LTC; + + float sumError = 0.0f; + for (int j = 0; j < sampleCount; ++j) + { + for (int i = 0; i < sampleCount; ++i) + { + float U1 = (i + 0.5f) / sampleCount; + float U2 = (j + 0.5f) / sampleCount; + + // importance sample LTC + { + // sample + LTCDataUtilities.GetSamplingDirection(ltcData, U1, U2, ref tsLight); + + eval_BRDF = brdf.Eval(ref _tsView, ref tsLight, _alpha, out pdf_BRDF); + eval_LTC = (float)LTCDataUtilities.Eval(ltcData, ref tsLight); + pdf_LTC = eval_LTC / ltcData.magnitude; + + // error with MIS weight + float error = Mathf.Abs((float)(eval_BRDF - eval_LTC)); + error = error * error * error; // Use L3 norm to favor large values over smaller ones + if (error != 0.0f) + error /= (float)pdf_LTC + (float)pdf_BRDF; + + if (double.IsNaN(error)) + { + // SHOULD NEVER HAPPEN + } + sumError += error; + } + + // importance sample BRDF + { + // sample + brdf.GetSamplingDirection(ref _tsView, _alpha, U1, U2, ref tsLight); + + // error with MIS weight + eval_BRDF = brdf.Eval(ref _tsView, ref tsLight, _alpha, out pdf_BRDF); + eval_LTC = LTCDataUtilities.Eval(ltcData, ref tsLight); + pdf_LTC = eval_LTC / ltcData.magnitude; + float error = Mathf.Abs((float)(eval_BRDF - eval_LTC)); + error = error * error * error; // Use L3 norm to favor large values over smaller ones + + if (error != 0.0f) + error /= (float)pdf_LTC + (float)pdf_BRDF; + + if (double.IsNaN(error)) + { + // SHOULD NEVER HAPPEN + } + sumError += error; + } + } + } + + return sumError / ((float)sampleCount * sampleCount); + } + + static public void ExecuteFittingJob(BRDFGenerator brdfGenerator, bool parallel) + { + // When dispatching the table on the two dimensions (X, Y) a set of constrains apply: + // - Every element (Xi, Yi) has a dependency on the previous one on the same column. + // - The first element of a column has a dependency on the first element of the previous column. + // - The element (0,0) doesn't have a dependency on any element. + // To be able to dispatch this as a job, we need to compute the first line linearly and then dispatch every column starting from the second element. + + using (var ltcData = new NativeArray(brdfGenerator.tableResolution * brdfGenerator.tableResolution, Allocator.TempJob)) + { + // Create the fitter + NelderMead fitter = new NelderMead(3); + + Debug.Log("Running fitting job on the " + brdfGenerator.type.Name + " BRDF."); + + // Fill the first line + for (int roughnessIndex = brdfGenerator.tableResolution - 1; roughnessIndex >= 0; roughnessIndex--) + FitInitial(brdfGenerator, fitter, ltcData, roughnessIndex, 0); + + BRDFGeneratorJob brdfJob = new BRDFGeneratorJob + { + ltcData = ltcData, + tableResolution = brdfGenerator.tableResolution, + sampleCount = brdfGenerator.sampleCount, + lightingModel = brdfGenerator.brdf.GetLightingModel(), + parametrization = brdfGenerator.parametrization, + }; + + if (parallel) + { + // Create, run the job and wait for its completion. + JobHandle fittingJob = brdfJob.Schedule(brdfGenerator.tableResolution, 1); + fittingJob.Complete(); + } + else + { + for (int i = 0; i < brdfGenerator.tableResolution; ++i) + { + brdfJob.Execute(i); + } + } + + Debug.Log("Fitting done. Exporting the file"); + + // Export the table to disk + string BRDFName = brdfGenerator.type.Name; + FileInfo CSharpFileName = new FileInfo(Path.Combine(brdfGenerator.outputDir, "LtcData." + BRDFName + ".cs")); + ExportToCSharp(ltcData, brdfGenerator.tableResolution, brdfGenerator.parametrization, CSharpFileName, BRDFName); + } + } + + static void ExportToCSharp(NativeArray ltcDataArray, int tableResolution, LTCTableParametrization parametrization, FileInfo _CSharpFileName, string brdfName) + { + string sourceCode = ""; + + LTCData ltcData; + ltcData.magnitude = 0.0f; + + string tableName = "s_LtcMatrixData_" + brdfName; + + sourceCode += "using UnityEngine;\n" + + "using System;\n" + + "\n" + + "namespace BadDog.Rendering.AreaLight\n" + + "{\n" + + " public partial class LTCAreaLight\n" + + " {\n" + + " // [GENERATED CONTENT " + DateTime.Now.ToString("dd MMM yyyy HH:mm:ss") + "]\n" + + " // Table contains 3x3 matrix coefficients of M^-1 for the fitting of the " + brdfName + " BRDF using the LTC technique\n" + + " // Only the 0,2,4,6 of the 3x3 coefficients are emitted, and they are encoded into FP16\n" + + " // From \"Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\" 2016 (https://eheitzresearch.wordpress.com/415-2/)\n" + + " //\n" + + " // The table is accessed via LTCAreaLight." + tableName + "[ + 64 * ] // Theta values are along the Y axis, Roughness values are along the X axis\n" + + " // • roughness = ( / " + (tableResolution - 1) + " )^2 (the table is indexed by perceptual roughness)\n"; + if (parametrization == LTCTableParametrization.CosTheta) + sourceCode += " // • cosTheta = 1 - ( / " + (tableResolution - 1) + " )^2\n"; + else + sourceCode += " // • theta = ( / " + (tableResolution - 1) + " )\n"; + sourceCode += " //\n" + + " public static ushort[] " + tableName + " = new ushort[" + tableResolution + " * " + tableResolution + " * 4]\n" + + " {"; + + string lotsOfSpaces = " "; + float alpha, cosTheta; + for (int thetaIndex = 0; thetaIndex < tableResolution; thetaIndex++) + { + GetRoughnessAndAngle(0, thetaIndex, tableResolution, parametrization, out alpha, out cosTheta); + sourceCode += "\n"; + if (parametrization == LTCTableParametrization.CosTheta) + sourceCode += " // Cos (theta) = " + cosTheta + "\n"; + else + sourceCode += " // Theta = " + Mathf.Acos(cosTheta) + "\n"; + + for (int roughnessIndex = 0; roughnessIndex < tableResolution; roughnessIndex++) + { + // Compute the current ltc data index + int currentIndexData = roughnessIndex + thetaIndex * tableResolution; + ltcData = ltcDataArray[currentIndexData]; + + GetRoughnessAndAngle(roughnessIndex, thetaIndex, tableResolution, parametrization, out alpha, out cosTheta); + + // Export the matrix as a list of 3x3 doubles, columns first. Only emit 0,2,4,6 elements of the list + // since others are zeroes or ones. + double factor = 1.0 / ltcData.invM.m22; + + float val0 = (float) (factor * ltcData.invM.m00); + float val2 = (float) (factor * ltcData.invM.m20); + float val4 = (float) (factor * ltcData.invM.m11); + float val6 = (float) (factor * ltcData.invM.m02); + + float fp16Max = 65504.0f; + Debug.Assert(Mathf.Abs(val0) <= fp16Max, "This FP32 value is too large to be converted to FP16."); + Debug.Assert(Mathf.Abs(val2) <= fp16Max, "This FP32 value is too large to be converted to FP16."); + Debug.Assert(Mathf.Abs(val4) <= fp16Max, "This FP32 value is too large to be converted to FP16."); + Debug.Assert(Mathf.Abs(val6) <= fp16Max, "This FP32 value is too large to be converted to FP16."); + + string line = $" {Mathf.FloatToHalf(val0)}, {Mathf.FloatToHalf(val2)}, {Mathf.FloatToHalf(val4)}, {Mathf.FloatToHalf(val6)},"; + if (line.Length < 45) + line += lotsOfSpaces.Substring(lotsOfSpaces.Length - (45 - line.Length)); // Pad with spaces + sourceCode += line; + sourceCode += "// alpha = " + alpha + "\n"; + } + } + + sourceCode += " };\n"; + + // End comment + sourceCode += "\n"; + sourceCode += " // NOTE: Formerly, we needed to also export and create a table for the BRDF's amplitude factor + fresnel coefficient\n"; + sourceCode += " // but it turns out these 2 factors are actually already precomputed and available in the FGD table corresponding\n"; + sourceCode += " // to the " + brdfName + " BRDF, therefore they are no longer exported...\n"; + + // Close class and namespace + sourceCode += " }\n"; + sourceCode += "}\n"; + + // Write content + using (StreamWriter W = _CSharpFileName.CreateText()) + W.Write(sourceCode); + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGenerator.cs.meta b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGenerator.cs.meta new file mode 100644 index 00000000..46305d8c --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGenerator.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e427d3c389607064499b1c65b15a13a1 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGenerator.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGeneratorEditor.cs b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGeneratorEditor.cs new file mode 100644 index 00000000..7e9f8fbd --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGeneratorEditor.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using UnityEditor; +using System.Linq; +using BadDog.Rendering.AreaLight.LTC; + +namespace BadDog.Rendering.AreaLight.LTC +{ + public class LTCTableGeneratorEditor : EditorWindow + { + // The output directory for the tool + static string k_OutputDirectory = "./Assets/Generated/LTCTables/"; + + // Generated table's resolutions + const int k_TableResolution = 64; + + // Sample count that will be used for the generation + const int k_DefaultSampleCount = 32; + + // The array of lighting models that we need to generate + LTCTableGenerator.BRDFGenerator[] m_BRDFGeneratorArray = null; + + // Sample count that will be used for the generation + int m_SampleCount = 32; + + // Flag to generate in parallel + bool m_ParallelExecution = true; + + // Defines which parametrization should be use when generating the tables + LTCTableGenerator.LTCTableParametrization m_Parametrization; + + static Type[] ListAllBRDFTypes() + { + // This function lists all the classes that implement the interface IBRDF + List types = new List(); + Type searchInterface = typeof(IBRDF); + return AppDomain.CurrentDomain.GetAssemblies() + .SelectMany(s => s.GetTypes()) + .Where(p => searchInterface.IsAssignableFrom(p) && !p.IsInterface).ToArray(); + } + + static void BuildBRDFGenerators(ref LTCTableGenerator.BRDFGenerator[] BRDFGeneratorArray) + { + // Collect all the BRDFs that we need to generate + Type[] brdfTypes = ListAllBRDFTypes(); + + if (brdfTypes.Length != 0) + { + BRDFGeneratorArray = new LTCTableGenerator.BRDFGenerator[brdfTypes.Length]; + for (int i = 0; i < brdfTypes.Length; ++i) + { + BRDFGeneratorArray[i] = new LTCTableGenerator.BRDFGenerator(brdfTypes[i], k_TableResolution, k_DefaultSampleCount, LTCTableGenerator.LTCTableParametrization.CosTheta, k_OutputDirectory); + } + } + } + + [MenuItem("BadDog/Rendering/Area Light/Generate LTC Tables")] + private static void Init() + { + // Create the window + LTCTableGeneratorEditor window = (LTCTableGeneratorEditor)EditorWindow.GetWindow(typeof(LTCTableGeneratorEditor)); + + // Name the window + window.titleContent.text = "LTC Tables Generator"; + + // Build the generators that we will be executing later + BuildBRDFGenerators(ref window.m_BRDFGeneratorArray); + + // Display the window + window.Show(); + } + + private void OnGUI() + { + if (m_BRDFGeneratorArray == null) + BuildBRDFGenerators(ref m_BRDFGeneratorArray); + + EditorGUILayout.LabelField("Recognized BRDF Types: " + m_BRDFGeneratorArray.Length); + + EditorGUILayout.Separator(); + + // Display the generators and their toggles + int numActiveGenerators = 0; + for (int i = 0; i < m_BRDFGeneratorArray.Length; ++i) + { + LTCTableGenerator.BRDFGenerator currentGenerator = m_BRDFGeneratorArray[i]; + currentGenerator.shouldGenerate = EditorGUILayout.Toggle(currentGenerator.type.Name, currentGenerator.shouldGenerate); + if (currentGenerator.shouldGenerate) + numActiveGenerators++; + EditorGUILayout.Space(); + } + + m_ParallelExecution = EditorGUILayout.Toggle("Parallel", m_ParallelExecution); + m_SampleCount = EditorGUILayout.IntField("Sample Count", m_SampleCount); + m_Parametrization = (LTCTableGenerator.LTCTableParametrization)EditorGUILayout.EnumPopup("Theta parametrization", m_Parametrization); + + EditorGUILayout.Separator(); + + if (m_BRDFGeneratorArray.Length > 1) + { + EditorGUILayout.BeginHorizontal(); + + if (GUILayout.Button(new GUIContent("Select All", ""), EditorStyles.miniButton, GUILayout.ExpandWidth(false))) + { + for (int i = 0; i < m_BRDFGeneratorArray.Length; ++i) + { + m_BRDFGeneratorArray[i].shouldGenerate = true; + } + } + if (GUILayout.Button(new GUIContent("Select None", ""), EditorStyles.miniButton, GUILayout.ExpandWidth(false))) + { + for (int i = 0; i < m_BRDFGeneratorArray.Length; ++i) + { + m_BRDFGeneratorArray[i].shouldGenerate = false; + } + } + EditorGUILayout.EndHorizontal(); + } + + if (numActiveGenerators > 0) + { + EditorGUILayout.Separator(); + EditorGUILayout.Space(); + if (GUILayout.Button(new GUIContent("Generate LTC Tables", ""))) + { + // Make sure target directory exists before creating any file! + DirectoryInfo outputDir = new DirectoryInfo(k_OutputDirectory); + + if (!outputDir.Exists) + outputDir.Create(); + + for (int i = 0; i < m_BRDFGeneratorArray.Length; ++i) + { + EditorUtility.DisplayProgressBar("Generating LTC Tables", $"Generating {m_BRDFGeneratorArray[i].type.Name}", (float)i / m_BRDFGeneratorArray.Length); + if (m_BRDFGeneratorArray[i].shouldGenerate) + { + m_BRDFGeneratorArray[i].sampleCount = m_SampleCount; + m_BRDFGeneratorArray[i].parametrization = m_Parametrization; + LTCTableGenerator.ExecuteFittingJob(m_BRDFGeneratorArray[i], m_ParallelExecution); + } + } + EditorUtility.ClearProgressBar(); + + AssetDatabase.Refresh(); + } + } + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGeneratorEditor.cs.meta b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGeneratorEditor.cs.meta new file mode 100644 index 00000000..dbf70f39 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGeneratorEditor.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 743bf0aadd3301645862ae4e8ab675ce +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/LTCTableGeneratorEditor.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/NelderMead.cs b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/NelderMead.cs new file mode 100644 index 00000000..ab26173b --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/NelderMead.cs @@ -0,0 +1,166 @@ +using System; + +namespace BadDog.Rendering.AreaLight.LTC +{ + /// + /// Downhill simplex solver: + /// http://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method#One_possible_variation_of_the_NM_algorithm + /// Using the termination criterion from Numerical Recipes in C++ (3rd Ed.) + /// + public class NelderMead + { + // standard coefficients from Nelder-Mead + const double reflect = 1.0; + const double expand = 2.0; + const double contract = 0.5; + const double shrink = 0.5; + + int DIM; + int NB_POINTS; + double[][] s; + double[] f; + + public int m_lastIterationsCount; + + public delegate double ObjectiveFunctionDelegate(double[] _parameters); + + public NelderMead(int _dimensions) + { + DIM = _dimensions; + NB_POINTS = _dimensions + 1; + s = new double[NB_POINTS][]; + for (int i = 0; i < NB_POINTS; i++) + s[i] = new double[_dimensions]; + f = new double[NB_POINTS]; + } + + public double FindFit(double[] _pmin, double[] _start, double _delta, double _tolerance, int _maxIterations, ObjectiveFunctionDelegate _objectiveFn) + { + // initialise simplex + Mov(s[0], _start); + for (int i = 1; i < NB_POINTS; i++) + { + Mov(s[i], _start); + s[i][i - 1] += _delta; + } + + // evaluate function at each point on simplex + for (int i = 0; i < NB_POINTS; i++) + f[i] = _objectiveFn(s[i]); + + double[] o = new double[DIM]; // Centroid + double[] r = new double[DIM]; // Reflection + double[] c = new double[DIM]; // Contraction + double[] e = new double[DIM]; // Expansion + + int lo = 0, hi, nh; + for (m_lastIterationsCount = 0; m_lastIterationsCount < _maxIterations; m_lastIterationsCount++) + { + // find lowest, highest and next highest + lo = hi = nh = 0; + for (int i = 1; i < NB_POINTS; i++) + { + if (f[i] < f[lo]) + lo = i; + if (f[i] > f[hi]) + { + nh = hi; + hi = i; + } + else if (f[i] > f[nh]) + nh = i; + } + + // stop if we've reached the required tolerance level + double a = Math.Abs(f[lo]); + double b = Math.Abs(f[hi]); + if (2.0 * Math.Abs(a - b) < (a + b) * _tolerance) + break; + + // compute centroid (excluding the worst point) + Set(o, 0.0f); + for (int i = 0; i < NB_POINTS; i++) + { + if (i == hi) + continue; + Add(o, s[i]); + } + + for (int i = 0; i < DIM; i++) + o[i] /= DIM; + + // reflection + for (int i = 0; i < DIM; i++) + r[i] = o[i] + reflect * (o[i] - s[hi][i]); + + double fr = _objectiveFn(r); + if (fr < f[nh]) + { + if (fr < f[lo]) + { + // expansion + for (int i = 0; i < DIM; i++) + e[i] = o[i] + expand * (o[i] - s[hi][i]); + + double fe = _objectiveFn(e); + if (fe < fr) + { + Mov(s[hi], e); + f[hi] = fe; + continue; + } + } + + Mov(s[hi], r); + f[hi] = fr; + continue; + } + + // contraction + for (int i = 0; i < DIM; i++) + c[i] = o[i] - contract * (o[i] - s[hi][i]); + + double fc = _objectiveFn(c); + if (fc < f[hi]) + { + Mov(s[hi], c); + f[hi] = fc; + continue; + } + + // reduction + for (int k = 0; k < NB_POINTS; k++) + { + if (k == lo) + continue; + for (int i = 0; i < DIM; i++) + s[k][i] = s[lo][i] + shrink * (s[k][i] - s[lo][i]); + f[k] = _objectiveFn(s[k]); + } + } + + // return best point and its value + Mov(_pmin, s[lo]); + return f[lo]; + } + + void Mov(double[] r, double[] v) + { + for (int i = 0; i < DIM; ++i) + r[i] = v[i]; + } + + void Set(double[] r, double v) + { + for (int i = 0; i < DIM; ++i) + r[i] = v; + } + + void Add(double[] r, double[] v) + { + for (int i = 0; i < DIM; ++i) + r[i] += v[i]; + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/NelderMead.cs.meta b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/NelderMead.cs.meta new file mode 100644 index 00000000..93b85916 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/NelderMead.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4e8c2e3b39598a649b575f912598799f +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/Material/LTCAreaLight/NelderMead.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD.meta b/Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD.meta new file mode 100644 index 00000000..6057edc7 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 488ad7a3d1fd10546a26673c51f021ee +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD/PreIntegratedFGDWindow.cs b/Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD/PreIntegratedFGDWindow.cs new file mode 100644 index 00000000..5c485555 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD/PreIntegratedFGDWindow.cs @@ -0,0 +1,222 @@ +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; +using UnityEditor; +using UnityEngine.Rendering; +using UnityEngine.Experimental.Rendering; + +namespace BadDog.Rendering.AreaLight.Editor +{ + public class PreIntegratedFGDWindow : EditorWindow + { + private PreIntegratedFGD.FGDIndex m_FGDIndex = PreIntegratedFGD.FGDIndex.FGD_GGXAndDisneyDiffuse; + private RenderTexture m_PreviewTexture = null; + private bool m_IsInitialized = false; + private PreIntegratedFGD.FGDIndex m_LastFGDIndex = PreIntegratedFGD.FGDIndex.FGD_GGXAndDisneyDiffuse; + + [MenuItem("BadDog/Rendering/Area Light/Pre-Integrated FGD Preview")] + private static void ShowWindow() + { + var window = GetWindow("Pre-Integrated FGD Preview", true); + window.minSize = new Vector2(512, 512); + window.Show(); + } + + private void OnEnable() + { + InitializePreview(); + } + + private void OnDisable() + { + CleanupPreview(); + } + + private void OnGUI() + { + EditorGUILayout.Space(); + DrawOptions(); + + EditorGUILayout.Space(); + DrawPreview(); + } + + private void DrawOptions() + { + EditorGUILayout.BeginVertical("box"); + EditorGUILayout.LabelField("Options", EditorStyles.boldLabel); + + // Ensure we don't select Count + if (m_FGDIndex == PreIntegratedFGD.FGDIndex.Count) + { + m_FGDIndex = PreIntegratedFGD.FGDIndex.FGD_GGXAndDisneyDiffuse; + } + + // Create enum without Count and Marschner (not implemented) + var validValues = System.Enum.GetValues(typeof(PreIntegratedFGD.FGDIndex)); + var displayNames = new System.Collections.Generic.List(); + var enumValues = new System.Collections.Generic.List(); + foreach (PreIntegratedFGD.FGDIndex value in validValues) + { + if (value != PreIntegratedFGD.FGDIndex.Count && value != PreIntegratedFGD.FGDIndex.FGD_Marschner) + { + displayNames.Add(value.ToString()); + enumValues.Add(value); + } + } + + int currentIndex = enumValues.IndexOf(m_FGDIndex); + if (currentIndex < 0) + { + // If current index is invalid (e.g., Marschner), reset to first valid option + currentIndex = 0; + if (enumValues.Count > 0) + { + m_FGDIndex = enumValues[0]; + } + } + + EditorGUI.BeginChangeCheck(); + int newIndex = EditorGUILayout.Popup("FGD Type", currentIndex, displayNames.ToArray()); + bool changed = EditorGUI.EndChangeCheck(); + + if (changed && newIndex >= 0 && newIndex < enumValues.Count) + { + m_FGDIndex = enumValues[newIndex]; + UpdatePreview(); + } + + if (GUILayout.Button("Refresh Preview")) + { + UpdatePreview(); + } + + EditorGUILayout.EndVertical(); + } + + private void DrawPreview() + { + EditorGUILayout.BeginVertical("box"); + EditorGUILayout.LabelField("Preview", EditorStyles.boldLabel); + + if (m_PreviewTexture != null && m_PreviewTexture.IsCreated()) + { + int resolution = (int)PreIntegratedFGD.FGDTexture.Resolution; + Rect labelRect = GUILayoutUtility.GetLastRect(); + Rect rect = GUILayoutUtility.GetRect(resolution, resolution, GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(false)); + rect.height = rect.width; // Make it square + + // Center the preview horizontally + float availableWidth = EditorGUIUtility.currentViewWidth; + rect.x = (availableWidth - rect.width) * 0.5f; + + var sRGBWrite = GL.sRGBWrite; + GL.sRGBWrite = false; + EditorGUI.DrawPreviewTexture(rect, m_PreviewTexture); + GL.sRGBWrite = sRGBWrite; + } + else + { + EditorGUILayout.HelpBox("Preview texture not available. Click 'Refresh Preview' to generate.", MessageType.Info); + } + + EditorGUILayout.EndVertical(); + } + + private void InitializePreview() + { + if (m_IsInitialized) + { + return; + } + + int resolution = (int)PreIntegratedFGD.FGDTexture.Resolution; + m_PreviewTexture = new RenderTexture(resolution, resolution, 0, GraphicsFormat.A2B10G10R10_UNormPack32) + { + hideFlags = HideFlags.HideAndDontSave, + filterMode = FilterMode.Bilinear, + wrapMode = TextureWrapMode.Clamp, + name = "PreIntegratedFGD_Preview" + }; + m_PreviewTexture.Create(); + + m_IsInitialized = true; + UpdatePreview(); + } + + private void CleanupPreview() + { + if (m_IsInitialized) + { + PreIntegratedFGD.instance.Cleanup(m_LastFGDIndex); + m_IsInitialized = false; + } + + if (m_PreviewTexture != null) + { + DestroyImmediate(m_PreviewTexture); + m_PreviewTexture = null; + } + } + + private void UpdatePreview() + { + if (!m_IsInitialized || m_PreviewTexture == null) + { + return; + } + + // Validate FGD index + if (m_FGDIndex == PreIntegratedFGD.FGDIndex.Count || (int)m_FGDIndex >= (int)PreIntegratedFGD.FGDIndex.Count) + { + Debug.LogError($"Invalid FGD index: {m_FGDIndex}"); + return; + } + + // Cleanup previous FGD index if it's different and was built + if (m_LastFGDIndex != m_FGDIndex) + { + // Validate last index before accessing array + if (m_LastFGDIndex != PreIntegratedFGD.FGDIndex.Count && (int)m_LastFGDIndex < (int)PreIntegratedFGD.FGDIndex.Count) + { + // Check if the previous index was actually built by checking refCounting + var fgdType = typeof(PreIntegratedFGD); + var refCountingField = fgdType.GetField("m_refCounting", BindingFlags.NonPublic | BindingFlags.Instance); + if (refCountingField != null) + { + var refCounting = refCountingField.GetValue(PreIntegratedFGD.instance) as int[]; + if (refCounting != null && (int)m_LastFGDIndex >= 0 && (int)m_LastFGDIndex < refCounting.Length && refCounting[(int)m_LastFGDIndex] > 0) + { + PreIntegratedFGD.instance.Cleanup(m_LastFGDIndex); + } + } + } + m_LastFGDIndex = m_FGDIndex; + } + + // Build new (this increments refCounting) + PreIntegratedFGD.instance.Build(m_FGDIndex); + + // Render the FGD texture + CommandBuffer cmd = CommandBufferPool.Get("PreIntegratedFGD Preview"); + PreIntegratedFGD.instance.RenderInit(m_FGDIndex, cmd); + Graphics.ExecuteCommandBuffer(cmd); + CommandBufferPool.Release(cmd); + + // Get the internal texture using reflection + var fgdType2 = typeof(PreIntegratedFGD); + var fieldInfo = fgdType2.GetField("m_PreIntegratedFGD", BindingFlags.NonPublic | BindingFlags.Instance); + if (fieldInfo != null) + { + var textures = fieldInfo.GetValue(PreIntegratedFGD.instance) as RenderTexture[]; + if (textures != null && (int)m_FGDIndex >= 0 && (int)m_FGDIndex < textures.Length && textures[(int)m_FGDIndex] != null && textures[(int)m_FGDIndex].IsCreated()) + { + Graphics.Blit(textures[(int)m_FGDIndex], m_PreviewTexture); + } + } + + Repaint(); + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD/PreIntegratedFGDWindow.cs.meta b/Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD/PreIntegratedFGDWindow.cs.meta new file mode 100644 index 00000000..cf96120e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD/PreIntegratedFGDWindow.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 44fa7453efc94394b87b7e9343c6a80f +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/Material/PreIntegratedFGD/PreIntegratedFGDWindow.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor/ShadowAtlasResolutionDrawer.cs b/Packages/com.baddog.rendering.arealight/Editor/ShadowAtlasResolutionDrawer.cs new file mode 100644 index 00000000..85751404 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/ShadowAtlasResolutionDrawer.cs @@ -0,0 +1,66 @@ +using UnityEngine; +using UnityEditor; + +namespace BadDog.Rendering.AreaLight +{ + /// + /// Restricts values to power-of-2 resolutions: 256, 512, 1024, 2048, 4096, 8192 + /// + [CustomPropertyDrawer(typeof(ShadowAtlasResolutionAttribute))] + public class ShadowAtlasResolutionDrawer : PropertyDrawer + { + private static readonly int[] k_AllowedResolutions = { 256, 512, 1024, 2048, 4096, 8192 }; + private static readonly string[] k_ResolutionLabels = { "256", "512", "1024", "2048", "4096", "8192" }; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + if (property.propertyType != SerializedPropertyType.Integer) + { + EditorGUI.PropertyField(position, property, label); + return; + } + + int currentValue = property.intValue; + int selectedIndex = GetClosestResolutionIndex(currentValue); + + EditorGUI.BeginProperty(position, label, property); + + Rect popupRect = EditorGUI.PrefixLabel(position, label); + int newIndex = EditorGUI.Popup(popupRect, selectedIndex, k_ResolutionLabels); + + if (newIndex != selectedIndex) + { + property.intValue = k_AllowedResolutions[newIndex]; + } + else + { + int clampedValue = k_AllowedResolutions[selectedIndex]; + if (currentValue != clampedValue) + { + property.intValue = clampedValue; + } + } + + EditorGUI.EndProperty(); + } + + private int GetClosestResolutionIndex(int value) + { + int closestIndex = 0; + int minDiff = Mathf.Abs(value - k_AllowedResolutions[0]); + + for (int i = 1; i < k_AllowedResolutions.Length; i++) + { + int diff = Mathf.Abs(value - k_AllowedResolutions[i]); + if (diff < minDiff) + { + minDiff = diff; + closestIndex = i; + } + } + + return closestIndex; + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/ShadowAtlasResolutionDrawer.cs.meta b/Packages/com.baddog.rendering.arealight/Editor/ShadowAtlasResolutionDrawer.cs.meta new file mode 100644 index 00000000..b03bc05f --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/ShadowAtlasResolutionDrawer.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7ac81e325169e984d818fa384ed60f5d +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/ShadowAtlasResolutionDrawer.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Editor/com.baddog.rendering.arealight.editor.asmdef b/Packages/com.baddog.rendering.arealight/Editor/com.baddog.rendering.arealight.editor.asmdef new file mode 100644 index 00000000..d9b45188 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/com.baddog.rendering.arealight.editor.asmdef @@ -0,0 +1,21 @@ +{ + "name": "com.baddog.rendering.arealight.editor", + "rootNamespace": "", + "references": [ + "BadDog.Rendering.AreaLight", + "Unity.RenderPipelines.Core.Runtime", + "Unity.RenderPipelines.Core.Editor" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} + diff --git a/Packages/com.baddog.rendering.arealight/Editor/com.baddog.rendering.arealight.editor.asmdef.meta b/Packages/com.baddog.rendering.arealight/Editor/com.baddog.rendering.arealight.editor.asmdef.meta new file mode 100644 index 00000000..8412b356 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Editor/com.baddog.rendering.arealight.editor.asmdef.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: e7d9aa655ea9afc4183b621c1d341004 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Editor/com.baddog.rendering.arealight.editor.asmdef + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime.meta b/Packages/com.baddog.rendering.arealight/Runtime.meta new file mode 100644 index 00000000..f7eb471e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e45e8ee983713894eb19beca6eefa9be +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Runtime/AreaLighting.cs b/Packages/com.baddog.rendering.arealight/Runtime/AreaLighting.cs new file mode 100644 index 00000000..82cbc098 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/AreaLighting.cs @@ -0,0 +1,115 @@ +using System; +using System.Reflection; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace BadDog.Rendering.AreaLight +{ + public class ShadowAtlasResolutionAttribute : PropertyAttribute + { + } + + [Serializable] + public class AreaLightSettings + { + [Tooltip("Maximum number of area lights processed per frame")] + [Range(0, 8)] + public int maxAreaLights = 8; + + [Tooltip("Pre-integrated FGD shader for GGX and Disney Diffuse")] + public Shader preIntegratedFGD_GGXDisneyDiffuse; + + [Tooltip("Pre-integrated FGD shader for Charlie and Fabric Lambert")] + public Shader preIntegratedFGD_CharlieFabricLambert; + + [Tooltip("Pre-integrated FGD shader for Marschner")] + public Shader preIntegratedFGD_Marschner; + } + + [Serializable] + public class AreaLightShadowSettings + { + public enum BGAreaLightShadowMode + { + Off = 0, + PCF2x2 = 1, + Tent5x5 = 2, + Tent7x7 = 3, + PCSS = 4, + } + + [Tooltip("Resolution of the area light shadow atlas (e.g., 512, 1024, 2048, 4096, 8192).)")] + [ShadowAtlasResolution] + public int shadowAtlasResolution = 1024; + + [Tooltip("Maximum number of area lights that can cast shadows simultaneously")] + [Range(0, 8)] + public int maxShadowCastingLights = 8; + + [Tooltip("Shadow filtering mode")] + public BGAreaLightShadowMode shadowFilter = BGAreaLightShadowMode.Tent5x5; + + [Tooltip("Softness radius in world units for PCSS")] + [Range(0.0f, 32.0f)] + public float pcssShadowSoftness = 2f; + [Tooltip("Number of samples used to search blockers in PCSS.")] + [Range(4, 32)] + public int pcssBlockerSampleCount = 16; + + [Tooltip("Number of samples used for PCSS filtering.")] [Range(4, 32)] + public int pcssFilterSampleCount = 16; + + public string GetShadowKeyword() + { + switch (shadowFilter) + { + case BGAreaLightShadowMode.Off: + return null; // No keyword = off + case BGAreaLightShadowMode.PCF2x2: + return "_BG_AREALIGHT_SHADOWS_PCF2X2"; + case BGAreaLightShadowMode.Tent5x5: + return "_BG_AREALIGHT_SHADOWS_TENT5X5"; + case BGAreaLightShadowMode.Tent7x7: + return "_BG_AREALIGHT_SHADOWS_TENT7X7"; + case BGAreaLightShadowMode.PCSS: + return "_BG_AREALIGHT_SHADOWS_PCSS"; + default: + return null; + } + } + } + + public class AreaLighting : ScriptableRendererFeature + { + [SerializeField] + private AreaLightSettings m_LightSettings = new AreaLightSettings(); + + [SerializeField] + private AreaLightShadowSettings m_ShadowSettings = new AreaLightShadowSettings(); + + private AreaLightingPass m_AreaLightingPass; + + public override void Create() + { + if (m_AreaLightingPass == null) + { + m_AreaLightingPass = new AreaLightingPass(); + } + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + GraphicsSettings.realtimeDirectRectangularAreaLights = true; + m_AreaLightingPass.Setup(m_LightSettings, m_ShadowSettings, renderingData); + renderer.EnqueuePass(m_AreaLightingPass); + } + + protected override void Dispose(bool disposing) + { + m_AreaLightingPass?.Dispose(); + m_AreaLightingPass = null; + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/AreaLighting.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/AreaLighting.cs.meta new file mode 100644 index 00000000..5427da4a --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/AreaLighting.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 085cd8fdd62cb43488050a28b68ecdf1 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/AreaLighting.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/AreaLightingShaderIDs.cs b/Packages/com.baddog.rendering.arealight/Runtime/AreaLightingShaderIDs.cs new file mode 100644 index 00000000..7d004869 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/AreaLightingShaderIDs.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight +{ + /// + /// Shader property IDs for Area Lighting and Shadows + /// + public static class AreaLightingShaderIDs + { + // Light Data + public static readonly int _AreaLightDataBuffer = Shader.PropertyToID("_AreaLightDataBuffer"); + public static readonly int _AreaLightDataBufferCount = Shader.PropertyToID("_AreaLightDataBufferCount"); + + // Shadow Data + public static readonly int _AreaLightsShadowmapTexture = Shader.PropertyToID("_AreaLightsShadowmapTexture"); + public static readonly int _AreaLightsWorldToShadow = Shader.PropertyToID("_AreaLightsWorldToShadow"); + public static readonly int _AreaLightShadowParams = Shader.PropertyToID("_AreaLightShadowParams"); + public static readonly int _AreaLightShadowmapSize = Shader.PropertyToID("_AreaLightShadowmapSize"); + public static readonly int _PCSSAdditionalLightParams = Shader.PropertyToID("_PCSSAdditionalLightParams"); + + // Shadow Rendering + public static readonly int _ShadowBias = Shader.PropertyToID("_ShadowBias"); + public static readonly int _LightPosition = Shader.PropertyToID("_LightPosition"); + + // Shader keywords + public const string ENABLE_BG_AREA_LIGHTING_KEYWORD = "_ENABLE_BG_AREA_LIGHTING"; + } + + /// + /// BG Area Light shader global keywords (similar to URP's ShaderGlobalKeywords) + /// + internal static class ShaderGlobalKeywords + { + public static readonly GlobalKeyword BGAreaLightShadowsPCF2x2 = GlobalKeyword.Create("_BG_AREALIGHT_SHADOWS_PCF2X2"); + public static readonly GlobalKeyword BGAreaLightShadowsTent5x5 = GlobalKeyword.Create("_BG_AREALIGHT_SHADOWS_TENT5X5"); + public static readonly GlobalKeyword BGAreaLightShadowsTent7x7 = GlobalKeyword.Create("_BG_AREALIGHT_SHADOWS_TENT7X7"); + public static readonly GlobalKeyword BGAreaLightShadowsPCSS = GlobalKeyword.Create("_BG_AREALIGHT_SHADOWS_PCSS"); + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/AreaLightingShaderIDs.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/AreaLightingShaderIDs.cs.meta new file mode 100644 index 00000000..65b3a5e8 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/AreaLightingShaderIDs.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ac756d2a8d3789a45b828c988f4e32ce +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/AreaLightingShaderIDs.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLight.cs b/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLight.cs new file mode 100644 index 00000000..012b26aa --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLight.cs @@ -0,0 +1,311 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace BadDog.Rendering.AreaLight +{ + /// + /// Attach this component to a Light to enable area light calculations. + /// + [ExecuteAlways] + [RequireComponent(typeof(Light))] + [DisallowMultipleComponent] + [AddComponentMenu("BadDog/Rendering/BGAreaLight")] + public class BGAreaLight : MonoBehaviour + { + private Light m_Light; + + [SerializeField] + [Tooltip("Enable shadow casting for this area light.")] + private bool m_CastShadows = true; + + [SerializeField] + [Tooltip("Enable custom shadow settings for this area light.")] + private bool m_UseCustomShadow = false; + [SerializeField] + [Range(0, 8192)] + [Tooltip("Custom shadow map resolution for this area light. Set to 0 to use pipeline defaults.")] + private int m_CustomShadowResolution = 0; + [SerializeField] + [Range(AreaShadowUtils.k_MinAreaLightShadowCone, AreaShadowUtils.k_MaxAreaLightShadowCone)] + [Tooltip("Aperture of the cone used for shadowing the area light.")] + private float m_ShadowCone = AreaShadowUtils.k_DefaultAreaLightShadowCone; + [SerializeField] + [Range(0f, 1f)] + [Tooltip("Shadow strength for this area light. Applied to Light.shadowStrength.")] + private float m_ShadowStrength = 1f; + [SerializeField] + [Range(0f, 10f)] + [Tooltip("Normal bias used for area light shadowing.")] + private float m_ShadowNormalBias = 0.05f; + [SerializeField] + [Range(0f, 10f)] + [Tooltip("Depth bias used for area light shadowing. Acts like Light.shadowBias for rectangle lights.")] + private float m_ShadowDepthBias = 0.05f; + [SerializeField] + [Range(AreaShadowUtils.k_MinShadowNearPlane, AreaShadowUtils.k_MaxShadowNearPlane)] + [Tooltip("Shadow near plane for area light. Controls the starting distance of the shadow frustum.")] + private float m_ShadowNearPlane = 0.1f; + + [SerializeField] + [Tooltip("Rendering Layer Mask used for area light lighting/shadow filtering.")] + private RenderingLayerMask m_RenderingLayerMask = (RenderingLayerMask)1; + + [SerializeField, HideInInspector] + private bool m_PreBakeEnabled; + + [SerializeField, HideInInspector] + private Vector2 m_CachedAreaSize = new Vector2(1.0f, 0.5f); + + private void Awake() + { + OnValidate(); + } + + private void OnEnable() + { + OnValidate(); + BGAreaLightManager.RegisterAreaLight(this); + + #if UNITY_EDITOR + UnityEditor.Lightmapping.bakeStarted += OnBakeStarted; + UnityEditor.Lightmapping.bakeCompleted += OnBakeCompleted; + #endif + } + + private void OnDisable() + { + BGAreaLightManager.UnRegisterAreaLight(this); + + #if UNITY_EDITOR + UnityEditor.Lightmapping.bakeStarted -= OnBakeStarted; + UnityEditor.Lightmapping.bakeCompleted -= OnBakeCompleted; + #endif + } + + private void OnDestroy() + { + BGAreaLightManager.UnRegisterAreaLight(this); + } + + private void OnValidate() + { + EnsureLight(); + EnsureRectangleType(); + ForceRealtimeMode(); + SyncCastShadowsToLight(); + SetShadowCone(m_ShadowCone); + SetShadowDepthBias(m_ShadowDepthBias); + SetShadowNormalBias(m_ShadowNormalBias); + SetShadowNearPlane(m_ShadowNearPlane); + ApplyShadowStrength(); + SyncRenderingLayerMaskToLight(); + } + + private void Update() + { + OnValidate(); + } + + private void ForceRealtimeMode() + { + #if UNITY_EDITOR + if (m_Light.lightmapBakeType != LightmapBakeType.Realtime) + { + m_Light.lightmapBakeType = LightmapBakeType.Realtime; + UnityEditor.EditorUtility.SetDirty(m_Light); + } + #endif + } + + private void EnsureLight() + { + if (m_Light == null) + { + m_Light = GetComponent(); + } + } + + private void EnsureRectangleType() + { + if (m_Light.type != LightType.Rectangle) + { + m_Light.type = LightType.Rectangle; + #if UNITY_EDITOR + UnityEditor.EditorUtility.SetDirty(m_Light); + #endif + } + + #if UNITY_EDITOR + if (m_Light.areaSize == Vector2.zero) + { + m_Light.areaSize = new Vector2(1.0f, 0.5f); + UnityEditor.EditorUtility.SetDirty(m_Light); + } + #endif + + // Keep the runtime cache in sync with the Light's current area size. + m_CachedAreaSize = m_Light.areaSize; + } + + private void ApplyShadowStrength() + { + float clamped = Mathf.Clamp01(m_ShadowStrength); + m_Light.shadowStrength = clamped; + + #if UNITY_EDITOR + UnityEditor.EditorUtility.SetDirty(m_Light); + #endif + } + + private void SyncCastShadowsToLight() + { + if (m_Light == null) + { + return; + } + + LightShadows targetShadows = m_CastShadows ? LightShadows.Soft : LightShadows.None; + + if (m_Light.shadows != targetShadows) + { + m_Light.shadows = targetShadows; + #if UNITY_EDITOR + UnityEditor.EditorUtility.SetDirty(m_Light); + #endif + } + } + + private void SyncRenderingLayerMaskToLight() + { + if (m_Light == null) + { + return; + } + + if (m_Light.renderingLayerMask != m_RenderingLayerMask) + { + m_Light.renderingLayerMask = m_RenderingLayerMask; + #if UNITY_EDITOR + UnityEditor.EditorUtility.SetDirty(m_Light); + #endif + } + } + + public Light GetLight() + { + EnsureLight(); + return m_Light; + } + + public int GetCustomShadowResolution() + { + return m_CustomShadowResolution; + } + + public Vector2 GetSize() + { + return m_CachedAreaSize; + } + + public float GetShadowCone() + { + return Mathf.Clamp(m_ShadowCone, AreaShadowUtils.k_MinAreaLightShadowCone, AreaShadowUtils.k_MaxAreaLightShadowCone); + } + + public float GetShadowDepthBias() + { + return Mathf.Max(0f, m_ShadowDepthBias); + } + + public void SetShadowDepthBias(float value) + { + float clamped = Mathf.Max(0f, value); + m_ShadowDepthBias = clamped; + } + + public float GetShadowNormalBias() + { + return Mathf.Max(0f, m_ShadowNormalBias); + } + + public void SetShadowNormalBias(float value) + { + float clamped = Mathf.Max(0f, value); + m_ShadowNormalBias = clamped; + } + + public float GetShadowNearPlane() + { + return Mathf.Clamp(m_ShadowNearPlane, AreaShadowUtils.k_MinShadowNearPlane, AreaShadowUtils.k_MaxShadowNearPlane); + } + + public void SetShadowNearPlane(float value) + { + float clamped = Mathf.Clamp(value, AreaShadowUtils.k_MinShadowNearPlane, AreaShadowUtils.k_MaxShadowNearPlane); + m_ShadowNearPlane = clamped; + } + + public void SetShadowCone(float value) + { + float clamped = Mathf.Clamp(value, AreaShadowUtils.k_MinAreaLightShadowCone, AreaShadowUtils.k_MaxAreaLightShadowCone); + m_ShadowCone = clamped; + } + + public bool GetIsRectLight() + { + Vector2 size = GetSize(); + return size.y > 0.001f; + } + + public float GetRangeAttenuationScale() + { + if (m_Light == null) + { + return 1.0f; + } + + float range = m_Light.range; + if (range <= 0f) + { + return 1.0f; + } + + return 1.0f / (range * range); + } + + public float GetRangeAttenuationBias() + { + return 1.0f; + } + + #if UNITY_EDITOR + private void OnBakeStarted() + { + EnsureLight(); + if (m_Light == null) + { + return; + } + + m_PreBakeEnabled = m_Light.enabled; + m_Light.enabled = false; + } + + private void OnBakeCompleted() + { + EnsureLight(); + if (m_Light == null) + { + return; + } + + m_Light.enabled = m_PreBakeEnabled; + m_Light.lightmapBakeType = LightmapBakeType.Realtime; + UnityEditor.EditorUtility.SetDirty(m_Light); + } + #endif + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLight.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLight.cs.meta new file mode 100644 index 00000000..4d47e69d --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLight.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dfab406269b69ca439a3bae3704f7a0a +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/BGAreaLight.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLightManager.cs b/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLightManager.cs new file mode 100644 index 00000000..83df4ca1 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLightManager.cs @@ -0,0 +1,300 @@ +using System.Collections.Generic; +using System.Runtime.InteropServices; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight +{ + /// + /// Per-light area light data sent to shader. + /// + [StructLayout(LayoutKind.Sequential)] + public struct BGAreaLightRenderingData + { + public Vector4 positionWS; // float4 (xyz: position, w: isAreaLight flag, 1.0=area light, 0.0=not area light) + public Vector4 right; // float4 (matches GPU float3 + padding) + public Vector4 up; // float4 (matches GPU float3 + padding) + public Vector4 forward; // float4 (matches GPU float3 + padding) + public Vector4 size; // float4 (matches GPU float2 + padding) + public Vector4 colorIntensity; // float4 (matches GPU float3 color + float intensity) + public Vector4 rangeParams; // float4 (range, rangeAttenuationScale, rangeAttenuationBias, isRectLight) + public Vector4 renderingLayerMask; // float4 (x stores uint bitmask via bit reinterpretation) + } + + /// + /// Static manager for all BGAreaLight components in the scene. + /// + public static class BGAreaLightManager + { + static Dictionary s_AreaLightDictionary = new Dictionary(); + static NativeArray s_AreaLightRenderingDataArray; + static GraphicsBuffer s_AreaLightDataBuffer = null; + static GraphicsBuffer s_EmptyBuffer = null; + static readonly Dictionary s_LightToAreaIndex = new Dictionary(); + +#if UNITY_EDITOR + [UnityEditor.InitializeOnLoadMethod] +#else + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] +#endif + static void Initialize() + { + Cleanup(); + } + + static BGAreaLightManager() + { + Application.quitting -= Cleanup; + Application.quitting += Cleanup; + } + + public static void RegisterAreaLight(BGAreaLight areaLight) + { + if (areaLight == null) + { + return; + } + + Light light = areaLight.GetLight(); + if (light == null) + { + Debug.LogWarning("BGAreaLight component does not have a Light component attached.", areaLight); + return; + } + + if (s_AreaLightDictionary.ContainsKey(light)) + { + return; + } + + s_AreaLightDictionary.Add(light, areaLight); + } + + public static void UnRegisterAreaLight(BGAreaLight areaLight) + { + if (areaLight == null) + { + return; + } + + Light light = areaLight.GetLight(); + if (light != null && s_AreaLightDictionary.ContainsKey(light)) + { + s_AreaLightDictionary.Remove(light); + } + } + + private static bool TryGetAreaLight(Light light, out BGAreaLight areaLight) + { + return TryGetRegisteredAreaLight(light, out areaLight); + } + + internal static bool TryGetRegisteredAreaLight(Light light, out BGAreaLight areaLight) + { + if (light == null) + { + areaLight = null; + return false; + } + + return s_AreaLightDictionary.TryGetValue(light, out areaLight); + } + + public static NativeArray BuildAreaLightDataArray(NativeArray visibleLights, int mainLightIndex, int maxAreaLights = 8) + { + s_LightToAreaIndex.Clear(); + + int visibleCount = visibleLights.Length; + int areaLightCount = 0; + + for (int i = 0; i < visibleCount && areaLightCount < maxAreaLights; ++i) + { + if (i == mainLightIndex) + { + continue; + } + + Light light = visibleLights[i].light; + if (light != null && light.type == LightType.Rectangle && TryGetAreaLight(light, out _)) + { + areaLightCount++; + } + } + + if (areaLightCount <= 0) + { + if (s_AreaLightRenderingDataArray.IsCreated) + { + s_AreaLightRenderingDataArray.Dispose(); + } + return default; + } + + if (!s_AreaLightRenderingDataArray.IsCreated || s_AreaLightRenderingDataArray.Length != areaLightCount) + { + if (s_AreaLightRenderingDataArray.IsCreated) + { + s_AreaLightRenderingDataArray.Dispose(); + } + + s_AreaLightRenderingDataArray = new NativeArray( + areaLightCount, + Allocator.Persistent, + NativeArrayOptions.UninitializedMemory); + } + + BGAreaLightRenderingData defaultData = new BGAreaLightRenderingData + { + positionWS = Vector4.zero, + right = new Vector4(1, 0, 0, 0), + up = new Vector4(0, 1, 0, 0), + forward = new Vector4(0, 0, 1, 0), + size = Vector4.zero, + colorIntensity = Vector4.zero, + rangeParams = new Vector4(0, 1, 0, 0), + renderingLayerMask = Vector4.zero + }; + + int areaIndex = 0; + + for (int i = 0; i < visibleCount && areaIndex < areaLightCount; ++i) + { + if (i == mainLightIndex) + { + continue; + } + + Light light = visibleLights[i].light; + if (light == null || light.type != LightType.Rectangle || !TryGetAreaLight(light, out BGAreaLight areaLight)) + { + continue; + } + + BGAreaLightRenderingData renderData = defaultData; + + // Mark as area light by default + Transform lightTransform = light.transform; + Vector3 pos = lightTransform.position; + renderData.positionWS = new Vector4(pos.x, pos.y, pos.z, 1.0f); + + Vector3 rightVec = lightTransform.right.normalized; + Vector3 upVec = lightTransform.up.normalized; + Vector3 forwardVec = lightTransform.forward.normalized; + + renderData.right = new Vector4(rightVec.x, rightVec.y, rightVec.z, 0); + renderData.up = new Vector4(upVec.x, upVec.y, upVec.z, 0); + renderData.forward = new Vector4(forwardVec.x, forwardVec.y, forwardVec.z, 0); + + Vector2 size = areaLight.GetSize(); + float attenuationScale = areaLight.GetRangeAttenuationScale(); + float attenuationBias = areaLight.GetRangeAttenuationBias(); + float isRect = areaLight.GetIsRectLight() ? 1f : 0f; + + renderData.size = new Vector4(size.x, size.y, 0, 0); + + Color linearColor = light.color.linear; + renderData.colorIntensity = new Vector4(linearColor.r, linearColor.g, linearColor.b, light.intensity); + + renderData.rangeParams = new Vector4( + light.range, + attenuationScale, + attenuationBias, + isRect); + renderData.renderingLayerMask = new Vector4(math.asfloat((uint)light.renderingLayerMask), 0f, 0f, 0f); + + s_AreaLightRenderingDataArray[areaIndex] = renderData; + s_LightToAreaIndex[light] = areaIndex; + areaIndex++; + } + + return s_AreaLightRenderingDataArray; + } + + public static unsafe GraphicsBuffer UpdateGraphicsBuffer(NativeArray areaLightDataArray) + { + if (!areaLightDataArray.IsCreated || areaLightDataArray.Length == 0) + { + CleanupGraphicsBuffer(); + return null; + } + + int count = areaLightDataArray.Length; + int structSize = UnsafeUtility.SizeOf(); + + if (s_AreaLightDataBuffer == null || !s_AreaLightDataBuffer.IsValid() || s_AreaLightDataBuffer.count != count) + { + CleanupGraphicsBuffer(); + s_AreaLightDataBuffer = new GraphicsBuffer( + GraphicsBuffer.Target.Structured, + count, + structSize); + } + + s_AreaLightDataBuffer.SetData(areaLightDataArray); + + return s_AreaLightDataBuffer; + } + + public static GraphicsBuffer GetEmptyBuffer() + { + if (s_EmptyBuffer == null || !s_EmptyBuffer.IsValid()) + { + s_EmptyBuffer = new GraphicsBuffer( + GraphicsBuffer.Target.Structured, + 1, + UnsafeUtility.SizeOf()); + + var defaultData = new BGAreaLightRenderingData + { + positionWS = Vector4.zero, // w=0 means not an area light + right = new Vector4(1, 0, 0, 0), + up = new Vector4(0, 1, 0, 0), + forward = new Vector4(0, 0, 1, 0), + size = Vector4.zero, + colorIntensity = Vector4.zero, // intensity = 0 (w component) + rangeParams = new Vector4(0, 1, 0, 0), // range=0, scale=1, bias=0, isRect=0 + renderingLayerMask = Vector4.zero + }; + s_EmptyBuffer.SetData(new[] { defaultData }); + } + + return s_EmptyBuffer; + } + + static void CleanupGraphicsBuffer() + { + if (s_AreaLightDataBuffer != null && s_AreaLightDataBuffer.IsValid()) + { + s_AreaLightDataBuffer.Release(); + s_AreaLightDataBuffer = null; + } + + if (s_EmptyBuffer != null && s_EmptyBuffer.IsValid()) + { + s_EmptyBuffer.Release(); + s_EmptyBuffer = null; + } + } + + static void Cleanup() + { + s_AreaLightDictionary.Clear(); + + if (s_AreaLightRenderingDataArray.IsCreated) + { + s_AreaLightRenderingDataArray.Dispose(); + } + + CleanupGraphicsBuffer(); + } + + public static void Clear() + { + Cleanup(); + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLightManager.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLightManager.cs.meta new file mode 100644 index 00000000..7ac3ff14 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/BGAreaLightManager.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 050381655f64eeb44a0875de450bcdec +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/BGAreaLightManager.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material.meta new file mode 100644 index 00000000..7f6599fe --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ad4de4f6e4e6b24ab49326dd09f97df +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight.meta new file mode 100644 index 00000000..04eda938 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c7318e34b1fd83b4b9c1d76f71e029ed +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF.meta new file mode 100644 index 00000000..82982fec --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 490fe8da71f8576488b30a4a922fc442 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Charlie.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Charlie.cs new file mode 100644 index 00000000..1e98003e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Charlie.cs @@ -0,0 +1,98 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight.LTC +{ + /// + /// "Charlie" Sheen Implementation + /// Source from Sony Pictures Imageworks by Estevez and Kulla, "Production Friendly Microfacet Sheen BRDF" (http://blog.selfshadow.com/publications/s2017-shading-course/imageworks/s2017_pbs_imageworks_sheen.pdf) + /// Details: https://knarkowicz.wordpress.com/2018/01/04/cloth-shading/ + /// + public struct BRDF_Charlie : IBRDF + { + public double Eval(ref Vector3 _tsView, ref Vector3 _tsLight, float _alpha, out double _pdf) + { + if (_tsView.z <= 0) + { + _pdf = 0; + return 0; + } + + _alpha = Mathf.Max(0.002f, _alpha); + + Vector3 H = Vector3.Normalize(_tsView + _tsLight); + double NdotL = _tsLight.z; + double NdotV = _tsView.z; + double NdotH = H.z; + + // D + double D = CharlieD(_alpha, NdotH); + + // Ashikmin masking/shadowing + // double G = V_Ashikhmin( NdotV, NdotL ); + double G = V_Charlie(NdotV, NdotL, _alpha); + + // fr = F(H) * G(V, L) * D(H) + // Note that the usual 1 / (4 * (N.L) * (N.V)) part of the Cook-Torrance micro-facet model is actually contained in the G visibility term in our case (as reported by Ashkmin in "Distribution-based BRDFs" eq. 2) + double res = D * G * NdotL; // We also include the (N.L) term here + + // We're using uniform distribution + _pdf = 0.5 / Math.PI; + + return res; + } + + // Paper recommend plain uniform sampling of upper hemisphere instead of importance sampling for Charlie + public void GetSamplingDirection(ref Vector3 _tsView, float _alpha, float _U1, float _U2, ref Vector3 _direction) + { + float phi = 2.0f * Mathf.PI * _U1; + float cosTheta = 1.0f - _U2; + float sinTheta = Mathf.Sqrt(1 - cosTheta * cosTheta); + _direction = new Vector3(sinTheta * Mathf.Cos(phi), sinTheta * Mathf.Sin(phi), cosTheta); + } + + double CharlieD(float _roughness, double _NdotH) + { + double invR = 1.0 / _roughness; + double cos2h = _NdotH * _NdotH; + double sin2h = 1.0f - cos2h; + double res = (2.0 + invR) * Math.Pow(sin2h, invR * 0.5) / (2.0 * Math.PI); + return res; + } + + double V_Ashikhmin(double _NdotV, double _NdotL) + { + return 1.0 / (4.0 * (_NdotL + _NdotV - _NdotL * _NdotV)); + } + + // Note: This version doesn't include the softening of the paper: Production Friendly Microfacet Sheen BRDF + double V_Charlie(double _NdotV, double _NdotL, double _roughness) + { + double lambdaV = _NdotV < 0.5 ? Math.Exp(CharlieL(_NdotV, _roughness)) : Math.Exp(2.0 * CharlieL(0.5, _roughness) - CharlieL(1.0 - _NdotV, _roughness)); + double lambdaL = _NdotL < 0.5 ? Math.Exp(CharlieL(_NdotL, _roughness)) : Math.Exp(2.0 * CharlieL(0.5, _roughness) - CharlieL(1.0 - _NdotL, _roughness)); + + return 1.0 / ((1.0 + lambdaV + lambdaL) * (4.0 * _NdotV * _NdotL)); + } + + double CharlieL(double x, double _roughness) + { + float r = Mathf.Clamp01((float)_roughness); + r = 1.0f - r * r; + + float a = Mathf.Lerp(25.3245f, 21.5473f, r); + float b = Mathf.Lerp(3.32435f, 3.82987f, r); + float c = Mathf.Lerp(0.16801f, 0.19823f, r); + float d = Mathf.Lerp(-1.27393f, -1.97760f, r); + float e = Mathf.Lerp(-4.85967f, -4.32054f, r); + + double res = a / (1.0 + b * Math.Pow(Math.Max(0, x), c)) + d * x + e; + return res; + } + + public BadDog.Rendering.AreaLight.LTCLightingModel GetLightingModel() + { + return BadDog.Rendering.AreaLight.LTCLightingModel.Charlie; + } + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Charlie.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Charlie.cs.meta new file mode 100644 index 00000000..d562966d --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Charlie.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e3273a65ebf1c474397e1eb12a73cf98 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Charlie.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_CookTorrance.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_CookTorrance.cs new file mode 100644 index 00000000..ceac16aa --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_CookTorrance.cs @@ -0,0 +1,60 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight.LTC +{ + /// + /// Cook-Torrance implementation of the BRDF interface + /// + public struct BRDF_CookTorrance : IBRDF + { + public double Eval(ref Vector3 _tsView, ref Vector3 _tsLight, float _alpha, out double _pdf) + { + if (_tsView.z <= 0) + { + _pdf = 0; + return 0; + } + + _alpha = Mathf.Max(0.002f, _alpha); + + Vector3 H = (_tsView + _tsLight).normalized; + double NdotL = Math.Max(1e-8, _tsLight.z); + double NdotV = Math.Max(1e-8, _tsView.z); + double NdotH = H.z; + double LdotH = Math.Max(1e-8, Vector3.Dot(_tsLight, H)); + + // D + double cosb2 = NdotH * NdotH; + double m2 = _alpha * _alpha; + double D = Math.Exp((cosb2 - 1.0) / (cosb2 * m2)) // exp( -tan(a)² / m² ) + / Math.Max(1e-12, Math.PI * m2 * cosb2 * cosb2); // / (PI * m² * cos(a)^4) + + // masking/shadowing + double G = Math.Min(1, 2.0 * NdotH * Math.Min(NdotV, NdotL) / LdotH); + + // fr = F(H) * G(V, L) * D(H) / (4 * (N.L) * (N.V)) + double res = D * G / (4.0 * NdotV); // Full specular mico-facet model is F * D * G / (4 * NdotL * NdotV) but since we're fitting with the NdotL included, it gets nicely canceled out! + + // pdf = D(H) * (N.H) / (4 * (L.H)) + _pdf = Math.Abs(D * NdotH / (4.0 * LdotH)); + + return res; + } + + public void GetSamplingDirection(ref Vector3 _tsView, float _alpha, float _U1, float _U2, ref Vector3 _direction) + { + float phi = 2.0f * Mathf.PI * _U1; + float cosTheta = 1.0f / Mathf.Sqrt(1 - _alpha * _alpha * Mathf.Log(Mathf.Max(1e-6f, _U2))); + float sinTheta = Mathf.Sqrt(1 - cosTheta * cosTheta); + Vector3 H = new Vector3(sinTheta * Mathf.Cos(phi), sinTheta * Mathf.Sin(phi), cosTheta); + _direction = 2.0f * Vector3.Dot(H, _tsView) * H - _tsView; // Mirror view direction + } + + public BadDog.Rendering.AreaLight.LTCLightingModel GetLightingModel() + { + return BadDog.Rendering.AreaLight.LTCLightingModel.CookTorrance; + } + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_CookTorrance.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_CookTorrance.cs.meta new file mode 100644 index 00000000..4ea52ef4 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_CookTorrance.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 432ee4d0aec53c943894a42d0bf30444 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_CookTorrance.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Disney.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Disney.cs new file mode 100644 index 00000000..97993756 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Disney.cs @@ -0,0 +1,83 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight.LTC +{ + /// + /// Disney Diffuse Implementation + /// Source from 2012 Burley, B. "Physically-Based Shading at Disney" Section 5.3 + /// (https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf) + /// + public struct BRDF_Disney : IBRDF + { + public double Eval(ref Vector3 _tsView, ref Vector3 _tsLight, float _alpha, out double _pdf) + { + if (_tsView.z <= 0) + { + _pdf = 0; + return 0; + } + + _alpha = Mathf.Max(0.002f, _alpha); + + double NdotL = Math.Max(0, _tsLight.z); + double NdotV = Math.Max(0, _tsView.z); + double LdotV = Math.Max(0, Vector3.Dot(_tsLight, _tsView)); + + double perceptualRoughness = Math.Sqrt(_alpha); + + // (2 * LdotH * LdotH) = 1 + LdotV + // real fd90 = 0.5 + 2 * LdotH * LdotH * perceptualRoughness; + double fd90 = 0.5 + (perceptualRoughness + perceptualRoughness * LdotV); + + // Two schlick fresnel term + double lightScatter = F_Schlick(1.0, fd90, NdotL); + double viewScatter = F_Schlick(1.0, fd90, NdotV); + + // Normalize the BRDF for polar view angles of up to (Pi/4). + // We use the worst case of (roughness = albedo = 1), and, for each view angle, + // integrate (brdf * cos(theta_light)) over all light directions. + // The resulting value is for (theta_view = 0), which is actually a little bit larger + // than the value of the integral for (theta_view = Pi/4). + // Hopefully, the compiler folds the constant together with (1/Pi). + double res = lightScatter * viewScatter / Math.PI; + res /= 1.03571; + + // Remember we must include the N.L term! + res *= NdotL; + + // Cosine-weighted hemisphere sampling + _pdf = NdotL / Math.PI; + + return res; + } + + public void GetSamplingDirection(ref Vector3 _tsView, float _alpha, float _U1, float _U2, ref Vector3 _direction) + { + // Performs uniform sampling of the unit disk. + // Ref: PBRT v3, p. 777. + float r = Mathf.Sqrt(_U1); + float phi = 2.0f * Mathf.PI * _U2; + + // Performs cosine-weighted sampling of the hemisphere. + // Ref: PBRT v3, p. 780. + _direction.x = r * Mathf.Cos(phi); + _direction.y = r * Mathf.Sin(phi); + _direction.z = Mathf.Sqrt(1 - _U1); // Project the point from the disk onto the hemisphere. + } + + double F_Schlick(double _F0, double _F90, double _cosTheta) + { + double x = 1.0 - _cosTheta; + double x2 = x * x; + double x5 = x * x2 * x2; + return (_F90 - _F0) * x5 + _F0; // sub mul mul mul sub mad + } + + public BadDog.Rendering.AreaLight.LTCLightingModel GetLightingModel() + { + return BadDog.Rendering.AreaLight.LTCLightingModel.DisneyDiffuse; + } + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Disney.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Disney.cs.meta new file mode 100644 index 00000000..c3a539a0 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Disney.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ff4aa0c2af19abb42bade44e76256186 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Disney.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_GGX.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_GGX.cs new file mode 100644 index 00000000..c3b5c6c1 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_GGX.cs @@ -0,0 +1,74 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight.LTC +{ + /// + /// GGX implementation of the BRDF interface + /// + public class BRDF_GGX : IBRDF + { + public double Eval(ref Vector3 _tsView, ref Vector3 _tsLight, float _alpha, out double _pdf) + { + if (_tsView.z <= 0) + { + _pdf = 0; + return 0; + } + + // masking + double lambdaV = Lambda(_tsView.z, _alpha); + + // shadowing + double G2 = 0; + if (_tsLight.z > 0.0f) + { + double lambdaL = Lambda(_tsLight.z, _alpha); + G2 = 1.0 / (1.0 + lambdaV + lambdaL); + } + + // D + Vector3 H = _tsView + _tsLight; + float lengthH = H.magnitude; + if (lengthH > 1e-8f) + H = H / lengthH; + else + H = new Vector3(0, 0, 1); + + double slopex = H.x / H.z; + double slopey = H.y / H.z; + double D = 1.0 / (1.0 + (slopex * slopex + slopey * slopey) / _alpha / _alpha); + D = D * D; + D = D / (Math.PI * _alpha * _alpha * H.z * H.z * H.z * H.z); + + // Full specular mico-facet model is F * D * G / (4 * NdotL * NdotV) but since we're fitting with the NdotL included, it gets nicely canceled out! + double res = D * G2 / 4.0 / _tsView.z; + + // pdf = D(H) * (N.H) / (4 * (L.H)) + _pdf = Math.Abs(D * H.z / 4.0 / Vector3.Dot(_tsView, H)); + + return res; + } + + public void GetSamplingDirection(ref Vector3 _tsView, float _alpha, float _U1, float _U2, ref Vector3 _direction) + { + float phi = 2.0f * Mathf.PI * _U1; + float r = _alpha * Mathf.Sqrt(_U2 / (1.0f - _U2)); + Vector3 H = new Vector3(r * Mathf.Cos(phi), r * Mathf.Sin(phi), 1.0f).normalized; + _direction = -_tsView + 2.0f * H * Vector3.Dot(H, _tsView); + } + + double Lambda(float _cosTheta, float _alpha) + { + double a = 1.0f / _alpha / Math.Tan(Math.Acos(_cosTheta)); + double lambda = _cosTheta < 1.0 ? 0.5 * (-1.0 + Math.Sqrt(1.0 + 1.0 / (a * a))) : 0.0; + return lambda; + } + + public BadDog.Rendering.AreaLight.LTCLightingModel GetLightingModel() + { + return BadDog.Rendering.AreaLight.LTCLightingModel.GGX; + } + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_GGX.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_GGX.cs.meta new file mode 100644 index 00000000..8ca642b8 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_GGX.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e67e2cd414ae81a4f8f5a76bce9f6b35 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_GGX.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Interface.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Interface.cs new file mode 100644 index 00000000..94155773 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Interface.cs @@ -0,0 +1,38 @@ +////////////////////////////////////////////////////////////////////////// +// BRDF Interface +////////////////////////////////////////////////////////////////////////// +// +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight.LTC +{ + /// + /// BRDF Interface that you must implement in order to generate a new table + /// + public interface IBRDF + { + /// + /// Evaluation of the ***cosine-weighted*** BRDF + /// + /// The vector pointing toward the camera + /// The vector pointing toward the light + /// Surface roughness + /// The Probability Density Function of sampling the light in that direction + /// + double Eval(ref Vector3 _tsView, ref Vector3 _tsLight, float _alpha, out double _pdf); + + /// + /// Gets an importance-sampled light direction given a view vector and the surface roughness + /// + /// The vector pointing toward the camera + /// >Surface roughness + /// A random value in [0,1] + /// A 2nd random value in [0,1] + /// The generated direction + void GetSamplingDirection(ref Vector3 _tsView, float _alpha, float _U1, float _U2, ref Vector3 _direction); + + BadDog.Rendering.AreaLight.LTCLightingModel GetLightingModel(); + }; +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Interface.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Interface.cs.meta new file mode 100644 index 00000000..3c2a4efd --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Interface.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8e6541bb3b842494ab1ec4bf036a37e9 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Interface.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_KajiyaKaySpecular.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_KajiyaKaySpecular.cs new file mode 100644 index 00000000..e5410fc2 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_KajiyaKaySpecular.cs @@ -0,0 +1,112 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight.LTC +{ + /// + /// Disney Diffuse Implementation + /// Source from 2012 Burley, B. "Physically-Based Shading at Disney" Section 5.3 + /// (https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf) + /// + public struct BRDF_KajiyaKaySpecular : IBRDF + { + public double Eval(ref Vector3 _tsView, ref Vector3 _tsLight, float _alpha, out double _pdf) + { + if (_tsView.z <= 0) + { + _pdf = 0; + return 0; + } + + _alpha = Mathf.Max(0.002f, _alpha); + double perceptualRoughness = Math.Sqrt(_alpha); + + Vector3 T = Vector3.right; + Vector3 N = Vector3.forward; + + double NdotV = Math.Max(0, _tsView.z); + double NdotL = Math.Max(0, _tsLight.z); + + double LdotV = Math.Max(0, Vector3.Dot(_tsLight, _tsView)); + Vector3 H = Vector3.Normalize(_tsLight + _tsView); + double LdotH = Math.Max(0, Vector3.Dot(_tsLight, H)); + + Vector3 t1 = ShiftTangent(T, N, 0.0f); + Vector3 t2 = ShiftTangent(T, N, 0.0f); + + double specularExponent = RoughnessToBlinnPhongSpecularExponent(_alpha); + + // Balancing energy between lobes, as well as between diffuse and specular is left to artists. + double hairSpec1 = D_KajiyaKay(t1, H, specularExponent); + double hairSpec2 = D_KajiyaKay(t2, H, specularExponent); + + double fd90 = 0.5 + (perceptualRoughness + perceptualRoughness * LdotV); + double F = F_Schlick(1.0, fd90, LdotH); + + // G = NdotL * NdotV. + double res = 0.25 * F * (hairSpec1 + hairSpec2) * NdotL * Math.Min(Math.Max(NdotV * double.MaxValue, 0.0), 1.0); + + // Uniform Sampling + _pdf = 0.5 / Math.PI; + + return res; + } + + // Uniform Sampling + public void GetSamplingDirection(ref Vector3 _tsView, float _alpha, float _U1, float _U2, ref Vector3 _direction) + { + float phi = 2.0f * Mathf.PI * _U1; + float cosTheta = 1.0f - _U2; + float sinTheta = Mathf.Sqrt(1 - cosTheta * cosTheta); + _direction = new Vector3(sinTheta * Mathf.Cos(phi), sinTheta * Mathf.Sin(phi), cosTheta); + } + + double RoughnessToBlinnPhongSpecularExponent(double roughness) + { + // 1e-4 and 3e3 are the lowest/highest values that do not cause numerical instabilities with the fitting tool + return Math.Min(Math.Max(2.0 / (roughness * roughness) - 2.0, 1e-4), 3e3); + } + + double F_Schlick(double _F0, double _F90, double _cosTheta) + { + double x = 1.0f - _cosTheta; + double x2 = x * x; + double x5 = x * x2 * x2; + return (_F90 - _F0) * x5 + _F0; // sub mul mul mul sub mad + } + + //http://web.engr.oregonstate.edu/~mjb/cs519/Projects/Papers/HairRendering.pdf + Vector3 ShiftTangent(Vector3 T, Vector3 N, float shift) + { + return Vector3.Normalize(T + N * shift); + } + + double PositivePow(double value, double power) + { + return Math.Pow(Math.Max(Math.Abs(value), 1.192092896e-07), power); + } + + double D_KajiyaKay(Vector3 T, Vector3 H, double specularExponent) + { + float TdotH = Vector3.Dot(T, H); + float sinTHSq = Mathf.Clamp(1.0f - TdotH * TdotH, 0.0f, 1.0f); + + float dirAttn = Mathf.Clamp(TdotH + 1.0f, 0.0f, 1.0f); // Evgenii: this seems like a hack? Do we really need this? + + // Note: Kajiya-Kay is not energy conserving. + // We attempt at least some energy conservation by approximately normalizing Blinn-Phong NDF. + // We use the formulation with the NdotL. + // See http://www.thetenthplanet.de/archives/255. + double n = specularExponent; + double norm = (n + 2) / (2.0 * Math.PI); + + return dirAttn * norm * PositivePow(sinTHSq, 0.5 * n); + } + + public BadDog.Rendering.AreaLight.LTCLightingModel GetLightingModel() + { + return BadDog.Rendering.AreaLight.LTCLightingModel.KajiyaKaySpecular; + } + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_KajiyaKaySpecular.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_KajiyaKaySpecular.cs.meta new file mode 100644 index 00000000..9658bd21 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_KajiyaKaySpecular.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4288b6ce37f7e2f40b421a4053ff7b73 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_KajiyaKaySpecular.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Marschner.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Marschner.cs new file mode 100644 index 00000000..6c9ba734 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Marschner.cs @@ -0,0 +1,27 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight.LTC +{ + public struct BRDF_Marschner : IBRDF + { + public double Eval(ref Vector3 _tsView, ref Vector3 _tsLight, float _alpha, out double _pdf) + { + // Uniform sampled over a sphere. + _pdf = 1f / (4f * Math.PI); + + return 0f; + } + + public void GetSamplingDirection(ref Vector3 _tsView, float _alpha, float _U1, float _U2, ref Vector3 _direction) + { + _direction = Vector3.up; + } + + public BadDog.Rendering.AreaLight.LTCLightingModel GetLightingModel() + { + return BadDog.Rendering.AreaLight.LTCLightingModel.Marschner; + } + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Marschner.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Marschner.cs.meta new file mode 100644 index 00000000..9502c099 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Marschner.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4986784e6e6a4a048aa882f5bcd44d55 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Marschner.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_OrenNayar.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_OrenNayar.cs new file mode 100644 index 00000000..07af2f20 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_OrenNayar.cs @@ -0,0 +1,80 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight.LTC +{ + /// + /// Oren-Nayar Implementation + /// Source from 1994 Oren, M. Nayar, S. K. "Generalization of Lambert's Reflectance Model" + /// + public struct BRDF_OrenNayar : IBRDF + { + public double Eval(ref Vector3 _tsView, ref Vector3 _tsLight, float _alpha, out double _pdf) + { + if (_tsView.z <= 0) + { + _pdf = 0; + return 0; + } + + float sigma = Mathf.Max(0.002f, 0.5f * Mathf.PI * _alpha); // Standard deviation is a [0,PI/2] angle + + double NdotL = Math.Max(0, _tsLight.z); + double NdotV = Math.Max(0, _tsView.z); + + double gamma = (_tsView.x * _tsLight.x + _tsView.y * _tsLight.y) + / Math.Max(1e-20, Math.Sqrt(1.0 - NdotV * NdotV) * Math.Sqrt(1.0 - NdotL * NdotL)); + + double rough_sq = sigma * sigma; + double A = 1.0 - 0.5 * (rough_sq / (rough_sq + 0.57)); // You can replace 0.33 by 0.57 to simulate the missing inter-reflection term, as specified in footnote of page 22 of the 1992 paper + double B = 0.45 * (rough_sq / (rough_sq + 0.09)); + + // Original formulation + // float angle_vn = acos( NdotV ); + // float angle_ln = acos( NdotL ); + // float alpha = max( angle_vn, angle_ln ); + // float beta = min( angle_vn, angle_ln ); + // float C = sin(alpha) * tan(beta); + + // Optimized formulation (without tangents, arccos or sines) + double cos_alpha = NdotV < NdotL ? NdotV : NdotL; + double cos_beta = NdotV < NdotL ? NdotL : NdotV; + double sin_alpha = Math.Sqrt(1.0 - cos_alpha * cos_alpha); + double sin_beta = Math.Sqrt(1.0 - cos_beta * cos_beta); + double C = sin_alpha * sin_beta / Math.Max(1e-20, cos_beta); + + double res = A + B * Math.Max(0.0, gamma) * C; + res /= Math.PI; + + // Remember we must include the N.L term! + res *= NdotL; + + // Cosine-weighted hemisphere sampling + _pdf = NdotL / Math.PI; + + return res; + } + + // Here we use a simple cosine-weighted hemisphere sampling + public void GetSamplingDirection(ref Vector3 _tsView, float _alpha, float _U1, float _U2, ref Vector3 _direction) + { + // Performs uniform sampling of the unit disk. + // Ref: PBRT v3, p. 777. + float r = Mathf.Sqrt(_U1); + float phi = 2.0f * Mathf.PI * _U2; + + // Performs cosine-weighted sampling of the hemisphere. + // Ref: PBRT v3, p. 780. + _direction.x = r * Mathf.Cos(phi); + _direction.y = r * Mathf.Sin(phi); + + _direction.z = Mathf.Sqrt(1 - _U1); // Project the point from the disk onto the hemisphere. + } + + public BadDog.Rendering.AreaLight.LTCLightingModel GetLightingModel() + { + return BadDog.Rendering.AreaLight.LTCLightingModel.OrenNayar; + } + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_OrenNayar.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_OrenNayar.cs.meta new file mode 100644 index 00000000..e6a220e7 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_OrenNayar.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cdf80bc060c4e8d4a8665c2b4a01044b +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_OrenNayar.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Ward.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Ward.cs new file mode 100644 index 00000000..0ec97776 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Ward.cs @@ -0,0 +1,65 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace BadDog.Rendering.AreaLight.LTC +{ + /// + /// Ward implementation of the BRDF interface + // Formulas come from -> Walter, B. 2005 "Notes on the Ward BRDF" (https://pdfs.semanticscholar.org/330e/59117d7da6c794750730a15f9a178391b9fe.pdf) + // The BRDF though, is the one most proeminently used by the AxF materials and is based on the Geisler-Moroder variation of Ward (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.169.9908&rep=rep1&type=pdf) + /// + public struct BRDF_Ward : IBRDF + { + public double Eval(ref Vector3 _tsView, ref Vector3 _tsLight, float _alpha, out double _pdf) + { + if (_tsView.z <= 0) + { + _pdf = 0; + return 0; + } + + _alpha = Mathf.Max(0.002f, _alpha); + + Vector3 H = (_tsView + _tsLight).normalized; + double NdotL = Math.Max(1e-8, _tsLight.z); + double NdotH = Math.Max(1e-8, H.z); + double LdotH = Math.Max(1e-8, Vector3.Dot(_tsLight, H)); + + // D (basically a Beckmann distribution + an additional divider for albedo bounding) + double m2 = _alpha * _alpha; + double cosb2 = NdotH * NdotH; + double D = Math.Exp(-(1 - cosb2) / (m2 * cosb2)) // exp( -tan(a)² / m² ) + / (Math.PI * m2 * cosb2 * cosb2); // / (PI * m² * cos(a)^4) + D /= 4.0 * LdotH * LdotH; // Moroder + + // fr = F(H) * D(H) + double res = D; + + // Remember we must include the N.L term! + res *= NdotL; + + // From Walter, eq. 24 we know that pdf(H) = D(H) * (N.H) + _pdf = Math.Abs(D * NdotH); + + return res; + } + + public void GetSamplingDirection(ref Vector3 _tsView, float _alpha, float _U1, float _U2, ref Vector3 _direction) + { + // Ward NDF sampling (eqs. 6 & 7 from above paper) + float tanTheta = _alpha * Mathf.Sqrt(-Mathf.Log(Mathf.Max(1e-6f, _U1))); + float phi = _U2 * 2.0f * Mathf.PI; + + float cosTheta = 1.0f / Mathf.Sqrt(1 + tanTheta * tanTheta); + float sinTheta = Mathf.Sqrt(1 - cosTheta * cosTheta); + Vector3 H = new Vector3(sinTheta * Mathf.Cos(phi), sinTheta * Mathf.Sin(phi), cosTheta); + _direction = 2.0f * Vector3.Dot(H, _tsView) * H - _tsView; // Mirror view direction + } + + public BadDog.Rendering.AreaLight.LTCLightingModel GetLightingModel() + { + return BadDog.Rendering.AreaLight.LTCLightingModel.Ward; + } + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Ward.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Ward.cs.meta new file mode 100644 index 00000000..9782a5bf --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Ward.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 70fe8e92f23e84f49aabe7648f8e96f3 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/BRDF/BRDF_Ward.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated.meta new file mode 100644 index 00000000..6e6228f9 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af77b71311e87fa4cab06868233eb576 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Charlie.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Charlie.cs new file mode 100644 index 00000000..a37b8246 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Charlie.cs @@ -0,0 +1,4248 @@ +using UnityEngine; +using System; + +namespace BadDog.Rendering.AreaLight +{ + public partial class LTCAreaLight + { + // [GENERATED CONTENT 31 10月 2025 11:26:23] + // Table contains 3x3 matrix coefficients of M^-1 for the fitting of the BRDF_Charlie BRDF using the LTC technique + // Only the 0,2,4,6 of the 3x3 coefficients are emitted, and they are encoded into FP16 + // From "Real-Time Polygonal-Light Shading with Linearly Transformed Cosines" 2016 (https://eheitzresearch.wordpress.com/415-2/) + // + // The table is accessed via LTCAreaLight.s_LtcMatrixData_BRDF_Charlie[ + 64 * ] // Theta values are along the Y axis, Roughness values are along the X axis + // • roughness = ( / 63 )^2 (the table is indexed by perceptual roughness) + // • cosTheta = 1 - ( / 63 )^2 + // + public static ushort[] s_LtcMatrixData_BRDF_Charlie = new ushort[64 * 64 * 4] + { + // Cos (theta) = 1 + 11979, 0, 11979, 0, // alpha = 0.001 + 11979, 0, 11979, 0, // alpha = 0.001 + 11979, 0, 11979, 0, // alpha = 0.001007811 + 11979, 0, 11979, 0, // alpha = 0.002267574 + 11979, 0, 11979, 0, // alpha = 0.004031243 + 11979, 0, 11979, 0, // alpha = 0.006298816 + 11979, 0, 11979, 0, // alpha = 0.009070295 + 11979, 0, 11979, 0, // alpha = 0.01234568 + 11979, 0, 11979, 0, // alpha = 0.01612497 + 11979, 0, 11979, 0, // alpha = 0.02040816 + 11979, 0, 11979, 0, // alpha = 0.02519527 + 11979, 0, 11979, 0, // alpha = 0.03048627 + 11979, 0, 11979, 0, // alpha = 0.03628118 + 12232, 0, 12232, 0, // alpha = 0.04258 + 12390, 0, 12390, 0, // alpha = 0.04938272 + 12523, 0, 12523, 0, // alpha = 0.05668934 + 12658, 0, 12658, 0, // alpha = 0.06449988 + 12793, 0, 12793, 0, // alpha = 0.07281432 + 12928, 0, 12928, 0, // alpha = 0.08163266 + 13061, 0, 13061, 0, // alpha = 0.09095491 + 13194, 0, 13194, 0, // alpha = 0.1007811 + 13317, 0, 13317, 0, // alpha = 0.1111111 + 13380, 0, 13380, 0, // alpha = 0.1219451 + 13441, 0, 13441, 0, // alpha = 0.1332829 + 13499, 0, 13499, 0, // alpha = 0.1451247 + 13556, 0, 13556, 0, // alpha = 0.1574704 + 13612, 0, 13612, 0, // alpha = 0.17032 + 13665, 0, 13665, 0, // alpha = 0.1836735 + 13717, 0, 13717, 0, // alpha = 0.1975309 + 13768, 0, 13768, 0, // alpha = 0.2118922 + 13817, 0, 13817, 0, // alpha = 0.2267574 + 13867, 0, 13867, 0, // alpha = 0.2421265 + 13913, 0, 13913, 0, // alpha = 0.2579995 + 13960, 0, 13960, 0, // alpha = 0.2743765 + 14005, 0, 14005, 0, // alpha = 0.2912573 + 14051, 0, 14051, 0, // alpha = 0.308642 + 14094, 0, 14094, 0, // alpha = 0.3265306 + 14138, 0, 14138, 0, // alpha = 0.3449232 + 14180, 0, 14180, 0, // alpha = 0.3638196 + 14223, 0, 14223, 0, // alpha = 0.38322 + 14264, 0, 14264, 0, // alpha = 0.4031242 + 14304, 0, 14304, 0, // alpha = 0.4235324 + 14341, 0, 14341, 0, // alpha = 0.4444445 + 14361, 0, 14361, 0, // alpha = 0.4658605 + 14381, 0, 14381, 0, // alpha = 0.4877803 + 14401, 0, 14401, 0, // alpha = 0.5102041 + 14422, 0, 14422, 0, // alpha = 0.5331318 + 14443, 0, 14443, 0, // alpha = 0.5565634 + 14463, 0, 14463, 0, // alpha = 0.5804989 + 14483, 0, 14483, 0, // alpha = 0.6049383 + 14504, 0, 14504, 0, // alpha = 0.6298816 + 14525, 0, 14525, 0, // alpha = 0.6553288 + 14547, 0, 14547, 0, // alpha = 0.68128 + 14569, 0, 14569, 0, // alpha = 0.7077349 + 14592, 0, 14592, 0, // alpha = 0.7346939 + 14615, 0, 14615, 0, // alpha = 0.7621567 + 14639, 0, 14639, 0, // alpha = 0.7901235 + 14664, 0, 14664, 0, // alpha = 0.8185941 + 14690, 0, 14690, 0, // alpha = 0.8475687 + 14716, 0, 14716, 0, // alpha = 0.8770471 + 14745, 0, 14745, 0, // alpha = 0.9070295 + 14774, 0, 14774, 0, // alpha = 0.9375157 + 14805, 0, 14805, 0, // alpha = 0.9685059 + 14838, 0, 14838, 0, // alpha = 1 + + // Cos (theta) = 0.9997481 + 11979, 21300, 17950, 50718, // alpha = 0.001 + 11979, 21300, 17950, 50718, // alpha = 0.001 + 11979, 21300, 17950, 50718, // alpha = 0.001007811 + 11979, 21266, 17921, 50689, // alpha = 0.002267574 + 11979, 20907, 17616, 50384, // alpha = 0.004031243 + 11979, 20267, 16919, 49686, // alpha = 0.006298816 + 11979, 19492, 16140, 48904, // alpha = 0.009070295 + 11979, 18663, 15407, 48170, // alpha = 0.01234568 + 11979, 17952, 14661, 47411, // alpha = 0.01612497 + 11979, 17416, 14093, 46808, // alpha = 0.02040816 + 11979, 16783, 13572, 46264, // alpha = 0.02519527 + 11979, 16376, 13202, 45764, // alpha = 0.03048627 + 15372, 15848, 15559, 50761, // alpha = 0.03628118 + 15001, 15489, 15188, 50230, // alpha = 0.04258 + 14787, 15114, 14818, 49650, // alpha = 0.04938272 + 14591, 14750, 14564, 49231, // alpha = 0.05668934 + 14493, 14480, 14396, 48798, // alpha = 0.06449988 + 14423, 14217, 14219, 48431, // alpha = 0.07281432 + 14373, 13903, 14052, 48169, // alpha = 0.08163266 + 14275, 13657, 13926, 47730, // alpha = 0.09095491 + 14177, 13462, 13845, 47362, // alpha = 0.1007811 + 14031, 13296, 13772, 46915, // alpha = 0.1111111 + 13933, 13038, 13731, 46415, // alpha = 0.1219451 + 13870, 12825, 13717, 46056, // alpha = 0.1332829 + 13850, 12648, 13730, 45623, // alpha = 0.1451247 + 13832, 12498, 13742, 45329, // alpha = 0.1574704 + 13838, 12371, 13767, 45143, // alpha = 0.17032 + 13858, 12238, 13800, 45003, // alpha = 0.1836735 + 13888, 12051, 13838, 44830, // alpha = 0.1975309 + 13911, 11889, 13873, 44706, // alpha = 0.2118922 + 13948, 11747, 13911, 44622, // alpha = 0.2267574 + 13984, 11623, 13953, 44549, // alpha = 0.2421265 + 14020, 11514, 13988, 44496, // alpha = 0.2579995 + 14057, 11417, 14026, 44434, // alpha = 0.2743765 + 14096, 11331, 14066, 44368, // alpha = 0.2912573 + 14135, 11243, 14103, 44318, // alpha = 0.308642 + 14176, 11104, 14142, 44270, // alpha = 0.3265306 + 14214, 10979, 14181, 44207, // alpha = 0.3449232 + 14251, 10867, 14217, 44157, // alpha = 0.3638196 + 14289, 10764, 14255, 44101, // alpha = 0.38322 + 14327, 10671, 14293, 44050, // alpha = 0.4031242 + 14350, 10586, 14331, 43978, // alpha = 0.4235324 + 14368, 10508, 14352, 43884, // alpha = 0.4444445 + 14387, 10436, 14371, 43778, // alpha = 0.4658605 + 14405, 10370, 14390, 43678, // alpha = 0.4877803 + 14423, 10310, 14409, 43592, // alpha = 0.5102041 + 14441, 10254, 14428, 43506, // alpha = 0.5331318 + 14460, 10163, 14448, 43412, // alpha = 0.5565634 + 14479, 10066, 14468, 43331, // alpha = 0.5804989 + 14498, 9977, 14488, 43267, // alpha = 0.6049383 + 14517, 9893, 14508, 43182, // alpha = 0.6298816 + 14537, 9815, 14529, 43103, // alpha = 0.6553288 + 14557, 9742, 14550, 43060, // alpha = 0.68128 + 14579, 9673, 14571, 42987, // alpha = 0.7077349 + 14600, 9609, 14594, 42871, // alpha = 0.7346939 + 14623, 9549, 14617, 42766, // alpha = 0.7621567 + 14645, 9492, 14640, 42692, // alpha = 0.7901235 + 14669, 9438, 14665, 42575, // alpha = 0.8185941 + 14694, 9388, 14690, 42481, // alpha = 0.8475687 + 14721, 9340, 14717, 42415, // alpha = 0.8770471 + 14748, 9295, 14745, 42319, // alpha = 0.9070295 + 14777, 9252, 14774, 42266, // alpha = 0.9375157 + 14808, 9207, 14805, 42180, // alpha = 0.9685059 + 14840, 9130, 14838, 42098, // alpha = 1 + + // Cos (theta) = 0.9989922 + 11979, 21395, 18031, 50799, // alpha = 0.001 + 11979, 21395, 18031, 50799, // alpha = 0.001 + 11979, 21395, 18031, 50799, // alpha = 0.001007811 + 11979, 21374, 18013, 50781, // alpha = 0.002267574 + 11979, 21088, 17770, 50537, // alpha = 0.004031243 + 11979, 20595, 17294, 50062, // alpha = 0.006298816 + 11979, 19909, 16616, 49382, // alpha = 0.009070295 + 11979, 19341, 15981, 48745, // alpha = 0.01234568 + 11979, 18707, 15444, 48207, // alpha = 0.01612497 + 11979, 18184, 14856, 47609, // alpha = 0.02040816 + 11979, 17670, 14425, 47172, // alpha = 0.02519527 + 11979, 17249, 13950, 46660, // alpha = 0.03048627 + 16404, 16784, 16565, 52121, // alpha = 0.03628118 + 16014, 16459, 16175, 51471, // alpha = 0.04258 + 15674, 16070, 15790, 50900, // alpha = 0.04938272 + 15469, 15729, 15514, 50407, // alpha = 0.05668934 + 15302, 15473, 15281, 50002, // alpha = 0.06449988 + 15076, 15198, 14989, 49557, // alpha = 0.07281432 + 14902, 14896, 14781, 49237, // alpha = 0.08163266 + 14768, 14658, 14619, 48865, // alpha = 0.09095491 + 14712, 14468, 14509, 48575, // alpha = 0.1007811 + 14625, 14292, 14420, 48308, // alpha = 0.1111111 + 14573, 14041, 14353, 48092, // alpha = 0.1219451 + 14501, 13832, 14264, 47721, // alpha = 0.1332829 + 14437, 13658, 14179, 47410, // alpha = 0.1451247 + 14388, 13511, 14123, 47159, // alpha = 0.1574704 + 14329, 13386, 14080, 46781, // alpha = 0.17032 + 14275, 13246, 14058, 46478, // alpha = 0.1836735 + 14211, 13062, 14047, 46230, // alpha = 0.1975309 + 14191, 12902, 14052, 46043, // alpha = 0.2118922 + 14188, 12762, 14067, 45804, // alpha = 0.2267574 + 14188, 12639, 14087, 45609, // alpha = 0.2421265 + 14196, 12531, 14107, 45464, // alpha = 0.2579995 + 14211, 12435, 14134, 45354, // alpha = 0.2743765 + 14237, 12349, 14164, 45275, // alpha = 0.2912573 + 14255, 12257, 14191, 45201, // alpha = 0.308642 + 14284, 12120, 14223, 45148, // alpha = 0.3265306 + 14315, 11996, 14254, 45098, // alpha = 0.3449232 + 14340, 11884, 14288, 45051, // alpha = 0.3638196 + 14355, 11782, 14317, 44970, // alpha = 0.38322 + 14371, 11689, 14343, 44896, // alpha = 0.4031242 + 14387, 11605, 14360, 44831, // alpha = 0.4235324 + 14404, 11527, 14376, 44762, // alpha = 0.4444445 + 14421, 11456, 14393, 44698, // alpha = 0.4658605 + 14439, 11391, 14411, 44636, // alpha = 0.4877803 + 14455, 11330, 14428, 44578, // alpha = 0.5102041 + 14473, 11274, 14446, 44515, // alpha = 0.5331318 + 14491, 11181, 14463, 44458, // alpha = 0.5565634 + 14509, 11085, 14482, 44413, // alpha = 0.5804989 + 14526, 10996, 14500, 44357, // alpha = 0.6049383 + 14545, 10912, 14519, 44302, // alpha = 0.6298816 + 14564, 10834, 14538, 44242, // alpha = 0.6553288 + 14583, 10762, 14558, 44188, // alpha = 0.68128 + 14602, 10693, 14579, 44137, // alpha = 0.7077349 + 14622, 10629, 14600, 44084, // alpha = 0.7346939 + 14643, 10569, 14622, 44025, // alpha = 0.7621567 + 14664, 10513, 14644, 43912, // alpha = 0.7901235 + 14687, 10459, 14667, 43802, // alpha = 0.8185941 + 14710, 10409, 14692, 43698, // alpha = 0.8475687 + 14735, 10361, 14719, 43601, // alpha = 0.8770471 + 14760, 10316, 14746, 43502, // alpha = 0.9070295 + 14788, 10274, 14775, 43405, // alpha = 0.9375157 + 14817, 10227, 14805, 43312, // alpha = 0.9685059 + 14848, 10150, 14838, 43220, // alpha = 1 + + // Cos (theta) = 0.9977324 + 11979, 21425, 18056, 50824, // alpha = 0.001 + 11979, 21425, 18056, 50824, // alpha = 0.001 + 11979, 21425, 18056, 50824, // alpha = 0.001007811 + 11979, 21406, 18040, 50808, // alpha = 0.002267574 + 11979, 21128, 17804, 50572, // alpha = 0.004031243 + 11979, 20643, 17376, 50143, // alpha = 0.006298816 + 11979, 20031, 16718, 49485, // alpha = 0.009070295 + 11979, 19532, 16207, 48972, // alpha = 0.01234568 + 11979, 18967, 15664, 48427, // alpha = 0.01612497 + 11979, 18539, 15245, 48000, // alpha = 0.02040816 + 11979, 18060, 14752, 47503, // alpha = 0.02519527 + 11979, 17651, 14410, 47156, // alpha = 0.03048627 + 16966, 17313, 17131, 52802, // alpha = 0.03628118 + 16608, 16893, 16717, 52246, // alpha = 0.04258 + 16346, 16584, 16429, 51612, // alpha = 0.04938272 + 15973, 16322, 16067, 51169, // alpha = 0.05668934 + 15694, 15971, 15768, 50606, // alpha = 0.06449988 + 15537, 15699, 15541, 50266, // alpha = 0.07281432 + 15415, 15487, 15374, 49875, // alpha = 0.08163266 + 15267, 15276, 15132, 49517, // alpha = 0.09095491 + 15120, 15004, 14940, 49263, // alpha = 0.1007811 + 14979, 14783, 14786, 48961, // alpha = 0.1111111 + 14885, 14601, 14670, 48661, // alpha = 0.1219451 + 14806, 14450, 14580, 48419, // alpha = 0.1332829 + 14759, 14310, 14514, 48241, // alpha = 0.1451247 + 14673, 14096, 14452, 47984, // alpha = 0.1574704 + 14633, 13913, 14410, 47726, // alpha = 0.17032 + 14564, 13756, 14370, 47456, // alpha = 0.1836735 + 14521, 13621, 14344, 47250, // alpha = 0.1975309 + 14457, 13503, 14300, 46999, // alpha = 0.2118922 + 14434, 13400, 14282, 46723, // alpha = 0.2267574 + 14403, 13307, 14265, 46484, // alpha = 0.2421265 + 14393, 13147, 14267, 46319, // alpha = 0.2579995 + 14379, 13005, 14267, 46176, // alpha = 0.2743765 + 14375, 12879, 14278, 46059, // alpha = 0.2912573 + 14380, 12765, 14298, 45896, // alpha = 0.308642 + 14384, 12664, 14318, 45757, // alpha = 0.3265306 + 14390, 12572, 14337, 45642, // alpha = 0.3449232 + 14400, 12489, 14351, 45555, // alpha = 0.3638196 + 14409, 12413, 14363, 45473, // alpha = 0.38322 + 14419, 12344, 14376, 45409, // alpha = 0.4031242 + 14433, 12275, 14391, 45346, // alpha = 0.4235324 + 14446, 12160, 14406, 45297, // alpha = 0.4444445 + 14460, 12054, 14420, 45249, // alpha = 0.4658605 + 14474, 11957, 14436, 45211, // alpha = 0.4877803 + 14489, 11867, 14451, 45170, // alpha = 0.5102041 + 14505, 11784, 14468, 45131, // alpha = 0.5331318 + 14521, 11707, 14484, 45101, // alpha = 0.5565634 + 14538, 11635, 14501, 45066, // alpha = 0.5804989 + 14555, 11568, 14518, 45027, // alpha = 0.6049383 + 14574, 11506, 14536, 44968, // alpha = 0.6298816 + 14591, 11448, 14554, 44925, // alpha = 0.6553288 + 14610, 11394, 14573, 44883, // alpha = 0.68128 + 14630, 11343, 14593, 44839, // alpha = 0.7077349 + 14650, 11296, 14612, 44805, // alpha = 0.7346939 + 14670, 11237, 14634, 44772, // alpha = 0.7621567 + 14692, 11153, 14656, 44743, // alpha = 0.7901235 + 14714, 11073, 14678, 44724, // alpha = 0.8185941 + 14739, 10998, 14701, 44712, // alpha = 0.8475687 + 14764, 10927, 14726, 44694, // alpha = 0.8770471 + 14790, 10860, 14752, 44684, // alpha = 0.9070295 + 14818, 10797, 14780, 44686, // alpha = 0.9375157 + 14848, 10736, 14809, 44680, // alpha = 0.9685059 + 14880, 10679, 14841, 44688, // alpha = 1 + + // Cos (theta) = 0.9959688 + 11979, 21438, 18067, 50835, // alpha = 0.001 + 11979, 21438, 18067, 50835, // alpha = 0.001 + 11979, 21438, 18067, 50835, // alpha = 0.001007811 + 11979, 21421, 18052, 50820, // alpha = 0.002267574 + 11979, 21137, 17812, 50579, // alpha = 0.004031243 + 11979, 20651, 17391, 50158, // alpha = 0.006298816 + 11979, 20064, 16746, 49513, // alpha = 0.009070295 + 11979, 19580, 16289, 49054, // alpha = 0.01234568 + 11979, 19082, 15762, 48526, // alpha = 0.01612497 + 11979, 18661, 15405, 48168, // alpha = 0.02040816 + 11979, 18296, 14950, 47704, // alpha = 0.02519527 + 11979, 17867, 14590, 47340, // alpha = 0.03048627 + 17410, 17552, 17510, 53293, // alpha = 0.03628118 + 16994, 17226, 17103, 52631, // alpha = 0.04258 + 16618, 16872, 16749, 52081, // alpha = 0.04938272 + 16446, 16600, 16479, 51581, // alpha = 0.05668934 + 16145, 16390, 16187, 51199, // alpha = 0.06449988 + 15865, 16068, 15896, 50676, // alpha = 0.07281432 + 15693, 15806, 15671, 50342, // alpha = 0.08163266 + 15528, 15597, 15498, 49989, // alpha = 0.09095491 + 15430, 15427, 15363, 49648, // alpha = 0.1007811 + 15350, 15215, 15159, 49391, // alpha = 0.1111111 + 15203, 14985, 14995, 49181, // alpha = 0.1219451 + 15105, 14792, 14865, 48898, // alpha = 0.1332829 + 15021, 14630, 14761, 48649, // alpha = 0.1451247 + 14937, 14493, 14678, 48432, // alpha = 0.1574704 + 14858, 14375, 14609, 48250, // alpha = 0.17032 + 14802, 14212, 14553, 48075, // alpha = 0.1836735 + 14747, 14037, 14508, 47819, // alpha = 0.1975309 + 14685, 13884, 14470, 47586, // alpha = 0.2118922 + 14643, 13750, 14441, 47393, // alpha = 0.2267574 + 14580, 13632, 14413, 47200, // alpha = 0.2421265 + 14556, 13528, 14401, 47040, // alpha = 0.2579995 + 14513, 13435, 14387, 46778, // alpha = 0.2743765 + 14509, 13352, 14386, 46616, // alpha = 0.2912573 + 14488, 13245, 14382, 46448, // alpha = 0.308642 + 14479, 13111, 14385, 46318, // alpha = 0.3265306 + 14471, 12991, 14388, 46210, // alpha = 0.3449232 + 14475, 12881, 14397, 46132, // alpha = 0.3638196 + 14476, 12782, 14405, 46033, // alpha = 0.38322 + 14478, 12692, 14414, 45913, // alpha = 0.4031242 + 14488, 12609, 14425, 45818, // alpha = 0.4235324 + 14495, 12533, 14438, 45734, // alpha = 0.4444445 + 14506, 12464, 14450, 45656, // alpha = 0.4658605 + 14516, 12400, 14463, 45594, // alpha = 0.4877803 + 14530, 12340, 14477, 45530, // alpha = 0.5102041 + 14543, 12283, 14492, 45480, // alpha = 0.5331318 + 14557, 12182, 14507, 45433, // alpha = 0.5565634 + 14571, 12087, 14522, 45392, // alpha = 0.5804989 + 14586, 12000, 14539, 45347, // alpha = 0.6049383 + 14602, 11918, 14555, 45312, // alpha = 0.6298816 + 14619, 11841, 14572, 45280, // alpha = 0.6553288 + 14637, 11769, 14590, 45250, // alpha = 0.68128 + 14655, 11702, 14608, 45216, // alpha = 0.7077349 + 14674, 11639, 14628, 45187, // alpha = 0.7346939 + 14694, 11580, 14648, 45166, // alpha = 0.7621567 + 14715, 11524, 14669, 45140, // alpha = 0.7901235 + 14736, 11471, 14691, 45118, // alpha = 0.8185941 + 14760, 11422, 14714, 45097, // alpha = 0.8475687 + 14783, 11375, 14738, 45079, // alpha = 0.8770471 + 14809, 11330, 14763, 45060, // alpha = 0.9070295 + 14836, 11288, 14790, 45030, // alpha = 0.9375157 + 14863, 11233, 14818, 44997, // alpha = 0.9685059 + 14895, 11157, 14848, 44976, // alpha = 1 + + // Cos (theta) = 0.9937012 + 11979, 21446, 18074, 50841, // alpha = 0.001 + 11979, 21446, 18074, 50841, // alpha = 0.001 + 11979, 21446, 18074, 50841, // alpha = 0.001007811 + 11979, 21428, 18058, 50826, // alpha = 0.002267574 + 11979, 21134, 17809, 50577, // alpha = 0.004031243 + 11979, 20646, 17381, 50149, // alpha = 0.006298816 + 11979, 20065, 16748, 49515, // alpha = 0.009070295 + 11979, 19594, 16313, 49078, // alpha = 0.01234568 + 11979, 19129, 15802, 48566, // alpha = 0.01612497 + 11979, 18721, 15456, 48219, // alpha = 0.02040816 + 11979, 18429, 15062, 47816, // alpha = 0.02519527 + 18179, 18002, 18082, 53777, // alpha = 0.03048627 + 17535, 17682, 17710, 53466, // alpha = 0.03628118 + 17224, 17438, 17422, 52896, // alpha = 0.04258 + 16888, 17091, 17018, 52388, // alpha = 0.04938272 + 16630, 16797, 16709, 51887, // alpha = 0.05668934 + 16427, 16565, 16479, 51436, // alpha = 0.06449988 + 16148, 16378, 16221, 51044, // alpha = 0.07281432 + 15970, 16082, 15948, 50655, // alpha = 0.08163266 + 15758, 15842, 15737, 50325, // alpha = 0.09095491 + 15643, 15645, 15571, 50052, // alpha = 0.1007811 + 15498, 15483, 15436, 49676, // alpha = 0.1111111 + 15426, 15335, 15306, 49436, // alpha = 0.1219451 + 15354, 15107, 15138, 49238, // alpha = 0.1332829 + 15258, 14915, 15003, 49025, // alpha = 0.1451247 + 15174, 14751, 14895, 48778, // alpha = 0.1574704 + 15067, 14610, 14805, 48548, // alpha = 0.17032 + 15010, 14488, 14731, 48380, // alpha = 0.1836735 + 14931, 14383, 14669, 48219, // alpha = 0.1975309 + 14896, 14245, 14624, 48080, // alpha = 0.2118922 + 14825, 14083, 14578, 47828, // alpha = 0.2267574 + 14782, 13940, 14546, 47636, // alpha = 0.2421265 + 14728, 13813, 14515, 47450, // alpha = 0.2579995 + 14692, 13701, 14493, 47296, // alpha = 0.2743765 + 14644, 13600, 14473, 47154, // alpha = 0.2912573 + 14612, 13509, 14460, 46973, // alpha = 0.308642 + 14601, 13428, 14457, 46805, // alpha = 0.3265306 + 14576, 13354, 14451, 46629, // alpha = 0.3449232 + 14564, 13262, 14452, 46498, // alpha = 0.3638196 + 14553, 13140, 14453, 46383, // alpha = 0.38322 + 14552, 13029, 14458, 46296, // alpha = 0.4031242 + 14552, 12928, 14465, 46216, // alpha = 0.4235324 + 14554, 12835, 14473, 46149, // alpha = 0.4444445 + 14561, 12749, 14484, 46098, // alpha = 0.4658605 + 14568, 12670, 14495, 46012, // alpha = 0.4877803 + 14575, 12597, 14506, 45920, // alpha = 0.5102041 + 14586, 12530, 14519, 45849, // alpha = 0.5331318 + 14597, 12467, 14532, 45778, // alpha = 0.5565634 + 14610, 12409, 14547, 45723, // alpha = 0.5804989 + 14622, 12354, 14561, 45664, // alpha = 0.6049383 + 14637, 12304, 14576, 45615, // alpha = 0.6298816 + 14652, 12225, 14593, 45575, // alpha = 0.6553288 + 14667, 12137, 14610, 45531, // alpha = 0.68128 + 14684, 12054, 14627, 45490, // alpha = 0.7077349 + 14703, 11976, 14646, 45462, // alpha = 0.7346939 + 14722, 11902, 14664, 45429, // alpha = 0.7621567 + 14741, 11833, 14685, 45405, // alpha = 0.7901235 + 14763, 11768, 14706, 45373, // alpha = 0.8185941 + 14785, 11707, 14729, 45353, // alpha = 0.8475687 + 14809, 11649, 14752, 45333, // alpha = 0.8770471 + 14834, 11594, 14777, 45312, // alpha = 0.9070295 + 14861, 11541, 14804, 45295, // alpha = 0.9375157 + 14889, 11492, 14831, 45278, // alpha = 0.9685059 + 14919, 11445, 14860, 45267, // alpha = 1 + + // Cos (theta) = 0.9909297 + 11979, 21450, 18077, 50845, // alpha = 0.001 + 11979, 21450, 18077, 50845, // alpha = 0.001 + 11979, 21450, 18077, 50845, // alpha = 0.001007811 + 11979, 21431, 18061, 50829, // alpha = 0.002267574 + 11979, 21125, 17801, 50569, // alpha = 0.004031243 + 11979, 20634, 17361, 50128, // alpha = 0.006298816 + 11979, 20053, 16737, 49504, // alpha = 0.009070295 + 11979, 19593, 16311, 49076, // alpha = 0.01234568 + 11979, 19143, 15814, 48578, // alpha = 0.01612497 + 11979, 18747, 15478, 48241, // alpha = 0.02040816 + 11979, 18465, 15120, 47875, // alpha = 0.02519527 + 17976, 18082, 18269, 54287, // alpha = 0.03048627 + 17678, 17765, 17848, 53634, // alpha = 0.03628118 + 17434, 17521, 17547, 53139, // alpha = 0.04258 + 17041, 17250, 17250, 52540, // alpha = 0.04938272 + 16772, 16947, 16907, 52130, // alpha = 0.05668934 + 16557, 16704, 16649, 51630, // alpha = 0.06449988 + 16434, 16508, 16443, 51318, // alpha = 0.07281432 + 16196, 16313, 16198, 50919, // alpha = 0.08163266 + 15961, 16051, 15956, 50540, // alpha = 0.09095491 + 15829, 15835, 15762, 50294, // alpha = 0.1007811 + 15668, 15655, 15605, 49977, // alpha = 0.1111111 + 15586, 15503, 15483, 49697, // alpha = 0.1219451 + 15506, 15376, 15380, 49463, // alpha = 0.1332829 + 15413, 15174, 15236, 49255, // alpha = 0.1451247 + 15361, 14987, 15104, 49068, // alpha = 0.1574704 + 15283, 14827, 14997, 48837, // alpha = 0.17032 + 15203, 14688, 14904, 48631, // alpha = 0.1836735 + 15124, 14566, 14830, 48456, // alpha = 0.1975309 + 15045, 14460, 14764, 48300, // alpha = 0.2118922 + 15012, 14366, 14719, 48189, // alpha = 0.2267574 + 14944, 14231, 14671, 48008, // alpha = 0.2421265 + 14901, 14084, 14635, 47812, // alpha = 0.2579995 + 14848, 13953, 14601, 47627, // alpha = 0.2743765 + 14803, 13835, 14573, 47466, // alpha = 0.2912573 + 14763, 13730, 14553, 47330, // alpha = 0.308642 + 14714, 13634, 14533, 47193, // alpha = 0.3265306 + 14706, 13548, 14527, 47107, // alpha = 0.3449232 + 14671, 13470, 14515, 46907, // alpha = 0.3638196 + 14652, 13398, 14512, 46759, // alpha = 0.38322 + 14640, 13333, 14511, 46630, // alpha = 0.4031242 + 14630, 13235, 14511, 46517, // alpha = 0.4235324 + 14624, 13125, 14516, 46425, // alpha = 0.4444445 + 14625, 13025, 14522, 46345, // alpha = 0.4658605 + 14625, 12932, 14530, 46271, // alpha = 0.4877803 + 14630, 12846, 14539, 46216, // alpha = 0.5102041 + 14639, 12766, 14550, 46164, // alpha = 0.5331318 + 14644, 12692, 14560, 46115, // alpha = 0.5565634 + 14653, 12623, 14574, 46068, // alpha = 0.5804989 + 14664, 12559, 14586, 45995, // alpha = 0.6049383 + 14675, 12499, 14599, 45929, // alpha = 0.6298816 + 14689, 12444, 14616, 45870, // alpha = 0.6553288 + 14703, 12391, 14631, 45814, // alpha = 0.68128 + 14718, 12342, 14647, 45768, // alpha = 0.7077349 + 14735, 12296, 14665, 45722, // alpha = 0.7346939 + 14753, 12217, 14683, 45684, // alpha = 0.7621567 + 14771, 12135, 14703, 45645, // alpha = 0.7901235 + 14791, 12058, 14723, 45608, // alpha = 0.8185941 + 14812, 11985, 14745, 45576, // alpha = 0.8475687 + 14836, 11916, 14767, 45551, // alpha = 0.8770471 + 14860, 11851, 14791, 45519, // alpha = 0.9070295 + 14887, 11789, 14817, 45498, // alpha = 0.9375157 + 14914, 11730, 14844, 45468, // alpha = 0.9685059 + 14944, 11674, 14873, 45449, // alpha = 1 + + // Cos (theta) = 0.9876543 + 11979, 21452, 18079, 50847, // alpha = 0.001 + 11979, 21452, 18079, 50847, // alpha = 0.001 + 11979, 21452, 18079, 50847, // alpha = 0.001007811 + 11979, 21432, 18062, 50830, // alpha = 0.002267574 + 11979, 21111, 17790, 50557, // alpha = 0.004031243 + 11979, 20618, 17333, 50101, // alpha = 0.006298816 + 11979, 20033, 16720, 49487, // alpha = 0.009070295 + 11979, 19584, 16296, 49061, // alpha = 0.01234568 + 11979, 19140, 15811, 48575, // alpha = 0.01612497 + 11979, 18754, 15484, 48247, // alpha = 0.02040816 + 11979, 18481, 15147, 47902, // alpha = 0.02519527 + 18023, 18125, 18396, 54320, // alpha = 0.03048627 + 17731, 17816, 17962, 53703, // alpha = 0.03628118 + 17504, 17576, 17644, 53270, // alpha = 0.04258 + 17240, 17362, 17410, 52707, // alpha = 0.04938272 + 16953, 17057, 17056, 52310, // alpha = 0.05668934 + 16722, 16810, 16780, 51844, // alpha = 0.06449988 + 16536, 16608, 16570, 51451, // alpha = 0.07281432 + 16383, 16442, 16402, 51139, // alpha = 0.08163266 + 16194, 16225, 16146, 50765, // alpha = 0.09095491 + 15996, 15995, 15934, 50452, // alpha = 0.1007811 + 15817, 15803, 15761, 50210, // alpha = 0.1111111 + 15729, 15640, 15618, 49931, // alpha = 0.1219451 + 15600, 15501, 15502, 49628, // alpha = 0.1332829 + 15527, 15382, 15408, 49424, // alpha = 0.1451247 + 15479, 15201, 15304, 49267, // alpha = 0.1574704 + 15395, 15024, 15175, 49063, // alpha = 0.17032 + 15361, 14870, 15072, 48850, // alpha = 0.1836735 + 15286, 14735, 14986, 48659, // alpha = 0.1975309 + 15209, 14617, 14906, 48491, // alpha = 0.2118922 + 15136, 14512, 14840, 48342, // alpha = 0.2267574 + 15109, 14419, 14795, 48242, // alpha = 0.2421265 + 15040, 14337, 14747, 48117, // alpha = 0.2579995 + 14999, 14190, 14709, 47937, // alpha = 0.2743765 + 14946, 14057, 14675, 47754, // alpha = 0.2912573 + 14902, 13938, 14645, 47596, // alpha = 0.308642 + 14862, 13830, 14622, 47455, // alpha = 0.3265306 + 14811, 13732, 14599, 47321, // alpha = 0.3449232 + 14779, 13644, 14585, 47212, // alpha = 0.3638196 + 14765, 13563, 14577, 47130, // alpha = 0.38322 + 14740, 13488, 14569, 46985, // alpha = 0.4031242 + 14722, 13421, 14566, 46846, // alpha = 0.4235324 + 14706, 13358, 14565, 46722, // alpha = 0.4444445 + 14699, 13289, 14566, 46616, // alpha = 0.4658605 + 14697, 13183, 14571, 46522, // alpha = 0.4877803 + 14694, 13085, 14576, 46444, // alpha = 0.5102041 + 14692, 12994, 14582, 46372, // alpha = 0.5331318 + 14697, 12909, 14592, 46311, // alpha = 0.5565634 + 14703, 12831, 14602, 46261, // alpha = 0.5804989 + 14710, 12757, 14614, 46209, // alpha = 0.6049383 + 14718, 12689, 14626, 46165, // alpha = 0.6298816 + 14729, 12624, 14640, 46130, // alpha = 0.6553288 + 14741, 12564, 14654, 46095, // alpha = 0.68128 + 14756, 12508, 14669, 46051, // alpha = 0.7077349 + 14769, 12455, 14684, 45988, // alpha = 0.7346939 + 14786, 12405, 14704, 45942, // alpha = 0.7621567 + 14805, 12358, 14722, 45896, // alpha = 0.7901235 + 14823, 12314, 14741, 45853, // alpha = 0.8185941 + 14843, 12255, 14762, 45813, // alpha = 0.8475687 + 14865, 12176, 14784, 45774, // alpha = 0.8770471 + 14888, 12100, 14808, 45739, // alpha = 0.9070295 + 14915, 12029, 14832, 45714, // alpha = 0.9375157 + 14942, 11961, 14859, 45687, // alpha = 0.9685059 + 14972, 11897, 14888, 45657, // alpha = 1 + + // Cos (theta) = 0.983875 + 11979, 21453, 18079, 50847, // alpha = 0.001 + 11979, 21453, 18079, 50847, // alpha = 0.001 + 11979, 21453, 18079, 50847, // alpha = 0.001007811 + 11979, 21431, 18061, 50829, // alpha = 0.002267574 + 11979, 21095, 17776, 50544, // alpha = 0.004031243 + 11979, 20599, 17302, 50070, // alpha = 0.006298816 + 11979, 20009, 16700, 49467, // alpha = 0.009070295 + 11979, 19571, 16273, 49038, // alpha = 0.01234568 + 11979, 19127, 15800, 48564, // alpha = 0.01612497 + 11979, 18751, 15482, 48245, // alpha = 0.02040816 + 11979, 18485, 15154, 47909, // alpha = 0.02519527 + 18047, 18145, 18460, 54331, // alpha = 0.03048627 + 17762, 17844, 18044, 53736, // alpha = 0.03628118 + 17540, 17610, 17722, 53307, // alpha = 0.04258 + 17319, 17423, 17479, 52784, // alpha = 0.04938272 + 17034, 17135, 17184, 52380, // alpha = 0.05668934 + 16804, 16888, 16899, 51965, // alpha = 0.06449988 + 16614, 16685, 16674, 51556, // alpha = 0.07281432 + 16458, 16516, 16495, 51258, // alpha = 0.08163266 + 16356, 16366, 16317, 50928, // alpha = 0.09095491 + 16133, 16129, 16086, 50586, // alpha = 0.1007811 + 15948, 15928, 15898, 50326, // alpha = 0.1111111 + 15854, 15757, 15743, 50135, // alpha = 0.1219451 + 15714, 15610, 15615, 49803, // alpha = 0.1332829 + 15638, 15484, 15510, 49578, // alpha = 0.1451247 + 15584, 15375, 15424, 49406, // alpha = 0.1574704 + 15492, 15200, 15339, 49227, // alpha = 0.17032 + 15455, 15034, 15224, 49068, // alpha = 0.1836735 + 15394, 14889, 15116, 48834, // alpha = 0.1975309 + 15364, 14760, 15037, 48667, // alpha = 0.2118922 + 15300, 14646, 14966, 48514, // alpha = 0.2267574 + 15230, 14545, 14905, 48376, // alpha = 0.2421265 + 15180, 14455, 14854, 48264, // alpha = 0.2579995 + 15122, 14373, 14808, 48157, // alpha = 0.2743765 + 15073, 14265, 14767, 48001, // alpha = 0.2912573 + 15025, 14134, 14734, 47834, // alpha = 0.308642 + 14993, 14015, 14710, 47693, // alpha = 0.3265306 + 14945, 13906, 14682, 47548, // alpha = 0.3449232 + 14892, 13808, 14658, 47412, // alpha = 0.3638196 + 14861, 13718, 14642, 47305, // alpha = 0.38322 + 14846, 13636, 14633, 47222, // alpha = 0.4031242 + 14813, 13560, 14622, 47133, // alpha = 0.4235324 + 14798, 13491, 14617, 47018, // alpha = 0.4444445 + 14780, 13427, 14614, 46888, // alpha = 0.4658605 + 14769, 13368, 14613, 46774, // alpha = 0.4877803 + 14760, 13313, 14615, 46674, // alpha = 0.5102041 + 14758, 13212, 14621, 46595, // alpha = 0.5331318 + 14756, 13117, 14627, 46518, // alpha = 0.5565634 + 14757, 13029, 14634, 46447, // alpha = 0.5804989 + 14764, 12947, 14643, 46390, // alpha = 0.6049383 + 14770, 12870, 14654, 46338, // alpha = 0.6298816 + 14775, 12798, 14666, 46289, // alpha = 0.6553288 + 14784, 12731, 14678, 46241, // alpha = 0.68128 + 14796, 12668, 14692, 46207, // alpha = 0.7077349 + 14810, 12608, 14708, 46172, // alpha = 0.7346939 + 14824, 12552, 14725, 46142, // alpha = 0.7621567 + 14840, 12499, 14743, 46113, // alpha = 0.7901235 + 14858, 12449, 14761, 46089, // alpha = 0.8185941 + 14877, 12402, 14781, 46049, // alpha = 0.8475687 + 14898, 12357, 14802, 46005, // alpha = 0.8770471 + 14920, 12315, 14825, 45959, // alpha = 0.9070295 + 14945, 12261, 14849, 45928, // alpha = 0.9375157 + 14971, 12184, 14876, 45892, // alpha = 0.9685059 + 15001, 12112, 14903, 45860, // alpha = 1 + + // Cos (theta) = 0.9795918 + 11979, 21452, 18079, 50847, // alpha = 0.001 + 11979, 21452, 18079, 50847, // alpha = 0.001 + 11979, 21452, 18079, 50847, // alpha = 0.001007811 + 11979, 21429, 18060, 50828, // alpha = 0.002267574 + 11979, 21077, 17761, 50528, // alpha = 0.004031243 + 11979, 20580, 17269, 50036, // alpha = 0.006298816 + 11979, 19982, 16677, 49444, // alpha = 0.009070295 + 11979, 19554, 16245, 49010, // alpha = 0.01234568 + 11979, 19108, 15784, 48548, // alpha = 0.01612497 + 11979, 18742, 15474, 48237, // alpha = 0.02040816 + 11979, 18482, 15149, 47904, // alpha = 0.02519527 + 18054, 18150, 18492, 54328, // alpha = 0.03048627 + 17777, 17857, 18104, 53746, // alpha = 0.03628118 + 17562, 17629, 17778, 53326, // alpha = 0.04258 + 17370, 17446, 17532, 52827, // alpha = 0.04938272 + 17091, 17188, 17281, 52425, // alpha = 0.05668934 + 16863, 16944, 16990, 52050, // alpha = 0.06449988 + 16730, 16742, 16755, 51679, // alpha = 0.07281432 + 16568, 16573, 16568, 51364, // alpha = 0.08163266 + 16431, 16431, 16420, 51056, // alpha = 0.09095491 + 16250, 16237, 16217, 50695, // alpha = 0.1007811 + 16057, 16031, 16017, 50421, // alpha = 0.1111111 + 15961, 15855, 15852, 50241, // alpha = 0.1219451 + 15816, 15704, 15713, 49955, // alpha = 0.1332829 + 15736, 15572, 15602, 49717, // alpha = 0.1451247 + 15636, 15458, 15506, 49495, // alpha = 0.1574704 + 15581, 15356, 15427, 49335, // alpha = 0.17032 + 15522, 15181, 15362, 49197, // alpha = 0.1836735 + 15466, 15026, 15252, 49002, // alpha = 0.1975309 + 15428, 14890, 15155, 48812, // alpha = 0.2118922 + 15391, 14768, 15076, 48647, // alpha = 0.2267574 + 15342, 14660, 15007, 48498, // alpha = 0.2421265 + 15285, 14563, 14949, 48374, // alpha = 0.2579995 + 15245, 14475, 14901, 48272, // alpha = 0.2743765 + 15184, 14397, 14857, 48171, // alpha = 0.2912573 + 15152, 14315, 14823, 48053, // alpha = 0.308642 + 15089, 14187, 14788, 47880, // alpha = 0.3265306 + 15060, 14069, 14761, 47746, // alpha = 0.3449232 + 15015, 13962, 14735, 47611, // alpha = 0.3638196 + 14973, 13865, 14712, 47489, // alpha = 0.38322 + 14961, 13775, 14701, 47399, // alpha = 0.4031242 + 14918, 13692, 14683, 47296, // alpha = 0.4235324 + 14892, 13617, 14673, 47211, // alpha = 0.4444445 + 14868, 13547, 14667, 47134, // alpha = 0.4658605 + 14850, 13482, 14661, 47029, // alpha = 0.4877803 + 14837, 13422, 14660, 46915, // alpha = 0.5102041 + 14827, 13366, 14662, 46812, // alpha = 0.5331318 + 14824, 13314, 14664, 46723, // alpha = 0.5565634 + 14820, 13219, 14669, 46644, // alpha = 0.5804989 + 14817, 13129, 14676, 46569, // alpha = 0.6049383 + 14820, 13044, 14684, 46506, // alpha = 0.6298816 + 14827, 12965, 14695, 46453, // alpha = 0.6553288 + 14832, 12891, 14706, 46398, // alpha = 0.68128 + 14840, 12821, 14718, 46351, // alpha = 0.7077349 + 14853, 12755, 14732, 46310, // alpha = 0.7346939 + 14865, 12693, 14747, 46276, // alpha = 0.7621567 + 14880, 12634, 14764, 46241, // alpha = 0.7901235 + 14896, 12579, 14782, 46208, // alpha = 0.8185941 + 14914, 12527, 14801, 46180, // alpha = 0.8475687 + 14934, 12477, 14822, 46153, // alpha = 0.8770471 + 14954, 12430, 14844, 46128, // alpha = 0.9070295 + 14978, 12385, 14867, 46105, // alpha = 0.9375157 + 15004, 12343, 14892, 46085, // alpha = 0.9685059 + 15033, 12303, 14920, 46057, // alpha = 1 + + // Cos (theta) = 0.9748048 + 11979, 21451, 18078, 50846, // alpha = 0.001 + 11979, 21451, 18078, 50846, // alpha = 0.001 + 11979, 21451, 18078, 50846, // alpha = 0.001007811 + 11979, 21426, 18057, 50825, // alpha = 0.002267574 + 11979, 21057, 17744, 50512, // alpha = 0.004031243 + 11979, 20559, 17234, 50001, // alpha = 0.006298816 + 11979, 19954, 16654, 49420, // alpha = 0.009070295 + 11979, 19536, 16214, 48979, // alpha = 0.01234568 + 11979, 19086, 15765, 48529, // alpha = 0.01612497 + 11979, 18728, 15462, 48225, // alpha = 0.02040816 + 11979, 18475, 15137, 47892, // alpha = 0.02519527 + 18051, 18145, 18512, 54315, // alpha = 0.03048627 + 17783, 17860, 18145, 53740, // alpha = 0.03628118 + 17572, 17638, 17817, 53329, // alpha = 0.04258 + 17400, 17460, 17571, 52847, // alpha = 0.04938272 + 17129, 17221, 17357, 52450, // alpha = 0.05668934 + 16972, 16983, 17047, 52173, // alpha = 0.06449988 + 16778, 16784, 16817, 51740, // alpha = 0.07281432 + 16616, 16616, 16632, 51418, // alpha = 0.08163266 + 16480, 16474, 16480, 51153, // alpha = 0.09095491 + 16343, 16323, 16326, 50783, // alpha = 0.1007811 + 16227, 16115, 16116, 50544, // alpha = 0.1111111 + 16052, 15937, 15947, 50313, // alpha = 0.1219451 + 15902, 15782, 15803, 50083, // alpha = 0.1332829 + 15821, 15647, 15682, 49831, // alpha = 0.1451247 + 15715, 15529, 15580, 49596, // alpha = 0.1574704 + 15659, 15426, 15498, 49431, // alpha = 0.17032 + 15573, 15310, 15425, 49265, // alpha = 0.1836735 + 15535, 15149, 15364, 49154, // alpha = 0.1975309 + 15481, 15005, 15267, 48937, // alpha = 0.2118922 + 15456, 14878, 15181, 48780, // alpha = 0.2267574 + 15416, 14764, 15107, 48622, // alpha = 0.2421265 + 15380, 14661, 15041, 48483, // alpha = 0.2579995 + 15354, 14569, 14989, 48376, // alpha = 0.2743765 + 15287, 14485, 14939, 48266, // alpha = 0.2912573 + 15249, 14409, 14901, 48179, // alpha = 0.308642 + 15203, 14341, 14864, 48065, // alpha = 0.3265306 + 15163, 14220, 14835, 47919, // alpha = 0.3449232 + 15128, 14106, 14807, 47788, // alpha = 0.3638196 + 15075, 14001, 14779, 47649, // alpha = 0.38322 + 15038, 13905, 14758, 47532, // alpha = 0.4031242 + 15026, 13816, 14747, 47448, // alpha = 0.4235324 + 14984, 13735, 14730, 47348, // alpha = 0.4444445 + 14955, 13659, 14718, 47263, // alpha = 0.4658605 + 14932, 13589, 14711, 47187, // alpha = 0.4877803 + 14914, 13524, 14705, 47122, // alpha = 0.5102041 + 14898, 13464, 14701, 47019, // alpha = 0.5331318 + 14889, 13408, 14703, 46922, // alpha = 0.5565634 + 14883, 13356, 14706, 46832, // alpha = 0.5804989 + 14879, 13301, 14710, 46748, // alpha = 0.6049383 + 14878, 13209, 14716, 46676, // alpha = 0.6298816 + 14879, 13123, 14725, 46605, // alpha = 0.6553288 + 14886, 13042, 14735, 46549, // alpha = 0.68128 + 14890, 12966, 14746, 46493, // alpha = 0.7077349 + 14898, 12895, 14758, 46446, // alpha = 0.7346939 + 14909, 12827, 14772, 46403, // alpha = 0.7621567 + 14920, 12763, 14787, 46360, // alpha = 0.7901235 + 14936, 12703, 14804, 46324, // alpha = 0.8185941 + 14952, 12646, 14822, 46291, // alpha = 0.8475687 + 14971, 12592, 14843, 46262, // alpha = 0.8770471 + 14990, 12541, 14863, 46231, // alpha = 0.9070295 + 15012, 12492, 14886, 46204, // alpha = 0.9375157 + 15037, 12445, 14911, 46181, // alpha = 0.9685059 + 15065, 12401, 14938, 46158, // alpha = 1 + + // Cos (theta) = 0.9695137 + 11979, 21449, 18077, 50845, // alpha = 0.001 + 11979, 21449, 18077, 50845, // alpha = 0.001 + 11979, 21449, 18077, 50845, // alpha = 0.001007811 + 11979, 21422, 18054, 50821, // alpha = 0.002267574 + 11979, 21036, 17726, 50494, // alpha = 0.004031243 + 11979, 20538, 17198, 49966, // alpha = 0.006298816 + 11979, 19925, 16629, 49396, // alpha = 0.009070295 + 11979, 19517, 16182, 48947, // alpha = 0.01234568 + 11979, 19061, 15743, 48507, // alpha = 0.01612497 + 11979, 18712, 15448, 48211, // alpha = 0.02040816 + 18388, 18465, 18840, 54765, // alpha = 0.02519527 + 18043, 18133, 18524, 54297, // alpha = 0.03048627 + 17781, 17856, 18170, 53722, // alpha = 0.03628118 + 17576, 17639, 17844, 53323, // alpha = 0.04258 + 17458, 17466, 17588, 52904, // alpha = 0.04938272 + 17230, 17240, 17394, 52504, // alpha = 0.05668934 + 17001, 17007, 17102, 52202, // alpha = 0.06449988 + 16812, 16812, 16868, 51775, // alpha = 0.07281432 + 16651, 16647, 16682, 51454, // alpha = 0.08163266 + 16515, 16507, 16529, 51211, // alpha = 0.09095491 + 16400, 16387, 16402, 50848, // alpha = 0.1007811 + 16303, 16182, 16202, 50607, // alpha = 0.1111111 + 16126, 16003, 16028, 50369, // alpha = 0.1219451 + 15976, 15846, 15879, 50182, // alpha = 0.1332829 + 15893, 15710, 15753, 49928, // alpha = 0.1451247 + 15783, 15590, 15648, 49683, // alpha = 0.1574704 + 15728, 15484, 15559, 49513, // alpha = 0.17032 + 15637, 15391, 15483, 49339, // alpha = 0.1836735 + 15600, 15256, 15419, 49222, // alpha = 0.1975309 + 15539, 15108, 15364, 49058, // alpha = 0.2118922 + 15508, 14975, 15276, 48887, // alpha = 0.2267574 + 15459, 14856, 15193, 48713, // alpha = 0.2421265 + 15423, 14749, 15125, 48569, // alpha = 0.2579995 + 15396, 14653, 15065, 48453, // alpha = 0.2743765 + 15375, 14565, 15015, 48352, // alpha = 0.2912573 + 15333, 14486, 14970, 48254, // alpha = 0.308642 + 15289, 14414, 14931, 48167, // alpha = 0.3265306 + 15245, 14348, 14898, 48056, // alpha = 0.3449232 + 15218, 14238, 14872, 47929, // alpha = 0.3638196 + 15173, 14127, 14843, 47793, // alpha = 0.38322 + 15126, 14026, 14818, 47666, // alpha = 0.4031242 + 15090, 13932, 14797, 47559, // alpha = 0.4235324 + 15081, 13845, 14787, 47478, // alpha = 0.4444445 + 15042, 13764, 14772, 47384, // alpha = 0.4658605 + 15014, 13690, 14760, 47304, // alpha = 0.4877803 + 14996, 13621, 14752, 47233, // alpha = 0.5102041 + 14972, 13556, 14746, 47166, // alpha = 0.5331318 + 14957, 13496, 14743, 47106, // alpha = 0.5565634 + 14952, 13440, 14744, 47015, // alpha = 0.5804989 + 14941, 13388, 14746, 46922, // alpha = 0.6049383 + 14936, 13339, 14751, 46836, // alpha = 0.6298816 + 14933, 13273, 14757, 46761, // alpha = 0.6553288 + 14937, 13186, 14765, 46696, // alpha = 0.68128 + 14941, 13105, 14774, 46634, // alpha = 0.7077349 + 14946, 13028, 14785, 46576, // alpha = 0.7346939 + 14953, 12955, 14797, 46528, // alpha = 0.7621567 + 14964, 12886, 14812, 46479, // alpha = 0.7901235 + 14975, 12821, 14828, 46437, // alpha = 0.8185941 + 14993, 12760, 14844, 46400, // alpha = 0.8475687 + 15010, 12701, 14864, 46365, // alpha = 0.8770471 + 15026, 12646, 14883, 46330, // alpha = 0.9070295 + 15049, 12593, 14906, 46302, // alpha = 0.9375157 + 15072, 12543, 14929, 46273, // alpha = 0.9685059 + 15098, 12495, 14955, 46244, // alpha = 1 + + // Cos (theta) = 0.9637188 + 11979, 21447, 18075, 50842, // alpha = 0.001 + 11979, 21447, 18075, 50842, // alpha = 0.001 + 11979, 21447, 18075, 50842, // alpha = 0.001007811 + 11979, 21417, 18049, 50817, // alpha = 0.002267574 + 11979, 21014, 17707, 50475, // alpha = 0.004031243 + 11979, 20517, 17162, 49929, // alpha = 0.006298816 + 11979, 19895, 16604, 49371, // alpha = 0.009070295 + 11979, 19497, 16149, 48913, // alpha = 0.01234568 + 11979, 19034, 15721, 48485, // alpha = 0.01612497 + 11979, 18694, 15433, 48196, // alpha = 0.02040816 + 18367, 18452, 18843, 54725, // alpha = 0.02519527 + 18088, 18117, 18522, 54301, // alpha = 0.03048627 + 17836, 17847, 18172, 53743, // alpha = 0.03628118 + 17628, 17635, 17848, 53346, // alpha = 0.04258 + 17460, 17466, 17606, 52892, // alpha = 0.04938272 + 17242, 17249, 17419, 52503, // alpha = 0.05668934 + 17021, 17021, 17139, 52217, // alpha = 0.06449988 + 16833, 16830, 16907, 51794, // alpha = 0.07281432 + 16676, 16668, 16721, 51475, // alpha = 0.08163266 + 16542, 16530, 16566, 51234, // alpha = 0.09095491 + 16477, 16411, 16433, 50957, // alpha = 0.1007811 + 16363, 16233, 16271, 50653, // alpha = 0.1111111 + 16187, 16055, 16095, 50414, // alpha = 0.1219451 + 16077, 15899, 15941, 50244, // alpha = 0.1332829 + 15950, 15762, 15814, 50005, // alpha = 0.1451247 + 15843, 15641, 15707, 49756, // alpha = 0.1574704 + 15788, 15534, 15614, 49580, // alpha = 0.17032 + 15694, 15439, 15535, 49401, // alpha = 0.1836735 + 15657, 15348, 15468, 49280, // alpha = 0.1975309 + 15592, 15197, 15410, 49158, // alpha = 0.2118922 + 15549, 15061, 15361, 48972, // alpha = 0.2267574 + 15510, 14939, 15275, 48803, // alpha = 0.2421265 + 15472, 14828, 15201, 48655, // alpha = 0.2579995 + 15438, 14728, 15137, 48526, // alpha = 0.2743765 + 15418, 14638, 15085, 48425, // alpha = 0.2912573 + 15386, 14555, 15036, 48317, // alpha = 0.308642 + 15369, 14480, 14996, 48236, // alpha = 0.3265306 + 15330, 14411, 14958, 48154, // alpha = 0.3449232 + 15287, 14348, 14928, 48038, // alpha = 0.3638196 + 15260, 14244, 14903, 47920, // alpha = 0.38322 + 15213, 14137, 14876, 47792, // alpha = 0.4031242 + 15178, 14038, 14854, 47680, // alpha = 0.4235324 + 15166, 13947, 14840, 47590, // alpha = 0.4444445 + 15126, 13862, 14823, 47495, // alpha = 0.4658605 + 15098, 13784, 14809, 47411, // alpha = 0.4877803 + 15071, 13711, 14797, 47329, // alpha = 0.5102041 + 15049, 13643, 14790, 47261, // alpha = 0.5331318 + 15029, 13579, 14784, 47198, // alpha = 0.5565634 + 15016, 13520, 14783, 47144, // alpha = 0.5804989 + 15007, 13464, 14783, 47082, // alpha = 0.6049383 + 14996, 13412, 14784, 46986, // alpha = 0.6298816 + 14991, 13363, 14789, 46907, // alpha = 0.6553288 + 14987, 13317, 14793, 46830, // alpha = 0.68128 + 14990, 13235, 14803, 46763, // alpha = 0.7077349 + 14997, 13153, 14813, 46706, // alpha = 0.7346939 + 15000, 13076, 14823, 46645, // alpha = 0.7621567 + 15007, 13003, 14836, 46591, // alpha = 0.7901235 + 15020, 12933, 14852, 46546, // alpha = 0.8185941 + 15033, 12868, 14866, 46501, // alpha = 0.8475687 + 15050, 12805, 14885, 46463, // alpha = 0.8770471 + 15066, 12746, 14904, 46426, // alpha = 0.9070295 + 15086, 12690, 14925, 46389, // alpha = 0.9375157 + 15108, 12636, 14947, 46359, // alpha = 0.9685059 + 15135, 12585, 14972, 46329, // alpha = 1 + + // Cos (theta) = 0.95742 + 11979, 21444, 18072, 50840, // alpha = 0.001 + 11979, 21444, 18072, 50840, // alpha = 0.001 + 11979, 21444, 18072, 50840, // alpha = 0.001007811 + 11979, 21411, 18044, 50812, // alpha = 0.002267574 + 11979, 20991, 17688, 50455, // alpha = 0.004031243 + 11979, 20495, 17125, 49892, // alpha = 0.006298816 + 11979, 19865, 16578, 49345, // alpha = 0.009070295 + 11979, 19477, 16114, 48879, // alpha = 0.01234568 + 11979, 19006, 15697, 48461, // alpha = 0.01612497 + 11979, 18674, 15416, 48179, // alpha = 0.02040816 + 18341, 18439, 18839, 54684, // alpha = 0.02519527 + 18087, 18098, 18521, 54281, // alpha = 0.03048627 + 17825, 17834, 18174, 53712, // alpha = 0.03628118 + 17622, 17628, 17857, 53327, // alpha = 0.04258 + 17459, 17463, 17617, 52872, // alpha = 0.04938272 + 17247, 17248, 17432, 52493, // alpha = 0.05668934 + 17030, 17026, 17167, 52210, // alpha = 0.06449988 + 16846, 16840, 16936, 51800, // alpha = 0.07281432 + 16693, 16681, 16748, 51488, // alpha = 0.08163266 + 16561, 16546, 16595, 51248, // alpha = 0.09095491 + 16498, 16429, 16463, 50988, // alpha = 0.1007811 + 16397, 16272, 16329, 50688, // alpha = 0.1111111 + 16234, 16095, 16150, 50445, // alpha = 0.1219451 + 16139, 15940, 15995, 50281, // alpha = 0.1332829 + 16003, 15803, 15866, 50067, // alpha = 0.1451247 + 15894, 15682, 15755, 49814, // alpha = 0.1574704 + 15838, 15575, 15661, 49635, // alpha = 0.17032 + 15742, 15479, 15580, 49450, // alpha = 0.1836735 + 15704, 15393, 15511, 49330, // alpha = 0.1975309 + 15633, 15273, 15450, 49199, // alpha = 0.2118922 + 15595, 15135, 15399, 49054, // alpha = 0.2267574 + 15556, 15011, 15350, 48885, // alpha = 0.2421265 + 15516, 14898, 15271, 48728, // alpha = 0.2579995 + 15482, 14795, 15204, 48596, // alpha = 0.2743765 + 15456, 14702, 15148, 48485, // alpha = 0.2912573 + 15426, 14617, 15096, 48380, // alpha = 0.308642 + 15403, 14539, 15053, 48290, // alpha = 0.3265306 + 15385, 14468, 15016, 48214, // alpha = 0.3449232 + 15353, 14403, 14981, 48133, // alpha = 0.3638196 + 15330, 14343, 14953, 48014, // alpha = 0.38322 + 15286, 14238, 14928, 47888, // alpha = 0.4031242 + 15243, 14136, 14900, 47768, // alpha = 0.4235324 + 15239, 14041, 14889, 47689, // alpha = 0.4444445 + 15206, 13952, 14870, 47591, // alpha = 0.4658605 + 15168, 13870, 14855, 47499, // alpha = 0.4877803 + 15140, 13794, 14840, 47416, // alpha = 0.5102041 + 15125, 13723, 14833, 47350, // alpha = 0.5331318 + 15095, 13656, 14823, 47278, // alpha = 0.5565634 + 15078, 13594, 14818, 47218, // alpha = 0.5804989 + 15065, 13535, 14818, 47164, // alpha = 0.6049383 + 15057, 13481, 14819, 47117, // alpha = 0.6298816 + 15053, 13429, 14821, 47043, // alpha = 0.6553288 + 15044, 13380, 14824, 46957, // alpha = 0.68128 + 15044, 13335, 14831, 46888, // alpha = 0.7077349 + 15044, 13271, 14840, 46820, // alpha = 0.7346939 + 15048, 13189, 14850, 46755, // alpha = 0.7621567 + 15054, 13112, 14862, 46700, // alpha = 0.7901235 + 15061, 13039, 14874, 46645, // alpha = 0.8185941 + 15075, 12969, 14889, 46600, // alpha = 0.8475687 + 15089, 12903, 14906, 46556, // alpha = 0.8770471 + 15106, 12840, 14924, 46515, // alpha = 0.9070295 + 15124, 12781, 14944, 46476, // alpha = 0.9375157 + 15144, 12724, 14966, 46439, // alpha = 0.9685059 + 15168, 12670, 14990, 46405, // alpha = 1 + + // Cos (theta) = 0.9506173 + 11979, 21440, 18069, 50836, // alpha = 0.001 + 11979, 21440, 18069, 50836, // alpha = 0.001 + 11979, 21440, 18069, 50836, // alpha = 0.001007811 + 11979, 21405, 18039, 50806, // alpha = 0.002267574 + 11979, 20967, 17667, 50435, // alpha = 0.004031243 + 11979, 20466, 17088, 49855, // alpha = 0.006298816 + 11979, 19835, 16553, 49320, // alpha = 0.009070295 + 11979, 19457, 16080, 48844, // alpha = 0.01234568 + 11979, 18977, 15673, 48437, // alpha = 0.01612497 + 11979, 18653, 15399, 48162, // alpha = 0.02040816 + 18315, 18416, 18829, 54640, // alpha = 0.02519527 + 18067, 18077, 18511, 54243, // alpha = 0.03048627 + 17811, 17819, 18172, 53677, // alpha = 0.03628118 + 17612, 17617, 17860, 53303, // alpha = 0.04258 + 17455, 17456, 17622, 52845, // alpha = 0.04938272 + 17244, 17242, 17439, 52477, // alpha = 0.05668934 + 17031, 17025, 17184, 52195, // alpha = 0.06449988 + 16853, 16843, 16955, 51793, // alpha = 0.07281432 + 16703, 16688, 16770, 51490, // alpha = 0.08163266 + 16630, 16556, 16609, 51293, // alpha = 0.09095491 + 16514, 16441, 16485, 51006, // alpha = 0.1007811 + 16414, 16299, 16375, 50707, // alpha = 0.1111111 + 16273, 16125, 16194, 50469, // alpha = 0.1219451 + 16180, 15971, 16040, 50305, // alpha = 0.1332829 + 16044, 15836, 15909, 50113, // alpha = 0.1451247 + 15953, 15716, 15797, 49873, // alpha = 0.1574704 + 15878, 15608, 15701, 49678, // alpha = 0.17032 + 15786, 15512, 15620, 49493, // alpha = 0.1836735 + 15747, 15427, 15549, 49369, // alpha = 0.1975309 + 15673, 15338, 15486, 49235, // alpha = 0.2118922 + 15636, 15199, 15433, 49126, // alpha = 0.2267574 + 15596, 15073, 15387, 48948, // alpha = 0.2421265 + 15555, 14958, 15336, 48793, // alpha = 0.2579995 + 15506, 14854, 15260, 48641, // alpha = 0.2743765 + 15482, 14759, 15200, 48530, // alpha = 0.2912573 + 15458, 14672, 15150, 48427, // alpha = 0.308642 + 15433, 14593, 15104, 48335, // alpha = 0.3265306 + 15413, 14520, 15064, 48255, // alpha = 0.3449232 + 15392, 14452, 15029, 48180, // alpha = 0.3638196 + 15375, 14390, 14999, 48099, // alpha = 0.38322 + 15359, 14330, 14975, 47979, // alpha = 0.4031242 + 15311, 14224, 14945, 47854, // alpha = 0.4235324 + 15286, 14126, 14927, 47757, // alpha = 0.4444445 + 15275, 14035, 14914, 47674, // alpha = 0.4658605 + 15239, 13950, 14898, 47580, // alpha = 0.4877803 + 15211, 13871, 14885, 47499, // alpha = 0.5102041 + 15188, 13796, 14872, 47423, // alpha = 0.5331318 + 15165, 13727, 14863, 47354, // alpha = 0.5565634 + 15144, 13662, 14856, 47289, // alpha = 0.5804989 + 15128, 13601, 14852, 47231, // alpha = 0.6049383 + 15119, 13544, 14852, 47182, // alpha = 0.6298816 + 15104, 13490, 14852, 47132, // alpha = 0.6553288 + 15097, 13440, 14854, 47071, // alpha = 0.68128 + 15092, 13392, 14860, 46996, // alpha = 0.7077349 + 15091, 13346, 14866, 46925, // alpha = 0.7346939 + 15096, 13295, 14876, 46860, // alpha = 0.7621567 + 15098, 13214, 14887, 46796, // alpha = 0.7901235 + 15104, 13137, 14897, 46738, // alpha = 0.8185941 + 15116, 13064, 14911, 46688, // alpha = 0.8475687 + 15127, 12995, 14927, 46640, // alpha = 0.8770471 + 15142, 12929, 14944, 46593, // alpha = 0.9070295 + 15160, 12866, 14963, 46552, // alpha = 0.9375157 + 15180, 12806, 14984, 46512, // alpha = 0.9685059 + 15203, 12749, 15007, 46473, // alpha = 1 + + // Cos (theta) = 0.9433107 + 11979, 21435, 18065, 50833, // alpha = 0.001 + 11979, 21435, 18065, 50833, // alpha = 0.001 + 11979, 21435, 18065, 50833, // alpha = 0.001007811 + 11979, 21397, 18032, 50800, // alpha = 0.002267574 + 11979, 20942, 17646, 50414, // alpha = 0.004031243 + 11979, 20422, 17051, 49818, // alpha = 0.006298816 + 11979, 19805, 16527, 49294, // alpha = 0.009070295 + 11979, 19417, 16045, 48810, // alpha = 0.01234568 + 11979, 18948, 15649, 48412, // alpha = 0.01612497 + 11979, 18632, 15381, 48144, // alpha = 0.02040816 + 18287, 18384, 18816, 54596, // alpha = 0.02519527 + 18045, 18053, 18509, 54174, // alpha = 0.03048627 + 17795, 17802, 18165, 53639, // alpha = 0.03628118 + 17602, 17605, 17855, 53279, // alpha = 0.04258 + 17447, 17448, 17622, 52811, // alpha = 0.04938272 + 17235, 17231, 17442, 52457, // alpha = 0.05668934 + 17028, 17019, 17193, 52168, // alpha = 0.06449988 + 16855, 16841, 16966, 51780, // alpha = 0.07281432 + 16707, 16690, 16782, 51483, // alpha = 0.08163266 + 16637, 16561, 16623, 51293, // alpha = 0.09095491 + 16525, 16448, 16499, 51015, // alpha = 0.1007811 + 16427, 16317, 16395, 50720, // alpha = 0.1111111 + 16300, 16146, 16229, 50482, // alpha = 0.1219451 + 16210, 15995, 16073, 50321, // alpha = 0.1332829 + 16075, 15861, 15943, 50146, // alpha = 0.1451247 + 15998, 15742, 15832, 49916, // alpha = 0.1574704 + 15913, 15635, 15735, 49712, // alpha = 0.17032 + 15818, 15540, 15650, 49524, // alpha = 0.1836735 + 15783, 15454, 15581, 49400, // alpha = 0.1975309 + 15707, 15376, 15516, 49263, // alpha = 0.2118922 + 15670, 15253, 15463, 49167, // alpha = 0.2267574 + 15623, 15126, 15415, 48997, // alpha = 0.2421265 + 15576, 15010, 15373, 48828, // alpha = 0.2579995 + 15540, 14905, 15316, 48693, // alpha = 0.2743765 + 15514, 14809, 15253, 48577, // alpha = 0.2912573 + 15490, 14720, 15198, 48473, // alpha = 0.308642 + 15459, 14640, 15149, 48371, // alpha = 0.3265306 + 15444, 14565, 15109, 48294, // alpha = 0.3449232 + 15423, 14497, 15073, 48219, // alpha = 0.3638196 + 15396, 14433, 15040, 48144, // alpha = 0.38322 + 15391, 14375, 15015, 48054, // alpha = 0.4031242 + 15367, 14305, 14988, 47929, // alpha = 0.4235324 + 15342, 14204, 14966, 47823, // alpha = 0.4444445 + 15339, 14110, 14954, 47744, // alpha = 0.4658605 + 15300, 14022, 14936, 47646, // alpha = 0.4877803 + 15273, 13940, 14921, 47564, // alpha = 0.5102041 + 15242, 13864, 14907, 47483, // alpha = 0.5331318 + 15228, 13792, 14900, 47417, // alpha = 0.5565634 + 15201, 13725, 14890, 47349, // alpha = 0.5804989 + 15182, 13662, 14885, 47288, // alpha = 0.6049383 + 15168, 13603, 14882, 47235, // alpha = 0.6298816 + 15159, 13547, 14882, 47186, // alpha = 0.6553288 + 15150, 13494, 14883, 47143, // alpha = 0.68128 + 15141, 13445, 14887, 47095, // alpha = 0.7077349 + 15140, 13397, 14895, 47023, // alpha = 0.7346939 + 15141, 13353, 14899, 46947, // alpha = 0.7621567 + 15142, 13309, 14909, 46885, // alpha = 0.7901235 + 15147, 13229, 14919, 46823, // alpha = 0.8185941 + 15155, 13153, 14934, 46770, // alpha = 0.8475687 + 15165, 13081, 14947, 46715, // alpha = 0.8770471 + 15180, 13012, 14963, 46667, // alpha = 0.9070295 + 15196, 12946, 14982, 46624, // alpha = 0.9375157 + 15215, 12883, 15001, 46578, // alpha = 0.9685059 + 15236, 12824, 15023, 46540, // alpha = 1 + + // Cos (theta) = 0.9355001 + 11979, 21430, 18060, 50828, // alpha = 0.001 + 11979, 21430, 18060, 50828, // alpha = 0.001 + 11979, 21430, 18060, 50828, // alpha = 0.001007811 + 11979, 21388, 18025, 50793, // alpha = 0.002267574 + 11979, 20917, 17625, 50392, // alpha = 0.004031243 + 11979, 20378, 17013, 49781, // alpha = 0.006298816 + 11979, 19775, 16502, 49269, // alpha = 0.009070295 + 11979, 19376, 16010, 48775, // alpha = 0.01234568 + 11979, 18919, 15624, 48387, // alpha = 0.01612497 + 11979, 18611, 15363, 48123, // alpha = 0.02040816 + 18257, 18352, 18799, 54552, // alpha = 0.02519527 + 18021, 18029, 18498, 54114, // alpha = 0.03048627 + 17778, 17783, 18149, 53599, // alpha = 0.03628118 + 17588, 17591, 17847, 53251, // alpha = 0.04258 + 17437, 17437, 17617, 52774, // alpha = 0.04938272 + 17223, 17216, 17440, 52432, // alpha = 0.05668934 + 17021, 17009, 17193, 52137, // alpha = 0.06449988 + 16852, 16836, 16970, 51760, // alpha = 0.07281432 + 16769, 16688, 16779, 51517, // alpha = 0.08163266 + 16641, 16561, 16632, 51287, // alpha = 0.09095491 + 16531, 16452, 16510, 51011, // alpha = 0.1007811 + 16435, 16328, 16407, 50720, // alpha = 0.1111111 + 16369, 16159, 16250, 50514, // alpha = 0.1219451 + 16232, 16011, 16100, 50328, // alpha = 0.1332829 + 16099, 15879, 15972, 50164, // alpha = 0.1451247 + 16048, 15761, 15858, 49958, // alpha = 0.1574704 + 15941, 15656, 15761, 49735, // alpha = 0.17032 + 15847, 15561, 15679, 49548, // alpha = 0.1836735 + 15811, 15476, 15605, 49424, // alpha = 0.1975309 + 15736, 15399, 15543, 49287, // alpha = 0.2118922 + 15691, 15297, 15487, 49184, // alpha = 0.2267574 + 15652, 15170, 15440, 49041, // alpha = 0.2421265 + 15604, 15054, 15398, 48871, // alpha = 0.2579995 + 15569, 14948, 15361, 48732, // alpha = 0.2743765 + 15539, 14851, 15297, 48610, // alpha = 0.2912573 + 15519, 14762, 15243, 48510, // alpha = 0.308642 + 15488, 14681, 15193, 48410, // alpha = 0.3265306 + 15472, 14605, 15150, 48330, // alpha = 0.3449232 + 15451, 14536, 15114, 48251, // alpha = 0.3638196 + 15422, 14471, 15077, 48175, // alpha = 0.38322 + 15414, 14412, 15052, 48107, // alpha = 0.4031242 + 15394, 14356, 15025, 47986, // alpha = 0.4235324 + 15374, 14273, 15001, 47877, // alpha = 0.4444445 + 15361, 14177, 14980, 47780, // alpha = 0.4658605 + 15355, 14087, 14970, 47703, // alpha = 0.4877803 + 15322, 14004, 14953, 47616, // alpha = 0.5102041 + 15299, 13925, 14939, 47538, // alpha = 0.5331318 + 15276, 13852, 14930, 47466, // alpha = 0.5565634 + 15255, 13783, 14920, 47400, // alpha = 0.5804989 + 15236, 13718, 14914, 47338, // alpha = 0.6049383 + 15220, 13657, 14911, 47283, // alpha = 0.6298816 + 15212, 13599, 14912, 47236, // alpha = 0.6553288 + 15196, 13545, 14910, 47186, // alpha = 0.68128 + 15189, 13493, 14912, 47143, // alpha = 0.7077349 + 15181, 13445, 14917, 47098, // alpha = 0.7346939 + 15181, 13398, 14923, 47030, // alpha = 0.7621567 + 15186, 13355, 14932, 46964, // alpha = 0.7901235 + 15188, 13313, 14942, 46898, // alpha = 0.8185941 + 15193, 13235, 14955, 46840, // alpha = 0.8475687 + 15204, 13160, 14968, 46785, // alpha = 0.8770471 + 15216, 13089, 14982, 46732, // alpha = 0.9070295 + 15230, 13020, 14999, 46684, // alpha = 0.9375157 + 15249, 12955, 15019, 46638, // alpha = 0.9685059 + 15269, 12893, 15039, 46595, // alpha = 1 + + // Cos (theta) = 0.9271857 + 11979, 21424, 18055, 50823, // alpha = 0.001 + 11979, 21424, 18055, 50823, // alpha = 0.001 + 11979, 21424, 18055, 50823, // alpha = 0.001007811 + 11979, 21378, 18017, 50784, // alpha = 0.002267574 + 11979, 20891, 17603, 50370, // alpha = 0.004031243 + 11979, 20335, 16976, 49743, // alpha = 0.006298816 + 11979, 19746, 16477, 49243, // alpha = 0.009070295 + 11979, 19335, 15975, 48740, // alpha = 0.01234568 + 11979, 18890, 15599, 48362, // alpha = 0.01612497 + 18582, 18589, 19190, 55169, // alpha = 0.02040816 + 18310, 18319, 18769, 54548, // alpha = 0.02519527 + 17997, 18004, 18485, 54054, // alpha = 0.03048627 + 17760, 17763, 18132, 53558, // alpha = 0.03628118 + 17575, 17576, 17835, 53200, // alpha = 0.04258 + 17427, 17426, 17609, 52736, // alpha = 0.04938272 + 17207, 17199, 17435, 52404, // alpha = 0.05668934 + 17010, 16997, 17188, 52100, // alpha = 0.06449988 + 16844, 16827, 16970, 51734, // alpha = 0.07281432 + 16766, 16683, 16780, 51501, // alpha = 0.08163266 + 16641, 16559, 16637, 51277, // alpha = 0.09095491 + 16533, 16452, 16517, 50997, // alpha = 0.1007811 + 16439, 16332, 16415, 50715, // alpha = 0.1111111 + 16391, 16167, 16265, 50522, // alpha = 0.1219451 + 16246, 16021, 16118, 50331, // alpha = 0.1332829 + 16128, 15891, 15991, 50180, // alpha = 0.1451247 + 16069, 15775, 15879, 49974, // alpha = 0.1574704 + 15962, 15671, 15783, 49748, // alpha = 0.17032 + 15869, 15577, 15700, 49565, // alpha = 0.1836735 + 15835, 15493, 15628, 49440, // alpha = 0.1975309 + 15761, 15416, 15564, 49305, // alpha = 0.2118922 + 15715, 15333, 15510, 49201, // alpha = 0.2267574 + 15678, 15207, 15461, 49074, // alpha = 0.2421265 + 15630, 15091, 15419, 48905, // alpha = 0.2579995 + 15594, 14985, 15381, 48763, // alpha = 0.2743765 + 15563, 14888, 15336, 48641, // alpha = 0.2912573 + 15543, 14798, 15282, 48539, // alpha = 0.308642 + 15512, 14716, 15230, 48438, // alpha = 0.3265306 + 15490, 14640, 15187, 48352, // alpha = 0.3449232 + 15471, 14570, 15147, 48275, // alpha = 0.3638196 + 15447, 14504, 15112, 48201, // alpha = 0.38322 + 15436, 14444, 15086, 48141, // alpha = 0.4031242 + 15418, 14388, 15057, 48040, // alpha = 0.4235324 + 15397, 14335, 15031, 47923, // alpha = 0.4444445 + 15384, 14237, 15012, 47824, // alpha = 0.4658605 + 15381, 14146, 15000, 47749, // alpha = 0.4877803 + 15365, 14061, 14984, 47663, // alpha = 0.5102041 + 15348, 13980, 14970, 47585, // alpha = 0.5331318 + 15325, 13905, 14960, 47511, // alpha = 0.5565634 + 15307, 13835, 14951, 47447, // alpha = 0.5804989 + 15288, 13768, 14944, 47385, // alpha = 0.6049383 + 15270, 13706, 14938, 47323, // alpha = 0.6298816 + 15262, 13646, 14937, 47276, // alpha = 0.6553288 + 15242, 13591, 14935, 47225, // alpha = 0.68128 + 15235, 13538, 14938, 47182, // alpha = 0.7077349 + 15227, 13488, 14939, 47139, // alpha = 0.7346939 + 15225, 13440, 14946, 47102, // alpha = 0.7621567 + 15224, 13395, 14953, 47032, // alpha = 0.7901235 + 15227, 13352, 14962, 46965, // alpha = 0.8185941 + 15231, 13311, 14973, 46903, // alpha = 0.8475687 + 15238, 13233, 14986, 46845, // alpha = 0.8770471 + 15249, 13160, 15001, 46792, // alpha = 0.9070295 + 15262, 13089, 15015, 46737, // alpha = 0.9375157 + 15279, 13022, 15033, 46690, // alpha = 0.9685059 + 15298, 12958, 15053, 46644, // alpha = 1 + + // Cos (theta) = 0.9183673 + 11979, 21417, 18049, 50817, // alpha = 0.001 + 11979, 21417, 18049, 50817, // alpha = 0.001 + 11979, 21417, 18049, 50817, // alpha = 0.001007811 + 11979, 21368, 18008, 50775, // alpha = 0.002267574 + 11979, 20864, 17580, 50348, // alpha = 0.004031243 + 11979, 20291, 16939, 49707, // alpha = 0.006298816 + 11979, 19716, 16452, 49218, // alpha = 0.009070295 + 11979, 19294, 15941, 48705, // alpha = 0.01234568 + 11979, 18860, 15574, 48337, // alpha = 0.01612497 + 18561, 18567, 19153, 55101, // alpha = 0.02040816 + 18277, 18286, 18747, 54502, // alpha = 0.02519527 + 17972, 17978, 18469, 53994, // alpha = 0.03048627 + 17740, 17743, 18110, 53516, // alpha = 0.03628118 + 17559, 17560, 17819, 53143, // alpha = 0.04258 + 17416, 17413, 17598, 52697, // alpha = 0.04938272 + 17190, 17179, 17428, 52376, // alpha = 0.05668934 + 16997, 16982, 17179, 52058, // alpha = 0.06449988 + 16903, 16816, 16952, 51760, // alpha = 0.07281432 + 16761, 16675, 16778, 51480, // alpha = 0.08163266 + 16638, 16554, 16637, 51263, // alpha = 0.09095491 + 16532, 16449, 16518, 50979, // alpha = 0.1007811 + 16440, 16330, 16419, 50703, // alpha = 0.1111111 + 16394, 16169, 16276, 50516, // alpha = 0.1219451 + 16256, 16025, 16132, 50328, // alpha = 0.1332829 + 16140, 15898, 16006, 50181, // alpha = 0.1451247 + 16084, 15784, 15894, 49977, // alpha = 0.1574704 + 15978, 15682, 15801, 49757, // alpha = 0.17032 + 15886, 15589, 15716, 49572, // alpha = 0.1836735 + 15853, 15506, 15646, 49451, // alpha = 0.1975309 + 15779, 15430, 15582, 49315, // alpha = 0.2118922 + 15744, 15361, 15527, 49219, // alpha = 0.2267574 + 15697, 15236, 15480, 49098, // alpha = 0.2421265 + 15650, 15121, 15435, 48929, // alpha = 0.2579995 + 15615, 15015, 15398, 48788, // alpha = 0.2743765 + 15585, 14918, 15365, 48666, // alpha = 0.2912573 + 15562, 14828, 15315, 48562, // alpha = 0.308642 + 15534, 14746, 15262, 48460, // alpha = 0.3265306 + 15506, 14670, 15216, 48369, // alpha = 0.3449232 + 15487, 14599, 15177, 48292, // alpha = 0.3638196 + 15468, 14533, 15143, 48222, // alpha = 0.38322 + 15453, 14472, 15112, 48159, // alpha = 0.4031242 + 15439, 14416, 15087, 48077, // alpha = 0.4235324 + 15418, 14363, 15061, 47962, // alpha = 0.4444445 + 15405, 14290, 15040, 47864, // alpha = 0.4658605 + 15402, 14198, 15027, 47785, // alpha = 0.4877803 + 15384, 14111, 15009, 47694, // alpha = 0.5102041 + 15375, 14030, 14999, 47620, // alpha = 0.5331318 + 15366, 13953, 14987, 47549, // alpha = 0.5565634 + 15351, 13881, 14979, 47483, // alpha = 0.5804989 + 15327, 13814, 14967, 47415, // alpha = 0.6049383 + 15316, 13750, 14963, 47361, // alpha = 0.6298816 + 15296, 13689, 14959, 47305, // alpha = 0.6553288 + 15289, 13632, 14959, 47259, // alpha = 0.68128 + 15278, 13578, 14958, 47213, // alpha = 0.7077349 + 15267, 13527, 14962, 47171, // alpha = 0.7346939 + 15259, 13478, 14965, 47130, // alpha = 0.7621567 + 15260, 13432, 14972, 47085, // alpha = 0.7901235 + 15264, 13388, 14980, 47021, // alpha = 0.8185941 + 15264, 13346, 14991, 46955, // alpha = 0.8475687 + 15271, 13301, 15002, 46897, // alpha = 0.8770471 + 15282, 13225, 15016, 46839, // alpha = 0.9070295 + 15293, 13152, 15030, 46785, // alpha = 0.9375157 + 15308, 13083, 15048, 46736, // alpha = 0.9685059 + 15326, 13017, 15066, 46685, // alpha = 1 + + // Cos (theta) = 0.9090451 + 11979, 21409, 18043, 50811, // alpha = 0.001 + 11979, 21409, 18043, 50811, // alpha = 0.001 + 11979, 21409, 18043, 50811, // alpha = 0.001007811 + 11979, 21356, 17998, 50765, // alpha = 0.002267574 + 11979, 20837, 17557, 50325, // alpha = 0.004031243 + 11979, 20248, 16903, 49670, // alpha = 0.006298816 + 11979, 19687, 16427, 49194, // alpha = 0.009070295 + 11979, 19253, 15907, 48671, // alpha = 0.01234568 + 11979, 18831, 15549, 48312, // alpha = 0.01612497 + 18539, 18545, 19118, 55030, // alpha = 0.02040816 + 18243, 18252, 18723, 54456, // alpha = 0.02519527 + 17947, 17951, 18452, 53933, // alpha = 0.03048627 + 17720, 17722, 18085, 53475, // alpha = 0.03628118 + 17544, 17543, 17801, 53085, // alpha = 0.04258 + 17399, 17391, 17586, 52654, // alpha = 0.04938272 + 17170, 17158, 17418, 52346, // alpha = 0.05668934 + 16982, 16965, 17164, 52016, // alpha = 0.06449988 + 16890, 16803, 16944, 51725, // alpha = 0.07281432 + 16751, 16665, 16774, 51456, // alpha = 0.08163266 + 16632, 16546, 16634, 51245, // alpha = 0.09095491 + 16529, 16444, 16518, 50956, // alpha = 0.1007811 + 16467, 16324, 16416, 50718, // alpha = 0.1111111 + 16394, 16166, 16282, 50504, // alpha = 0.1219451 + 16262, 16026, 16139, 50321, // alpha = 0.1332829 + 16145, 15901, 16015, 50176, // alpha = 0.1451247 + 16092, 15789, 15905, 49973, // alpha = 0.1574704 + 15989, 15688, 15812, 49758, // alpha = 0.17032 + 15910, 15597, 15729, 49585, // alpha = 0.1836735 + 15868, 15515, 15658, 49457, // alpha = 0.1975309 + 15795, 15440, 15596, 49322, // alpha = 0.2118922 + 15761, 15372, 15541, 49227, // alpha = 0.2267574 + 15714, 15258, 15493, 49115, // alpha = 0.2421265 + 15667, 15144, 15449, 48944, // alpha = 0.2579995 + 15632, 15039, 15413, 48805, // alpha = 0.2743765 + 15602, 14942, 15380, 48683, // alpha = 0.2912573 + 15580, 14853, 15342, 48579, // alpha = 0.308642 + 15551, 14771, 15291, 48478, // alpha = 0.3265306 + 15524, 14694, 15244, 48387, // alpha = 0.3449232 + 15504, 14624, 15204, 48309, // alpha = 0.3638196 + 15486, 14558, 15168, 48239, // alpha = 0.38322 + 15470, 14497, 15138, 48175, // alpha = 0.4031242 + 15458, 14440, 15113, 48111, // alpha = 0.4235324 + 15437, 14386, 15086, 47996, // alpha = 0.4444445 + 15422, 14336, 15065, 47893, // alpha = 0.4658605 + 15421, 14243, 15051, 47817, // alpha = 0.4877803 + 15404, 14156, 15033, 47726, // alpha = 0.5102041 + 15394, 14073, 15020, 47650, // alpha = 0.5331318 + 15381, 13996, 15007, 47575, // alpha = 0.5565634 + 15374, 13923, 14998, 47509, // alpha = 0.5804989 + 15363, 13854, 14989, 47444, // alpha = 0.6049383 + 15351, 13789, 14986, 47388, // alpha = 0.6298816 + 15337, 13728, 14982, 47334, // alpha = 0.6553288 + 15327, 13670, 14981, 47285, // alpha = 0.68128 + 15313, 13614, 14978, 47238, // alpha = 0.7077349 + 15306, 13562, 14982, 47196, // alpha = 0.7346939 + 15296, 13513, 14984, 47155, // alpha = 0.7621567 + 15295, 13465, 14989, 47118, // alpha = 0.7901235 + 15297, 13421, 14999, 47066, // alpha = 0.8185941 + 15299, 13378, 15007, 47000, // alpha = 0.8475687 + 15301, 13337, 15018, 46938, // alpha = 0.8770471 + 15308, 13284, 15031, 46883, // alpha = 0.9070295 + 15321, 13210, 15044, 46824, // alpha = 0.9375157 + 15333, 13139, 15060, 46772, // alpha = 0.9685059 + 15353, 13072, 15079, 46723, // alpha = 1 + + // Cos (theta) = 0.8992189 + 11979, 21401, 18036, 50803, // alpha = 0.001 + 11979, 21401, 18036, 50803, // alpha = 0.001 + 11979, 21401, 18036, 50803, // alpha = 0.001007811 + 11979, 21343, 17987, 50754, // alpha = 0.002267574 + 11979, 20809, 17533, 50301, // alpha = 0.004031243 + 11979, 20205, 16866, 49633, // alpha = 0.006298816 + 11979, 19658, 16402, 49169, // alpha = 0.009070295 + 11979, 19213, 15872, 48637, // alpha = 0.01234568 + 11979, 18802, 15524, 48287, // alpha = 0.01612497 + 18518, 18523, 19082, 54961, // alpha = 0.02040816 + 18211, 18218, 18697, 54413, // alpha = 0.02519527 + 17921, 17924, 18433, 53874, // alpha = 0.03048627 + 17700, 17701, 18058, 53434, // alpha = 0.03628118 + 17527, 17526, 17780, 53026, // alpha = 0.04258 + 17372, 17363, 17570, 52613, // alpha = 0.04938272 + 17149, 17135, 17407, 52315, // alpha = 0.05668934 + 16965, 16946, 17148, 51970, // alpha = 0.06449988 + 16877, 16788, 16931, 51691, // alpha = 0.07281432 + 16742, 16653, 16765, 51430, // alpha = 0.08163266 + 16625, 16537, 16628, 51226, // alpha = 0.09095491 + 16524, 16437, 16514, 50928, // alpha = 0.1007811 + 16472, 16314, 16413, 50707, // alpha = 0.1111111 + 16392, 16160, 16280, 50489, // alpha = 0.1219451 + 16260, 16022, 16143, 50311, // alpha = 0.1332829 + 16187, 15900, 16017, 50186, // alpha = 0.1451247 + 16097, 15790, 15914, 49964, // alpha = 0.1574704 + 15996, 15691, 15819, 49752, // alpha = 0.17032 + 15919, 15602, 15739, 49582, // alpha = 0.1836735 + 15878, 15521, 15669, 49456, // alpha = 0.1975309 + 15807, 15447, 15606, 49325, // alpha = 0.2118922 + 15773, 15379, 15553, 49230, // alpha = 0.2267574 + 15728, 15275, 15504, 49124, // alpha = 0.2421265 + 15681, 15162, 15462, 48954, // alpha = 0.2579995 + 15646, 15058, 15424, 48816, // alpha = 0.2743765 + 15616, 14962, 15391, 48693, // alpha = 0.2912573 + 15595, 14873, 15363, 48592, // alpha = 0.308642 + 15567, 14791, 15313, 48491, // alpha = 0.3265306 + 15539, 14715, 15267, 48399, // alpha = 0.3449232 + 15520, 14644, 15226, 48321, // alpha = 0.3638196 + 15502, 14579, 15193, 48251, // alpha = 0.38322 + 15482, 14517, 15160, 48186, // alpha = 0.4031242 + 15473, 14460, 15134, 48130, // alpha = 0.4235324 + 15452, 14406, 15108, 48019, // alpha = 0.4444445 + 15437, 14356, 15086, 47915, // alpha = 0.4658605 + 15434, 14283, 15072, 47837, // alpha = 0.4877803 + 15421, 14194, 15054, 47752, // alpha = 0.5102041 + 15406, 14111, 15038, 47667, // alpha = 0.5331318 + 15398, 14033, 15028, 47598, // alpha = 0.5565634 + 15391, 13959, 15020, 47535, // alpha = 0.5804989 + 15380, 13890, 15010, 47468, // alpha = 0.6049383 + 15371, 13824, 15005, 47407, // alpha = 0.6298816 + 15365, 13762, 15000, 47356, // alpha = 0.6553288 + 15362, 13703, 15000, 47309, // alpha = 0.68128 + 15347, 13647, 14996, 47259, // alpha = 0.7077349 + 15339, 13594, 14999, 47216, // alpha = 0.7346939 + 15331, 13543, 15001, 47175, // alpha = 0.7621567 + 15329, 13496, 15007, 47139, // alpha = 0.7901235 + 15326, 13450, 15011, 47102, // alpha = 0.8185941 + 15328, 13406, 15023, 47039, // alpha = 0.8475687 + 15330, 13365, 15032, 46975, // alpha = 0.8770471 + 15338, 13325, 15044, 46913, // alpha = 0.9070295 + 15346, 13263, 15057, 46859, // alpha = 0.9375157 + 15359, 13191, 15072, 46803, // alpha = 0.9685059 + 15367, 13122, 15088, 46753, // alpha = 1 + + // Cos (theta) = 0.8888889 + 11979, 21391, 18027, 50795, // alpha = 0.001 + 11979, 21391, 18027, 50795, // alpha = 0.001 + 11979, 21391, 18027, 50795, // alpha = 0.001007811 + 11979, 21329, 17975, 50742, // alpha = 0.002267574 + 11979, 20781, 17509, 50277, // alpha = 0.004031243 + 11979, 20162, 16830, 49597, // alpha = 0.006298816 + 11979, 19629, 16372, 49137, // alpha = 0.009070295 + 11979, 19173, 15839, 48603, // alpha = 0.01234568 + 11979, 18773, 15500, 48263, // alpha = 0.01612497 + 18496, 18501, 19043, 54894, // alpha = 0.02040816 + 18178, 18184, 18668, 54370, // alpha = 0.02519527 + 17895, 17897, 18395, 53815, // alpha = 0.03048627 + 17679, 17679, 18027, 53394, // alpha = 0.03628118 + 17511, 17508, 17758, 52968, // alpha = 0.04258 + 17344, 17334, 17553, 52570, // alpha = 0.04938272 + 17127, 17111, 17379, 52285, // alpha = 0.05668934 + 16947, 16927, 17128, 51923, // alpha = 0.06449988 + 16862, 16772, 16917, 51655, // alpha = 0.07281432 + 16729, 16640, 16754, 51402, // alpha = 0.08163266 + 16616, 16527, 16621, 51205, // alpha = 0.09095491 + 16517, 16429, 16507, 50895, // alpha = 0.1007811 + 16467, 16302, 16410, 50683, // alpha = 0.1111111 + 16390, 16150, 16277, 50472, // alpha = 0.1219451 + 16269, 16016, 16139, 50302, // alpha = 0.1332829 + 16211, 15896, 16016, 50187, // alpha = 0.1451247 + 16099, 15788, 15913, 49951, // alpha = 0.1574704 + 15999, 15691, 15822, 49742, // alpha = 0.17032 + 15946, 15603, 15744, 49591, // alpha = 0.1836735 + 15885, 15523, 15676, 49453, // alpha = 0.1975309 + 15825, 15451, 15615, 49331, // alpha = 0.2118922 + 15782, 15384, 15561, 49230, // alpha = 0.2267574 + 15738, 15287, 15513, 49127, // alpha = 0.2421265 + 15691, 15175, 15471, 48960, // alpha = 0.2579995 + 15657, 15072, 15433, 48821, // alpha = 0.2743765 + 15628, 14977, 15401, 48700, // alpha = 0.2912573 + 15607, 14889, 15373, 48600, // alpha = 0.308642 + 15579, 14807, 15333, 48498, // alpha = 0.3265306 + 15551, 14731, 15287, 48407, // alpha = 0.3449232 + 15533, 14661, 15246, 48329, // alpha = 0.3638196 + 15515, 14595, 15210, 48259, // alpha = 0.38322 + 15489, 14534, 15177, 48189, // alpha = 0.4031242 + 15482, 14477, 15153, 48137, // alpha = 0.4235324 + 15465, 14423, 15126, 48033, // alpha = 0.4444445 + 15446, 14373, 15102, 47928, // alpha = 0.4658605 + 15436, 14316, 15084, 47840, // alpha = 0.4877803 + 15434, 14227, 15073, 47769, // alpha = 0.5102041 + 15420, 14144, 15057, 47686, // alpha = 0.5331318 + 15411, 14065, 15045, 47613, // alpha = 0.5565634 + 15402, 13991, 15035, 47546, // alpha = 0.5804989 + 15395, 13921, 15028, 47485, // alpha = 0.6049383 + 15388, 13855, 15022, 47429, // alpha = 0.6298816 + 15381, 13792, 15018, 47373, // alpha = 0.6553288 + 15378, 13732, 15017, 47326, // alpha = 0.68128 + 15368, 13676, 15013, 47274, // alpha = 0.7077349 + 15366, 13622, 15013, 47232, // alpha = 0.7346939 + 15361, 13571, 15015, 47191, // alpha = 0.7621567 + 15357, 13522, 15019, 47153, // alpha = 0.7901235 + 15355, 13476, 15026, 47119, // alpha = 0.8185941 + 15355, 13432, 15034, 47065, // alpha = 0.8475687 + 15356, 13390, 15043, 47000, // alpha = 0.8770471 + 15361, 13350, 15053, 46940, // alpha = 0.9070295 + 15365, 13310, 15067, 46883, // alpha = 0.9375157 + 15371, 13237, 15082, 46829, // alpha = 0.9685059 + 15378, 13167, 15097, 46777, // alpha = 1 + + // Cos (theta) = 0.8780549 + 11979, 21381, 18018, 50786, // alpha = 0.001 + 11979, 21381, 18018, 50786, // alpha = 0.001 + 11979, 21381, 18018, 50786, // alpha = 0.001007811 + 11979, 21314, 17961, 50729, // alpha = 0.002267574 + 11979, 20753, 17485, 50253, // alpha = 0.004031243 + 11979, 20120, 16794, 49561, // alpha = 0.006298816 + 11979, 19601, 16324, 49089, // alpha = 0.009070295 + 11979, 19133, 15805, 48569, // alpha = 0.01234568 + 18497, 18744, 18920, 55581, // alpha = 0.01612497 + 18475, 18479, 19004, 54828, // alpha = 0.02040816 + 18145, 18150, 18641, 54326, // alpha = 0.02519527 + 17869, 17870, 18353, 53758, // alpha = 0.03048627 + 17658, 17657, 17997, 53353, // alpha = 0.03628118 + 17494, 17490, 17734, 52911, // alpha = 0.04258 + 17317, 17305, 17534, 52528, // alpha = 0.04938272 + 17105, 17087, 17350, 52254, // alpha = 0.05668934 + 16929, 16907, 17104, 51877, // alpha = 0.06449988 + 16846, 16755, 16899, 51618, // alpha = 0.07281432 + 16716, 16626, 16740, 51374, // alpha = 0.08163266 + 16605, 16515, 16609, 51166, // alpha = 0.09095491 + 16538, 16419, 16497, 50895, // alpha = 0.1007811 + 16461, 16286, 16404, 50655, // alpha = 0.1111111 + 16385, 16138, 16268, 50451, // alpha = 0.1219451 + 16263, 16006, 16133, 50288, // alpha = 0.1332829 + 16205, 15889, 16013, 50172, // alpha = 0.1451247 + 16098, 15783, 15912, 49932, // alpha = 0.1574704 + 16001, 15688, 15825, 49728, // alpha = 0.17032 + 15958, 15602, 15747, 49588, // alpha = 0.1836735 + 15889, 15523, 15679, 49446, // alpha = 0.1975309 + 15829, 15452, 15618, 49324, // alpha = 0.2118922 + 15788, 15387, 15566, 49226, // alpha = 0.2267574 + 15754, 15293, 15520, 49131, // alpha = 0.2421265 + 15699, 15183, 15477, 48958, // alpha = 0.2579995 + 15666, 15081, 15441, 48820, // alpha = 0.2743765 + 15637, 14987, 15409, 48703, // alpha = 0.2912573 + 15616, 14900, 15381, 48601, // alpha = 0.308642 + 15590, 14819, 15348, 48503, // alpha = 0.3265306 + 15561, 14744, 15302, 48410, // alpha = 0.3449232 + 15544, 14674, 15263, 48334, // alpha = 0.3638196 + 15525, 14609, 15226, 48265, // alpha = 0.38322 + 15501, 14548, 15193, 48195, // alpha = 0.4031242 + 15493, 14491, 15167, 48141, // alpha = 0.4235324 + 15476, 14437, 15142, 48047, // alpha = 0.4444445 + 15458, 14387, 15117, 47937, // alpha = 0.4658605 + 15447, 14340, 15101, 47853, // alpha = 0.4877803 + 15446, 14255, 15088, 47779, // alpha = 0.5102041 + 15432, 14172, 15073, 47700, // alpha = 0.5331318 + 15423, 14093, 15061, 47628, // alpha = 0.5565634 + 15415, 14018, 15052, 47561, // alpha = 0.5804989 + 15407, 13948, 15044, 47499, // alpha = 0.6049383 + 15399, 13881, 15035, 47439, // alpha = 0.6298816 + 15393, 13818, 15031, 47385, // alpha = 0.6553288 + 15391, 13758, 15030, 47339, // alpha = 0.68128 + 15382, 13701, 15028, 47289, // alpha = 0.7077349 + 15379, 13647, 15028, 47245, // alpha = 0.7346939 + 15374, 13595, 15027, 47202, // alpha = 0.7621567 + 15371, 13546, 15031, 47164, // alpha = 0.7901235 + 15368, 13499, 15037, 47127, // alpha = 0.8185941 + 15371, 13454, 15046, 47087, // alpha = 0.8475687 + 15370, 13412, 15055, 47023, // alpha = 0.8770471 + 15372, 13371, 15065, 46961, // alpha = 0.9070295 + 15376, 13332, 15077, 46905, // alpha = 0.9375157 + 15380, 13278, 15090, 46846, // alpha = 0.9685059 + 15387, 13207, 15104, 46795, // alpha = 1 + + // Cos (theta) = 0.866717 + 11979, 21369, 18008, 50776, // alpha = 0.001 + 11979, 21369, 18008, 50776, // alpha = 0.001 + 11979, 21369, 18008, 50776, // alpha = 0.001007811 + 11979, 21297, 17947, 50715, // alpha = 0.002267574 + 11979, 20724, 17461, 50229, // alpha = 0.004031243 + 11979, 20078, 16759, 49525, // alpha = 0.006298816 + 11979, 19573, 16276, 49041, // alpha = 0.009070295 + 11979, 19094, 15772, 48536, // alpha = 0.01234568 + 18709, 18715, 19477, 55440, // alpha = 0.01612497 + 18453, 18457, 18963, 54763, // alpha = 0.02040816 + 18112, 18115, 18612, 54285, // alpha = 0.02519527 + 17841, 17843, 18311, 53701, // alpha = 0.03048627 + 17637, 17635, 17964, 53313, // alpha = 0.03628118 + 17476, 17472, 17709, 52854, // alpha = 0.04258 + 17289, 17275, 17514, 52487, // alpha = 0.04938272 + 17082, 17062, 17319, 52221, // alpha = 0.05668934 + 16980, 16885, 17070, 51886, // alpha = 0.06449988 + 16829, 16737, 16880, 51579, // alpha = 0.07281432 + 16702, 16611, 16726, 51344, // alpha = 0.08163266 + 16593, 16503, 16598, 51120, // alpha = 0.09095491 + 16529, 16409, 16488, 50861, // alpha = 0.1007811 + 16454, 16269, 16396, 50627, // alpha = 0.1111111 + 16372, 16124, 16257, 50427, // alpha = 0.1219451 + 16254, 15995, 16123, 50269, // alpha = 0.1332829 + 16200, 15880, 16007, 50144, // alpha = 0.1451247 + 16093, 15776, 15909, 49909, // alpha = 0.1574704 + 15998, 15683, 15822, 49710, // alpha = 0.17032 + 15967, 15598, 15746, 49581, // alpha = 0.1836735 + 15891, 15521, 15679, 49436, // alpha = 0.1975309 + 15830, 15451, 15621, 49315, // alpha = 0.2118922 + 15791, 15387, 15569, 49220, // alpha = 0.2267574 + 15758, 15296, 15523, 49122, // alpha = 0.2421265 + 15705, 15187, 15482, 48951, // alpha = 0.2579995 + 15673, 15087, 15446, 48817, // alpha = 0.2743765 + 15645, 14994, 15414, 48699, // alpha = 0.2912573 + 15624, 14908, 15386, 48601, // alpha = 0.308642 + 15597, 14828, 15361, 48502, // alpha = 0.3265306 + 15569, 14753, 15315, 48411, // alpha = 0.3449232 + 15552, 14684, 15274, 48336, // alpha = 0.3638196 + 15534, 14619, 15240, 48267, // alpha = 0.38322 + 15509, 14558, 15204, 48197, // alpha = 0.4031242 + 15502, 14502, 15182, 48145, // alpha = 0.4235324 + 15486, 14448, 15156, 48053, // alpha = 0.4444445 + 15467, 14398, 15130, 47946, // alpha = 0.4658605 + 15456, 14351, 15115, 47860, // alpha = 0.4877803 + 15455, 14278, 15102, 47788, // alpha = 0.5102041 + 15442, 14195, 15086, 47707, // alpha = 0.5331318 + 15433, 14116, 15073, 47634, // alpha = 0.5565634 + 15425, 14041, 15064, 47569, // alpha = 0.5804989 + 15418, 13970, 15056, 47506, // alpha = 0.6049383 + 15410, 13903, 15048, 47446, // alpha = 0.6298816 + 15405, 13840, 15045, 47395, // alpha = 0.6553288 + 15400, 13780, 15042, 47344, // alpha = 0.68128 + 15395, 13722, 15039, 47297, // alpha = 0.7077349 + 15390, 13668, 15040, 47253, // alpha = 0.7346939 + 15384, 13616, 15039, 47210, // alpha = 0.7621567 + 15380, 13567, 15043, 47171, // alpha = 0.7901235 + 15379, 13519, 15047, 47135, // alpha = 0.8185941 + 15381, 13474, 15055, 47102, // alpha = 0.8475687 + 15380, 13431, 15063, 47038, // alpha = 0.8770471 + 15382, 13390, 15074, 46976, // alpha = 0.9070295 + 15384, 13351, 15084, 46918, // alpha = 0.9375157 + 15388, 13314, 15096, 46860, // alpha = 0.9685059 + 15394, 13243, 15111, 46807, // alpha = 1 + + // Cos (theta) = 0.8548753 + 11979, 21356, 17997, 50765, // alpha = 0.001 + 11979, 21356, 17997, 50765, // alpha = 0.001 + 11979, 21356, 17997, 50765, // alpha = 0.001007811 + 11979, 21279, 17932, 50700, // alpha = 0.002267574 + 11979, 20695, 17436, 50204, // alpha = 0.004031243 + 11979, 20036, 16723, 49490, // alpha = 0.006298816 + 11979, 19545, 16229, 48994, // alpha = 0.009070295 + 11979, 19055, 15739, 48503, // alpha = 0.01234568 + 18680, 18687, 19439, 55389, // alpha = 0.01612497 + 18433, 18436, 18920, 54702, // alpha = 0.02040816 + 18078, 18081, 18582, 54215, // alpha = 0.02519527 + 17815, 17816, 18265, 53646, // alpha = 0.03048627 + 17615, 17613, 17931, 53275, // alpha = 0.03628118 + 17458, 17454, 17682, 52798, // alpha = 0.04258 + 17260, 17244, 17494, 52446, // alpha = 0.04938272 + 17057, 17036, 17285, 52160, // alpha = 0.05668934 + 16959, 16864, 17044, 51837, // alpha = 0.06449988 + 16811, 16719, 16858, 51542, // alpha = 0.07281432 + 16687, 16595, 16708, 51314, // alpha = 0.08163266 + 16581, 16489, 16584, 51073, // alpha = 0.09095491 + 16527, 16397, 16475, 50831, // alpha = 0.1007811 + 16444, 16250, 16387, 50597, // alpha = 0.1111111 + 16358, 16108, 16242, 50402, // alpha = 0.1219451 + 16266, 15981, 16111, 50261, // alpha = 0.1332829 + 16191, 15868, 15999, 50113, // alpha = 0.1451247 + 16085, 15767, 15902, 49882, // alpha = 0.1574704 + 15993, 15676, 15818, 49690, // alpha = 0.17032 + 15965, 15593, 15743, 49565, // alpha = 0.1836735 + 15889, 15517, 15678, 49421, // alpha = 0.1975309 + 15835, 15448, 15622, 49306, // alpha = 0.2118922 + 15808, 15385, 15571, 49220, // alpha = 0.2267574 + 15758, 15294, 15525, 49108, // alpha = 0.2421265 + 15723, 15187, 15486, 48957, // alpha = 0.2579995 + 15677, 15088, 15449, 48811, // alpha = 0.2743765 + 15649, 14997, 15418, 48692, // alpha = 0.2912573 + 15629, 14912, 15390, 48594, // alpha = 0.308642 + 15603, 14833, 15365, 48499, // alpha = 0.3265306 + 15576, 14759, 15322, 48409, // alpha = 0.3449232 + 15558, 14690, 15286, 48336, // alpha = 0.3638196 + 15540, 14626, 15250, 48264, // alpha = 0.38322 + 15517, 14566, 15217, 48197, // alpha = 0.4031242 + 15509, 14510, 15192, 48144, // alpha = 0.4235324 + 15493, 14457, 15168, 48053, // alpha = 0.4444445 + 15474, 14407, 15141, 47949, // alpha = 0.4658605 + 15464, 14360, 15125, 47862, // alpha = 0.4877803 + 15464, 14296, 15114, 47791, // alpha = 0.5102041 + 15449, 14213, 15096, 47710, // alpha = 0.5331318 + 15441, 14134, 15083, 47637, // alpha = 0.5565634 + 15434, 14060, 15075, 47573, // alpha = 0.5804989 + 15426, 13989, 15065, 47509, // alpha = 0.6049383 + 15417, 13922, 15057, 47449, // alpha = 0.6298816 + 15415, 13858, 15055, 47399, // alpha = 0.6553288 + 15407, 13798, 15049, 47346, // alpha = 0.68128 + 15404, 13741, 15050, 47303, // alpha = 0.7077349 + 15400, 13686, 15050, 47258, // alpha = 0.7346939 + 15395, 13634, 15049, 47215, // alpha = 0.7621567 + 15390, 13584, 15050, 47175, // alpha = 0.7901235 + 15389, 13537, 15055, 47139, // alpha = 0.8185941 + 15391, 13491, 15064, 47108, // alpha = 0.8475687 + 15389, 13448, 15069, 47043, // alpha = 0.8770471 + 15390, 13407, 15080, 46982, // alpha = 0.9070295 + 15392, 13367, 15089, 46925, // alpha = 0.9375157 + 15396, 13330, 15102, 46870, // alpha = 0.9685059 + 15400, 13275, 15115, 46816, // alpha = 1 + + // Cos (theta) = 0.8425296 + 11979, 21341, 17985, 50753, // alpha = 0.001 + 11979, 21341, 17985, 50753, // alpha = 0.001 + 11979, 21341, 17985, 50753, // alpha = 0.001007811 + 11979, 21259, 17915, 50683, // alpha = 0.002267574 + 11979, 20666, 17411, 50179, // alpha = 0.004031243 + 11979, 19995, 16688, 49455, // alpha = 0.006298816 + 11979, 19518, 16183, 48948, // alpha = 0.009070295 + 11979, 19017, 15707, 48470, // alpha = 0.01234568 + 18652, 18658, 19376, 55340, // alpha = 0.01612497 + 18391, 18396, 18878, 54642, // alpha = 0.02040816 + 18046, 18048, 18552, 54137, // alpha = 0.02519527 + 17790, 17789, 18218, 53593, // alpha = 0.03048627 + 17594, 17591, 17895, 53226, // alpha = 0.03628118 + 17441, 17435, 17656, 52743, // alpha = 0.04258 + 17230, 17214, 17472, 52405, // alpha = 0.04938272 + 17032, 17010, 17252, 52096, // alpha = 0.05668934 + 16937, 16842, 17016, 51787, // alpha = 0.06449988 + 16793, 16700, 16837, 51503, // alpha = 0.07281432 + 16671, 16579, 16689, 51284, // alpha = 0.08163266 + 16568, 16475, 16567, 51025, // alpha = 0.09095491 + 16516, 16385, 16462, 50792, // alpha = 0.1007811 + 16434, 16229, 16371, 50564, // alpha = 0.1111111 + 16353, 16090, 16224, 50382, // alpha = 0.1219451 + 16267, 15966, 16097, 50246, // alpha = 0.1332829 + 16180, 15856, 15987, 50076, // alpha = 0.1451247 + 16078, 15756, 15893, 49854, // alpha = 0.1574704 + 15998, 15667, 15811, 49675, // alpha = 0.17032 + 15959, 15586, 15739, 49545, // alpha = 0.1836735 + 15886, 15511, 15675, 49405, // alpha = 0.1975309 + 15834, 15444, 15619, 49294, // alpha = 0.2118922 + 15808, 15382, 15570, 49210, // alpha = 0.2267574 + 15759, 15289, 15525, 49089, // alpha = 0.2421265 + 15725, 15184, 15487, 48945, // alpha = 0.2579995 + 15678, 15087, 15449, 48796, // alpha = 0.2743765 + 15652, 14997, 15419, 48681, // alpha = 0.2912573 + 15635, 14913, 15393, 48589, // alpha = 0.308642 + 15606, 14835, 15368, 48492, // alpha = 0.3265306 + 15580, 14762, 15331, 48405, // alpha = 0.3449232 + 15563, 14694, 15292, 48331, // alpha = 0.3638196 + 15546, 14631, 15257, 48263, // alpha = 0.38322 + 15522, 14571, 15224, 48194, // alpha = 0.4031242 + 15515, 14515, 15200, 48144, // alpha = 0.4235324 + 15499, 14463, 15174, 48049, // alpha = 0.4444445 + 15481, 14414, 15151, 47948, // alpha = 0.4658605 + 15471, 14367, 15132, 47859, // alpha = 0.4877803 + 15471, 14310, 15121, 47789, // alpha = 0.5102041 + 15456, 14227, 15105, 47707, // alpha = 0.5331318 + 15447, 14149, 15093, 47636, // alpha = 0.5565634 + 15440, 14074, 15083, 47571, // alpha = 0.5804989 + 15433, 14004, 15075, 47509, // alpha = 0.6049383 + 15421, 13937, 15065, 47447, // alpha = 0.6298816 + 15422, 13873, 15063, 47400, // alpha = 0.6553288 + 15414, 13813, 15058, 47349, // alpha = 0.68128 + 15412, 13756, 15058, 47304, // alpha = 0.7077349 + 15406, 13701, 15057, 47258, // alpha = 0.7346939 + 15402, 13649, 15057, 47216, // alpha = 0.7621567 + 15397, 13599, 15058, 47176, // alpha = 0.7901235 + 15397, 13551, 15063, 47142, // alpha = 0.8185941 + 15398, 13506, 15069, 47110, // alpha = 0.8475687 + 15396, 13463, 15076, 47048, // alpha = 0.8770471 + 15397, 13421, 15084, 46990, // alpha = 0.9070295 + 15399, 13382, 15093, 46928, // alpha = 0.9375157 + 15402, 13344, 15106, 46874, // alpha = 0.9685059 + 15406, 13303, 15118, 46819, // alpha = 1 + + // Cos (theta) = 0.82968 + 11979, 21325, 17972, 50739, // alpha = 0.001 + 11979, 21325, 17972, 50739, // alpha = 0.001 + 11979, 21325, 17972, 50739, // alpha = 0.001007811 + 11979, 21238, 17897, 50665, // alpha = 0.002267574 + 11979, 20636, 17365, 50132, // alpha = 0.004031243 + 11979, 19954, 16654, 49421, // alpha = 0.006298816 + 11979, 19491, 16137, 48902, // alpha = 0.009070295 + 11979, 18979, 15674, 48438, // alpha = 0.01234568 + 18625, 18630, 19316, 55291, // alpha = 0.01612497 + 18348, 18354, 18837, 54583, // alpha = 0.02040816 + 18011, 18014, 18521, 54058, // alpha = 0.02519527 + 17763, 17762, 18174, 53542, // alpha = 0.03048627 + 17572, 17569, 17860, 53150, // alpha = 0.03628118 + 17423, 17417, 17627, 52690, // alpha = 0.04258 + 17201, 17183, 17450, 52365, // alpha = 0.04938272 + 17008, 16984, 17215, 52036, // alpha = 0.05668934 + 16914, 16819, 16988, 51737, // alpha = 0.06449988 + 16774, 16680, 16814, 51465, // alpha = 0.07281432 + 16655, 16562, 16670, 51254, // alpha = 0.08163266 + 16585, 16461, 16548, 51013, // alpha = 0.09095491 + 16503, 16362, 16449, 50751, // alpha = 0.1007811 + 16424, 16207, 16347, 50531, // alpha = 0.1111111 + 16335, 16071, 16206, 50356, // alpha = 0.1219451 + 16278, 15950, 16079, 50235, // alpha = 0.1332829 + 16165, 15842, 15975, 50038, // alpha = 0.1451247 + 16066, 15744, 15883, 49823, // alpha = 0.1574704 + 16011, 15656, 15803, 49666, // alpha = 0.17032 + 15952, 15577, 15731, 49522, // alpha = 0.1836735 + 15879, 15504, 15670, 49387, // alpha = 0.1975309 + 15849, 15438, 15615, 49292, // alpha = 0.2118922 + 15804, 15377, 15567, 49196, // alpha = 0.2267574 + 15758, 15282, 15524, 49069, // alpha = 0.2421265 + 15724, 15178, 15485, 48923, // alpha = 0.2579995 + 15678, 15082, 15450, 48781, // alpha = 0.2743765 + 15657, 14994, 15420, 48676, // alpha = 0.2912573 + 15636, 14911, 15394, 48578, // alpha = 0.308642 + 15609, 14834, 15369, 48482, // alpha = 0.3265306 + 15582, 14763, 15333, 48395, // alpha = 0.3449232 + 15566, 14696, 15297, 48324, // alpha = 0.3638196 + 15549, 14633, 15263, 48256, // alpha = 0.38322 + 15524, 14574, 15230, 48189, // alpha = 0.4031242 + 15519, 14519, 15206, 48137, // alpha = 0.4235324 + 15503, 14467, 15181, 48041, // alpha = 0.4444445 + 15485, 14418, 15158, 47942, // alpha = 0.4658605 + 15475, 14372, 15139, 47854, // alpha = 0.4877803 + 15474, 14320, 15128, 47784, // alpha = 0.5102041 + 15461, 14237, 15113, 47704, // alpha = 0.5331318 + 15452, 14159, 15099, 47633, // alpha = 0.5565634 + 15446, 14085, 15090, 47570, // alpha = 0.5804989 + 15438, 14015, 15082, 47509, // alpha = 0.6049383 + 15429, 13949, 15073, 47450, // alpha = 0.6298816 + 15423, 13885, 15068, 47398, // alpha = 0.6553288 + 15419, 13825, 15065, 47346, // alpha = 0.68128 + 15418, 13768, 15066, 47304, // alpha = 0.7077349 + 15412, 13713, 15063, 47256, // alpha = 0.7346939 + 15408, 13661, 15064, 47216, // alpha = 0.7621567 + 15403, 13611, 15064, 47178, // alpha = 0.7901235 + 15403, 13564, 15068, 47142, // alpha = 0.8185941 + 15402, 13518, 15074, 47108, // alpha = 0.8475687 + 15403, 13475, 15080, 47046, // alpha = 0.8770471 + 15402, 13433, 15088, 46985, // alpha = 0.9070295 + 15404, 13394, 15096, 46929, // alpha = 0.9375157 + 15408, 13356, 15110, 46877, // alpha = 0.9685059 + 15410, 13319, 15120, 46819, // alpha = 1 + + // Cos (theta) = 0.8163265 + 11979, 21308, 17957, 50725, // alpha = 0.001 + 11979, 21308, 17957, 50725, // alpha = 0.001 + 11979, 21308, 17957, 50725, // alpha = 0.001007811 + 11979, 21216, 17878, 50646, // alpha = 0.002267574 + 11979, 20606, 17314, 50082, // alpha = 0.004031243 + 11979, 19914, 16619, 49386, // alpha = 0.006298816 + 11979, 19464, 16092, 48856, // alpha = 0.009070295 + 11979, 18941, 15643, 48406, // alpha = 0.01234568 + 18598, 18603, 19256, 55199, // alpha = 0.01612497 + 18307, 18311, 18793, 54526, // alpha = 0.02040816 + 17979, 17980, 18489, 53983, // alpha = 0.02519527 + 17736, 17735, 18126, 53487, // alpha = 0.03048627 + 17551, 17546, 17824, 53077, // alpha = 0.03628118 + 17403, 17389, 17599, 52636, // alpha = 0.04258 + 17171, 17151, 17428, 52325, // alpha = 0.04938272 + 16982, 16957, 17179, 51976, // alpha = 0.05668934 + 16891, 16796, 16958, 51689, // alpha = 0.06449988 + 16755, 16661, 16788, 51427, // alpha = 0.07281432 + 16639, 16545, 16649, 51224, // alpha = 0.08163266 + 16570, 16446, 16530, 50963, // alpha = 0.09095491 + 16489, 16335, 16435, 50709, // alpha = 0.1007811 + 16412, 16184, 16323, 50498, // alpha = 0.1111111 + 16318, 16051, 16185, 50330, // alpha = 0.1219451 + 16263, 15932, 16062, 50212, // alpha = 0.1332829 + 16150, 15826, 15961, 49999, // alpha = 0.1451247 + 16054, 15731, 15871, 49789, // alpha = 0.1574704 + 16002, 15645, 15792, 49638, // alpha = 0.17032 + 15942, 15567, 15723, 49499, // alpha = 0.1836735 + 15882, 15496, 15664, 49374, // alpha = 0.1975309 + 15844, 15430, 15610, 49275, // alpha = 0.2118922 + 15799, 15371, 15563, 49181, // alpha = 0.2267574 + 15754, 15271, 15521, 49044, // alpha = 0.2421265 + 15722, 15169, 15483, 48904, // alpha = 0.2579995 + 15677, 15075, 15448, 48766, // alpha = 0.2743765 + 15656, 14988, 15419, 48659, // alpha = 0.2912573 + 15636, 14907, 15395, 48564, // alpha = 0.308642 + 15609, 14831, 15370, 48471, // alpha = 0.3265306 + 15583, 14760, 15336, 48385, // alpha = 0.3449232 + 15566, 14694, 15299, 48314, // alpha = 0.3638196 + 15550, 14632, 15265, 48248, // alpha = 0.38322 + 15528, 14574, 15232, 48182, // alpha = 0.4031242 + 15520, 14520, 15209, 48132, // alpha = 0.4235324 + 15506, 14468, 15184, 48032, // alpha = 0.4444445 + 15487, 14420, 15161, 47930, // alpha = 0.4658605 + 15479, 14374, 15144, 47849, // alpha = 0.4877803 + 15479, 14326, 15133, 47776, // alpha = 0.5102041 + 15464, 14244, 15117, 47698, // alpha = 0.5331318 + 15456, 14166, 15106, 47629, // alpha = 0.5565634 + 15449, 14093, 15095, 47563, // alpha = 0.5804989 + 15443, 14023, 15087, 47505, // alpha = 0.6049383 + 15433, 13957, 15078, 47445, // alpha = 0.6298816 + 15428, 13894, 15073, 47392, // alpha = 0.6553288 + 15423, 13834, 15071, 47344, // alpha = 0.68128 + 15421, 13777, 15069, 47299, // alpha = 0.7077349 + 15415, 13722, 15067, 47255, // alpha = 0.7346939 + 15413, 13670, 15067, 47213, // alpha = 0.7621567 + 15408, 13621, 15068, 47175, // alpha = 0.7901235 + 15408, 13573, 15072, 47139, // alpha = 0.8185941 + 15407, 13528, 15077, 47105, // alpha = 0.8475687 + 15407, 13485, 15082, 47041, // alpha = 0.8770471 + 15406, 13443, 15090, 46981, // alpha = 0.9070295 + 15408, 13403, 15099, 46924, // alpha = 0.9375157 + 15410, 13366, 15109, 46870, // alpha = 0.9685059 + 15413, 13329, 15119, 46819, // alpha = 1 + + // Cos (theta) = 0.8024691 + 11979, 21289, 17941, 50709, // alpha = 0.001 + 11979, 21289, 17941, 50709, // alpha = 0.001 + 11979, 21289, 17941, 50709, // alpha = 0.001007811 + 11979, 21191, 17858, 50626, // alpha = 0.002267574 + 11979, 20577, 17264, 50031, // alpha = 0.004031243 + 11979, 19874, 16586, 49352, // alpha = 0.006298816 + 11979, 19419, 16047, 48811, // alpha = 0.009070295 + 18880, 18904, 19690, 55767, // alpha = 0.01234568 + 18571, 18575, 19194, 55111, // alpha = 0.01612497 + 18265, 18269, 18751, 54470, // alpha = 0.02040816 + 17946, 17947, 18458, 53911, // alpha = 0.02519527 + 17710, 17708, 18078, 53438, // alpha = 0.03048627 + 17529, 17524, 17787, 53007, // alpha = 0.03628118 + 17367, 17352, 17571, 52583, // alpha = 0.04258 + 17141, 17120, 17400, 52286, // alpha = 0.04938272 + 17028, 16931, 17132, 51973, // alpha = 0.05668934 + 16869, 16773, 16928, 51642, // alpha = 0.06449988 + 16735, 16641, 16762, 51389, // alpha = 0.07281432 + 16622, 16528, 16627, 51188, // alpha = 0.08163266 + 16555, 16431, 16513, 50913, // alpha = 0.09095491 + 16477, 16308, 16419, 50669, // alpha = 0.1007811 + 16401, 16160, 16298, 50463, // alpha = 0.1111111 + 16299, 16030, 16164, 50299, // alpha = 0.1219451 + 16243, 15914, 16044, 50187, // alpha = 0.1332829 + 16134, 15810, 15946, 49957, // alpha = 0.1451247 + 16039, 15717, 15858, 49755, // alpha = 0.1574704 + 16012, 15632, 15780, 49625, // alpha = 0.17032 + 15934, 15556, 15714, 49475, // alpha = 0.1836735 + 15875, 15486, 15655, 49354, // alpha = 0.1975309 + 15837, 15422, 15604, 49256, // alpha = 0.2118922 + 15794, 15363, 15558, 49166, // alpha = 0.2267574 + 15749, 15258, 15515, 49014, // alpha = 0.2421265 + 15717, 15158, 15479, 48878, // alpha = 0.2579995 + 15688, 15066, 15448, 48758, // alpha = 0.2743765 + 15654, 14980, 15418, 48642, // alpha = 0.2912573 + 15635, 14900, 15392, 48549, // alpha = 0.308642 + 15608, 14826, 15369, 48457, // alpha = 0.3265306 + 15589, 14756, 15335, 48378, // alpha = 0.3449232 + 15567, 14691, 15298, 48303, // alpha = 0.3638196 + 15551, 14630, 15266, 48238, // alpha = 0.38322 + 15529, 14573, 15235, 48175, // alpha = 0.4031242 + 15521, 14519, 15211, 48121, // alpha = 0.4235324 + 15507, 14468, 15186, 48017, // alpha = 0.4444445 + 15489, 14420, 15165, 47917, // alpha = 0.4658605 + 15479, 14375, 15147, 47833, // alpha = 0.4877803 + 15481, 14328, 15136, 47765, // alpha = 0.5102041 + 15467, 14247, 15120, 47687, // alpha = 0.5331318 + 15459, 14170, 15108, 47620, // alpha = 0.5565634 + 15451, 14097, 15098, 47557, // alpha = 0.5804989 + 15444, 14028, 15090, 47496, // alpha = 0.6049383 + 15435, 13962, 15082, 47438, // alpha = 0.6298816 + 15431, 13900, 15076, 47386, // alpha = 0.6553288 + 15427, 13840, 15074, 47338, // alpha = 0.68128 + 15425, 13783, 15074, 47294, // alpha = 0.7077349 + 15419, 13729, 15070, 47250, // alpha = 0.7346939 + 15416, 13677, 15071, 47210, // alpha = 0.7621567 + 15412, 13628, 15072, 47170, // alpha = 0.7901235 + 15411, 13581, 15075, 47135, // alpha = 0.8185941 + 15410, 13535, 15079, 47100, // alpha = 0.8475687 + 15410, 13492, 15085, 47036, // alpha = 0.8770471 + 15409, 13451, 15091, 46973, // alpha = 0.9070295 + 15410, 13411, 15099, 46919, // alpha = 0.9375157 + 15411, 13373, 15109, 46861, // alpha = 0.9685059 + 15415, 13337, 15119, 46810, // alpha = 1 + + // Cos (theta) = 0.7881078 + 11979, 21269, 17923, 50691, // alpha = 0.001 + 11979, 21269, 17923, 50691, // alpha = 0.001 + 11979, 21269, 17923, 50691, // alpha = 0.001007811 + 11979, 21166, 17836, 50604, // alpha = 0.002267574 + 11979, 20547, 17213, 49980, // alpha = 0.004031243 + 11979, 19834, 16552, 49319, // alpha = 0.006298816 + 11979, 19366, 16002, 48767, // alpha = 0.009070295 + 18860, 18867, 19636, 55717, // alpha = 0.01234568 + 18544, 18548, 19132, 55026, // alpha = 0.01612497 + 18223, 18227, 18708, 54416, // alpha = 0.02040816 + 17914, 17914, 18422, 53839, // alpha = 0.02519527 + 17684, 17681, 18032, 53388, // alpha = 0.03048627 + 17508, 17502, 17752, 52939, // alpha = 0.03628118 + 17331, 17315, 17541, 52533, // alpha = 0.04258 + 17110, 17089, 17354, 52247, // alpha = 0.04938272 + 17002, 16904, 17094, 51914, // alpha = 0.05668934 + 16845, 16750, 16896, 51594, // alpha = 0.06449988 + 16715, 16621, 16737, 51352, // alpha = 0.07281432 + 16604, 16510, 16606, 51127, // alpha = 0.08163266 + 16548, 16415, 16494, 50873, // alpha = 0.09095491 + 16462, 16281, 16404, 50628, // alpha = 0.1007811 + 16389, 16136, 16270, 50430, // alpha = 0.1111111 + 16316, 16008, 16137, 50291, // alpha = 0.1219451 + 16225, 15894, 16024, 50152, // alpha = 0.1332829 + 16118, 15793, 15927, 49917, // alpha = 0.1451247 + 16025, 15701, 15841, 49723, // alpha = 0.1574704 + 15997, 15619, 15768, 49593, // alpha = 0.17032 + 15922, 15543, 15702, 49449, // alpha = 0.1836735 + 15864, 15475, 15644, 49331, // alpha = 0.1975309 + 15827, 15412, 15595, 49236, // alpha = 0.2118922 + 15795, 15349, 15551, 49155, // alpha = 0.2267574 + 15742, 15243, 15510, 48986, // alpha = 0.2421265 + 15712, 15145, 15475, 48853, // alpha = 0.2579995 + 15684, 15055, 15443, 48732, // alpha = 0.2743765 + 15664, 14970, 15416, 48634, // alpha = 0.2912573 + 15632, 14892, 15390, 48532, // alpha = 0.308642 + 15605, 14818, 15366, 48440, // alpha = 0.3265306 + 15587, 14750, 15333, 48364, // alpha = 0.3449232 + 15566, 14686, 15296, 48292, // alpha = 0.3638196 + 15550, 14626, 15264, 48227, // alpha = 0.38322 + 15533, 14569, 15235, 48166, // alpha = 0.4031242 + 15527, 14516, 15212, 48109, // alpha = 0.4235324 + 15507, 14466, 15187, 47999, // alpha = 0.4444445 + 15490, 14418, 15164, 47902, // alpha = 0.4658605 + 15480, 14374, 15147, 47820, // alpha = 0.4877803 + 15481, 14327, 15137, 47754, // alpha = 0.5102041 + 15467, 14247, 15121, 47676, // alpha = 0.5331318 + 15460, 14171, 15110, 47607, // alpha = 0.5565634 + 15453, 14099, 15100, 47544, // alpha = 0.5804989 + 15447, 14030, 15093, 47487, // alpha = 0.6049383 + 15438, 13965, 15084, 47428, // alpha = 0.6298816 + 15433, 13903, 15078, 47378, // alpha = 0.6553288 + 15428, 13844, 15075, 47329, // alpha = 0.68128 + 15427, 13787, 15076, 47287, // alpha = 0.7077349 + 15420, 13733, 15072, 47242, // alpha = 0.7346939 + 15417, 13682, 15070, 47201, // alpha = 0.7621567 + 15413, 13633, 15071, 47162, // alpha = 0.7901235 + 15412, 13586, 15074, 47127, // alpha = 0.8185941 + 15413, 13541, 15081, 47087, // alpha = 0.8475687 + 15412, 13498, 15085, 47022, // alpha = 0.8770471 + 15411, 13457, 15092, 46965, // alpha = 0.9070295 + 15411, 13417, 15099, 46907, // alpha = 0.9375157 + 15412, 13380, 15107, 46853, // alpha = 0.9685059 + 15415, 13344, 15116, 46800, // alpha = 1 + + // Cos (theta) = 0.7732427 + 11979, 21246, 17904, 50672, // alpha = 0.001 + 11979, 21246, 17904, 50672, // alpha = 0.001 + 11979, 21246, 17904, 50672, // alpha = 0.001007811 + 11979, 21138, 17813, 50580, // alpha = 0.002267574 + 11979, 20517, 17162, 49929, // alpha = 0.004031243 + 11979, 19795, 16519, 49285, // alpha = 0.006298816 + 11979, 19314, 15958, 48723, // alpha = 0.009070295 + 18825, 18831, 19591, 55647, // alpha = 0.01234568 + 18518, 18521, 19071, 54943, // alpha = 0.01612497 + 18183, 18185, 18665, 54364, // alpha = 0.02040816 + 17882, 17881, 18360, 53770, // alpha = 0.02519527 + 17657, 17654, 17985, 53341, // alpha = 0.03048627 + 17487, 17480, 17715, 52869, // alpha = 0.03628118 + 17295, 17278, 17512, 52483, // alpha = 0.04258 + 17135, 17057, 17298, 52234, // alpha = 0.04938272 + 16975, 16877, 17054, 51854, // alpha = 0.05668934 + 16822, 16727, 16863, 51549, // alpha = 0.06449988 + 16695, 16600, 16709, 51315, // alpha = 0.07281432 + 16587, 16492, 16583, 51068, // alpha = 0.08163266 + 16532, 16399, 16474, 50823, // alpha = 0.09095491 + 16449, 16253, 16387, 50587, // alpha = 0.1007811 + 16380, 16111, 16239, 50401, // alpha = 0.1111111 + 16320, 15986, 16110, 50273, // alpha = 0.1219451 + 16204, 15874, 16003, 50100, // alpha = 0.1332829 + 16101, 15775, 15909, 49876, // alpha = 0.1451247 + 16023, 15685, 15826, 49695, // alpha = 0.1574704 + 15984, 15604, 15754, 49563, // alpha = 0.17032 + 15910, 15530, 15690, 49422, // alpha = 0.1836735 + 15860, 15463, 15634, 49312, // alpha = 0.1975309 + 15833, 15402, 15586, 49225, // alpha = 0.2118922 + 15786, 15331, 15543, 49121, // alpha = 0.2267574 + 15751, 15227, 15504, 48970, // alpha = 0.2421265 + 15705, 15131, 15469, 48826, // alpha = 0.2579995 + 15677, 15041, 15438, 48708, // alpha = 0.2743765 + 15661, 14959, 15412, 48614, // alpha = 0.2912573 + 15628, 14881, 15386, 48511, // alpha = 0.308642 + 15601, 14809, 15363, 48422, // alpha = 0.3265306 + 15590, 14742, 15330, 48354, // alpha = 0.3449232 + 15568, 14679, 15294, 48280, // alpha = 0.3638196 + 15547, 14620, 15261, 48214, // alpha = 0.38322 + 15536, 14564, 15234, 48159, // alpha = 0.4031242 + 15526, 14511, 15209, 48087, // alpha = 0.4235324 + 15506, 14462, 15185, 47981, // alpha = 0.4444445 + 15488, 14415, 15164, 47884, // alpha = 0.4658605 + 15480, 14371, 15147, 47804, // alpha = 0.4877803 + 15481, 14323, 15137, 47738, // alpha = 0.5102041 + 15467, 14244, 15121, 47662, // alpha = 0.5331318 + 15460, 14168, 15109, 47595, // alpha = 0.5565634 + 15452, 14097, 15100, 47531, // alpha = 0.5804989 + 15445, 14029, 15092, 47474, // alpha = 0.6049383 + 15437, 13965, 15084, 47416, // alpha = 0.6298816 + 15432, 13903, 15078, 47367, // alpha = 0.6553288 + 15429, 13844, 15076, 47321, // alpha = 0.68128 + 15428, 13789, 15076, 47278, // alpha = 0.7077349 + 15421, 13735, 15072, 47233, // alpha = 0.7346939 + 15419, 13684, 15073, 47193, // alpha = 0.7621567 + 15414, 13635, 15071, 47154, // alpha = 0.7901235 + 15414, 13589, 15076, 47120, // alpha = 0.8185941 + 15413, 13544, 15080, 47073, // alpha = 0.8475687 + 15412, 13501, 15084, 47009, // alpha = 0.8770471 + 15411, 13460, 15090, 46949, // alpha = 0.9070295 + 15412, 13421, 15097, 46894, // alpha = 0.9375157 + 15413, 13384, 15105, 46840, // alpha = 0.9685059 + 15415, 13348, 15113, 46788, // alpha = 1 + + // Cos (theta) = 0.7578735 + 11979, 21222, 17884, 50652, // alpha = 0.001 + 11979, 21222, 17884, 50652, // alpha = 0.001 + 11979, 21222, 17884, 50652, // alpha = 0.001007811 + 11979, 21109, 17788, 50555, // alpha = 0.002267574 + 11979, 20487, 17111, 49878, // alpha = 0.004031243 + 11979, 19756, 16486, 49253, // alpha = 0.006298816 + 11979, 19263, 15915, 48679, // alpha = 0.009070295 + 18789, 18795, 19545, 55579, // alpha = 0.01234568 + 18491, 18494, 19012, 54862, // alpha = 0.01612497 + 18143, 18144, 18622, 54314, // alpha = 0.02040816 + 17850, 17848, 18297, 53703, // alpha = 0.02519527 + 17632, 17628, 17937, 53295, // alpha = 0.03048627 + 17466, 17458, 17675, 52806, // alpha = 0.03628118 + 17259, 17241, 17483, 52434, // alpha = 0.04258 + 17126, 17026, 17251, 52186, // alpha = 0.04938272 + 16948, 16850, 17016, 51796, // alpha = 0.05668934 + 16800, 16703, 16832, 51503, // alpha = 0.06449988 + 16675, 16580, 16682, 51279, // alpha = 0.07281432 + 16569, 16474, 16560, 51009, // alpha = 0.08163266 + 16515, 16382, 16453, 50773, // alpha = 0.09095491 + 16434, 16224, 16355, 50546, // alpha = 0.1007811 + 16355, 16085, 16212, 50367, // alpha = 0.1111111 + 16295, 15963, 16085, 50243, // alpha = 0.1219451 + 16182, 15854, 15979, 50051, // alpha = 0.1332829 + 16081, 15756, 15889, 49831, // alpha = 0.1451247 + 16027, 15668, 15808, 49672, // alpha = 0.1574704 + 15967, 15589, 15740, 49530, // alpha = 0.17032 + 15897, 15517, 15678, 49395, // alpha = 0.1836735 + 15856, 15451, 15624, 49293, // alpha = 0.1975309 + 15822, 15391, 15576, 49204, // alpha = 0.2118922 + 15775, 15311, 15534, 49081, // alpha = 0.2267574 + 15744, 15208, 15497, 48940, // alpha = 0.2421265 + 15698, 15114, 15462, 48797, // alpha = 0.2579995 + 15671, 15027, 15433, 48683, // alpha = 0.2743765 + 15654, 14945, 15407, 48590, // alpha = 0.2912573 + 15625, 14869, 15382, 48494, // alpha = 0.308642 + 15602, 14799, 15361, 48410, // alpha = 0.3265306 + 15586, 14732, 15323, 48336, // alpha = 0.3449232 + 15570, 14670, 15290, 48268, // alpha = 0.3638196 + 15545, 14612, 15256, 48201, // alpha = 0.38322 + 15533, 14557, 15231, 48145, // alpha = 0.4031242 + 15523, 14505, 15207, 48065, // alpha = 0.4235324 + 15504, 14457, 15183, 47957, // alpha = 0.4444445 + 15487, 14411, 15161, 47865, // alpha = 0.4658605 + 15478, 14367, 15144, 47783, // alpha = 0.4877803 + 15480, 14316, 15135, 47721, // alpha = 0.5102041 + 15467, 14238, 15120, 47644, // alpha = 0.5331318 + 15459, 14164, 15108, 47580, // alpha = 0.5565634 + 15452, 14093, 15099, 47519, // alpha = 0.5804989 + 15445, 14026, 15091, 47460, // alpha = 0.6049383 + 15436, 13962, 15082, 47405, // alpha = 0.6298816 + 15432, 13901, 15078, 47355, // alpha = 0.6553288 + 15429, 13843, 15075, 47311, // alpha = 0.68128 + 15427, 13788, 15074, 47265, // alpha = 0.7077349 + 15421, 13735, 15071, 47223, // alpha = 0.7346939 + 15418, 13684, 15072, 47184, // alpha = 0.7621567 + 15414, 13636, 15071, 47147, // alpha = 0.7901235 + 15414, 13590, 15074, 47112, // alpha = 0.8185941 + 15413, 13545, 15078, 47053, // alpha = 0.8475687 + 15413, 13503, 15083, 46993, // alpha = 0.8770471 + 15411, 13463, 15088, 46933, // alpha = 0.9070295 + 15412, 13424, 15094, 46876, // alpha = 0.9375157 + 15411, 13387, 15101, 46825, // alpha = 0.9685059 + 15413, 13351, 15111, 46775, // alpha = 1 + + // Cos (theta) = 0.7420005 + 11979, 21196, 17862, 50629, // alpha = 0.001 + 11979, 21196, 17862, 50629, // alpha = 0.001 + 11979, 21196, 17862, 50629, // alpha = 0.001007811 + 11979, 21078, 17761, 50529, // alpha = 0.002267574 + 11979, 20434, 17060, 49827, // alpha = 0.004031243 + 11979, 19718, 16453, 49220, // alpha = 0.006298816 + 11979, 19212, 15872, 48636, // alpha = 0.009070295 + 18753, 18759, 19501, 55512, // alpha = 0.01234568 + 18465, 18467, 18952, 54786, // alpha = 0.01612497 + 18102, 18103, 18580, 54256, // alpha = 0.02040816 + 17818, 17816, 18235, 53639, // alpha = 0.02519527 + 17606, 17601, 17889, 53250, // alpha = 0.03048627 + 17444, 17436, 17639, 52739, // alpha = 0.03628118 + 17225, 17204, 17452, 52388, // alpha = 0.04258 + 17095, 16995, 17199, 52114, // alpha = 0.04938272 + 16920, 16823, 16976, 51739, // alpha = 0.05668934 + 16775, 16680, 16799, 51458, // alpha = 0.06449988 + 16654, 16559, 16654, 51243, // alpha = 0.07281432 + 16581, 16456, 16533, 50983, // alpha = 0.08163266 + 16499, 16350, 16434, 50724, // alpha = 0.09095491 + 16419, 16195, 16321, 50505, // alpha = 0.1007811 + 16329, 16059, 16182, 50332, // alpha = 0.1111111 + 16271, 15939, 16058, 50214, // alpha = 0.1219451 + 16160, 15832, 15957, 49999, // alpha = 0.1332829 + 16062, 15737, 15868, 49789, // alpha = 0.1451247 + 16022, 15651, 15791, 49646, // alpha = 0.1574704 + 15951, 15573, 15723, 49498, // alpha = 0.17032 + 15892, 15502, 15663, 49373, // alpha = 0.1836735 + 15854, 15438, 15611, 49273, // alpha = 0.1975309 + 15811, 15379, 15565, 49182, // alpha = 0.2118922 + 15765, 15289, 15523, 49044, // alpha = 0.2267574 + 15733, 15189, 15487, 48902, // alpha = 0.2421265 + 15690, 15096, 15454, 48766, // alpha = 0.2579995 + 15664, 15010, 15425, 48656, // alpha = 0.2743765 + 15649, 14930, 15400, 48566, // alpha = 0.2912573 + 15622, 14856, 15377, 48474, // alpha = 0.308642 + 15596, 14786, 15351, 48388, // alpha = 0.3265306 + 15581, 14721, 15315, 48317, // alpha = 0.3449232 + 15564, 14660, 15282, 48251, // alpha = 0.3638196 + 15541, 14603, 15249, 48185, // alpha = 0.38322 + 15530, 14549, 15225, 48132, // alpha = 0.4031242 + 15519, 14498, 15202, 48037, // alpha = 0.4235324 + 15500, 14450, 15176, 47932, // alpha = 0.4444445 + 15489, 14405, 15159, 47846, // alpha = 0.4658605 + 15475, 14362, 15140, 47763, // alpha = 0.4877803 + 15478, 14306, 15132, 47702, // alpha = 0.5102041 + 15465, 14229, 15118, 47628, // alpha = 0.5331318 + 15457, 14156, 15106, 47563, // alpha = 0.5565634 + 15450, 14086, 15097, 47503, // alpha = 0.5804989 + 15444, 14020, 15089, 47447, // alpha = 0.6049383 + 15435, 13957, 15080, 47391, // alpha = 0.6298816 + 15430, 13897, 15076, 47341, // alpha = 0.6553288 + 15428, 13840, 15074, 47297, // alpha = 0.68128 + 15425, 13785, 15072, 47254, // alpha = 0.7077349 + 15419, 13732, 15070, 47212, // alpha = 0.7346939 + 15417, 13682, 15069, 47171, // alpha = 0.7621567 + 15413, 13635, 15068, 47135, // alpha = 0.7901235 + 15412, 13589, 15073, 47093, // alpha = 0.8185941 + 15412, 13545, 15075, 47034, // alpha = 0.8475687 + 15411, 13503, 15080, 46976, // alpha = 0.8770471 + 15410, 13463, 15084, 46915, // alpha = 0.9070295 + 15409, 13424, 15090, 46859, // alpha = 0.9375157 + 15409, 13388, 15097, 46805, // alpha = 0.9685059 + 15411, 13353, 15104, 46756, // alpha = 1 + + // Cos (theta) = 0.7256235 + 11979, 21168, 17838, 50605, // alpha = 0.001 + 11979, 21168, 17838, 50605, // alpha = 0.001 + 11979, 21168, 17838, 50605, // alpha = 0.001007811 + 11979, 21045, 17734, 50501, // alpha = 0.002267574 + 11979, 20374, 17010, 49777, // alpha = 0.004031243 + 11979, 19680, 16421, 49188, // alpha = 0.006298816 + 19151, 19162, 19948, 56327, // alpha = 0.009070295 + 18718, 18724, 19457, 55448, // alpha = 0.01234568 + 18440, 18441, 18893, 54711, // alpha = 0.01612497 + 18063, 18063, 18538, 54163, // alpha = 0.02040816 + 17786, 17784, 18173, 53576, // alpha = 0.02519527 + 17580, 17575, 17843, 53165, // alpha = 0.03048627 + 17422, 17415, 17603, 52676, // alpha = 0.03628118 + 17187, 17168, 17424, 52341, // alpha = 0.04258 + 17062, 16963, 17152, 52043, // alpha = 0.04938272 + 16893, 16796, 16937, 51683, // alpha = 0.05668934 + 16752, 16656, 16765, 51414, // alpha = 0.06449988 + 16634, 16538, 16626, 51207, // alpha = 0.07281432 + 16563, 16437, 16508, 50927, // alpha = 0.08163266 + 16482, 16317, 16414, 50676, // alpha = 0.09095491 + 16404, 16166, 16287, 50464, // alpha = 0.1007811 + 16327, 16033, 16148, 50311, // alpha = 0.1111111 + 16246, 15915, 16031, 50184, // alpha = 0.1219451 + 16139, 15811, 15934, 49950, // alpha = 0.1332829 + 16041, 15717, 15846, 49746, // alpha = 0.1451247 + 16013, 15633, 15772, 49616, // alpha = 0.1574704 + 15938, 15557, 15706, 49466, // alpha = 0.17032 + 15878, 15487, 15649, 49344, // alpha = 0.1836735 + 15840, 15424, 15599, 49248, // alpha = 0.1975309 + 15797, 15366, 15554, 49159, // alpha = 0.2118922 + 15753, 15266, 15513, 49003, // alpha = 0.2267574 + 15722, 15168, 15478, 48866, // alpha = 0.2421265 + 15679, 15077, 15445, 48732, // alpha = 0.2579995 + 15660, 14993, 15419, 48633, // alpha = 0.2743765 + 15642, 14914, 15394, 48541, // alpha = 0.2912573 + 15615, 14841, 15371, 48450, // alpha = 0.308642 + 15591, 14773, 15339, 48367, // alpha = 0.3265306 + 15575, 14709, 15303, 48299, // alpha = 0.3449232 + 15560, 14649, 15273, 48234, // alpha = 0.3638196 + 15536, 14592, 15241, 48168, // alpha = 0.38322 + 15531, 14539, 15220, 48113, // alpha = 0.4031242 + 15515, 14489, 15195, 48010, // alpha = 0.4235324 + 15496, 14442, 15171, 47906, // alpha = 0.4444445 + 15485, 14398, 15153, 47824, // alpha = 0.4658605 + 15484, 14355, 15142, 47753, // alpha = 0.4877803 + 15474, 14294, 15127, 47678, // alpha = 0.5102041 + 15461, 14218, 15112, 47607, // alpha = 0.5331318 + 15454, 14146, 15101, 47544, // alpha = 0.5565634 + 15448, 14078, 15093, 47485, // alpha = 0.5804989 + 15440, 14012, 15084, 47427, // alpha = 0.6049383 + 15432, 13950, 15077, 47376, // alpha = 0.6298816 + 15428, 13891, 15073, 47326, // alpha = 0.6553288 + 15424, 13834, 15068, 47280, // alpha = 0.68128 + 15423, 13780, 15070, 47241, // alpha = 0.7077349 + 15417, 13728, 15068, 47198, // alpha = 0.7346939 + 15415, 13679, 15066, 47161, // alpha = 0.7621567 + 15410, 13631, 15065, 47123, // alpha = 0.7901235 + 15409, 13586, 15069, 47075, // alpha = 0.8185941 + 15407, 13543, 15071, 47012, // alpha = 0.8475687 + 15408, 13501, 15075, 46951, // alpha = 0.8770471 + 15407, 13462, 15080, 46895, // alpha = 0.9070295 + 15407, 13424, 15084, 46838, // alpha = 0.9375157 + 15406, 13387, 15091, 46787, // alpha = 0.9685059 + 15408, 13353, 15099, 46737, // alpha = 1 + + // Cos (theta) = 0.7087427 + 11979, 21137, 17812, 50580, // alpha = 0.001 + 11979, 21137, 17812, 50580, // alpha = 0.001 + 11979, 21137, 17812, 50580, // alpha = 0.001007811 + 11979, 21011, 17705, 50472, // alpha = 0.002267574 + 11979, 20314, 16959, 49726, // alpha = 0.004031243 + 11979, 19643, 16389, 49156, // alpha = 0.006298816 + 19104, 19113, 19879, 56227, // alpha = 0.009070295 + 18684, 18689, 19372, 55387, // alpha = 0.01234568 + 18395, 18398, 18836, 54637, // alpha = 0.01612497 + 18023, 18022, 18498, 54070, // alpha = 0.02040816 + 17755, 17752, 18113, 53515, // alpha = 0.02519527 + 17555, 17549, 17796, 53079, // alpha = 0.03048627 + 17395, 17378, 17566, 52615, // alpha = 0.03628118 + 17153, 17131, 17378, 52296, // alpha = 0.04258 + 17032, 16932, 17103, 51972, // alpha = 0.04938272 + 16866, 16769, 16897, 51628, // alpha = 0.05668934 + 16728, 16632, 16732, 51370, // alpha = 0.06449988 + 16613, 16517, 16599, 51145, // alpha = 0.07281432 + 16552, 16419, 16485, 50879, // alpha = 0.08163266 + 16465, 16284, 16394, 50627, // alpha = 0.09095491 + 16394, 16136, 16250, 50429, // alpha = 0.1007811 + 16313, 16006, 16116, 50282, // alpha = 0.1111111 + 16220, 15891, 16004, 50131, // alpha = 0.1219451 + 16115, 15789, 15910, 49899, // alpha = 0.1332829 + 16034, 15697, 15826, 49712, // alpha = 0.1451247 + 15994, 15615, 15752, 49576, // alpha = 0.1574704 + 15919, 15540, 15690, 49433, // alpha = 0.17032 + 15862, 15472, 15634, 49315, // alpha = 0.1836735 + 15825, 15410, 15584, 49222, // alpha = 0.1975309 + 15793, 15346, 15541, 49130, // alpha = 0.2118922 + 15741, 15242, 15502, 48960, // alpha = 0.2267574 + 15711, 15146, 15468, 48831, // alpha = 0.2421265 + 15684, 15056, 15437, 48714, // alpha = 0.2579995 + 15652, 14974, 15410, 48604, // alpha = 0.2743765 + 15634, 14897, 15386, 48513, // alpha = 0.2912573 + 15606, 14825, 15363, 48425, // alpha = 0.308642 + 15583, 14758, 15326, 48343, // alpha = 0.3265306 + 15568, 14695, 15294, 48277, // alpha = 0.3449232 + 15552, 14636, 15262, 48215, // alpha = 0.3638196 + 15529, 14581, 15230, 48151, // alpha = 0.38322 + 15524, 14529, 15210, 48077, // alpha = 0.4031242 + 15510, 14480, 15187, 47978, // alpha = 0.4235324 + 15492, 14433, 15163, 47882, // alpha = 0.4444445 + 15483, 14389, 15148, 47799, // alpha = 0.4658605 + 15483, 14348, 15137, 47732, // alpha = 0.4877803 + 15470, 14280, 15122, 47657, // alpha = 0.5102041 + 15456, 14205, 15105, 47584, // alpha = 0.5331318 + 15450, 14134, 15096, 47525, // alpha = 0.5565634 + 15444, 14067, 15087, 47465, // alpha = 0.5804989 + 15437, 14002, 15080, 47412, // alpha = 0.6049383 + 15429, 13941, 15072, 47359, // alpha = 0.6298816 + 15428, 13882, 15071, 47312, // alpha = 0.6553288 + 15421, 13826, 15066, 47266, // alpha = 0.68128 + 15419, 13773, 15064, 47226, // alpha = 0.7077349 + 15413, 13722, 15060, 47184, // alpha = 0.7346939 + 15411, 13673, 15061, 47146, // alpha = 0.7621567 + 15407, 13626, 15060, 47112, // alpha = 0.7901235 + 15407, 13582, 15063, 47055, // alpha = 0.8185941 + 15404, 13539, 15064, 46986, // alpha = 0.8475687 + 15405, 13498, 15070, 46930, // alpha = 0.8770471 + 15403, 13459, 15074, 46872, // alpha = 0.9070295 + 15403, 13421, 15079, 46818, // alpha = 0.9375157 + 15402, 13385, 15085, 46769, // alpha = 0.9685059 + 15404, 13351, 15093, 46719, // alpha = 1 + + // Cos (theta) = 0.691358 + 11979, 21105, 17784, 50552, // alpha = 0.001 + 11979, 21105, 17784, 50552, // alpha = 0.001 + 11979, 21105, 17784, 50552, // alpha = 0.001007811 + 11979, 20975, 17674, 50442, // alpha = 0.002267574 + 11979, 20254, 16908, 49675, // alpha = 0.004031243 + 11979, 19605, 16332, 49097, // alpha = 0.006298816 + 19056, 19064, 19812, 56117, // alpha = 0.009070295 + 18651, 18654, 19288, 55329, // alpha = 0.01234568 + 18345, 18346, 18778, 54568, // alpha = 0.01612497 + 17984, 17982, 18457, 53982, // alpha = 0.02040816 + 17724, 17720, 18053, 53455, // alpha = 0.02519527 + 17530, 17523, 17750, 52997, // alpha = 0.03048627 + 17352, 17335, 17529, 52557, // alpha = 0.03628118 + 17119, 17095, 17319, 52252, // alpha = 0.04258 + 17000, 16901, 17056, 51903, // alpha = 0.04938272 + 16838, 16742, 16858, 51574, // alpha = 0.05668934 + 16704, 16609, 16699, 51327, // alpha = 0.06449988 + 16591, 16496, 16571, 51076, // alpha = 0.07281432 + 16533, 16400, 16461, 50821, // alpha = 0.08163266 + 16447, 16251, 16362, 50579, // alpha = 0.09095491 + 16376, 16106, 16213, 50391, // alpha = 0.1007811 + 16311, 15979, 16084, 50260, // alpha = 0.1111111 + 16195, 15866, 15977, 50074, // alpha = 0.1219451 + 16090, 15766, 15884, 49849, // alpha = 0.1332829 + 16012, 15677, 15803, 49668, // alpha = 0.1451247 + 15974, 15596, 15732, 49538, // alpha = 0.1574704 + 15902, 15523, 15672, 49399, // alpha = 0.17032 + 15849, 15456, 15616, 49288, // alpha = 0.1836735 + 15826, 15395, 15571, 49205, // alpha = 0.1975309 + 15778, 15319, 15529, 49081, // alpha = 0.2118922 + 15746, 15217, 15492, 48939, // alpha = 0.2267574 + 15700, 15122, 15458, 48793, // alpha = 0.2421265 + 15674, 15035, 15428, 48681, // alpha = 0.2579995 + 15655, 14954, 15403, 48584, // alpha = 0.2743765 + 15624, 14878, 15379, 48486, // alpha = 0.2912573 + 15597, 14808, 15354, 48398, // alpha = 0.308642 + 15582, 14742, 15315, 48326, // alpha = 0.3265306 + 15559, 14680, 15281, 48254, // alpha = 0.3449232 + 15545, 14623, 15250, 48194, // alpha = 0.3638196 + 15523, 14568, 15221, 48133, // alpha = 0.38322 + 15519, 14517, 15200, 48046, // alpha = 0.4031242 + 15504, 14469, 15178, 47948, // alpha = 0.4235324 + 15485, 14423, 15155, 47849, // alpha = 0.4444445 + 15477, 14380, 15140, 47772, // alpha = 0.4658605 + 15479, 14339, 15130, 47710, // alpha = 0.4877803 + 15465, 14264, 15115, 47633, // alpha = 0.5102041 + 15453, 14190, 15100, 47564, // alpha = 0.5331318 + 15446, 14120, 15090, 47504, // alpha = 0.5565634 + 15440, 14054, 15082, 47446, // alpha = 0.5804989 + 15433, 13990, 15075, 47393, // alpha = 0.6049383 + 15427, 13930, 15068, 47342, // alpha = 0.6298816 + 15424, 13872, 15064, 47296, // alpha = 0.6553288 + 15416, 13817, 15060, 47249, // alpha = 0.68128 + 15416, 13764, 15059, 47210, // alpha = 0.7077349 + 15410, 13714, 15055, 47168, // alpha = 0.7346939 + 15408, 13666, 15056, 47133, // alpha = 0.7621567 + 15403, 13620, 15055, 47090, // alpha = 0.7901235 + 15403, 13576, 15058, 47026, // alpha = 0.8185941 + 15402, 13534, 15061, 46963, // alpha = 0.8475687 + 15401, 13493, 15064, 46906, // alpha = 0.8770471 + 15399, 13454, 15067, 46849, // alpha = 0.9070295 + 15398, 13417, 15072, 46795, // alpha = 0.9375157 + 15398, 13382, 15078, 46744, // alpha = 0.9685059 + 15399, 13348, 15085, 46699, // alpha = 1 + + // Cos (theta) = 0.6734694 + 11979, 21070, 17755, 50523, // alpha = 0.001 + 11979, 21070, 17755, 50523, // alpha = 0.001 + 11979, 21070, 17755, 50523, // alpha = 0.001007811 + 11979, 20937, 17642, 50410, // alpha = 0.002267574 + 11979, 20195, 16858, 49625, // alpha = 0.004031243 + 11979, 19569, 16269, 49034, // alpha = 0.006298816 + 19008, 19015, 19745, 56012, // alpha = 0.009070295 + 18617, 18619, 19205, 55247, // alpha = 0.01234568 + 18294, 18295, 18722, 54499, // alpha = 0.01612497 + 17944, 17943, 18402, 53895, // alpha = 0.02040816 + 17692, 17688, 17992, 53398, // alpha = 0.02519527 + 17504, 17497, 17704, 52917, // alpha = 0.03048627 + 17310, 17291, 17493, 52498, // alpha = 0.03628118 + 17161, 17058, 17251, 52243, // alpha = 0.04258 + 16969, 16870, 17009, 51835, // alpha = 0.04938272 + 16811, 16714, 16818, 51522, // alpha = 0.05668934 + 16681, 16585, 16666, 51286, // alpha = 0.06449988 + 16570, 16475, 16542, 51009, // alpha = 0.07281432 + 16514, 16379, 16437, 50766, // alpha = 0.08163266 + 16430, 16217, 16320, 50531, // alpha = 0.09095491 + 16342, 16076, 16178, 50350, // alpha = 0.1007811 + 16282, 15952, 16051, 50226, // alpha = 0.1111111 + 16168, 15842, 15948, 50017, // alpha = 0.1219451 + 16067, 15744, 15859, 49797, // alpha = 0.1332829 + 16013, 15656, 15782, 49642, // alpha = 0.1451247 + 15952, 15577, 15713, 49499, // alpha = 0.1574704 + 15883, 15505, 15653, 49365, // alpha = 0.17032 + 15853, 15440, 15603, 49271, // alpha = 0.1836735 + 15809, 15380, 15555, 49177, // alpha = 0.1975309 + 15764, 15291, 15516, 49035, // alpha = 0.2118922 + 15730, 15191, 15479, 48892, // alpha = 0.2267574 + 15686, 15098, 15445, 48753, // alpha = 0.2421265 + 15660, 15013, 15418, 48645, // alpha = 0.2579995 + 15643, 14933, 15393, 48553, // alpha = 0.2743765 + 15613, 14859, 15369, 48456, // alpha = 0.2912573 + 15595, 14790, 15339, 48377, // alpha = 0.308642 + 15578, 14725, 15302, 48306, // alpha = 0.3265306 + 15558, 14665, 15269, 48238, // alpha = 0.3449232 + 15538, 14608, 15239, 48174, // alpha = 0.3638196 + 15528, 14554, 15215, 48115, // alpha = 0.38322 + 15516, 14504, 15191, 48015, // alpha = 0.4031242 + 15496, 14457, 15167, 47913, // alpha = 0.4235324 + 15479, 14412, 15146, 47820, // alpha = 0.4444445 + 15472, 14369, 15130, 47744, // alpha = 0.4658605 + 15473, 14322, 15122, 47682, // alpha = 0.4877803 + 15459, 14246, 15106, 47607, // alpha = 0.5102041 + 15446, 14173, 15091, 47539, // alpha = 0.5331318 + 15439, 14105, 15082, 47478, // alpha = 0.5565634 + 15433, 14039, 15073, 47422, // alpha = 0.5804989 + 15428, 13977, 15068, 47371, // alpha = 0.6049383 + 15422, 13917, 15061, 47320, // alpha = 0.6298816 + 15419, 13860, 15058, 47277, // alpha = 0.6553288 + 15415, 13806, 15054, 47234, // alpha = 0.68128 + 15410, 13754, 15052, 47191, // alpha = 0.7077349 + 15405, 13704, 15050, 47154, // alpha = 0.7346939 + 15402, 13657, 15049, 47116, // alpha = 0.7621567 + 15399, 13612, 15049, 47059, // alpha = 0.7901235 + 15398, 13568, 15051, 46996, // alpha = 0.8185941 + 15397, 13527, 15054, 46936, // alpha = 0.8475687 + 15396, 13487, 15058, 46880, // alpha = 0.8770471 + 15394, 13449, 15061, 46822, // alpha = 0.9070295 + 15394, 13412, 15065, 46770, // alpha = 0.9375157 + 15392, 13377, 15069, 46720, // alpha = 0.9685059 + 15393, 13344, 15075, 46673, // alpha = 1 + + // Cos (theta) = 0.6550768 + 11979, 21033, 17724, 50491, // alpha = 0.001 + 11979, 21033, 17724, 50491, // alpha = 0.001 + 11979, 21033, 17724, 50491, // alpha = 0.001007811 + 11979, 20898, 17608, 50376, // alpha = 0.002267574 + 11979, 20136, 16808, 49575, // alpha = 0.004031243 + 11979, 19532, 16207, 48972, // alpha = 0.006298816 + 18960, 18967, 19681, 55911, // alpha = 0.009070295 + 18583, 18585, 19124, 55137, // alpha = 0.01234568 + 18244, 18244, 18667, 54434, // alpha = 0.01612497 + 17905, 17903, 18321, 53812, // alpha = 0.02040816 + 17661, 17656, 17933, 53342, // alpha = 0.02519527 + 17479, 17471, 17659, 52839, // alpha = 0.03048627 + 17268, 17249, 17457, 52442, // alpha = 0.03628118 + 17124, 17022, 17193, 52176, // alpha = 0.04258 + 16937, 16838, 16962, 51769, // alpha = 0.04938272 + 16783, 16687, 16779, 51470, // alpha = 0.05668934 + 16656, 16561, 16633, 51245, // alpha = 0.06449988 + 16579, 16454, 16510, 50978, // alpha = 0.07281432 + 16494, 16342, 16412, 50709, // alpha = 0.08163266 + 16413, 16183, 16278, 50486, // alpha = 0.09095491 + 16311, 16045, 16140, 50312, // alpha = 0.1007811 + 16254, 15924, 16019, 50192, // alpha = 0.1111111 + 16140, 15816, 15919, 49957, // alpha = 0.1219451 + 16043, 15720, 15833, 49749, // alpha = 0.1332829 + 16012, 15634, 15761, 49611, // alpha = 0.1451247 + 15932, 15557, 15691, 49460, // alpha = 0.1574704 + 15873, 15487, 15634, 49338, // alpha = 0.17032 + 15835, 15423, 15586, 49241, // alpha = 0.1836735 + 15793, 15365, 15541, 49149, // alpha = 0.1975309 + 15749, 15263, 15502, 48988, // alpha = 0.2118922 + 15716, 15164, 15467, 48851, // alpha = 0.2267574 + 15673, 15073, 15433, 48716, // alpha = 0.2421265 + 15648, 14989, 15407, 48610, // alpha = 0.2579995 + 15636, 14911, 15384, 48524, // alpha = 0.2743765 + 15609, 14839, 15360, 48433, // alpha = 0.2912573 + 15583, 14771, 15320, 48351, // alpha = 0.308642 + 15569, 14707, 15287, 48282, // alpha = 0.3265306 + 15554, 14648, 15256, 48218, // alpha = 0.3449232 + 15528, 14592, 15223, 48153, // alpha = 0.3638196 + 15518, 14540, 15199, 48074, // alpha = 0.38322 + 15507, 14490, 15178, 47978, // alpha = 0.4031242 + 15488, 14444, 15155, 47878, // alpha = 0.4235324 + 15471, 14400, 15134, 47789, // alpha = 0.4444445 + 15463, 14358, 15119, 47713, // alpha = 0.4658605 + 15465, 14301, 15112, 47652, // alpha = 0.4877803 + 15453, 14226, 15097, 47579, // alpha = 0.5102041 + 15444, 14155, 15085, 47517, // alpha = 0.5331318 + 15434, 14087, 15073, 47456, // alpha = 0.5565634 + 15432, 14023, 15068, 47404, // alpha = 0.5804989 + 15423, 13961, 15060, 47349, // alpha = 0.6049383 + 15417, 13903, 15054, 47301, // alpha = 0.6298816 + 15413, 13847, 15050, 47258, // alpha = 0.6553288 + 15410, 13793, 15047, 47216, // alpha = 0.68128 + 15405, 13742, 15045, 47176, // alpha = 0.7077349 + 15400, 13693, 15042, 47137, // alpha = 0.7346939 + 15397, 13647, 15042, 47099, // alpha = 0.7621567 + 15392, 13602, 15041, 47030, // alpha = 0.7901235 + 15393, 13559, 15044, 46969, // alpha = 0.8185941 + 15391, 13518, 15046, 46910, // alpha = 0.8475687 + 15391, 13479, 15050, 46853, // alpha = 0.8770471 + 15389, 13441, 15053, 46798, // alpha = 0.9070295 + 15387, 13405, 15056, 46745, // alpha = 0.9375157 + 15386, 13371, 15060, 46695, // alpha = 0.9685059 + 15388, 13338, 15068, 46652, // alpha = 1 + + // Cos (theta) = 0.6361803 + 11979, 20994, 17691, 50458, // alpha = 0.001 + 11979, 20994, 17691, 50458, // alpha = 0.001 + 11979, 20994, 17691, 50458, // alpha = 0.001007811 + 11979, 20857, 17574, 50341, // alpha = 0.002267574 + 11979, 20077, 16758, 49525, // alpha = 0.004031243 + 15929, 19496, 17556, 53366, // alpha = 0.006298816 + 18913, 18919, 19619, 55813, // alpha = 0.009070295 + 18549, 18551, 19045, 55030, // alpha = 0.01234568 + 18194, 18194, 18613, 54371, // alpha = 0.01612497 + 17867, 17864, 18244, 53732, // alpha = 0.02040816 + 17631, 17625, 17875, 53288, // alpha = 0.02519527 + 17454, 17446, 17613, 52764, // alpha = 0.03048627 + 17227, 17206, 17422, 52387, // alpha = 0.03628118 + 17087, 16985, 17136, 52091, // alpha = 0.04258 + 16905, 16807, 16914, 51705, // alpha = 0.04938272 + 16756, 16660, 16740, 51420, // alpha = 0.05668934 + 16632, 16537, 16600, 51205, // alpha = 0.06449988 + 16557, 16433, 16483, 50912, // alpha = 0.07281432 + 16475, 16304, 16388, 50655, // alpha = 0.08163266 + 16394, 16149, 16236, 50440, // alpha = 0.09095491 + 16306, 16015, 16101, 50285, // alpha = 0.1007811 + 16222, 15896, 15988, 50140, // alpha = 0.1111111 + 16113, 15791, 15891, 49899, // alpha = 0.1219451 + 16017, 15697, 15806, 49700, // alpha = 0.1332829 + 15989, 15613, 15734, 49569, // alpha = 0.1451247 + 15912, 15537, 15669, 49424, // alpha = 0.1574704 + 15853, 15469, 15614, 49305, // alpha = 0.17032 + 15818, 15406, 15567, 49214, // alpha = 0.1836735 + 15784, 15338, 15525, 49105, // alpha = 0.1975309 + 15732, 15233, 15486, 48938, // alpha = 0.2118922 + 15701, 15137, 15453, 48808, // alpha = 0.2267574 + 15674, 15048, 15424, 48692, // alpha = 0.2421265 + 15641, 14965, 15396, 48579, // alpha = 0.2579995 + 15624, 14889, 15373, 48491, // alpha = 0.2743765 + 15596, 14818, 15342, 48403, // alpha = 0.2912573 + 15575, 14751, 15302, 48326, // alpha = 0.308642 + 15557, 14689, 15270, 48257, // alpha = 0.3265306 + 15543, 14631, 15239, 48195, // alpha = 0.3449232 + 15518, 14576, 15210, 48131, // alpha = 0.3638196 + 15514, 14524, 15189, 48040, // alpha = 0.38322 + 15499, 14476, 15164, 47941, // alpha = 0.4031242 + 15480, 14430, 15143, 47844, // alpha = 0.4235324 + 15470, 14387, 15126, 47760, // alpha = 0.4444445 + 15456, 14346, 15108, 47682, // alpha = 0.4658605 + 15459, 14278, 15102, 47624, // alpha = 0.4877803 + 15445, 14204, 15085, 47552, // alpha = 0.5102041 + 15438, 14134, 15076, 47490, // alpha = 0.5331318 + 15427, 14068, 15063, 47432, // alpha = 0.5565634 + 15425, 14005, 15058, 47381, // alpha = 0.5804989 + 15415, 13944, 15050, 47327, // alpha = 0.6049383 + 15411, 13887, 15045, 47280, // alpha = 0.6298816 + 15407, 13832, 15041, 47237, // alpha = 0.6553288 + 15405, 13779, 15041, 47198, // alpha = 0.68128 + 15399, 13729, 15037, 47156, // alpha = 0.7077349 + 15396, 13681, 15035, 47120, // alpha = 0.7346939 + 15391, 13635, 15033, 47062, // alpha = 0.7621567 + 15387, 13591, 15033, 46999, // alpha = 0.7901235 + 15387, 13549, 15035, 46937, // alpha = 0.8185941 + 15385, 13509, 15038, 46877, // alpha = 0.8475687 + 15385, 13470, 15041, 46822, // alpha = 0.8770471 + 15382, 13433, 15043, 46767, // alpha = 0.9070295 + 15382, 13397, 15047, 46719, // alpha = 0.9375157 + 15381, 13364, 15051, 46671, // alpha = 0.9685059 + 15381, 13331, 15058, 46628, // alpha = 1 + + // Cos (theta) = 0.61678 + 11979, 20953, 17656, 50423, // alpha = 0.001 + 11979, 20953, 17656, 50423, // alpha = 0.001 + 11979, 20953, 17656, 50423, // alpha = 0.001007811 + 11979, 20814, 17538, 50305, // alpha = 0.002267574 + 11979, 20018, 16708, 49475, // alpha = 0.004031243 + 15878, 19460, 17546, 53308, // alpha = 0.006298816 + 18867, 18872, 19558, 55721, // alpha = 0.009070295 + 18516, 18518, 18967, 54929, // alpha = 0.01234568 + 18144, 18143, 18559, 54309, // alpha = 0.01612497 + 17828, 17825, 18169, 53653, // alpha = 0.02040816 + 17599, 17594, 17817, 53221, // alpha = 0.02519527 + 17429, 17420, 17568, 52691, // alpha = 0.03048627 + 17186, 17163, 17364, 52334, // alpha = 0.03628118 + 17050, 16949, 17079, 52009, // alpha = 0.04258 + 16873, 16776, 16868, 51643, // alpha = 0.04938272 + 16729, 16633, 16700, 51371, // alpha = 0.05668934 + 16608, 16513, 16566, 51132, // alpha = 0.06449988 + 16544, 16412, 16454, 50855, // alpha = 0.07281432 + 16454, 16266, 16344, 50601, // alpha = 0.08163266 + 16369, 16115, 16193, 50396, // alpha = 0.09095491 + 16286, 15984, 16062, 50253, // alpha = 0.1007811 + 16191, 15868, 15954, 50074, // alpha = 0.1111111 + 16085, 15765, 15861, 49842, // alpha = 0.1219451 + 15992, 15673, 15780, 49650, // alpha = 0.1332829 + 15965, 15591, 15710, 49526, // alpha = 0.1451247 + 15891, 15517, 15650, 49386, // alpha = 0.1574704 + 15839, 15450, 15596, 49274, // alpha = 0.17032 + 15814, 15389, 15551, 49190, // alpha = 0.1836735 + 15766, 15306, 15508, 49052, // alpha = 0.1975309 + 15717, 15203, 15471, 48895, // alpha = 0.2118922 + 15685, 15109, 15439, 48762, // alpha = 0.2267574 + 15659, 15021, 15410, 48652, // alpha = 0.2421265 + 15642, 14941, 15387, 48558, // alpha = 0.2579995 + 15609, 14866, 15361, 48457, // alpha = 0.2743765 + 15585, 14796, 15322, 48371, // alpha = 0.2912573 + 15568, 14730, 15286, 48301, // alpha = 0.308642 + 15547, 14669, 15253, 48231, // alpha = 0.3265306 + 15531, 14612, 15222, 48170, // alpha = 0.3449232 + 15509, 14559, 15193, 48091, // alpha = 0.3638196 + 15506, 14508, 15176, 48002, // alpha = 0.38322 + 15490, 14461, 15152, 47905, // alpha = 0.4031242 + 15472, 14416, 15128, 47808, // alpha = 0.4235324 + 15461, 14373, 15112, 47727, // alpha = 0.4444445 + 15466, 14330, 15105, 47669, // alpha = 0.4658605 + 15450, 14254, 15088, 47593, // alpha = 0.4877803 + 15437, 14181, 15075, 47525, // alpha = 0.5102041 + 15430, 14113, 15064, 47466, // alpha = 0.5331318 + 15424, 14047, 15056, 47408, // alpha = 0.5565634 + 15417, 13985, 15049, 47356, // alpha = 0.5804989 + 15408, 13926, 15040, 47305, // alpha = 0.6049383 + 15404, 13869, 15035, 47259, // alpha = 0.6298816 + 15400, 13815, 15032, 47217, // alpha = 0.6553288 + 15398, 13763, 15031, 47178, // alpha = 0.68128 + 15392, 13714, 15027, 47138, // alpha = 0.7077349 + 15390, 13667, 15026, 47103, // alpha = 0.7346939 + 15385, 13622, 15026, 47029, // alpha = 0.7621567 + 15380, 13579, 15024, 46964, // alpha = 0.7901235 + 15380, 13537, 15025, 46903, // alpha = 0.8185941 + 15379, 13497, 15029, 46845, // alpha = 0.8475687 + 15378, 13459, 15031, 46793, // alpha = 0.8770471 + 15375, 13423, 15034, 46740, // alpha = 0.9070295 + 15375, 13388, 15038, 46692, // alpha = 0.9375157 + 15373, 13355, 15043, 46645, // alpha = 0.9685059 + 15375, 13323, 15048, 46600, // alpha = 1 + + // Cos (theta) = 0.5968758 + 11979, 20910, 17619, 50387, // alpha = 0.001 + 11979, 20910, 17619, 50387, // alpha = 0.001 + 11979, 20910, 17619, 50387, // alpha = 0.001007811 + 11979, 20771, 17500, 50268, // alpha = 0.002267574 + 11979, 19960, 16658, 49425, // alpha = 0.004031243 + 15843, 19394, 17549, 53255, // alpha = 0.006298816 + 18820, 18825, 19498, 55629, // alpha = 0.009070295 + 18484, 18484, 18890, 54833, // alpha = 0.01234568 + 18094, 18093, 18505, 54237, // alpha = 0.01612497 + 17790, 17786, 18093, 53578, // alpha = 0.02040816 + 17569, 17563, 17761, 53121, // alpha = 0.02519527 + 17399, 17381, 17525, 52619, // alpha = 0.03048627 + 17143, 17120, 17294, 52283, // alpha = 0.03628118 + 17013, 16913, 17023, 51930, // alpha = 0.04258 + 16841, 16745, 16822, 51581, // alpha = 0.04938272 + 16700, 16606, 16661, 51322, // alpha = 0.05668934 + 16584, 16489, 16533, 51054, // alpha = 0.06449988 + 16521, 16391, 16425, 50790, // alpha = 0.07281432 + 16433, 16228, 16296, 50546, // alpha = 0.08163266 + 16344, 16081, 16149, 50356, // alpha = 0.09095491 + 16279, 15952, 16028, 50224, // alpha = 0.1007811 + 16161, 15839, 15923, 50008, // alpha = 0.1111111 + 16059, 15739, 15831, 49790, // alpha = 0.1219451 + 15979, 15650, 15754, 49609, // alpha = 0.1332829 + 15939, 15569, 15688, 49481, // alpha = 0.1451247 + 15868, 15497, 15628, 49348, // alpha = 0.1574704 + 15829, 15431, 15577, 49245, // alpha = 0.17032 + 15795, 15371, 15532, 49160, // alpha = 0.1836735 + 15748, 15273, 15492, 48998, // alpha = 0.1975309 + 15715, 15172, 15458, 48859, // alpha = 0.2118922 + 15670, 15080, 15425, 48719, // alpha = 0.2267574 + 15644, 14994, 15397, 48610, // alpha = 0.2421265 + 15628, 14915, 15374, 48520, // alpha = 0.2579995 + 15597, 14842, 15343, 48425, // alpha = 0.2743765 + 15571, 14773, 15299, 48342, // alpha = 0.2912573 + 15563, 14709, 15269, 48277, // alpha = 0.308642 + 15534, 14649, 15230, 48204, // alpha = 0.3265306 + 15520, 14593, 15205, 48146, // alpha = 0.3449232 + 15505, 14541, 15179, 48054, // alpha = 0.3638196 + 15494, 14491, 15158, 47958, // alpha = 0.38322 + 15480, 14444, 15138, 47863, // alpha = 0.4031242 + 15462, 14400, 15116, 47772, // alpha = 0.4235324 + 15454, 14359, 15101, 47695, // alpha = 0.4444445 + 15456, 14303, 15091, 47636, // alpha = 0.4658605 + 15441, 14228, 15076, 47561, // alpha = 0.4877803 + 15429, 14157, 15062, 47495, // alpha = 0.5102041 + 15422, 14089, 15054, 47438, // alpha = 0.5331318 + 15415, 14025, 15044, 47382, // alpha = 0.5565634 + 15410, 13964, 15038, 47331, // alpha = 0.5804989 + 15401, 13906, 15029, 47282, // alpha = 0.6049383 + 15396, 13850, 15025, 47237, // alpha = 0.6298816 + 15393, 13797, 15022, 47194, // alpha = 0.6553288 + 15390, 13746, 15020, 47156, // alpha = 0.68128 + 15385, 13698, 15017, 47117, // alpha = 0.7077349 + 15382, 13652, 15016, 47062, // alpha = 0.7346939 + 15377, 13607, 15015, 46995, // alpha = 0.7621567 + 15374, 13565, 15015, 46929, // alpha = 0.7901235 + 15373, 13524, 15017, 46870, // alpha = 0.8185941 + 15372, 13485, 15019, 46816, // alpha = 0.8475687 + 15370, 13448, 15021, 46762, // alpha = 0.8770471 + 15369, 13412, 15025, 46710, // alpha = 0.9070295 + 15368, 13378, 15028, 46663, // alpha = 0.9375157 + 15366, 13345, 15031, 46614, // alpha = 0.9685059 + 15367, 13314, 15037, 46573, // alpha = 1 + + // Cos (theta) = 0.5764676 + 11979, 20865, 17580, 50348, // alpha = 0.001 + 11979, 20865, 17580, 50348, // alpha = 0.001 + 11979, 20865, 17580, 50348, // alpha = 0.001007811 + 11979, 20725, 17462, 50230, // alpha = 0.002267574 + 11979, 19902, 16609, 49376, // alpha = 0.004031243 + 15906, 19323, 17639, 53278, // alpha = 0.006298816 + 18774, 18778, 19421, 55543, // alpha = 0.009070295 + 18450, 18451, 18815, 54734, // alpha = 0.01234568 + 18045, 18044, 18457, 54114, // alpha = 0.01612497 + 17752, 17747, 18020, 53504, // alpha = 0.02040816 + 17539, 17532, 17705, 53023, // alpha = 0.02519527 + 17350, 17330, 17481, 52551, // alpha = 0.03048627 + 17180, 17078, 17214, 52267, // alpha = 0.03628118 + 16976, 16877, 16967, 51851, // alpha = 0.04258 + 16809, 16713, 16775, 51521, // alpha = 0.04938272 + 16673, 16578, 16624, 51274, // alpha = 0.05668934 + 16559, 16465, 16500, 50978, // alpha = 0.06449988 + 16499, 16354, 16398, 50728, // alpha = 0.07281432 + 16413, 16189, 16244, 50494, // alpha = 0.08163266 + 16310, 16046, 16107, 50313, // alpha = 0.09095491 + 16244, 15921, 15989, 50188, // alpha = 0.1007811 + 16130, 15811, 15888, 49942, // alpha = 0.1111111 + 16030, 15713, 15801, 49731, // alpha = 0.1219451 + 15974, 15625, 15728, 49576, // alpha = 0.1332829 + 15915, 15547, 15663, 49439, // alpha = 0.1451247 + 15844, 15476, 15605, 49309, // alpha = 0.1574704 + 15816, 15412, 15557, 49218, // alpha = 0.17032 + 15774, 15346, 15513, 49108, // alpha = 0.1836735 + 15729, 15239, 15475, 48943, // alpha = 0.1975309 + 15697, 15141, 15441, 48808, // alpha = 0.2118922 + 15653, 15050, 15410, 48674, // alpha = 0.2267574 + 15629, 14966, 15383, 48571, // alpha = 0.2421265 + 15616, 14889, 15361, 48487, // alpha = 0.2579995 + 15588, 14817, 15318, 48394, // alpha = 0.2743765 + 15564, 14750, 15279, 48316, // alpha = 0.2912573 + 15549, 14687, 15247, 48249, // alpha = 0.308642 + 15533, 14629, 15215, 48184, // alpha = 0.3265306 + 15508, 14574, 15186, 48114, // alpha = 0.3449232 + 15499, 14522, 15166, 48016, // alpha = 0.3638196 + 15489, 14474, 15143, 47921, // alpha = 0.38322 + 15471, 14428, 15121, 47824, // alpha = 0.4031242 + 15452, 14385, 15101, 47733, // alpha = 0.4235324 + 15444, 14344, 15085, 47659, // alpha = 0.4444445 + 15448, 14274, 15079, 47603, // alpha = 0.4658605 + 15432, 14201, 15063, 47530, // alpha = 0.4877803 + 15420, 14131, 15049, 47464, // alpha = 0.5102041 + 15414, 14065, 15041, 47409, // alpha = 0.5331318 + 15408, 14002, 15033, 47356, // alpha = 0.5565634 + 15401, 13942, 15026, 47305, // alpha = 0.5804989 + 15392, 13885, 15018, 47258, // alpha = 0.6049383 + 15392, 13830, 15017, 47216, // alpha = 0.6298816 + 15384, 13778, 15010, 47173, // alpha = 0.6553288 + 15383, 13728, 15010, 47136, // alpha = 0.68128 + 15377, 13681, 15007, 47091, // alpha = 0.7077349 + 15374, 13635, 15005, 47024, // alpha = 0.7346939 + 15370, 13592, 15004, 46958, // alpha = 0.7621567 + 15365, 13550, 15003, 46893, // alpha = 0.7901235 + 15365, 13510, 15005, 46836, // alpha = 0.8185941 + 15364, 13472, 15008, 46784, // alpha = 0.8475687 + 15363, 13435, 15012, 46729, // alpha = 0.8770471 + 15361, 13400, 15014, 46679, // alpha = 0.9070295 + 15359, 13366, 15018, 46633, // alpha = 0.9375157 + 15355, 13334, 15021, 46588, // alpha = 0.9685059 + 15356, 13295, 15025, 46544, // alpha = 1 + + // Cos (theta) = 0.5555555 + 11979, 20817, 17540, 50308, // alpha = 0.001 + 11979, 20817, 17540, 50308, // alpha = 0.001 + 11979, 20817, 17540, 50308, // alpha = 0.001007811 + 11979, 20679, 17423, 50190, // alpha = 0.002267574 + 11979, 19844, 16560, 49327, // alpha = 0.004031243 + 19246, 19254, 19912, 56433, // alpha = 0.006298816 + 18728, 18732, 19311, 55459, // alpha = 0.009070295 + 18404, 18405, 18744, 54642, // alpha = 0.01234568 + 17996, 17994, 18381, 54003, // alpha = 0.01612497 + 17714, 17709, 17947, 53434, // alpha = 0.02040816 + 17508, 17501, 17650, 52926, // alpha = 0.02519527 + 17299, 17279, 17438, 52482, // alpha = 0.03048627 + 17137, 17035, 17146, 52208, // alpha = 0.03628118 + 16939, 16840, 16913, 51775, // alpha = 0.04258 + 16777, 16682, 16729, 51461, // alpha = 0.04938272 + 16644, 16551, 16584, 51228, // alpha = 0.05668934 + 16535, 16441, 16468, 50903, // alpha = 0.06449988 + 16476, 16311, 16356, 50665, // alpha = 0.07281432 + 16392, 16151, 16199, 50442, // alpha = 0.08163266 + 16270, 16011, 16067, 50268, // alpha = 0.09095491 + 16209, 15889, 15951, 50123, // alpha = 0.1007811 + 16097, 15782, 15855, 49877, // alpha = 0.1111111 + 15999, 15686, 15772, 49674, // alpha = 0.1219451 + 15968, 15601, 15702, 49542, // alpha = 0.1332829 + 15889, 15524, 15639, 49394, // alpha = 0.1451247 + 15832, 15455, 15584, 49278, // alpha = 0.1574704 + 15794, 15392, 15538, 49184, // alpha = 0.17032 + 15753, 15310, 15496, 49046, // alpha = 0.1836735 + 15709, 15205, 15458, 48888, // alpha = 0.1975309 + 15680, 15109, 15426, 48761, // alpha = 0.2118922 + 15636, 15020, 15395, 48632, // alpha = 0.2267574 + 15619, 14938, 15370, 48536, // alpha = 0.2421265 + 15601, 14862, 15337, 48449, // alpha = 0.2579995 + 15574, 14792, 15295, 48361, // alpha = 0.2743765 + 15550, 14726, 15257, 48285, // alpha = 0.2912573 + 15537, 14665, 15225, 48219, // alpha = 0.308642 + 15519, 14607, 15198, 48157, // alpha = 0.3265306 + 15497, 14553, 15168, 48066, // alpha = 0.3449232 + 15492, 14503, 15148, 47973, // alpha = 0.3638196 + 15477, 14455, 15128, 47878, // alpha = 0.38322 + 15458, 14410, 15104, 47780, // alpha = 0.4031242 + 15441, 14368, 15083, 47694, // alpha = 0.4235324 + 15434, 14320, 15070, 47626, // alpha = 0.4444445 + 15437, 14244, 15064, 47567, // alpha = 0.4658605 + 15423, 14172, 15049, 47499, // alpha = 0.4877803 + 15416, 14104, 15039, 47438, // alpha = 0.5102041 + 15404, 14039, 15027, 47380, // alpha = 0.5331318 + 15402, 13977, 15023, 47333, // alpha = 0.5565634 + 15393, 13918, 15014, 47280, // alpha = 0.5804989 + 15386, 13862, 15008, 47234, // alpha = 0.6049383 + 15384, 13809, 15005, 47193, // alpha = 0.6298816 + 15378, 13758, 15001, 47151, // alpha = 0.6553288 + 15374, 13709, 14998, 47114, // alpha = 0.68128 + 15368, 13662, 14994, 47048, // alpha = 0.7077349 + 15366, 13617, 14994, 46984, // alpha = 0.7346939 + 15362, 13575, 14993, 46919, // alpha = 0.7621567 + 15355, 13534, 14993, 46855, // alpha = 0.7901235 + 15352, 13495, 14994, 46801, // alpha = 0.8185941 + 15354, 13457, 14999, 46748, // alpha = 0.8475687 + 15348, 13421, 15000, 46696, // alpha = 0.8770471 + 15345, 13387, 15003, 46648, // alpha = 0.9070295 + 15342, 13354, 15006, 46602, // alpha = 0.9375157 + 15339, 13322, 15008, 46556, // alpha = 0.9685059 + 15340, 13271, 15014, 46517, // alpha = 1 + + // Cos (theta) = 0.5341396 + 11979, 20768, 17498, 50266, // alpha = 0.001 + 11979, 20768, 17498, 50266, // alpha = 0.001 + 11979, 20768, 17498, 50266, // alpha = 0.001007811 + 11979, 20632, 17357, 50124, // alpha = 0.002267574 + 11979, 19787, 16512, 49279, // alpha = 0.004031243 + 19177, 19185, 19819, 56351, // alpha = 0.006298816 + 18683, 18686, 19200, 55379, // alpha = 0.009070295 + 18339, 18339, 18674, 54553, // alpha = 0.01234568 + 17947, 17945, 18282, 53897, // alpha = 0.01612497 + 17676, 17670, 17875, 53365, // alpha = 0.02040816 + 17478, 17470, 17595, 52835, // alpha = 0.02519527 + 17249, 17228, 17384, 52417, // alpha = 0.03048627 + 17093, 16992, 17079, 52108, // alpha = 0.03628118 + 16900, 16804, 16858, 51699, // alpha = 0.04258 + 16745, 16650, 16684, 51403, // alpha = 0.04938272 + 16616, 16523, 16547, 51166, // alpha = 0.05668934 + 16537, 16417, 16433, 50860, // alpha = 0.06449988 + 16451, 16268, 16301, 50601, // alpha = 0.07281432 + 16359, 16112, 16150, 50389, // alpha = 0.08163266 + 16234, 15976, 16023, 50225, // alpha = 0.09095491 + 16173, 15857, 15913, 50048, // alpha = 0.1007811 + 16065, 15753, 15822, 49813, // alpha = 0.1111111 + 15971, 15659, 15741, 49619, // alpha = 0.1219451 + 15940, 15576, 15674, 49493, // alpha = 0.1332829 + 15867, 15501, 15614, 49354, // alpha = 0.1451247 + 15808, 15434, 15562, 49240, // alpha = 0.1574704 + 15771, 15372, 15516, 49149, // alpha = 0.17032 + 15741, 15273, 15477, 48995, // alpha = 0.1836735 + 15689, 15170, 15440, 48835, // alpha = 0.1975309 + 15660, 15076, 15410, 48710, // alpha = 0.2118922 + 15633, 14989, 15383, 48601, // alpha = 0.2267574 + 15617, 14909, 15357, 48507, // alpha = 0.2421265 + 15584, 14835, 15311, 48411, // alpha = 0.2579995 + 15559, 14766, 15270, 48327, // alpha = 0.2743765 + 15542, 14701, 15236, 48257, // alpha = 0.2912573 + 15523, 14641, 15204, 48190, // alpha = 0.308642 + 15506, 14585, 15175, 48131, // alpha = 0.3265306 + 15485, 14532, 15148, 48016, // alpha = 0.3449232 + 15480, 14483, 15129, 47927, // alpha = 0.3638196 + 15465, 14436, 15107, 47834, // alpha = 0.38322 + 15448, 14392, 15088, 47739, // alpha = 0.4031242 + 15437, 14351, 15071, 47663, // alpha = 0.4235324 + 15441, 14287, 15065, 47606, // alpha = 0.4444445 + 15426, 14213, 15048, 47532, // alpha = 0.4658605 + 15413, 14142, 15035, 47466, // alpha = 0.4877803 + 15405, 14075, 15024, 47408, // alpha = 0.5102041 + 15399, 14012, 15016, 47355, // alpha = 0.5331318 + 15393, 13951, 15009, 47304, // alpha = 0.5565634 + 15383, 13893, 15001, 47255, // alpha = 0.5804989 + 15378, 13838, 14996, 47210, // alpha = 0.6049383 + 15374, 13786, 14993, 47167, // alpha = 0.6298816 + 15370, 13736, 14989, 47130, // alpha = 0.6553288 + 15365, 13688, 14986, 47080, // alpha = 0.68128 + 15359, 13642, 14983, 47007, // alpha = 0.7077349 + 15355, 13598, 14983, 46941, // alpha = 0.7346939 + 15345, 13557, 14981, 46877, // alpha = 0.7621567 + 15344, 13516, 14984, 46824, // alpha = 0.7901235 + 15337, 13478, 14984, 46765, // alpha = 0.8185941 + 15337, 13441, 14987, 46715, // alpha = 0.8475687 + 15333, 13406, 14989, 46663, // alpha = 0.8770471 + 15328, 13372, 14990, 46614, // alpha = 0.9070295 + 15324, 13340, 14994, 46570, // alpha = 0.9375157 + 15321, 13305, 14997, 46527, // alpha = 0.9685059 + 15321, 13246, 15001, 46486, // alpha = 1 + + // Cos (theta) = 0.5122197 + 11979, 20717, 17455, 50223, // alpha = 0.001 + 11979, 20717, 17455, 50223, // alpha = 0.001 + 11979, 20717, 17455, 50223, // alpha = 0.001007811 + 11979, 20583, 17275, 50042, // alpha = 0.002267574 + 16471, 19730, 17123, 53597, // alpha = 0.004031243 + 19109, 19116, 19728, 56227, // alpha = 0.006298816 + 18638, 18640, 19095, 55301, // alpha = 0.009070295 + 18274, 18274, 18605, 54468, // alpha = 0.01234568 + 17899, 17896, 18188, 53794, // alpha = 0.01612497 + 17638, 17632, 17806, 53300, // alpha = 0.02040816 + 17447, 17439, 17543, 52745, // alpha = 0.02519527 + 17199, 17178, 17300, 52353, // alpha = 0.03048627 + 17050, 16950, 17015, 52012, // alpha = 0.03628118 + 16863, 16767, 16803, 51626, // alpha = 0.04258 + 16712, 16619, 16639, 51347, // alpha = 0.04938272 + 16587, 16496, 16509, 51075, // alpha = 0.05668934 + 16511, 16392, 16401, 50786, // alpha = 0.06449988 + 16428, 16224, 16245, 50542, // alpha = 0.07281432 + 16317, 16073, 16101, 50339, // alpha = 0.08163266 + 16233, 15941, 15980, 50199, // alpha = 0.09095491 + 16139, 15825, 15876, 49976, // alpha = 0.1007811 + 16032, 15723, 15788, 49750, // alpha = 0.1111111 + 15941, 15632, 15710, 49567, // alpha = 0.1219451 + 15913, 15551, 15646, 49446, // alpha = 0.1332829 + 15840, 15478, 15589, 49313, // alpha = 0.1451247 + 15789, 15412, 15538, 49206, // alpha = 0.1574704 + 15765, 15344, 15497, 49102, // alpha = 0.17032 + 15719, 15235, 15459, 48934, // alpha = 0.1836735 + 15687, 15135, 15424, 48797, // alpha = 0.1975309 + 15640, 15043, 15392, 48660, // alpha = 0.2118922 + 15615, 14958, 15367, 48555, // alpha = 0.2267574 + 15599, 14880, 15328, 48467, // alpha = 0.2421265 + 15568, 14807, 15282, 48374, // alpha = 0.2579995 + 15542, 14739, 15244, 48292, // alpha = 0.2743765 + 15534, 14676, 15214, 48230, // alpha = 0.2912573 + 15513, 14618, 15183, 48164, // alpha = 0.308642 + 15494, 14562, 15155, 48081, // alpha = 0.3265306 + 15478, 14511, 15129, 47972, // alpha = 0.3449232 + 15472, 14462, 15113, 47885, // alpha = 0.3638196 + 15453, 14417, 15091, 47786, // alpha = 0.38322 + 15436, 14374, 15070, 47700, // alpha = 0.4031242 + 15426, 14330, 15055, 47624, // alpha = 0.4235324 + 15430, 14253, 15049, 47570, // alpha = 0.4444445 + 15414, 14180, 15031, 47497, // alpha = 0.4658605 + 15402, 14111, 15018, 47434, // alpha = 0.4877803 + 15395, 14045, 15009, 47376, // alpha = 0.5102041 + 15389, 13983, 15001, 47325, // alpha = 0.5331318 + 15383, 13924, 14995, 47275, // alpha = 0.5565634 + 15373, 13867, 14987, 47225, // alpha = 0.5804989 + 15368, 13813, 14983, 47183, // alpha = 0.6049383 + 15365, 13762, 14978, 47142, // alpha = 0.6298816 + 15362, 13713, 14977, 47107, // alpha = 0.6553288 + 15351, 13666, 14973, 47034, // alpha = 0.68128 + 15345, 13621, 14972, 46966, // alpha = 0.7077349 + 15337, 13578, 14971, 46902, // alpha = 0.7346939 + 15327, 13537, 14970, 46840, // alpha = 0.7621567 + 15325, 13498, 14970, 46785, // alpha = 0.7901235 + 15323, 13460, 14973, 46730, // alpha = 0.8185941 + 15320, 13424, 14975, 46679, // alpha = 0.8475687 + 15315, 13390, 14976, 46629, // alpha = 0.8770471 + 15309, 13357, 14979, 46584, // alpha = 0.9070295 + 15307, 13325, 14982, 46538, // alpha = 0.9375157 + 15301, 13277, 14985, 46498, // alpha = 0.9685059 + 15304, 13219, 14990, 46457, // alpha = 1 + + // Cos (theta) = 0.4897959 + 11979, 20665, 17411, 50178, // alpha = 0.001 + 11979, 20665, 17411, 50178, // alpha = 0.001 + 11979, 20665, 17411, 50178, // alpha = 0.001007811 + 11979, 20534, 17192, 49959, // alpha = 0.002267574 + 16144, 19674, 17754, 53727, // alpha = 0.004031243 + 19043, 19048, 19642, 56075, // alpha = 0.006298816 + 18593, 18595, 18992, 55162, // alpha = 0.009070295 + 18209, 18209, 18538, 54386, // alpha = 0.01234568 + 17851, 17847, 18096, 53695, // alpha = 0.01612497 + 17600, 17593, 17737, 53222, // alpha = 0.02040816 + 17417, 17408, 17490, 52657, // alpha = 0.02519527 + 17149, 17127, 17219, 52291, // alpha = 0.03048627 + 17006, 16907, 16948, 51918, // alpha = 0.03628118 + 16825, 16731, 16750, 51556, // alpha = 0.04258 + 16680, 16587, 16595, 51292, // alpha = 0.04938272 + 16559, 16468, 16472, 50987, // alpha = 0.05668934 + 16486, 16351, 16355, 50716, // alpha = 0.06449988 + 16405, 16180, 16192, 50481, // alpha = 0.07281432 + 16274, 16033, 16054, 50289, // alpha = 0.08163266 + 16219, 15905, 15936, 50158, // alpha = 0.09095491 + 16103, 15792, 15839, 49902, // alpha = 0.1007811 + 16000, 15693, 15753, 49689, // alpha = 0.1111111 + 15922, 15605, 15681, 49519, // alpha = 0.1219451 + 15884, 15526, 15619, 49398, // alpha = 0.1332829 + 15815, 15454, 15563, 49271, // alpha = 0.1451247 + 15774, 15390, 15516, 49175, // alpha = 0.1574704 + 15742, 15303, 15475, 49034, // alpha = 0.17032 + 15696, 15196, 15438, 48873, // alpha = 0.1836735 + 15666, 15099, 15407, 48743, // alpha = 0.1975309 + 15621, 15009, 15376, 48611, // alpha = 0.2118922 + 15596, 14926, 15341, 48511, // alpha = 0.2267574 + 15584, 14849, 15300, 48428, // alpha = 0.2421265 + 15556, 14778, 15256, 48337, // alpha = 0.2579995 + 15534, 14712, 15221, 48263, // alpha = 0.2743765 + 15519, 14651, 15189, 48198, // alpha = 0.2912573 + 15504, 14593, 15163, 48138, // alpha = 0.308642 + 15479, 14539, 15133, 48023, // alpha = 0.3265306 + 15470, 14489, 15110, 47927, // alpha = 0.3449232 + 15459, 14441, 15091, 47837, // alpha = 0.3638196 + 15440, 14396, 15070, 47743, // alpha = 0.38322 + 15423, 14354, 15051, 47657, // alpha = 0.4031242 + 15416, 14293, 15037, 47586, // alpha = 0.4235324 + 15418, 14218, 15031, 47530, // alpha = 0.4444445 + 15403, 14146, 15014, 47460, // alpha = 0.4658605 + 15392, 14079, 15003, 47398, // alpha = 0.4877803 + 15384, 14015, 14993, 47344, // alpha = 0.5102041 + 15378, 13954, 14987, 47293, // alpha = 0.5331318 + 15372, 13896, 14980, 47247, // alpha = 0.5565634 + 15363, 13840, 14972, 47198, // alpha = 0.5804989 + 15361, 13787, 14970, 47157, // alpha = 0.6049383 + 15349, 13737, 14965, 47118, // alpha = 0.6298816 + 15345, 13689, 14965, 47060, // alpha = 0.6553288 + 15332, 13643, 14961, 46987, // alpha = 0.68128 + 15327, 13599, 14961, 46925, // alpha = 0.7077349 + 15317, 13557, 14958, 46862, // alpha = 0.7346939 + 15308, 13517, 14958, 46798, // alpha = 0.7621567 + 15306, 13479, 14958, 46743, // alpha = 0.7901235 + 15302, 13442, 14959, 46693, // alpha = 0.8185941 + 15302, 13406, 14962, 46642, // alpha = 0.8475687 + 15294, 13372, 14964, 46595, // alpha = 0.8770471 + 15290, 13340, 14966, 46550, // alpha = 0.9070295 + 15287, 13306, 14969, 46509, // alpha = 0.9375157 + 15286, 13246, 14973, 46466, // alpha = 0.9685059 + 15285, 13189, 14977, 46427, // alpha = 1 + + // Cos (theta) = 0.4668682 + 11979, 20611, 17322, 50089, // alpha = 0.001 + 11979, 20611, 17322, 50089, // alpha = 0.001 + 11979, 20611, 17322, 50089, // alpha = 0.001007811 + 11979, 20484, 17107, 49874, // alpha = 0.002267574 + 16074, 19618, 17746, 53620, // alpha = 0.004031243 + 18976, 18981, 19558, 55931, // alpha = 0.006298816 + 18549, 18550, 18893, 55019, // alpha = 0.009070295 + 18146, 18144, 18472, 54308, // alpha = 0.01234568 + 17802, 17798, 18002, 53599, // alpha = 0.01612497 + 17562, 17555, 17669, 53097, // alpha = 0.02040816 + 17364, 17346, 17439, 52573, // alpha = 0.02519527 + 17098, 17076, 17139, 52231, // alpha = 0.03048627 + 16963, 16864, 16885, 51828, // alpha = 0.03628118 + 16787, 16694, 16697, 51486, // alpha = 0.04258 + 16647, 16555, 16551, 51238, // alpha = 0.04938272 + 16530, 16440, 16434, 50901, // alpha = 0.05668934 + 16466, 16302, 16294, 50652, // alpha = 0.06449988 + 16378, 16136, 16136, 50422, // alpha = 0.07281432 + 16230, 15993, 16006, 50240, // alpha = 0.08163266 + 16180, 15869, 15895, 50074, // alpha = 0.09095491 + 16064, 15760, 15801, 49830, // alpha = 0.1007811 + 15967, 15663, 15720, 49628, // alpha = 0.1111111 + 15913, 15577, 15650, 49482, // alpha = 0.1219451 + 15856, 15500, 15591, 49350, // alpha = 0.1332829 + 15798, 15431, 15538, 49235, // alpha = 0.1451247 + 15758, 15368, 15495, 49134, // alpha = 0.1574704 + 15718, 15262, 15454, 48966, // alpha = 0.17032 + 15674, 15158, 15420, 48813, // alpha = 0.1836735 + 15645, 15062, 15388, 48690, // alpha = 0.1975309 + 15601, 14974, 15354, 48565, // alpha = 0.2118922 + 15585, 14894, 15311, 48471, // alpha = 0.2267574 + 15566, 14819, 15269, 48387, // alpha = 0.2421265 + 15541, 14749, 15229, 48303, // alpha = 0.2579995 + 15518, 14685, 15194, 48229, // alpha = 0.2743765 + 15502, 14624, 15166, 48165, // alpha = 0.2912573 + 15487, 14568, 15138, 48086, // alpha = 0.308642 + 15464, 14516, 15110, 47970, // alpha = 0.3265306 + 15461, 14466, 15092, 47882, // alpha = 0.3449232 + 15446, 14420, 15071, 47788, // alpha = 0.3638196 + 15426, 14376, 15049, 47694, // alpha = 0.38322 + 15416, 14333, 15034, 47619, // alpha = 0.4031242 + 15402, 14255, 15017, 47545, // alpha = 0.4235324 + 15406, 14182, 15013, 47489, // alpha = 0.4444445 + 15392, 14112, 14999, 47423, // alpha = 0.4658605 + 15383, 14046, 14987, 47369, // alpha = 0.4877803 + 15373, 13983, 14977, 47312, // alpha = 0.5102041 + 15371, 13923, 14973, 47264, // alpha = 0.5331318 + 15360, 13866, 14964, 47215, // alpha = 0.5565634 + 15349, 13812, 14959, 47172, // alpha = 0.5804989 + 15342, 13761, 14955, 47133, // alpha = 0.6049383 + 15328, 13711, 14951, 47083, // alpha = 0.6298816 + 15322, 13664, 14948, 47012, // alpha = 0.6553288 + 15310, 13619, 14947, 46941, // alpha = 0.68128 + 15306, 13576, 14946, 46879, // alpha = 0.7077349 + 15296, 13535, 14943, 46816, // alpha = 0.7346939 + 15287, 13496, 14942, 46757, // alpha = 0.7621567 + 15286, 13458, 14945, 46704, // alpha = 0.7901235 + 15284, 13422, 14947, 46656, // alpha = 0.8185941 + 15281, 13388, 14950, 46606, // alpha = 0.8475687 + 15274, 13354, 14951, 46560, // alpha = 0.8770471 + 15271, 13323, 14953, 46518, // alpha = 0.9070295 + 15268, 13272, 14956, 46474, // alpha = 0.9375157 + 15268, 13214, 14960, 46433, // alpha = 0.9685059 + 15266, 13158, 14964, 46396, // alpha = 1 + + // Cos (theta) = 0.4434366 + 11979, 20556, 17228, 49995, // alpha = 0.001 + 11979, 20556, 17228, 49995, // alpha = 0.001 + 11979, 20556, 17228, 49995, // alpha = 0.001007811 + 11979, 20388, 17022, 49789, // alpha = 0.002267574 + 19401, 19563, 20194, 57019, // alpha = 0.004031243 + 18909, 18914, 19476, 55797, // alpha = 0.006298816 + 18505, 18505, 18797, 54885, // alpha = 0.009070295 + 18082, 18080, 18387, 54193, // alpha = 0.01234568 + 17754, 17749, 17913, 53508, // alpha = 0.01612497 + 17524, 17517, 17604, 52979, // alpha = 0.02040816 + 17302, 17285, 17369, 52490, // alpha = 0.02519527 + 17049, 17025, 17059, 52122, // alpha = 0.03048627 + 16916, 16821, 16821, 51737, // alpha = 0.03628118 + 16749, 16657, 16646, 51418, // alpha = 0.04258 + 16613, 16523, 16508, 51168, // alpha = 0.04938272 + 16501, 16412, 16399, 50816, // alpha = 0.05668934 + 16439, 16252, 16231, 50580, // alpha = 0.06449988 + 16328, 16092, 16082, 50364, // alpha = 0.07281432 + 16199, 15953, 15959, 50198, // alpha = 0.08163266 + 16137, 15833, 15853, 49989, // alpha = 0.09095491 + 16027, 15727, 15764, 49758, // alpha = 0.1007811 + 15933, 15633, 15686, 49568, // alpha = 0.1111111 + 15903, 15549, 15623, 49446, // alpha = 0.1219451 + 15825, 15474, 15564, 49303, // alpha = 0.1332829 + 15768, 15407, 15513, 49194, // alpha = 0.1451247 + 15734, 15331, 15472, 49062, // alpha = 0.1574704 + 15701, 15220, 15433, 48909, // alpha = 0.17032 + 15652, 15118, 15399, 48756, // alpha = 0.1836735 + 15621, 15025, 15369, 48633, // alpha = 0.1975309 + 15595, 14940, 15327, 48526, // alpha = 0.2118922 + 15579, 14861, 15283, 48439, // alpha = 0.2267574 + 15547, 14788, 15238, 48347, // alpha = 0.2421265 + 15522, 14720, 15201, 48265, // alpha = 0.2579995 + 15506, 14657, 15168, 48198, // alpha = 0.2743765 + 15485, 14598, 15138, 48134, // alpha = 0.2912573 + 15471, 14543, 15113, 48026, // alpha = 0.308642 + 15448, 14491, 15084, 47911, // alpha = 0.3265306 + 15445, 14443, 15068, 47830, // alpha = 0.3449232 + 15430, 14398, 15049, 47738, // alpha = 0.3638196 + 15413, 14355, 15027, 47649, // alpha = 0.38322 + 15404, 14293, 15014, 47579, // alpha = 0.4031242 + 15407, 14217, 15008, 47522, // alpha = 0.4235324 + 15392, 14145, 14992, 47451, // alpha = 0.4444445 + 15380, 14077, 14980, 47388, // alpha = 0.4658605 + 15372, 14012, 14971, 47333, // alpha = 0.4877803 + 15364, 13950, 14963, 47282, // alpha = 0.5102041 + 15356, 13892, 14955, 47234, // alpha = 0.5331318 + 15338, 13836, 14947, 47187, // alpha = 0.5565634 + 15328, 13784, 14943, 47146, // alpha = 0.5804989 + 15318, 13733, 14940, 47106, // alpha = 0.6049383 + 15314, 13685, 14938, 47036, // alpha = 0.6298816 + 15301, 13639, 14934, 46961, // alpha = 0.6553288 + 15295, 13595, 14933, 46899, // alpha = 0.68128 + 15284, 13553, 14931, 46833, // alpha = 0.7077349 + 15273, 13513, 14928, 46775, // alpha = 0.7346939 + 15271, 13474, 14929, 46717, // alpha = 0.7621567 + 15264, 13437, 14929, 46664, // alpha = 0.7901235 + 15266, 13402, 14934, 46618, // alpha = 0.8185941 + 15259, 13368, 14934, 46569, // alpha = 0.8475687 + 15253, 13336, 14936, 46524, // alpha = 0.8770471 + 15249, 13297, 14939, 46482, // alpha = 0.9070295 + 15247, 13238, 14942, 46439, // alpha = 0.9375157 + 15246, 13181, 14946, 46404, // alpha = 0.9685059 + 15244, 13126, 14949, 46366, // alpha = 1 + + // Cos (theta) = 0.4195011 + 11979, 20500, 17133, 49900, // alpha = 0.001 + 11979, 20500, 17133, 49900, // alpha = 0.001 + 11979, 20500, 17133, 49900, // alpha = 0.001007811 + 11979, 20287, 16936, 49703, // alpha = 0.002267574 + 19456, 19508, 20080, 56772, // alpha = 0.004031243 + 18844, 18847, 19345, 55665, // alpha = 0.006298816 + 18461, 18461, 18703, 54755, // alpha = 0.009070295 + 18018, 18016, 18263, 54047, // alpha = 0.01234568 + 17706, 17701, 17827, 53419, // alpha = 0.01612497 + 17486, 17479, 17538, 52864, // alpha = 0.02040816 + 17243, 17223, 17271, 52413, // alpha = 0.02519527 + 16997, 16974, 16982, 52008, // alpha = 0.03048627 + 16872, 16778, 16760, 51651, // alpha = 0.03628118 + 16711, 16621, 16596, 51352, // alpha = 0.04258 + 16580, 16492, 16468, 51064, // alpha = 0.04938272 + 16471, 16384, 16342, 50733, // alpha = 0.05668934 + 16412, 16203, 16170, 50511, // alpha = 0.06449988 + 16278, 16047, 16030, 50307, // alpha = 0.07281432 + 16154, 15913, 15910, 50125, // alpha = 0.08163266 + 16097, 15796, 15811, 49910, // alpha = 0.09095491 + 15989, 15693, 15727, 49689, // alpha = 0.1007811 + 15898, 15602, 15652, 49509, // alpha = 0.1111111 + 15869, 15521, 15591, 49390, // alpha = 0.1219451 + 15796, 15448, 15536, 49258, // alpha = 0.1332829 + 15742, 15383, 15488, 49156, // alpha = 0.1451247 + 15723, 15286, 15450, 49010, // alpha = 0.1574704 + 15676, 15178, 15412, 48844, // alpha = 0.17032 + 15644, 15079, 15380, 48713, // alpha = 0.1836735 + 15599, 14988, 15341, 48583, // alpha = 0.1975309 + 15574, 14905, 15292, 48480, // alpha = 0.2118922 + 15558, 14828, 15249, 48396, // alpha = 0.2267574 + 15534, 14756, 15208, 48310, // alpha = 0.2421265 + 15510, 14690, 15173, 48234, // alpha = 0.2579995 + 15496, 14628, 15143, 48170, // alpha = 0.2743765 + 15479, 14571, 15116, 48089, // alpha = 0.2912573 + 15455, 14517, 15086, 47967, // alpha = 0.308642 + 15445, 14467, 15066, 47872, // alpha = 0.3265306 + 15434, 14420, 15047, 47783, // alpha = 0.3449232 + 15415, 14375, 15026, 47687, // alpha = 0.3638196 + 15397, 14331, 15007, 47602, // alpha = 0.38322 + 15390, 14252, 14992, 47536, // alpha = 0.4031242 + 15394, 14178, 14988, 47480, // alpha = 0.4235324 + 15378, 14107, 14972, 47412, // alpha = 0.4444445 + 15366, 14041, 14959, 47353, // alpha = 0.4658605 + 15357, 13977, 14950, 47298, // alpha = 0.4877803 + 15344, 13917, 14944, 47250, // alpha = 0.5102041 + 15332, 13860, 14938, 47204, // alpha = 0.5331318 + 15313, 13806, 14931, 47158, // alpha = 0.5565634 + 15303, 13754, 14925, 47117, // alpha = 0.5804989 + 15294, 13705, 14922, 47049, // alpha = 0.6049383 + 15291, 13658, 14922, 46985, // alpha = 0.6298816 + 15278, 13613, 14916, 46913, // alpha = 0.6553288 + 15270, 13570, 14916, 46849, // alpha = 0.68128 + 15260, 13529, 14914, 46789, // alpha = 0.7077349 + 15253, 13489, 14914, 46730, // alpha = 0.7346939 + 15250, 13452, 14915, 46678, // alpha = 0.7621567 + 15246, 13416, 14916, 46628, // alpha = 0.7901235 + 15242, 13381, 14918, 46579, // alpha = 0.8185941 + 15237, 13348, 14919, 46531, // alpha = 0.8475687 + 15230, 13316, 14920, 46489, // alpha = 0.8770471 + 15228, 13260, 14924, 46446, // alpha = 0.9070295 + 15224, 13202, 14926, 46407, // alpha = 0.9375157 + 15223, 13146, 14930, 46370, // alpha = 0.9685059 + 15221, 13092, 14934, 46336, // alpha = 1 + + // Cos (theta) = 0.3950617 + 11979, 20406, 17037, 49804, // alpha = 0.001 + 11979, 20406, 17037, 49804, // alpha = 0.001 + 11979, 20406, 17037, 49804, // alpha = 0.001007811 + 50141, 20185, 21051, 51897, // alpha = 0.002267574 + 19441, 19451, 19928, 56673, // alpha = 0.004031243 + 18780, 18782, 19195, 55545, // alpha = 0.006298816 + 18402, 18401, 18614, 54633, // alpha = 0.009070295 + 17955, 17952, 18143, 53910, // alpha = 0.01234568 + 17659, 17653, 17742, 53336, // alpha = 0.01612497 + 17449, 17441, 17477, 52754, // alpha = 0.02040816 + 17181, 17162, 17171, 52335, // alpha = 0.02519527 + 17019, 16923, 16900, 51957, // alpha = 0.03048627 + 16826, 16735, 16701, 51565, // alpha = 0.03628118 + 16672, 16584, 16547, 51288, // alpha = 0.04258 + 16546, 16460, 16426, 50962, // alpha = 0.04938272 + 16440, 16328, 16273, 50652, // alpha = 0.05668934 + 16384, 16153, 16109, 50445, // alpha = 0.06449988 + 16231, 16003, 15977, 50254, // alpha = 0.07281432 + 16111, 15873, 15863, 50034, // alpha = 0.08163266 + 16054, 15760, 15770, 49830, // alpha = 0.09095491 + 15952, 15660, 15689, 49623, // alpha = 0.1007811 + 15863, 15572, 15618, 49451, // alpha = 0.1111111 + 15836, 15493, 15561, 49338, // alpha = 0.1219451 + 15766, 15422, 15508, 49215, // alpha = 0.1332829 + 15717, 15356, 15462, 49080, // alpha = 0.1451247 + 15697, 15240, 15425, 48936, // alpha = 0.1574704 + 15651, 15135, 15390, 48781, // alpha = 0.17032 + 15620, 15039, 15360, 48653, // alpha = 0.1836735 + 15575, 14950, 15302, 48526, // alpha = 0.1975309 + 15552, 14869, 15255, 48431, // alpha = 0.2118922 + 15542, 14794, 15217, 48354, // alpha = 0.2267574 + 15513, 14724, 15177, 48270, // alpha = 0.2421265 + 15490, 14660, 15142, 48195, // alpha = 0.2579995 + 15476, 14600, 15114, 48133, // alpha = 0.2743765 + 15461, 14544, 15088, 48027, // alpha = 0.2912573 + 15437, 14491, 15059, 47909, // alpha = 0.308642 + 15434, 14442, 15042, 47822, // alpha = 0.3265306 + 15419, 14396, 15023, 47729, // alpha = 0.3449232 + 15399, 14353, 15002, 47639, // alpha = 0.3638196 + 15383, 14288, 14983, 47558, // alpha = 0.38322 + 15376, 14211, 14970, 47492, // alpha = 0.4031242 + 15378, 14138, 14965, 47438, // alpha = 0.4235324 + 15365, 14069, 14952, 47376, // alpha = 0.4444445 + 15353, 14004, 14944, 47320, // alpha = 0.4658605 + 15329, 13942, 14932, 47264, // alpha = 0.4877803 + 15324, 13884, 14927, 47218, // alpha = 0.5102041 + 15304, 13828, 14919, 47172, // alpha = 0.5331318 + 15291, 13775, 14914, 47128, // alpha = 0.5565634 + 15283, 13724, 14909, 47076, // alpha = 0.5804989 + 15270, 13676, 14906, 47001, // alpha = 0.6049383 + 15266, 13630, 14904, 46934, // alpha = 0.6298816 + 15251, 13586, 14900, 46864, // alpha = 0.6553288 + 15247, 13544, 14900, 46802, // alpha = 0.68128 + 15236, 13504, 14897, 46745, // alpha = 0.7077349 + 15227, 13465, 14897, 46685, // alpha = 0.7346939 + 15224, 13429, 14898, 46637, // alpha = 0.7621567 + 15223, 13393, 14901, 46587, // alpha = 0.7901235 + 15219, 13360, 14901, 46539, // alpha = 0.8185941 + 15211, 13327, 14903, 46494, // alpha = 0.8475687 + 15207, 13281, 14904, 46453, // alpha = 0.8770471 + 15203, 13221, 14907, 46411, // alpha = 0.9070295 + 15200, 13164, 14910, 46378, // alpha = 0.9375157 + 15199, 13110, 14914, 46340, // alpha = 0.9685059 + 15198, 13057, 14918, 46304, // alpha = 1 + + // Cos (theta) = 0.3701184 + 48668, 20292, 17240, 52495, // alpha = 0.001 + 48668, 20292, 17240, 52495, // alpha = 0.001 + 48668, 20292, 17240, 52495, // alpha = 0.001007811 + 50044, 20084, 20923, 51391, // alpha = 0.002267574 + 19335, 19343, 19796, 56535, // alpha = 0.004031243 + 18715, 18716, 19054, 55429, // alpha = 0.006298816 + 18314, 18313, 18527, 54516, // alpha = 0.009070295 + 17893, 17888, 18029, 53779, // alpha = 0.01234568 + 17610, 17604, 17660, 53254, // alpha = 0.01612497 + 17411, 17398, 17416, 52647, // alpha = 0.02040816 + 17120, 17100, 17082, 52263, // alpha = 0.02519527 + 16965, 16872, 16828, 51846, // alpha = 0.03048627 + 16781, 16692, 16641, 51484, // alpha = 0.03628118 + 16632, 16547, 16499, 51224, // alpha = 0.04258 + 16511, 16427, 16385, 50864, // alpha = 0.04938272 + 16410, 16271, 16200, 50573, // alpha = 0.05668934 + 16330, 16102, 16050, 50379, // alpha = 0.06449988 + 16179, 15958, 15923, 50198, // alpha = 0.07281432 + 16064, 15832, 15818, 49945, // alpha = 0.08163266 + 16012, 15723, 15728, 49752, // alpha = 0.09095491 + 15912, 15626, 15652, 49556, // alpha = 0.1007811 + 15828, 15541, 15585, 49393, // alpha = 0.1111111 + 15802, 15464, 15530, 49288, // alpha = 0.1219451 + 15736, 15395, 15479, 49171, // alpha = 0.1332829 + 15706, 15307, 15440, 49026, // alpha = 0.1451247 + 15667, 15194, 15401, 48863, // alpha = 0.1574704 + 15626, 15092, 15366, 48716, // alpha = 0.17032 + 15594, 14998, 15320, 48597, // alpha = 0.1836735 + 15553, 14912, 15263, 48476, // alpha = 0.1975309 + 15536, 14833, 15219, 48391, // alpha = 0.2118922 + 15520, 14760, 15182, 48309, // alpha = 0.2267574 + 15493, 14692, 15144, 48229, // alpha = 0.2421265 + 15471, 14629, 15110, 48161, // alpha = 0.2579995 + 15455, 14571, 15084, 48070, // alpha = 0.2743765 + 15444, 14516, 15061, 47961, // alpha = 0.2912573 + 15419, 14465, 15032, 47845, // alpha = 0.308642 + 15416, 14417, 15016, 47766, // alpha = 0.3265306 + 15401, 14372, 14998, 47677, // alpha = 0.3449232 + 15383, 14323, 14977, 47592, // alpha = 0.3638196 + 15372, 14244, 14963, 47518, // alpha = 0.38322 + 15378, 14169, 14958, 47465, // alpha = 0.4031242 + 15363, 14097, 14945, 47399, // alpha = 0.4235324 + 15337, 14030, 14930, 47335, // alpha = 0.4444445 + 15322, 13967, 14921, 47282, // alpha = 0.4658605 + 15306, 13906, 14913, 47233, // alpha = 0.4877803 + 15295, 13849, 14908, 47186, // alpha = 0.5102041 + 15274, 13795, 14899, 47139, // alpha = 0.5331318 + 15265, 13743, 14895, 47093, // alpha = 0.5565634 + 15256, 13693, 14890, 47019, // alpha = 0.5804989 + 15247, 13646, 14888, 46949, // alpha = 0.6049383 + 15239, 13601, 14886, 46881, // alpha = 0.6298816 + 15225, 13558, 14882, 46813, // alpha = 0.6553288 + 15220, 13517, 14881, 46754, // alpha = 0.68128 + 15209, 13478, 14879, 46697, // alpha = 0.7077349 + 15201, 13441, 14880, 46643, // alpha = 0.7346939 + 15198, 13405, 14881, 46595, // alpha = 0.7621567 + 15195, 13371, 14882, 46547, // alpha = 0.7901235 + 15191, 13338, 14884, 46503, // alpha = 0.8185941 + 15185, 13300, 14885, 46458, // alpha = 0.8475687 + 15182, 13240, 14887, 46417, // alpha = 0.8770471 + 15178, 13182, 14890, 46378, // alpha = 0.9070295 + 15177, 13126, 14892, 46341, // alpha = 0.9375157 + 15174, 13073, 14897, 46307, // alpha = 0.9685059 + 15169, 13021, 14899, 46273, // alpha = 1 + + // Cos (theta) = 0.3446712 + 16667, 20177, 18363, 54745, // alpha = 0.001 + 16667, 20177, 18363, 54745, // alpha = 0.001 + 16667, 20177, 18363, 54745, // alpha = 0.001007811 + 49923, 19983, 20723, 51317, // alpha = 0.002267574 + 19229, 19237, 19670, 56404, // alpha = 0.004031243 + 18650, 18651, 18918, 55316, // alpha = 0.006298816 + 18227, 18225, 18444, 54405, // alpha = 0.009070295 + 17829, 17825, 17917, 53653, // alpha = 0.01234568 + 17562, 17556, 17580, 53105, // alpha = 0.01612497 + 17338, 17322, 17307, 52544, // alpha = 0.02040816 + 17058, 17039, 16990, 52158, // alpha = 0.02519527 + 16843, 16821, 16761, 51686, // alpha = 0.03048627 + 16734, 16649, 16584, 51406, // alpha = 0.03628118 + 16592, 16510, 16451, 51125, // alpha = 0.04258 + 16477, 16395, 16303, 50768, // alpha = 0.04938272 + 16375, 16214, 16133, 50497, // alpha = 0.05668934 + 16272, 16052, 15990, 50315, // alpha = 0.06449988 + 16129, 15912, 15870, 50115, // alpha = 0.07281432 + 16021, 15791, 15770, 49857, // alpha = 0.08163266 + 15970, 15685, 15687, 49678, // alpha = 0.09095491 + 15875, 15592, 15614, 49492, // alpha = 0.1007811 + 15800, 15509, 15552, 49345, // alpha = 0.1111111 + 15767, 15435, 15499, 49238, // alpha = 0.1219451 + 15702, 15369, 15451, 49102, // alpha = 0.1332829 + 15676, 15257, 15412, 48946, // alpha = 0.1451247 + 15647, 15148, 15377, 48801, // alpha = 0.1574704 + 15598, 15048, 15330, 48655, // alpha = 0.17032 + 15568, 14957, 15276, 48538, // alpha = 0.1836735 + 15543, 14874, 15227, 48438, // alpha = 0.1975309 + 15528, 14797, 15189, 48355, // alpha = 0.2118922 + 15496, 14725, 15145, 48266, // alpha = 0.2267574 + 15471, 14660, 15110, 48189, // alpha = 0.2421265 + 15464, 14598, 15085, 48131, // alpha = 0.2579995 + 15437, 14541, 15055, 48003, // alpha = 0.2743765 + 15421, 14488, 15029, 47890, // alpha = 0.2912573 + 15406, 14438, 15007, 47791, // alpha = 0.308642 + 15402, 14391, 14993, 47717, // alpha = 0.3265306 + 15383, 14347, 14972, 47623, // alpha = 0.3449232 + 15365, 14276, 14952, 47540, // alpha = 0.3638196 + 15354, 14199, 14939, 47473, // alpha = 0.38322 + 15361, 14125, 14934, 47422, // alpha = 0.4031242 + 15331, 14056, 14921, 47356, // alpha = 0.4235324 + 15305, 13991, 14908, 47295, // alpha = 0.4444445 + 15291, 13929, 14899, 47245, // alpha = 0.4658605 + 15279, 13870, 14893, 47198, // alpha = 0.4877803 + 15264, 13814, 14886, 47151, // alpha = 0.5102041 + 15245, 13761, 14878, 47109, // alpha = 0.5331318 + 15235, 13710, 14874, 47034, // alpha = 0.5565634 + 15226, 13662, 14871, 46960, // alpha = 0.5804989 + 15224, 13616, 14869, 46895, // alpha = 0.6049383 + 15210, 13572, 14865, 46827, // alpha = 0.6298816 + 15205, 13530, 14865, 46768, // alpha = 0.6553288 + 15191, 13490, 14862, 46708, // alpha = 0.68128 + 15183, 13452, 14860, 46651, // alpha = 0.7077349 + 15177, 13416, 14861, 46600, // alpha = 0.7346939 + 15169, 13381, 14862, 46550, // alpha = 0.7621567 + 15172, 13347, 14865, 46508, // alpha = 0.7901235 + 15164, 13315, 14865, 46464, // alpha = 0.8185941 + 15158, 13256, 14866, 46419, // alpha = 0.8475687 + 15154, 13197, 14868, 46382, // alpha = 0.8770471 + 15151, 13141, 14871, 46345, // alpha = 0.9070295 + 15150, 13086, 14875, 46308, // alpha = 0.9375157 + 15145, 13034, 14876, 46274, // alpha = 0.9685059 + 15142, 12984, 14880, 46244, // alpha = 1 + + // Cos (theta) = 0.3187201 + 19310, 20062, 20670, 57722, // alpha = 0.001 + 19310, 20062, 20670, 57722, // alpha = 0.001 + 19310, 20062, 20670, 57722, // alpha = 0.001007811 + 49801, 19882, 20529, 51249, // alpha = 0.002267574 + 19125, 19131, 19550, 56243, // alpha = 0.004031243 + 18586, 18587, 18788, 55127, // alpha = 0.006298816 + 18140, 18137, 18295, 54300, // alpha = 0.009070295 + 17766, 17761, 17808, 53532, // alpha = 0.01234568 + 17513, 17508, 17504, 52954, // alpha = 0.01612497 + 17262, 17246, 17191, 52445, // alpha = 0.02040816 + 16993, 16977, 16903, 52018, // alpha = 0.02519527 + 16790, 16769, 16691, 51588, // alpha = 0.03048627 + 16688, 16605, 16528, 51326, // alpha = 0.03628118 + 16551, 16472, 16405, 51005, // alpha = 0.04258 + 16440, 16341, 16226, 50673, // alpha = 0.04938272 + 16314, 16157, 16063, 50423, // alpha = 0.05668934 + 16214, 16000, 15930, 50253, // alpha = 0.06449988 + 16077, 15866, 15819, 50014, // alpha = 0.07281432 + 15994, 15750, 15723, 49786, // alpha = 0.08163266 + 15926, 15648, 15646, 49604, // alpha = 0.09095491 + 15833, 15558, 15576, 49428, // alpha = 0.1007811 + 15786, 15478, 15517, 49299, // alpha = 0.1111111 + 15732, 15406, 15468, 49189, // alpha = 0.1219451 + 15680, 15323, 15424, 49026, // alpha = 0.1332829 + 15647, 15206, 15386, 48869, // alpha = 0.1451247 + 15616, 15101, 15346, 48728, // alpha = 0.1574704 + 15570, 15004, 15283, 48592, // alpha = 0.17032 + 15541, 14916, 15231, 48480, // alpha = 0.1836735 + 15517, 14835, 15187, 48386, // alpha = 0.1975309 + 15503, 14760, 15151, 48308, // alpha = 0.2118922 + 15474, 14690, 15110, 48224, // alpha = 0.2267574 + 15455, 14626, 15079, 48153, // alpha = 0.2421265 + 15441, 14567, 15052, 48061, // alpha = 0.2579995 + 15426, 14511, 15028, 47948, // alpha = 0.2743765 + 15401, 14459, 14997, 47829, // alpha = 0.2912573 + 15393, 14411, 14979, 47744, // alpha = 0.308642 + 15384, 14365, 14964, 47661, // alpha = 0.3265306 + 15365, 14309, 14943, 47573, // alpha = 0.3449232 + 15334, 14229, 14925, 47492, // alpha = 0.3638196 + 15321, 14153, 14914, 47429, // alpha = 0.38322 + 15327, 14082, 14910, 47377, // alpha = 0.4031242 + 15297, 14014, 14895, 47316, // alpha = 0.4235324 + 15271, 13950, 14883, 47257, // alpha = 0.4444445 + 15259, 13890, 14876, 47208, // alpha = 0.4658605 + 15246, 13832, 14870, 47163, // alpha = 0.4877803 + 15233, 13778, 14864, 47120, // alpha = 0.5102041 + 15214, 13726, 14855, 47046, // alpha = 0.5331318 + 15213, 13677, 14856, 46979, // alpha = 0.5565634 + 15196, 13630, 14850, 46902, // alpha = 0.5804989 + 15192, 13585, 14849, 46838, // alpha = 0.6049383 + 15180, 13542, 14845, 46775, // alpha = 0.6298816 + 15173, 13501, 14844, 46717, // alpha = 0.6553288 + 15161, 13462, 14841, 46658, // alpha = 0.68128 + 15151, 13425, 14840, 46609, // alpha = 0.7077349 + 15148, 13390, 14842, 46557, // alpha = 0.7346939 + 15147, 13355, 14843, 46510, // alpha = 0.7621567 + 15142, 13323, 14844, 46465, // alpha = 0.7901235 + 15135, 13271, 14845, 46423, // alpha = 0.8185941 + 15129, 13211, 14846, 46382, // alpha = 0.8475687 + 15125, 13154, 14849, 46347, // alpha = 0.8770471 + 15120, 13098, 14851, 46308, // alpha = 0.9070295 + 15121, 13045, 14855, 46276, // alpha = 0.9375157 + 15116, 12995, 14858, 46243, // alpha = 0.9685059 + 15112, 12946, 14859, 46211, // alpha = 1 + + // Cos (theta) = 0.292265 + 19938, 19947, 20570, 57780, // alpha = 0.001 + 19938, 19947, 20570, 57780, // alpha = 0.001 + 19938, 19947, 20570, 57780, // alpha = 0.001007811 + 49679, 19782, 20206, 51162, // alpha = 0.002267574 + 19022, 19026, 19418, 56016, // alpha = 0.004031243 + 18522, 18522, 18665, 54931, // alpha = 0.006298816 + 18051, 18050, 18140, 54126, // alpha = 0.009070295 + 17701, 17698, 17705, 53417, // alpha = 0.01234568 + 17465, 17459, 17429, 52811, // alpha = 0.01612497 + 17183, 17170, 17080, 52349, // alpha = 0.02040816 + 16930, 16915, 16816, 51884, // alpha = 0.02519527 + 16737, 16718, 16623, 51491, // alpha = 0.03048627 + 16639, 16561, 16472, 51250, // alpha = 0.03628118 + 16510, 16434, 16331, 50890, // alpha = 0.04258 + 16405, 16275, 16148, 50584, // alpha = 0.04938272 + 16249, 16099, 15995, 50351, // alpha = 0.05668934 + 16155, 15949, 15870, 50192, // alpha = 0.06449988 + 16024, 15820, 15766, 49912, // alpha = 0.07281432 + 15959, 15708, 15678, 49711, // alpha = 0.08163266 + 15878, 15609, 15603, 49526, // alpha = 0.09095491 + 15793, 15523, 15538, 49364, // alpha = 0.1007811 + 15747, 15445, 15483, 49247, // alpha = 0.1111111 + 15699, 15376, 15437, 49134, // alpha = 0.1219451 + 15646, 15268, 15394, 48941, // alpha = 0.1332829 + 15631, 15155, 15361, 48808, // alpha = 0.1451247 + 15588, 15053, 15295, 48664, // alpha = 0.1574704 + 15558, 14959, 15242, 48545, // alpha = 0.17032 + 15514, 14873, 15190, 48427, // alpha = 0.1836735 + 15491, 14795, 15144, 48335, // alpha = 0.1975309 + 15481, 14722, 15113, 48263, // alpha = 0.2118922 + 15455, 14655, 15075, 48185, // alpha = 0.2267574 + 15433, 14592, 15043, 48105, // alpha = 0.2421265 + 15419, 14535, 15017, 47985, // alpha = 0.2579995 + 15406, 14481, 14993, 47879, // alpha = 0.2743765 + 15381, 14430, 14966, 47766, // alpha = 0.2912573 + 15379, 14383, 14952, 47689, // alpha = 0.308642 + 15364, 14339, 14935, 47606, // alpha = 0.3265306 + 15330, 14258, 14915, 47521, // alpha = 0.3449232 + 15308, 14180, 14900, 47450, // alpha = 0.3638196 + 15313, 14106, 14896, 47396, // alpha = 0.38322 + 15291, 14037, 14883, 47335, // alpha = 0.4031242 + 15262, 13971, 14869, 47271, // alpha = 0.4235324 + 15247, 13909, 14861, 47223, // alpha = 0.4444445 + 15222, 13850, 14852, 47169, // alpha = 0.4658605 + 15220, 13794, 14849, 47128, // alpha = 0.4877803 + 15198, 13741, 14840, 47068, // alpha = 0.5102041 + 15187, 13691, 14835, 46987, // alpha = 0.5331318 + 15179, 13643, 14832, 46918, // alpha = 0.5565634 + 15162, 13597, 14826, 46843, // alpha = 0.5804989 + 15160, 13553, 14826, 46784, // alpha = 0.6049383 + 15146, 13512, 14822, 46721, // alpha = 0.6298816 + 15140, 13472, 14820, 46662, // alpha = 0.6553288 + 15131, 13434, 14820, 46610, // alpha = 0.68128 + 15119, 13398, 14817, 46558, // alpha = 0.7077349 + 15117, 13363, 14821, 46514, // alpha = 0.7346939 + 15115, 13330, 14822, 46467, // alpha = 0.7621567 + 15110, 13284, 14823, 46423, // alpha = 0.7901235 + 15102, 13223, 14824, 46385, // alpha = 0.8185941 + 15099, 13165, 14826, 46346, // alpha = 0.8475687 + 15091, 13109, 14827, 46310, // alpha = 0.8770471 + 15088, 13055, 14829, 46275, // alpha = 0.9070295 + 15089, 13003, 14834, 46242, // alpha = 0.9375157 + 15084, 12954, 14835, 46211, // alpha = 0.9685059 + 15081, 12906, 14838, 46179, // alpha = 1 + + // Cos (theta) = 0.2653061 + 19825, 19833, 20381, 57575, // alpha = 0.001 + 19825, 19833, 20381, 57575, // alpha = 0.001 + 19825, 19833, 20381, 57575, // alpha = 0.001007811 + 49515, 19682, 19546, 51410, // alpha = 0.002267574 + 18918, 18922, 19203, 55802, // alpha = 0.004031243 + 18459, 18458, 18547, 54746, // alpha = 0.006298816 + 17965, 17963, 17992, 53936, // alpha = 0.009070295 + 17638, 17634, 17603, 53308, // alpha = 0.01234568 + 17415, 17411, 17305, 52672, // alpha = 0.01612497 + 17103, 17093, 16972, 52256, // alpha = 0.02040816 + 16865, 16852, 16733, 51755, // alpha = 0.02519527 + 16682, 16665, 16555, 51396, // alpha = 0.03048627 + 16591, 16517, 16419, 51153, // alpha = 0.03628118 + 16469, 16396, 16240, 50779, // alpha = 0.04258 + 16351, 16208, 16070, 50495, // alpha = 0.04938272 + 16183, 16040, 15929, 50278, // alpha = 0.05668934 + 16096, 15896, 15812, 50089, // alpha = 0.06449988 + 15970, 15773, 15713, 49816, // alpha = 0.07281432 + 15909, 15665, 15631, 49627, // alpha = 0.08163266 + 15834, 15571, 15562, 49457, // alpha = 0.09095491 + 15751, 15487, 15499, 49304, // alpha = 0.1007811 + 15726, 15413, 15451, 49204, // alpha = 0.1111111 + 15662, 15332, 15404, 49038, // alpha = 0.1219451 + 15617, 15212, 15365, 48863, // alpha = 0.1332829 + 15599, 15103, 15307, 48734, // alpha = 0.1451247 + 15556, 15004, 15245, 48593, // alpha = 0.1574704 + 15526, 14913, 15196, 48483, // alpha = 0.17032 + 15486, 14830, 15142, 48371, // alpha = 0.1836735 + 15471, 14754, 15106, 48290, // alpha = 0.1975309 + 15456, 14684, 15072, 48217, // alpha = 0.2118922 + 15430, 14618, 15036, 48142, // alpha = 0.2267574 + 15409, 14558, 15006, 48021, // alpha = 0.2421265 + 15395, 14502, 14982, 47913, // alpha = 0.2579995 + 15382, 14449, 14959, 47809, // alpha = 0.2743765 + 15357, 14400, 14933, 47701, // alpha = 0.2912573 + 15356, 14355, 14923, 47631, // alpha = 0.308642 + 15325, 14287, 14902, 47545, // alpha = 0.3265306 + 15287, 14206, 14883, 47466, // alpha = 0.3449232 + 15268, 14130, 14870, 47398, // alpha = 0.3638196 + 15282, 14059, 14870, 47353, // alpha = 0.38322 + 15251, 13991, 14856, 47289, // alpha = 0.4031242 + 15223, 13927, 14843, 47230, // alpha = 0.4235324 + 15207, 13867, 14834, 47180, // alpha = 0.4444445 + 15194, 13809, 14828, 47135, // alpha = 0.4658605 + 15183, 13755, 14821, 47079, // alpha = 0.4877803 + 15162, 13703, 14814, 46999, // alpha = 0.5102041 + 15150, 13654, 14810, 46924, // alpha = 0.5331318 + 15143, 13608, 14805, 46851, // alpha = 0.5565634 + 15140, 13563, 14806, 46790, // alpha = 0.5804989 + 15125, 13521, 14801, 46729, // alpha = 0.6049383 + 15112, 13480, 14799, 46670, // alpha = 0.6298816 + 15106, 13442, 14797, 46615, // alpha = 0.6553288 + 15095, 13405, 14796, 46560, // alpha = 0.68128 + 15088, 13369, 14795, 46509, // alpha = 0.7077349 + 15084, 13336, 14796, 46466, // alpha = 0.7346939 + 15084, 13295, 14800, 46429, // alpha = 0.7621567 + 15078, 13233, 14800, 46385, // alpha = 0.7901235 + 15069, 13174, 14800, 46344, // alpha = 0.8185941 + 15065, 13117, 14803, 46312, // alpha = 0.8475687 + 15060, 13062, 14804, 46275, // alpha = 0.8770471 + 15058, 13010, 14807, 46241, // alpha = 0.9070295 + 15054, 12960, 14810, 46209, // alpha = 0.9375157 + 15050, 12912, 14813, 46180, // alpha = 0.9685059 + 15051, 12866, 14817, 46148, // alpha = 1 + + // Cos (theta) = 0.2378433 + 19713, 19720, 20123, 57386, // alpha = 0.001 + 19713, 19720, 20123, 57386, // alpha = 0.001 + 19713, 19720, 20123, 57386, // alpha = 0.001007811 + 49400, 19584, 19413, 51316, // alpha = 0.002267574 + 18816, 18818, 19000, 55604, // alpha = 0.004031243 + 18356, 18356, 18433, 54573, // alpha = 0.006298816 + 17877, 17875, 17850, 53755, // alpha = 0.009070295 + 17572, 17570, 17507, 53155, // alpha = 0.01234568 + 17320, 17316, 17169, 52540, // alpha = 0.01612497 + 17022, 17015, 16867, 52109, // alpha = 0.02040816 + 16800, 16788, 16652, 51631, // alpha = 0.02519527 + 16625, 16612, 16490, 51303, // alpha = 0.03048627 + 16540, 16472, 16345, 51011, // alpha = 0.03628118 + 16425, 16330, 16150, 50667, // alpha = 0.04258 + 16275, 16140, 15991, 50408, // alpha = 0.04938272 + 16116, 15980, 15860, 50210, // alpha = 0.05668934 + 16034, 15843, 15754, 49973, // alpha = 0.06449988 + 15917, 15725, 15660, 49721, // alpha = 0.07281432 + 15879, 15622, 15584, 49560, // alpha = 0.08163266 + 15788, 15531, 15519, 49387, // alpha = 0.09095491 + 15707, 15451, 15461, 49243, // alpha = 0.1007811 + 15686, 15379, 15416, 49152, // alpha = 0.1111111 + 15623, 15270, 15372, 48943, // alpha = 0.1219451 + 15580, 15154, 15310, 48779, // alpha = 0.1332829 + 15564, 15049, 15253, 48658, // alpha = 0.1451247 + 15522, 14954, 15192, 48524, // alpha = 0.1574704 + 15496, 14866, 15145, 48420, // alpha = 0.17032 + 15457, 14786, 15095, 48314, // alpha = 0.1836735 + 15443, 14712, 15061, 48237, // alpha = 0.1975309 + 15428, 14644, 15029, 48168, // alpha = 0.2118922 + 15403, 14581, 14995, 48070, // alpha = 0.2267574 + 15397, 14523, 14974, 47964, // alpha = 0.2421265 + 15371, 14468, 14945, 47835, // alpha = 0.2579995 + 15356, 14417, 14924, 47740, // alpha = 0.2743765 + 15322, 14370, 14901, 47644, // alpha = 0.2912573 + 15320, 14315, 14891, 47574, // alpha = 0.308642 + 15280, 14232, 14871, 47489, // alpha = 0.3265306 + 15242, 14153, 14850, 47411, // alpha = 0.3449232 + 15227, 14080, 14840, 47349, // alpha = 0.3638196 + 15238, 14010, 14839, 47303, // alpha = 0.38322 + 15209, 13944, 14825, 47244, // alpha = 0.4031242 + 15183, 13882, 14813, 47188, // alpha = 0.4235324 + 15168, 13823, 14807, 47142, // alpha = 0.4444445 + 15155, 13768, 14799, 47090, // alpha = 0.4658605 + 15142, 13715, 14794, 47009, // alpha = 0.4877803 + 15123, 13665, 14787, 46930, // alpha = 0.5102041 + 15114, 13617, 14783, 46858, // alpha = 0.5331318 + 15106, 13572, 14782, 46795, // alpha = 0.5565634 + 15102, 13529, 14780, 46732, // alpha = 0.5804989 + 15089, 13487, 14776, 46672, // alpha = 0.6049383 + 15080, 13448, 14776, 46619, // alpha = 0.6298816 + 15069, 13411, 14772, 46563, // alpha = 0.6553288 + 15059, 13375, 14772, 46510, // alpha = 0.68128 + 15056, 13340, 14772, 46472, // alpha = 0.7077349 + 15046, 13303, 14772, 46426, // alpha = 0.7346939 + 15049, 13240, 14775, 46384, // alpha = 0.7621567 + 15042, 13180, 14776, 46344, // alpha = 0.7901235 + 15033, 13123, 14777, 46309, // alpha = 0.8185941 + 15029, 13068, 14778, 46274, // alpha = 0.8475687 + 15024, 13015, 14780, 46241, // alpha = 0.8770471 + 15024, 12964, 14783, 46206, // alpha = 0.9070295 + 15019, 12915, 14786, 46176, // alpha = 0.9375157 + 15015, 12868, 14788, 46147, // alpha = 0.9685059 + 15016, 12823, 14793, 46120, // alpha = 1 + + // Cos (theta) = 0.2098765 + 19552, 19608, 19898, 57026, // alpha = 0.001 + 19552, 19608, 19898, 57026, // alpha = 0.001 + 19552, 19608, 19898, 57026, // alpha = 0.001007811 + 49286, 19487, 19079, 51227, // alpha = 0.002267574 + 18714, 18715, 18812, 55419, // alpha = 0.004031243 + 18228, 18228, 18219, 54410, // alpha = 0.006298816 + 17787, 17787, 17715, 53582, // alpha = 0.009070295 + 17506, 17506, 17414, 52954, // alpha = 0.01234568 + 17218, 17217, 17034, 52411, // alpha = 0.01612497 + 16939, 16936, 16766, 51937, // alpha = 0.02040816 + 16730, 16724, 16572, 51509, // alpha = 0.02519527 + 16569, 16558, 16426, 51217, // alpha = 0.03048627 + 16440, 16426, 16239, 50818, // alpha = 0.03628118 + 16375, 16251, 16061, 50560, // alpha = 0.04258 + 16199, 16071, 15915, 50327, // alpha = 0.04938272 + 16048, 15918, 15792, 50108, // alpha = 0.05668934 + 15972, 15788, 15694, 49861, // alpha = 0.06449988 + 15859, 15675, 15605, 49624, // alpha = 0.07281432 + 15807, 15577, 15535, 49466, // alpha = 0.08163266 + 15738, 15491, 15478, 49317, // alpha = 0.09095491 + 15662, 15414, 15421, 49184, // alpha = 0.1007811 + 15643, 15330, 15382, 49043, // alpha = 0.1111111 + 15584, 15207, 15319, 48850, // alpha = 0.1219451 + 15561, 15096, 15255, 48712, // alpha = 0.1332829 + 15528, 14995, 15196, 48581, // alpha = 0.1451247 + 15490, 14903, 15140, 48461, // alpha = 0.1574704 + 15463, 14818, 15096, 48359, // alpha = 0.17032 + 15441, 14741, 15054, 48271, // alpha = 0.1836735 + 15428, 14670, 15022, 48199, // alpha = 0.1975309 + 15400, 14604, 14986, 48118, // alpha = 0.2118922 + 15375, 14543, 14953, 47977, // alpha = 0.2267574 + 15370, 14487, 14935, 47881, // alpha = 0.2421265 + 15353, 14434, 14912, 47778, // alpha = 0.2579995 + 15303, 14385, 14886, 47670, // alpha = 0.2743765 + 15288, 14339, 14870, 47591, // alpha = 0.2912573 + 15272, 14256, 14856, 47516, // alpha = 0.308642 + 15228, 14175, 14835, 47430, // alpha = 0.3265306 + 15194, 14099, 14817, 47358, // alpha = 0.3449232 + 15181, 14027, 14808, 47299, // alpha = 0.3638196 + 15193, 13960, 14806, 47256, // alpha = 0.38322 + 15163, 13896, 14793, 47198, // alpha = 0.4031242 + 15150, 13836, 14786, 47149, // alpha = 0.4235324 + 15125, 13779, 14775, 47096, // alpha = 0.4444445 + 15111, 13725, 14770, 47014, // alpha = 0.4658605 + 15101, 13674, 14765, 46937, // alpha = 0.4877803 + 15080, 13625, 14757, 46860, // alpha = 0.5102041 + 15081, 13579, 14757, 46795, // alpha = 0.5331318 + 15065, 13535, 14753, 46734, // alpha = 0.5565634 + 15062, 13493, 14752, 46673, // alpha = 0.5804989 + 15047, 13453, 14749, 46617, // alpha = 0.6049383 + 15042, 13415, 14749, 46563, // alpha = 0.6298816 + 15028, 13378, 14746, 46512, // alpha = 0.6553288 + 15018, 13344, 14744, 46463, // alpha = 0.68128 + 15016, 13309, 14746, 46423, // alpha = 0.7077349 + 15015, 13245, 14747, 46381, // alpha = 0.7346939 + 15010, 13184, 14750, 46340, // alpha = 0.7621567 + 15001, 13126, 14749, 46303, // alpha = 0.7901235 + 14994, 13070, 14749, 46268, // alpha = 0.8185941 + 14989, 13017, 14750, 46235, // alpha = 0.8475687 + 14984, 12965, 14753, 46201, // alpha = 0.8770471 + 14983, 12916, 14757, 46172, // alpha = 0.9070295 + 14980, 12869, 14759, 46145, // alpha = 0.9375157 + 14975, 12823, 14762, 46116, // alpha = 0.9685059 + 14976, 12780, 14765, 46089, // alpha = 1 + + // Cos (theta) = 0.1814059 + 19492, 19498, 19665, 56769, // alpha = 0.001 + 19492, 19498, 19665, 56769, // alpha = 0.001 + 19492, 19498, 19665, 56769, // alpha = 0.001007811 + 49174, 19325, 18895, 51069, // alpha = 0.002267574 + 18612, 18613, 18633, 55206, // alpha = 0.004031243 + 18097, 18100, 18018, 54241, // alpha = 0.006298816 + 17692, 17699, 17586, 53419, // alpha = 0.009070295 + 17435, 17441, 17246, 52758, // alpha = 0.01234568 + 17107, 17116, 16905, 52286, // alpha = 0.01612497 + 16855, 16856, 16666, 51773, // alpha = 0.02040816 + 16660, 16658, 16492, 51393, // alpha = 0.02519527 + 16509, 16503, 16340, 51064, // alpha = 0.03048627 + 16390, 16374, 16137, 50692, // alpha = 0.03628118 + 16287, 16170, 15971, 50458, // alpha = 0.04258 + 16119, 16000, 15837, 50244, // alpha = 0.04938272 + 15976, 15856, 15725, 49974, // alpha = 0.05668934 + 15905, 15732, 15633, 49748, // alpha = 0.06449988 + 15801, 15625, 15554, 49533, // alpha = 0.07281432 + 15773, 15532, 15490, 49399, // alpha = 0.08163266 + 15688, 15449, 15433, 49249, // alpha = 0.09095491 + 15617, 15376, 15381, 49097, // alpha = 0.1007811 + 15600, 15260, 15329, 48939, // alpha = 0.1111111 + 15542, 15142, 15248, 48756, // alpha = 0.1219451 + 15523, 15035, 15192, 48630, // alpha = 0.1332829 + 15498, 14938, 15139, 48516, // alpha = 0.1451247 + 15452, 14850, 15085, 48389, // alpha = 0.1574704 + 15429, 14769, 15041, 48297, // alpha = 0.17032 + 15409, 14695, 15002, 48215, // alpha = 0.1836735 + 15396, 14626, 14974, 48147, // alpha = 0.1975309 + 15375, 14563, 14944, 48031, // alpha = 0.2118922 + 15348, 14504, 14914, 47902, // alpha = 0.2267574 + 15324, 14449, 14892, 47799, // alpha = 0.2421265 + 15296, 14399, 14872, 47701, // alpha = 0.2579995 + 15247, 14351, 14846, 47599, // alpha = 0.2743765 + 15250, 14278, 14837, 47532, // alpha = 0.2912573 + 15219, 14194, 14819, 47452, // alpha = 0.308642 + 15179, 14116, 14799, 47372, // alpha = 0.3265306 + 15145, 14043, 14782, 47304, // alpha = 0.3449232 + 15178, 13974, 14790, 47267, // alpha = 0.3638196 + 15145, 13908, 14775, 47207, // alpha = 0.38322 + 15117, 13847, 14763, 47156, // alpha = 0.4031242 + 15101, 13789, 14754, 47105, // alpha = 0.4235324 + 15078, 13733, 14744, 47018, // alpha = 0.4444445 + 15076, 13681, 14742, 46941, // alpha = 0.4658605 + 15054, 13631, 14733, 46862, // alpha = 0.4877803 + 15043, 13584, 14729, 46795, // alpha = 0.5102041 + 15037, 13540, 14727, 46736, // alpha = 0.5331318 + 15021, 13497, 14722, 46666, // alpha = 0.5565634 + 15019, 13456, 14722, 46609, // alpha = 0.5804989 + 15002, 13418, 14719, 46557, // alpha = 0.6049383 + 14999, 13381, 14719, 46509, // alpha = 0.6298816 + 14985, 13345, 14717, 46461, // alpha = 0.6553288 + 14976, 13311, 14716, 46418, // alpha = 0.68128 + 14974, 13247, 14718, 46377, // alpha = 0.7077349 + 14973, 13185, 14720, 46338, // alpha = 0.7346939 + 14967, 13126, 14720, 46299, // alpha = 0.7621567 + 14958, 13070, 14720, 46264, // alpha = 0.7901235 + 14954, 13016, 14723, 46232, // alpha = 0.8185941 + 14947, 12964, 14722, 46196, // alpha = 0.8475687 + 14943, 12914, 14725, 46169, // alpha = 0.8770471 + 14942, 12867, 14727, 46138, // alpha = 0.9070295 + 14937, 12821, 14730, 46112, // alpha = 0.9375157 + 14935, 12777, 14733, 46084, // alpha = 0.9685059 + 14934, 12734, 14736, 46038, // alpha = 1 + + // Cos (theta) = 0.1524313 + 19309, 19320, 19462, 56489, // alpha = 0.001 + 19309, 19320, 19462, 56489, // alpha = 0.001 + 19309, 19320, 19462, 56489, // alpha = 0.001007811 + 48535, 19134, 19015, 54928, // alpha = 0.002267574 + 18505, 18510, 18468, 54891, // alpha = 0.004031243 + 17959, 17971, 17829, 53952, // alpha = 0.006298816 + 17549, 17609, 17468, 53221, // alpha = 0.009070295 + 17244, 17341, 17080, 52536, // alpha = 0.01234568 + 16998, 17014, 16781, 52115, // alpha = 0.01612497 + 16763, 16774, 16571, 51615, // alpha = 0.02040816 + 16586, 16591, 16417, 51280, // alpha = 0.02519527 + 16448, 16447, 16213, 50899, // alpha = 0.03048627 + 16291, 16278, 16031, 50566, // alpha = 0.03628118 + 16109, 16087, 15879, 50318, // alpha = 0.04258 + 16035, 15927, 15760, 50150, // alpha = 0.04938272 + 15903, 15791, 15657, 49846, // alpha = 0.05668934 + 15829, 15674, 15572, 49634, // alpha = 0.06449988 + 15739, 15573, 15498, 49442, // alpha = 0.07281432 + 15715, 15484, 15443, 49320, // alpha = 0.08163266 + 15635, 15406, 15388, 49178, // alpha = 0.09095491 + 15567, 15312, 15318, 48977, // alpha = 0.1007811 + 15553, 15187, 15252, 48831, // alpha = 0.1111111 + 15499, 15075, 15179, 48659, // alpha = 0.1219451 + 15482, 14973, 15128, 48546, // alpha = 0.1332829 + 15460, 14880, 15079, 48441, // alpha = 0.1451247 + 15416, 14796, 15026, 48324, // alpha = 0.1574704 + 15392, 14718, 14986, 48235, // alpha = 0.17032 + 15372, 14647, 14951, 48159, // alpha = 0.1836735 + 15366, 14581, 14925, 48067, // alpha = 0.1975309 + 15326, 14520, 14896, 47931, // alpha = 0.2118922 + 15285, 14464, 14868, 47816, // alpha = 0.2267574 + 15261, 14411, 14848, 47717, // alpha = 0.2421265 + 15237, 14362, 14827, 47626, // alpha = 0.2579995 + 15191, 14297, 14803, 47527, // alpha = 0.2743765 + 15193, 14211, 14794, 47464, // alpha = 0.2912573 + 15161, 14131, 14780, 47392, // alpha = 0.308642 + 15122, 14056, 14760, 47315, // alpha = 0.3265306 + 15106, 13985, 14749, 47255, // alpha = 0.3449232 + 15128, 13918, 14753, 47218, // alpha = 0.3638196 + 15093, 13855, 14738, 47160, // alpha = 0.38322 + 15064, 13796, 14727, 47105, // alpha = 0.4031242 + 15052, 13739, 14718, 47024, // alpha = 0.4235324 + 15038, 13686, 14712, 46941, // alpha = 0.4444445 + 15027, 13636, 14707, 46868, // alpha = 0.4658605 + 15005, 13588, 14700, 46790, // alpha = 0.4877803 + 14995, 13542, 14696, 46723, // alpha = 0.5102041 + 14989, 13499, 14694, 46667, // alpha = 0.5331318 + 14981, 13458, 14693, 46608, // alpha = 0.5565634 + 14970, 13418, 14691, 46553, // alpha = 0.5804989 + 14955, 13381, 14687, 46504, // alpha = 0.6049383 + 14951, 13345, 14686, 46455, // alpha = 0.6298816 + 14938, 13310, 14685, 46413, // alpha = 0.6553288 + 14929, 13245, 14683, 46372, // alpha = 0.68128 + 14927, 13183, 14685, 46330, // alpha = 0.7077349 + 14925, 13123, 14688, 46290, // alpha = 0.7346939 + 14920, 13066, 14689, 46258, // alpha = 0.7621567 + 14911, 13012, 14689, 46223, // alpha = 0.7901235 + 14909, 12959, 14690, 46194, // alpha = 0.8185941 + 14900, 12909, 14692, 46163, // alpha = 0.8475687 + 14895, 12861, 14693, 46134, // alpha = 0.8770471 + 14896, 12815, 14697, 46106, // alpha = 0.9070295 + 14892, 12771, 14698, 46075, // alpha = 0.9375157 + 14889, 12728, 14702, 46018, // alpha = 0.9685059 + 14890, 12687, 14705, 45971, // alpha = 1 + + // Cos (theta) = 0.1229529 + 19021, 19103, 19109, 56100, // alpha = 0.001 + 19021, 19103, 19109, 56100, // alpha = 0.001 + 19021, 19103, 19109, 56100, // alpha = 0.001007811 + 18935, 18945, 18911, 55837, // alpha = 0.002267574 + 18283, 18382, 18207, 54562, // alpha = 0.004031243 + 17764, 17839, 17659, 53642, // alpha = 0.006298816 + 17456, 17517, 17296, 52943, // alpha = 0.009070295 + 17101, 17205, 16916, 52370, // alpha = 0.01234568 + 16824, 16908, 16660, 51845, // alpha = 0.01612497 + 16620, 16689, 16478, 51426, // alpha = 0.02040816 + 16463, 16521, 16301, 51091, // alpha = 0.02519527 + 16383, 16388, 16090, 50740, // alpha = 0.03048627 + 16182, 16178, 15925, 50445, // alpha = 0.03628118 + 16014, 16000, 15788, 50223, // alpha = 0.04258 + 15950, 15851, 15682, 49993, // alpha = 0.04938272 + 15829, 15724, 15587, 49721, // alpha = 0.05668934 + 15724, 15615, 15509, 49501, // alpha = 0.06449988 + 15676, 15519, 15443, 49352, // alpha = 0.07281432 + 15636, 15435, 15391, 49228, // alpha = 0.08163266 + 15580, 15361, 15325, 49078, // alpha = 0.09095491 + 15515, 15231, 15235, 48858, // alpha = 0.1007811 + 15505, 15112, 15177, 48734, // alpha = 0.1111111 + 15452, 15005, 15107, 48572, // alpha = 0.1219451 + 15439, 14908, 15060, 48466, // alpha = 0.1332829 + 15418, 14820, 15017, 48364, // alpha = 0.1451247 + 15377, 14739, 14970, 48260, // alpha = 0.1574704 + 15345, 14665, 14927, 48173, // alpha = 0.17032 + 15309, 14597, 14896, 48078, // alpha = 0.1836735 + 15303, 14534, 14874, 47966, // alpha = 0.1975309 + 15255, 14476, 14844, 47835, // alpha = 0.2118922 + 15217, 14422, 14816, 47722, // alpha = 0.2267574 + 15194, 14371, 14800, 47634, // alpha = 0.2421265 + 15171, 14313, 14783, 47548, // alpha = 0.2579995 + 15126, 14225, 14760, 47458, // alpha = 0.2743765 + 15131, 14143, 14753, 47400, // alpha = 0.2912573 + 15099, 14065, 14736, 47327, // alpha = 0.308642 + 15061, 13993, 14717, 47254, // alpha = 0.3265306 + 15043, 13925, 14708, 47201, // alpha = 0.3449232 + 15072, 13861, 14715, 47167, // alpha = 0.3638196 + 15036, 13800, 14698, 47112, // alpha = 0.38322 + 15007, 13743, 14686, 47015, // alpha = 0.4031242 + 14993, 13688, 14679, 46930, // alpha = 0.4235324 + 14984, 13637, 14675, 46855, // alpha = 0.4444445 + 14972, 13588, 14670, 46790, // alpha = 0.4658605 + 14947, 13542, 14661, 46714, // alpha = 0.4877803 + 14940, 13498, 14659, 46654, // alpha = 0.5102041 + 14935, 13456, 14659, 46601, // alpha = 0.5331318 + 14935, 13417, 14659, 46551, // alpha = 0.5565634 + 14917, 13379, 14655, 46494, // alpha = 0.5804989 + 14901, 13343, 14651, 46449, // alpha = 0.6049383 + 14899, 13304, 14653, 46406, // alpha = 0.6298816 + 14886, 13238, 14651, 46365, // alpha = 0.6553288 + 14875, 13176, 14649, 46322, // alpha = 0.68128 + 14874, 13116, 14651, 46282, // alpha = 0.7077349 + 14879, 13058, 14656, 46246, // alpha = 0.7346939 + 14868, 13003, 14655, 46217, // alpha = 0.7621567 + 14860, 12951, 14655, 46185, // alpha = 0.7901235 + 14854, 12900, 14655, 46151, // alpha = 0.8185941 + 14848, 12852, 14655, 46123, // alpha = 0.8475687 + 14849, 12806, 14659, 46094, // alpha = 0.8770471 + 14845, 12761, 14660, 46044, // alpha = 0.9070295 + 14844, 12718, 14665, 46005, // alpha = 0.9375157 + 14844, 12677, 14667, 45949, // alpha = 0.9685059 + 14840, 12638, 14669, 45898, // alpha = 1 + + // Cos (theta) = 0.09297051 + 18810, 18887, 18775, 55673, // alpha = 0.001 + 18810, 18887, 18775, 55673, // alpha = 0.001 + 18810, 18887, 18775, 55673, // alpha = 0.001007811 + 18685, 18756, 18634, 55444, // alpha = 0.002267574 + 18074, 18173, 17924, 54309, // alpha = 0.004031243 + 17626, 17705, 17489, 53403, // alpha = 0.006298816 + 17308, 17423, 17074, 52685, // alpha = 0.009070295 + 16959, 17064, 16758, 52207, // alpha = 0.01234568 + 16711, 16799, 16543, 51648, // alpha = 0.01612497 + 16529, 16601, 16384, 51290, // alpha = 0.02040816 + 16388, 16449, 16149, 50890, // alpha = 0.02519527 + 16172, 16271, 15965, 50547, // alpha = 0.03048627 + 16065, 16074, 15819, 50328, // alpha = 0.03628118 + 15917, 15910, 15698, 50088, // alpha = 0.04258 + 15860, 15772, 15600, 49841, // alpha = 0.04938272 + 15747, 15654, 15516, 49593, // alpha = 0.05668934 + 15651, 15552, 15445, 49399, // alpha = 0.06449988 + 15607, 15463, 15386, 49264, // alpha = 0.07281432 + 15532, 15384, 15306, 49106, // alpha = 0.08163266 + 15522, 15269, 15229, 48943, // alpha = 0.09095491 + 15460, 15145, 15150, 48747, // alpha = 0.1007811 + 15454, 15033, 15100, 48622, // alpha = 0.1111111 + 15404, 14932, 15032, 48480, // alpha = 0.1219451 + 15390, 14840, 14990, 48381, // alpha = 0.1332829 + 15372, 14757, 14947, 48289, // alpha = 0.1451247 + 15340, 14680, 14911, 48204, // alpha = 0.1574704 + 15262, 14610, 14866, 48096, // alpha = 0.17032 + 15231, 14545, 14837, 47963, // alpha = 0.1836735 + 15225, 14485, 14820, 47859, // alpha = 0.1975309 + 15179, 14429, 14790, 47743, // alpha = 0.2118922 + 15140, 14378, 14765, 47630, // alpha = 0.2267574 + 15123, 14323, 14751, 47549, // alpha = 0.2421265 + 15099, 14233, 14733, 47468, // alpha = 0.2579995 + 15054, 14149, 14708, 47383, // alpha = 0.2743765 + 15065, 14071, 14706, 47332, // alpha = 0.2912573 + 15031, 13997, 14690, 47261, // alpha = 0.308642 + 14992, 13927, 14671, 47193, // alpha = 0.3265306 + 14978, 13862, 14663, 47145, // alpha = 0.3449232 + 15008, 13800, 14672, 47111, // alpha = 0.3638196 + 14971, 13742, 14655, 47017, // alpha = 0.38322 + 14942, 13687, 14642, 46924, // alpha = 0.4031242 + 14932, 13635, 14637, 46847, // alpha = 0.4235324 + 14922, 13585, 14633, 46773, // alpha = 0.4444445 + 14910, 13538, 14630, 46708, // alpha = 0.4658605 + 14886, 13494, 14621, 46640, // alpha = 0.4877803 + 14881, 13452, 14620, 46586, // alpha = 0.5102041 + 14875, 13412, 14619, 46539, // alpha = 0.5331318 + 14877, 13373, 14622, 46485, // alpha = 0.5565634 + 14856, 13337, 14615, 46439, // alpha = 0.5804989 + 14841, 13292, 14612, 46395, // alpha = 0.6049383 + 14839, 13226, 14613, 46349, // alpha = 0.6298816 + 14824, 13163, 14610, 46312, // alpha = 0.6553288 + 14815, 13103, 14609, 46272, // alpha = 0.68128 + 14815, 13045, 14612, 46242, // alpha = 0.7077349 + 14822, 12990, 14618, 46207, // alpha = 0.7346939 + 14810, 12937, 14616, 46173, // alpha = 0.7621567 + 14803, 12886, 14616, 46141, // alpha = 0.7901235 + 14797, 12838, 14616, 46111, // alpha = 0.8185941 + 14793, 12791, 14617, 46084, // alpha = 0.8475687 + 14794, 12747, 14620, 46029, // alpha = 0.8770471 + 14788, 12704, 14622, 45975, // alpha = 0.9070295 + 14786, 12663, 14623, 45923, // alpha = 0.9375157 + 14788, 12624, 14626, 45870, // alpha = 0.9685059 + 14786, 12586, 14629, 45821, // alpha = 1 + + // Cos (theta) = 0.06248425 + 18592, 18668, 18478, 55302, // alpha = 0.001 + 18592, 18668, 18478, 55302, // alpha = 0.001 + 18592, 18668, 18478, 55302, // alpha = 0.001007811 + 18492, 18564, 18328, 54991, // alpha = 0.002267574 + 17782, 17957, 17666, 53835, // alpha = 0.004031243 + 17430, 17565, 17258, 53063, // alpha = 0.006298816 + 17023, 17241, 16860, 52404, // alpha = 0.009070295 + 16736, 16917, 16604, 51859, // alpha = 0.01234568 + 16531, 16684, 16423, 51412, // alpha = 0.01612497 + 16373, 16509, 16195, 51043, // alpha = 0.02040816 + 16235, 16361, 16000, 50698, // alpha = 0.02519527 + 16034, 16142, 15837, 50402, // alpha = 0.03048627 + 15875, 15964, 15707, 50179, // alpha = 0.03628118 + 15808, 15814, 15603, 49907, // alpha = 0.04258 + 15695, 15688, 15514, 49639, // alpha = 0.04938272 + 15662, 15580, 15443, 49475, // alpha = 0.05668934 + 15573, 15486, 15379, 49295, // alpha = 0.06449988 + 15537, 15403, 15300, 49181, // alpha = 0.07281432 + 15464, 15301, 15205, 48951, // alpha = 0.08163266 + 15461, 15171, 15135, 48813, // alpha = 0.09095491 + 15400, 15055, 15061, 48630, // alpha = 0.1007811 + 15398, 14950, 15015, 48524, // alpha = 0.1111111 + 15338, 14855, 14952, 48385, // alpha = 0.1219451 + 15358, 14769, 14927, 48317, // alpha = 0.1332829 + 15289, 14690, 14878, 48213, // alpha = 0.1451247 + 15246, 14618, 14843, 48133, // alpha = 0.1574704 + 15168, 14551, 14800, 47970, // alpha = 0.17032 + 15142, 14490, 14775, 47845, // alpha = 0.1836735 + 15140, 14433, 14761, 47755, // alpha = 0.1975309 + 15096, 14380, 14733, 47642, // alpha = 0.2118922 + 15059, 14327, 14709, 47546, // alpha = 0.2267574 + 15041, 14235, 14693, 47459, // alpha = 0.2421265 + 15021, 14149, 14680, 47389, // alpha = 0.2579995 + 14974, 14069, 14654, 47307, // alpha = 0.2743765 + 15004, 13994, 14661, 47267, // alpha = 0.2912573 + 14955, 13924, 14638, 47198, // alpha = 0.308642 + 14914, 13857, 14618, 47132, // alpha = 0.3265306 + 14880, 13795, 14605, 47058, // alpha = 0.3449232 + 14938, 13736, 14624, 47019, // alpha = 0.3638196 + 14899, 13680, 14609, 46913, // alpha = 0.38322 + 14868, 13627, 14595, 46828, // alpha = 0.4031242 + 14860, 13578, 14589, 46752, // alpha = 0.4235324 + 14851, 13530, 14588, 46696, // alpha = 0.4444445 + 14840, 13485, 14584, 46630, // alpha = 0.4658605 + 14815, 13443, 14576, 46571, // alpha = 0.4877803 + 14810, 13402, 14575, 46525, // alpha = 0.5102041 + 14804, 13364, 14574, 46475, // alpha = 0.5331318 + 14808, 13327, 14576, 46426, // alpha = 0.5565634 + 14788, 13273, 14571, 46380, // alpha = 0.5804989 + 14771, 13206, 14568, 46339, // alpha = 0.6049383 + 14769, 13143, 14569, 46303, // alpha = 0.6298816 + 14755, 13082, 14564, 46260, // alpha = 0.6553288 + 14745, 13025, 14563, 46226, // alpha = 0.68128 + 14747, 12969, 14565, 46188, // alpha = 0.7077349 + 14759, 12917, 14574, 46159, // alpha = 0.7346939 + 14747, 12866, 14571, 46125, // alpha = 0.7621567 + 14735, 12818, 14569, 46096, // alpha = 0.7901235 + 14731, 12771, 14569, 46053, // alpha = 0.8185941 + 14726, 12727, 14570, 45991, // alpha = 0.8475687 + 14731, 12684, 14574, 45939, // alpha = 0.8770471 + 14726, 12643, 14575, 45889, // alpha = 0.9070295 + 14721, 12604, 14575, 45831, // alpha = 0.9375157 + 14726, 12566, 14580, 45783, // alpha = 0.9685059 + 14723, 12530, 14580, 45735, // alpha = 1 + + // Cos (theta) = 0.03149408 + 18191, 18441, 18001, 54615, // alpha = 0.001 + 18191, 18441, 18001, 54615, // alpha = 0.001 + 18191, 18441, 18001, 54615, // alpha = 0.001007811 + 18057, 18294, 17876, 54446, // alpha = 0.002267574 + 17493, 17728, 17422, 53408, // alpha = 0.004031243 + 17059, 17416, 16949, 52631, // alpha = 0.006298816 + 16734, 17029, 16646, 52085, // alpha = 0.009070295 + 16510, 16757, 16445, 51541, // alpha = 0.01234568 + 16314, 16560, 16222, 51191, // alpha = 0.01612497 + 16175, 16409, 16001, 50802, // alpha = 0.02040816 + 15970, 16196, 15834, 50465, // alpha = 0.02519527 + 15806, 16004, 15699, 50222, // alpha = 0.03048627 + 15751, 15845, 15592, 49967, // alpha = 0.03628118 + 15632, 15712, 15498, 49680, // alpha = 0.04258 + 15591, 15598, 15424, 49494, // alpha = 0.04938272 + 15573, 15500, 15367, 49356, // alpha = 0.05668934 + 15488, 15414, 15257, 49195, // alpha = 0.06449988 + 15415, 15318, 15159, 48978, // alpha = 0.07281432 + 15392, 15184, 15081, 48807, // alpha = 0.08163266 + 15392, 15065, 15031, 48681, // alpha = 0.09095491 + 15308, 14957, 14958, 48512, // alpha = 0.1007811 + 15315, 14860, 14925, 48420, // alpha = 0.1111111 + 15216, 14772, 14867, 48295, // alpha = 0.1219451 + 15251, 14692, 14845, 48231, // alpha = 0.1332829 + 15161, 14618, 14798, 48131, // alpha = 0.1451247 + 15144, 14550, 14772, 48007, // alpha = 0.1574704 + 15064, 14488, 14728, 47840, // alpha = 0.17032 + 15043, 14430, 14714, 47730, // alpha = 0.1836735 + 15033, 14377, 14692, 47642, // alpha = 0.1975309 + 14979, 14318, 14661, 47533, // alpha = 0.2118922 + 14965, 14225, 14646, 47453, // alpha = 0.2267574 + 14949, 14139, 14632, 47380, // alpha = 0.2421265 + 14929, 14058, 14619, 47314, // alpha = 0.2579995 + 14876, 13982, 14592, 47233, // alpha = 0.2743765 + 14900, 13911, 14599, 47193, // alpha = 0.2912573 + 14867, 13844, 14582, 47134, // alpha = 0.308642 + 14820, 13781, 14561, 47052, // alpha = 0.3265306 + 14783, 13722, 14542, 46946, // alpha = 0.3449232 + 14857, 13666, 14575, 46917, // alpha = 0.3638196 + 14814, 13613, 14552, 46806, // alpha = 0.38322 + 14775, 13563, 14535, 46735, // alpha = 0.4031242 + 14778, 13515, 14539, 46676, // alpha = 0.4235324 + 14742, 13470, 14524, 46607, // alpha = 0.4444445 + 14760, 13428, 14533, 46559, // alpha = 0.4658605 + 14728, 13387, 14522, 46502, // alpha = 0.4877803 + 14703, 13348, 14513, 46451, // alpha = 0.5102041 + 14728, 13312, 14524, 46408, // alpha = 0.5331318 + 14701, 13242, 14515, 46362, // alpha = 0.5565634 + 14707, 13176, 14518, 46323, // alpha = 0.5804989 + 14686, 13112, 14511, 46278, // alpha = 0.6049383 + 14689, 13052, 14514, 46241, // alpha = 0.6298816 + 14671, 12994, 14507, 46200, // alpha = 0.6553288 + 14658, 12939, 14504, 46168, // alpha = 0.68128 + 14669, 12887, 14511, 46133, // alpha = 0.7077349 + 14673, 12836, 14514, 46100, // alpha = 0.7346939 + 14670, 12788, 14515, 46057, // alpha = 0.7621567 + 14656, 12742, 14512, 45997, // alpha = 0.7901235 + 14650, 12698, 14511, 45938, // alpha = 0.8185941 + 14647, 12656, 14511, 45885, // alpha = 0.8475687 + 14644, 12615, 14511, 45830, // alpha = 0.8770471 + 14651, 12576, 14516, 45777, // alpha = 0.9070295 + 14645, 12539, 14516, 45728, // alpha = 0.9375157 + 14655, 12503, 14523, 45681, // alpha = 0.9685059 + 14649, 12469, 14521, 45632, // alpha = 1 + + // Cos (theta) = 0.0003754022 + 17393, 17919, 17500, 53792, // alpha = 0.001 + 17393, 17919, 17500, 53792, // alpha = 0.001 + 17393, 17919, 17500, 53792, // alpha = 0.001007811 + 17207, 17825, 17433, 53584, // alpha = 0.002267574 + 16787, 17462, 16934, 52761, // alpha = 0.004031243 + 16495, 17075, 16623, 52172, // alpha = 0.006298816 + 16344, 16780, 16436, 51615, // alpha = 0.009070295 + 16096, 16570, 16182, 51251, // alpha = 0.01234568 + 15868, 16412, 15943, 50781, // alpha = 0.01612497 + 15739, 16196, 15779, 50459, // alpha = 0.02040816 + 15665, 16000, 15645, 50238, // alpha = 0.02519527 + 15544, 15839, 15535, 49924, // alpha = 0.03048627 + 15507, 15704, 15446, 49690, // alpha = 0.03628118 + 15409, 15590, 15368, 49448, // alpha = 0.04258 + 15289, 15491, 15239, 49249, // alpha = 0.04938272 + 15315, 15405, 15163, 49155, // alpha = 0.05668934 + 15257, 15300, 15076, 48941, // alpha = 0.06449988 + 15271, 15166, 15013, 48803, // alpha = 0.07281432 + 15145, 15047, 14930, 48605, // alpha = 0.08163266 + 15032, 14940, 14851, 48436, // alpha = 0.09095491 + 15143, 14843, 14858, 48385, // alpha = 0.1007811 + 15038, 14755, 14791, 48259, // alpha = 0.1111111 + 14942, 14675, 14727, 48145, // alpha = 0.1219451 + 14972, 14601, 14719, 48056, // alpha = 0.1332829 + 15021, 14534, 14706, 47966, // alpha = 0.1451247 + 14935, 14472, 14663, 47816, // alpha = 0.1574704 + 14937, 14414, 14650, 47715, // alpha = 0.17032 + 14920, 14361, 14637, 47624, // alpha = 0.1836735 + 14882, 14287, 14611, 47522, // alpha = 0.1975309 + 14860, 14194, 14590, 47450, // alpha = 0.2118922 + 14790, 14108, 14551, 47330, // alpha = 0.2267574 + 14753, 14028, 14531, 47274, // alpha = 0.2421265 + 14821, 13952, 14560, 47242, // alpha = 0.2579995 + 14757, 13881, 14526, 47162, // alpha = 0.2743765 + 14792, 13815, 14542, 47133, // alpha = 0.2912573 + 14732, 13752, 14510, 47033, // alpha = 0.308642 + 14699, 13693, 14493, 46933, // alpha = 0.3265306 + 14788, 13638, 14533, 46912, // alpha = 0.3449232 + 14745, 13585, 14511, 46822, // alpha = 0.3638196 + 14690, 13535, 14484, 46719, // alpha = 0.38322 + 14639, 13488, 14462, 46641, // alpha = 0.4031242 + 14591, 13444, 14438, 46564, // alpha = 0.4235324 + 14631, 13401, 14456, 46523, // alpha = 0.4444445 + 14584, 13361, 14433, 46455, // alpha = 0.4658605 + 14617, 13323, 14450, 46416, // alpha = 0.4877803 + 14641, 13262, 14461, 46374, // alpha = 0.5102041 + 14631, 13193, 14457, 46328, // alpha = 0.5331318 + 14647, 13127, 14468, 46295, // alpha = 0.5565634 + 14602, 13065, 14446, 46240, // alpha = 0.5804989 + 14561, 13005, 14425, 46195, // alpha = 0.6049383 + 14531, 12948, 14411, 46141, // alpha = 0.6298816 + 14550, 12894, 14423, 46120, // alpha = 0.6553288 + 14534, 12842, 14415, 46068, // alpha = 0.68128 + 14571, 12793, 14435, 46027, // alpha = 0.7077349 + 14534, 12745, 14418, 45949, // alpha = 0.7346939 + 14566, 12700, 14436, 45908, // alpha = 0.7621567 + 14531, 12657, 14420, 45835, // alpha = 0.7901235 + 14525, 12615, 14416, 45775, // alpha = 0.8185941 + 14542, 12576, 14427, 45737, // alpha = 0.8475687 + 14513, 12538, 14411, 45667, // alpha = 0.8770471 + 14545, 12501, 14428, 45637, // alpha = 0.9070295 + 14517, 12466, 14415, 45579, // alpha = 0.9375157 + 14521, 12432, 14418, 45534, // alpha = 0.9685059 + 14541, 12400, 14432, 45503, // alpha = 1 + }; + + // NOTE: Formerly, we needed to also export and create a table for the BRDF's amplitude factor + fresnel coefficient + // but it turns out these 2 factors are actually already precomputed and available in the FGD table corresponding + // to the BRDF_Charlie BRDF, therefore they are no longer exported... + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Charlie.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Charlie.cs.meta new file mode 100644 index 00000000..65d84f08 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Charlie.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 96d291f160288ea468dde951087fa54e +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Charlie.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_CookTorrance.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_CookTorrance.cs new file mode 100644 index 00000000..2f58d4ae --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_CookTorrance.cs @@ -0,0 +1,4248 @@ +using UnityEngine; +using System; + +namespace BadDog.Rendering.AreaLight +{ + public partial class LTCAreaLight + { + // [GENERATED CONTENT 31 10月 2025 11:26:55] + // Table contains 3x3 matrix coefficients of M^-1 for the fitting of the BRDF_CookTorrance BRDF using the LTC technique + // Only the 0,2,4,6 of the 3x3 coefficients are emitted, and they are encoded into FP16 + // From "Real-Time Polygonal-Light Shading with Linearly Transformed Cosines" 2016 (https://eheitzresearch.wordpress.com/415-2/) + // + // The table is accessed via LTCAreaLight.s_LtcMatrixData_BRDF_CookTorrance[ + 64 * ] // Theta values are along the Y axis, Roughness values are along the X axis + // • roughness = ( / 63 )^2 (the table is indexed by perceptual roughness) + // • cosTheta = 1 - ( / 63 )^2 + // + public static ushort[] s_LtcMatrixData_BRDF_CookTorrance = new ushort[64 * 64 * 4] + { + // Cos (theta) = 1 + 23591, 0, 23591, 0, // alpha = 0.001 + 23591, 0, 23591, 0, // alpha = 0.001 + 23591, 0, 23591, 0, // alpha = 0.001007811 + 23412, 0, 23412, 0, // alpha = 0.002267574 + 22577, 0, 22577, 0, // alpha = 0.004031243 + 21849, 0, 21849, 0, // alpha = 0.006298816 + 21362, 0, 21362, 0, // alpha = 0.009070295 + 20857, 0, 20857, 0, // alpha = 0.01234568 + 20527, 0, 20527, 0, // alpha = 0.01612497 + 20125, 0, 20125, 0, // alpha = 0.02040816 + 19804, 0, 19804, 0, // alpha = 0.02519527 + 19566, 0, 19566, 0, // alpha = 0.03048627 + 19313, 0, 19313, 0, // alpha = 0.03628118 + 19031, 0, 19031, 0, // alpha = 0.04258 + 18807, 0, 18807, 0, // alpha = 0.04938272 + 18626, 0, 18626, 0, // alpha = 0.05668934 + 18478, 0, 18478, 0, // alpha = 0.06449988 + 18280, 0, 18280, 0, // alpha = 0.07281432 + 18075, 0, 18075, 0, // alpha = 0.08163266 + 17901, 0, 17901, 0, // alpha = 0.09095491 + 17753, 0, 17753, 0, // alpha = 0.1007811 + 17625, 0, 17625, 0, // alpha = 0.1111111 + 17514, 0, 17514, 0, // alpha = 0.1219451 + 17417, 0, 17417, 0, // alpha = 0.1332829 + 17255, 0, 17255, 0, // alpha = 0.1451247 + 17104, 0, 17104, 0, // alpha = 0.1574704 + 16971, 0, 16971, 0, // alpha = 0.17032 + 16852, 0, 16852, 0, // alpha = 0.1836735 + 16745, 0, 16745, 0, // alpha = 0.1975309 + 16650, 0, 16650, 0, // alpha = 0.2118922 + 16563, 0, 16563, 0, // alpha = 0.2267574 + 16485, 0, 16485, 0, // alpha = 0.2421265 + 16413, 0, 16413, 0, // alpha = 0.2579995 + 16313, 0, 16313, 0, // alpha = 0.2743765 + 16196, 0, 16196, 0, // alpha = 0.2912573 + 16090, 0, 16090, 0, // alpha = 0.308642 + 15992, 0, 15992, 0, // alpha = 0.3265306 + 15904, 0, 15904, 0, // alpha = 0.3449232 + 15824, 0, 15824, 0, // alpha = 0.3638196 + 15752, 0, 15752, 0, // alpha = 0.38322 + 15685, 0, 15685, 0, // alpha = 0.4031242 + 15625, 0, 15625, 0, // alpha = 0.4235324 + 15570, 0, 15570, 0, // alpha = 0.4444445 + 15520, 0, 15520, 0, // alpha = 0.4658605 + 15474, 0, 15474, 0, // alpha = 0.4877803 + 15432, 0, 15432, 0, // alpha = 0.5102041 + 15394, 0, 15394, 0, // alpha = 0.5331318 + 15359, 0, 15359, 0, // alpha = 0.5565634 + 15297, 0, 15297, 0, // alpha = 0.5804989 + 15237, 0, 15237, 0, // alpha = 0.6049383 + 15187, 0, 15187, 0, // alpha = 0.6298816 + 15141, 0, 15141, 0, // alpha = 0.6553288 + 15094, 0, 15094, 0, // alpha = 0.68128 + 15057, 0, 15057, 0, // alpha = 0.7077349 + 15024, 0, 15024, 0, // alpha = 0.7346939 + 14986, 0, 14986, 0, // alpha = 0.7621567 + 14958, 0, 14958, 0, // alpha = 0.7901235 + 14934, 0, 14934, 0, // alpha = 0.8185941 + 14911, 0, 14911, 0, // alpha = 0.8475687 + 14883, 0, 14883, 0, // alpha = 0.8770471 + 14864, 0, 14864, 0, // alpha = 0.9070295 + 14846, 0, 14846, 0, // alpha = 0.9375157 + 14830, 0, 14830, 0, // alpha = 0.9685059 + 14816, 0, 14816, 0, // alpha = 1 + + // Cos (theta) = 0.9997481 + 23591, 42431, 23591, 17911, // alpha = 0.001 + 23591, 42431, 23591, 17911, // alpha = 0.001 + 23591, 42431, 23591, 17911, // alpha = 0.001007811 + 23412, 42431, 23413, 17755, // alpha = 0.002267574 + 22577, 42431, 22578, 16902, // alpha = 0.004031243 + 21849, 42431, 21850, 16303, // alpha = 0.006298816 + 21361, 42431, 21362, 15705, // alpha = 0.009070295 + 20856, 42431, 20857, 15325, // alpha = 0.01234568 + 20528, 42431, 20528, 14851, // alpha = 0.01612497 + 20125, 42431, 20128, 14529, // alpha = 0.02040816 + 19804, 42431, 19805, 14260, // alpha = 0.02519527 + 19566, 42431, 19566, 13919, // alpha = 0.03048627 + 19313, 42431, 19314, 13657, // alpha = 0.03628118 + 19031, 42431, 19032, 13454, // alpha = 0.04258 + 18807, 42431, 18808, 13277, // alpha = 0.04938272 + 18626, 42431, 18627, 13015, // alpha = 0.05668934 + 18479, 42431, 18479, 12802, // alpha = 0.06449988 + 18280, 42431, 18281, 12625, // alpha = 0.07281432 + 18075, 42431, 18075, 12479, // alpha = 0.08163266 + 17901, 42431, 17902, 12354, // alpha = 0.09095491 + 17752, 42431, 17753, 12205, // alpha = 0.1007811 + 17625, 42431, 17625, 12023, // alpha = 0.1111111 + 17514, 42431, 17514, 11863, // alpha = 0.1219451 + 17417, 42431, 17417, 11724, // alpha = 0.1332829 + 17255, 42431, 17256, 11602, // alpha = 0.1451247 + 17105, 42431, 17106, 11495, // alpha = 0.1574704 + 16972, 42431, 16971, 11400, // alpha = 0.17032 + 16852, 42431, 16854, 11314, // alpha = 0.1836735 + 16745, 42431, 16747, 11212, // alpha = 0.1975309 + 16650, 42431, 16650, 11070, // alpha = 0.2118922 + 16563, 42431, 16564, 10945, // alpha = 0.2267574 + 16485, 42431, 16485, 10826, // alpha = 0.2421265 + 16414, 42431, 16415, 10733, // alpha = 0.2579995 + 16313, 42431, 16314, 10637, // alpha = 0.2743765 + 16196, 42403, 16197, 10541, // alpha = 0.2912573 + 16089, 42400, 16090, 10472, // alpha = 0.308642 + 15992, 42393, 15993, 10403, // alpha = 0.3265306 + 15904, 42363, 15905, 10333, // alpha = 0.3449232 + 15824, 42334, 15824, 10269, // alpha = 0.3638196 + 15751, 42313, 15752, 10162, // alpha = 0.38322 + 15685, 42270, 15686, 10048, // alpha = 0.4031242 + 15625, 42221, 15626, 9954, // alpha = 0.4235324 + 15570, 42165, 15570, 9834, // alpha = 0.4444445 + 15520, 42103, 15520, 9724, // alpha = 0.4658605 + 15474, 42060, 15475, 9623, // alpha = 0.4877803 + 15433, 42034, 15433, 9533, // alpha = 0.5102041 + 15394, 41925, 15394, 9423, // alpha = 0.5331318 + 15359, 41746, 15360, 9314, // alpha = 0.5565634 + 15296, 41701, 15297, 9246, // alpha = 0.5804989 + 15237, 41512, 15237, 9010, // alpha = 0.6049383 + 15187, 41409, 15188, 8845, // alpha = 0.6298816 + 15139, 41241, 15139, 8702, // alpha = 0.6553288 + 15095, 41168, 15094, 8501, // alpha = 0.68128 + 15057, 41004, 15057, 8338, // alpha = 0.7077349 + 15024, 40854, 15024, 8202, // alpha = 0.7346939 + 14985, 40633, 14986, 7918, // alpha = 0.7621567 + 14959, 40304, 14959, 7539, // alpha = 0.7901235 + 14934, 40104, 14933, 7330, // alpha = 0.8185941 + 14910, 39960, 14911, 7032, // alpha = 0.8475687 + 14886, 39409, 14885, 5960, // alpha = 0.8770471 + 14864, 39164, 14864, 6248, // alpha = 0.9070295 + 14846, 38222, 14847, 4645, // alpha = 0.9375157 + 14831, 37798, 14830, 2048, // alpha = 0.9685059 + 14816, 35150, 14816, 38010, // alpha = 1 + + // Cos (theta) = 0.9989922 + 23591, 43456, 23592, 18936, // alpha = 0.001 + 23591, 43456, 23592, 18936, // alpha = 0.001 + 23591, 43456, 23593, 18936, // alpha = 0.001007811 + 23411, 43456, 23415, 18779, // alpha = 0.002267574 + 22577, 43456, 22578, 17926, // alpha = 0.004031243 + 21851, 43456, 21851, 17331, // alpha = 0.006298816 + 21361, 43456, 21364, 16729, // alpha = 0.009070295 + 20854, 43456, 20858, 16347, // alpha = 0.01234568 + 20528, 43456, 20530, 15878, // alpha = 0.01612497 + 20126, 43456, 20129, 15554, // alpha = 0.02040816 + 19804, 43456, 19806, 15284, // alpha = 0.02519527 + 19565, 43456, 19568, 14941, // alpha = 0.03048627 + 19313, 43456, 19316, 14681, // alpha = 0.03628118 + 19030, 43456, 19034, 14477, // alpha = 0.04258 + 18807, 43456, 18810, 14300, // alpha = 0.04938272 + 18626, 43456, 18629, 14038, // alpha = 0.05668934 + 18479, 43456, 18481, 13826, // alpha = 0.06449988 + 18281, 43456, 18285, 13652, // alpha = 0.07281432 + 18075, 43456, 18078, 13504, // alpha = 0.08163266 + 17901, 43456, 17904, 13379, // alpha = 0.09095491 + 17752, 43456, 17756, 13229, // alpha = 0.1007811 + 17624, 43456, 17628, 13046, // alpha = 0.1111111 + 17513, 43456, 17516, 12890, // alpha = 0.1219451 + 17417, 43456, 17419, 12749, // alpha = 0.1332829 + 17255, 43456, 17259, 12627, // alpha = 0.1451247 + 17104, 43456, 17109, 12516, // alpha = 0.1574704 + 16972, 43456, 16974, 12422, // alpha = 0.17032 + 16853, 43456, 16855, 12335, // alpha = 0.1836735 + 16746, 43456, 16748, 12232, // alpha = 0.1975309 + 16649, 43456, 16652, 12093, // alpha = 0.2118922 + 16563, 43456, 16565, 11969, // alpha = 0.2267574 + 16485, 43456, 16487, 11855, // alpha = 0.2421265 + 16413, 43456, 16416, 11754, // alpha = 0.2579995 + 16314, 43456, 16317, 11666, // alpha = 0.2743765 + 16196, 43429, 16200, 11574, // alpha = 0.2912573 + 16090, 43425, 16093, 11496, // alpha = 0.308642 + 15993, 43413, 15995, 11422, // alpha = 0.3265306 + 15904, 43387, 15907, 11350, // alpha = 0.3449232 + 15824, 43362, 15827, 11285, // alpha = 0.3638196 + 15752, 43331, 15754, 11194, // alpha = 0.38322 + 15685, 43291, 15687, 11076, // alpha = 0.4031242 + 15625, 43245, 15627, 10964, // alpha = 0.4235324 + 15570, 43192, 15572, 10860, // alpha = 0.4444445 + 15520, 43132, 15522, 10751, // alpha = 0.4658605 + 15475, 43094, 15476, 10654, // alpha = 0.4877803 + 15433, 43061, 15434, 10569, // alpha = 0.5102041 + 15395, 42957, 15396, 10456, // alpha = 0.5331318 + 15360, 42802, 15361, 10349, // alpha = 0.5565634 + 15297, 42703, 15298, 10265, // alpha = 0.5804989 + 15240, 42559, 15240, 10079, // alpha = 0.6049383 + 15188, 42433, 15188, 9886, // alpha = 0.6298816 + 15139, 42310, 15140, 9742, // alpha = 0.6553288 + 15096, 42166, 15096, 9527, // alpha = 0.68128 + 15059, 42047, 15059, 9365, // alpha = 0.7077349 + 15024, 41852, 15024, 9175, // alpha = 0.7346939 + 14986, 41596, 14986, 8917, // alpha = 0.7621567 + 14959, 41392, 14959, 8620, // alpha = 0.7901235 + 14934, 41166, 14934, 8347, // alpha = 0.8185941 + 14909, 40899, 14909, 7811, // alpha = 0.8475687 + 14887, 40476, 14886, 7323, // alpha = 0.8770471 + 14867, 40102, 14865, 6767, // alpha = 0.9070295 + 14847, 39517, 14847, 6022, // alpha = 0.9375157 + 14830, 38634, 14830, 36351, // alpha = 0.9685059 + 14814, 35578, 14814, 39038, // alpha = 1 + + // Cos (theta) = 0.9977324 + 23590, 44113, 23595, 19578, // alpha = 0.001 + 23590, 44113, 23595, 19578, // alpha = 0.001 + 23590, 44113, 23595, 19578, // alpha = 0.001007811 + 23410, 44113, 23418, 19460, // alpha = 0.002267574 + 22576, 44113, 22581, 18565, // alpha = 0.004031243 + 21855, 44113, 21854, 17868, // alpha = 0.006298816 + 21361, 44113, 21369, 17412, // alpha = 0.009070295 + 20855, 44113, 20861, 16870, // alpha = 0.01234568 + 20528, 44113, 20534, 16517, // alpha = 0.01612497 + 20125, 44113, 20133, 16163, // alpha = 0.02040816 + 19803, 44113, 19811, 15816, // alpha = 0.02519527 + 19565, 44113, 19571, 15559, // alpha = 0.03048627 + 19314, 44113, 19322, 15365, // alpha = 0.03628118 + 19032, 44113, 19038, 15064, // alpha = 0.04258 + 18807, 44113, 18814, 14822, // alpha = 0.04938272 + 18626, 44113, 18632, 14626, // alpha = 0.05668934 + 18478, 44113, 18484, 14467, // alpha = 0.06449988 + 18280, 44113, 18288, 14335, // alpha = 0.07281432 + 18075, 44113, 18082, 14113, // alpha = 0.08163266 + 17901, 44113, 17908, 13925, // alpha = 0.09095491 + 17752, 44113, 17759, 13764, // alpha = 0.1007811 + 17624, 44113, 17630, 13628, // alpha = 0.1111111 + 17514, 44113, 17518, 13507, // alpha = 0.1219451 + 17416, 44113, 17421, 13403, // alpha = 0.1332829 + 17255, 44113, 17263, 13311, // alpha = 0.1451247 + 17104, 44113, 17113, 13147, // alpha = 0.1574704 + 16971, 44113, 16979, 13001, // alpha = 0.17032 + 16852, 44113, 16859, 12872, // alpha = 0.1836735 + 16746, 44113, 16752, 12759, // alpha = 0.1975309 + 16650, 44113, 16656, 12656, // alpha = 0.2118922 + 16564, 44113, 16569, 12563, // alpha = 0.2267574 + 16485, 44113, 16490, 12478, // alpha = 0.2421265 + 16414, 44113, 16419, 12400, // alpha = 0.2579995 + 16314, 44110, 16322, 12329, // alpha = 0.2743765 + 16196, 44095, 16204, 12241, // alpha = 0.2912573 + 16090, 44089, 16097, 12128, // alpha = 0.308642 + 15993, 44079, 15999, 12015, // alpha = 0.3265306 + 15905, 44061, 15911, 11908, // alpha = 0.3449232 + 15825, 44042, 15830, 11817, // alpha = 0.3638196 + 15752, 44002, 15757, 11723, // alpha = 0.38322 + 15686, 43943, 15691, 11639, // alpha = 0.4031242 + 15626, 43875, 15630, 11553, // alpha = 0.4235324 + 15571, 43796, 15575, 11474, // alpha = 0.4444445 + 15521, 43711, 15524, 11394, // alpha = 0.4658605 + 15475, 43650, 15478, 11323, // alpha = 0.4877803 + 15434, 43583, 15436, 11234, // alpha = 0.5102041 + 15396, 43479, 15397, 11080, // alpha = 0.5331318 + 15361, 43376, 15362, 10925, // alpha = 0.5565634 + 15299, 43280, 15300, 10782, // alpha = 0.5804989 + 15242, 43191, 15243, 10633, // alpha = 0.6049383 + 15190, 43082, 15191, 10480, // alpha = 0.6298816 + 15141, 42975, 15142, 10366, // alpha = 0.6553288 + 15096, 42773, 15097, 10182, // alpha = 0.68128 + 15059, 42587, 15060, 9948, // alpha = 0.7077349 + 15025, 42399, 15026, 9722, // alpha = 0.7346939 + 14988, 42229, 14988, 9492, // alpha = 0.7621567 + 14960, 42048, 14960, 9291, // alpha = 0.7901235 + 14934, 41752, 14935, 8919, // alpha = 0.8185941 + 14909, 41439, 14909, 8457, // alpha = 0.8475687 + 14887, 41150, 14886, 8089, // alpha = 0.8770471 + 14868, 40663, 14867, 7299, // alpha = 0.9070295 + 14849, 40133, 14847, 6110, // alpha = 0.9375157 + 14832, 39171, 14830, 37551, // alpha = 0.9685059 + 14816, 37184, 14815, 39386, // alpha = 1 + + // Cos (theta) = 0.9959688 + 23590, 44484, 23597, 19962, // alpha = 0.001 + 23590, 44484, 23597, 19962, // alpha = 0.001 + 23589, 44484, 23598, 19961, // alpha = 0.001007811 + 23408, 44484, 23423, 19804, // alpha = 0.002267574 + 22576, 44484, 22584, 18952, // alpha = 0.004031243 + 21854, 44484, 21862, 18364, // alpha = 0.006298816 + 21361, 44484, 21377, 17757, // alpha = 0.009070295 + 20856, 44484, 20867, 17378, // alpha = 0.01234568 + 20527, 44484, 20538, 16904, // alpha = 0.01612497 + 20126, 44484, 20139, 16580, // alpha = 0.02040816 + 19804, 44484, 19815, 16313, // alpha = 0.02519527 + 19567, 44484, 19574, 15971, // alpha = 0.03048627 + 19313, 44484, 19328, 15708, // alpha = 0.03628118 + 19031, 44484, 19044, 15505, // alpha = 0.04258 + 18807, 44484, 18819, 15328, // alpha = 0.04938272 + 18626, 44484, 18637, 15067, // alpha = 0.05668934 + 18479, 44484, 18487, 14855, // alpha = 0.06449988 + 18280, 44484, 18294, 14678, // alpha = 0.07281432 + 18075, 44484, 18089, 14531, // alpha = 0.08163266 + 17901, 44484, 17913, 14405, // alpha = 0.09095491 + 17753, 44483, 17764, 14260, // alpha = 0.1007811 + 17624, 44483, 17634, 14075, // alpha = 0.1111111 + 17513, 44483, 17523, 13914, // alpha = 0.1219451 + 17417, 44483, 17425, 13776, // alpha = 0.1332829 + 17255, 44483, 17271, 13654, // alpha = 0.1451247 + 17104, 44483, 17118, 13544, // alpha = 0.1574704 + 16972, 44483, 16983, 13449, // alpha = 0.17032 + 16853, 44483, 16864, 13363, // alpha = 0.1836735 + 16746, 44483, 16757, 13258, // alpha = 0.1975309 + 16650, 44483, 16660, 13122, // alpha = 0.2118922 + 16564, 44483, 16573, 12998, // alpha = 0.2267574 + 16485, 44483, 16494, 12885, // alpha = 0.2421265 + 16414, 44483, 16422, 12780, // alpha = 0.2579995 + 16315, 44477, 16329, 12688, // alpha = 0.2743765 + 16197, 44461, 16211, 12600, // alpha = 0.2912573 + 16090, 44451, 16103, 12520, // alpha = 0.308642 + 15993, 44436, 16005, 12448, // alpha = 0.3265306 + 15906, 44413, 15916, 12379, // alpha = 0.3449232 + 15826, 44388, 15836, 12316, // alpha = 0.3638196 + 15753, 44354, 15762, 12220, // alpha = 0.38322 + 15687, 44315, 15695, 12105, // alpha = 0.4031242 + 15627, 44269, 15634, 11999, // alpha = 0.4235324 + 15572, 44215, 15578, 11887, // alpha = 0.4444445 + 15522, 44165, 15527, 11781, // alpha = 0.4658605 + 15476, 44119, 15481, 11683, // alpha = 0.4877803 + 15435, 44068, 15439, 11586, // alpha = 0.5102041 + 15397, 43983, 15400, 11483, // alpha = 0.5331318 + 15362, 43848, 15365, 11381, // alpha = 0.5565634 + 15301, 43711, 15305, 11281, // alpha = 0.5804989 + 15245, 43590, 15247, 11105, // alpha = 0.6049383 + 15190, 43458, 15193, 10916, // alpha = 0.6298816 + 15144, 43321, 15145, 10737, // alpha = 0.6553288 + 15100, 43201, 15100, 10558, // alpha = 0.68128 + 15062, 43070, 15062, 10391, // alpha = 0.7077349 + 15027, 42893, 15027, 10237, // alpha = 0.7346939 + 14989, 42640, 14989, 9929, // alpha = 0.7621567 + 14961, 42405, 14961, 9636, // alpha = 0.7901235 + 14936, 42194, 14935, 9379, // alpha = 0.8185941 + 14910, 41956, 14910, 8934, // alpha = 0.8475687 + 14889, 41519, 14887, 8420, // alpha = 0.8770471 + 14869, 41144, 14867, 7763, // alpha = 0.9070295 + 14850, 40544, 14848, 6314, // alpha = 0.9375157 + 14834, 39703, 14831, 37757, // alpha = 0.9685059 + 14819, 37466, 14816, 39982, // alpha = 1 + + // Cos (theta) = 0.9937012 + 23588, 44856, 23601, 20344, // alpha = 0.001 + 23588, 44856, 23601, 20344, // alpha = 0.001 + 23588, 44856, 23601, 20344, // alpha = 0.001007811 + 23406, 44856, 23430, 20148, // alpha = 0.002267574 + 22573, 44856, 22591, 19337, // alpha = 0.004031243 + 21848, 44856, 21870, 18643, // alpha = 0.006298816 + 21356, 44856, 21388, 18098, // alpha = 0.009070295 + 20858, 44856, 20875, 17649, // alpha = 0.01234568 + 20527, 44856, 20542, 17293, // alpha = 0.01612497 + 20126, 44856, 20147, 16888, // alpha = 0.02040816 + 19803, 44856, 19821, 16597, // alpha = 0.02519527 + 19565, 44856, 19580, 16381, // alpha = 0.03048627 + 19313, 44856, 19336, 16055, // alpha = 0.03628118 + 19031, 44856, 19052, 15800, // alpha = 0.04258 + 18807, 44856, 18825, 15598, // alpha = 0.04938272 + 18626, 44856, 18643, 15435, // alpha = 0.05668934 + 18478, 44856, 18492, 15244, // alpha = 0.06449988 + 18279, 44856, 18307, 15022, // alpha = 0.07281432 + 18075, 44856, 18096, 14838, // alpha = 0.08163266 + 17901, 44855, 17920, 14681, // alpha = 0.09095491 + 17752, 44855, 17770, 14547, // alpha = 0.1007811 + 17625, 44855, 17640, 14431, // alpha = 0.1111111 + 17514, 44855, 17527, 14326, // alpha = 0.1219451 + 17417, 44855, 17429, 14151, // alpha = 0.1332829 + 17255, 44855, 17279, 13996, // alpha = 0.1451247 + 17106, 44855, 17127, 13863, // alpha = 0.1574704 + 16972, 44855, 16992, 13741, // alpha = 0.17032 + 16853, 44855, 16871, 13634, // alpha = 0.1836735 + 16746, 44855, 16764, 13538, // alpha = 0.1975309 + 16650, 44855, 16666, 13451, // alpha = 0.2118922 + 16564, 44854, 16578, 13372, // alpha = 0.2267574 + 16485, 44854, 16499, 13294, // alpha = 0.2421265 + 16414, 44854, 16426, 13166, // alpha = 0.2579995 + 16315, 44845, 16338, 13047, // alpha = 0.2743765 + 16198, 44828, 16220, 12939, // alpha = 0.2912573 + 16091, 44812, 16111, 12838, // alpha = 0.308642 + 15995, 44794, 16013, 12748, // alpha = 0.3265306 + 15907, 44767, 15923, 12662, // alpha = 0.3449232 + 15826, 44733, 15842, 12578, // alpha = 0.3638196 + 15754, 44692, 15768, 12506, // alpha = 0.38322 + 15688, 44643, 15701, 12432, // alpha = 0.4031242 + 15628, 44584, 15639, 12364, // alpha = 0.4235324 + 15573, 44519, 15583, 12295, // alpha = 0.4444445 + 15523, 44459, 15532, 12175, // alpha = 0.4658605 + 15478, 44397, 15485, 12049, // alpha = 0.4877803 + 15437, 44327, 15442, 11923, // alpha = 0.5102041 + 15398, 44257, 15403, 11796, // alpha = 0.5331318 + 15364, 44176, 15368, 11670, // alpha = 0.5565634 + 15305, 44091, 15311, 11544, // alpha = 0.5804989 + 15248, 43986, 15252, 11422, // alpha = 0.6049383 + 15194, 43832, 15197, 11308, // alpha = 0.6298816 + 15146, 43664, 15149, 11126, // alpha = 0.6553288 + 15103, 43503, 15105, 10901, // alpha = 0.68128 + 15064, 43343, 15065, 10686, // alpha = 0.7077349 + 15029, 43190, 15029, 10487, // alpha = 0.7346939 + 14990, 43040, 14991, 10300, // alpha = 0.7621567 + 14963, 42787, 14962, 10024, // alpha = 0.7901235 + 14937, 42494, 14936, 9650, // alpha = 0.8185941 + 14911, 42224, 14910, 9302, // alpha = 0.8475687 + 14890, 41950, 14888, 8775, // alpha = 0.8770471 + 14870, 41456, 14868, 8126, // alpha = 0.9070295 + 14852, 40942, 14849, 6639, // alpha = 0.9375157 + 14836, 40086, 14832, 37900, // alpha = 0.9685059 + 14822, 37850, 14817, 40336, // alpha = 1 + + // Cos (theta) = 0.9909297 + 23586, 45143, 23606, 20604, // alpha = 0.001 + 23586, 45143, 23606, 20604, // alpha = 0.001 + 23587, 45143, 23605, 20605, // alpha = 0.001007811 + 23403, 45143, 23438, 20486, // alpha = 0.002267574 + 22574, 45143, 22592, 19592, // alpha = 0.004031243 + 21852, 45143, 21879, 18896, // alpha = 0.006298816 + 21362, 45143, 21396, 18442, // alpha = 0.009070295 + 20857, 45143, 20883, 17903, // alpha = 0.01234568 + 20528, 45143, 20547, 17547, // alpha = 0.01612497 + 20125, 45143, 20156, 17197, // alpha = 0.02040816 + 19805, 45143, 19829, 16849, // alpha = 0.02519527 + 19566, 45143, 19586, 16590, // alpha = 0.03048627 + 19313, 45143, 19349, 16393, // alpha = 0.03628118 + 19031, 45143, 19060, 16097, // alpha = 0.04258 + 18807, 45143, 18832, 15854, // alpha = 0.04938272 + 18627, 45143, 18649, 15658, // alpha = 0.05668934 + 18478, 45143, 18498, 15497, // alpha = 0.06449988 + 18281, 45143, 18316, 15365, // alpha = 0.07281432 + 18075, 45143, 18107, 15146, // alpha = 0.08163266 + 17901, 45143, 17929, 14958, // alpha = 0.09095491 + 17752, 45143, 17777, 14796, // alpha = 0.1007811 + 17624, 45143, 17647, 14657, // alpha = 0.1111111 + 17514, 45143, 17534, 14538, // alpha = 0.1219451 + 17417, 45143, 17435, 14432, // alpha = 0.1332829 + 17256, 45143, 17290, 14340, // alpha = 0.1451247 + 17105, 45142, 17136, 14180, // alpha = 0.1574704 + 16971, 45142, 17000, 14036, // alpha = 0.17032 + 16852, 45142, 16880, 13907, // alpha = 0.1836735 + 16747, 45142, 16770, 13790, // alpha = 0.1975309 + 16651, 45142, 16673, 13688, // alpha = 0.2118922 + 16564, 45142, 16585, 13594, // alpha = 0.2267574 + 16485, 45142, 16505, 13508, // alpha = 0.2421265 + 16414, 45141, 16433, 13431, // alpha = 0.2579995 + 16316, 45135, 16350, 13361, // alpha = 0.2743765 + 16198, 45126, 16230, 13279, // alpha = 0.2912573 + 16092, 45115, 16120, 13156, // alpha = 0.308642 + 15995, 45105, 16022, 13047, // alpha = 0.3265306 + 15908, 45088, 15932, 12944, // alpha = 0.3449232 + 15827, 45067, 15850, 12845, // alpha = 0.3638196 + 15755, 45029, 15775, 12757, // alpha = 0.38322 + 15689, 44969, 15707, 12668, // alpha = 0.4031242 + 15629, 44898, 15646, 12587, // alpha = 0.4235324 + 15574, 44826, 15589, 12505, // alpha = 0.4444445 + 15524, 44754, 15537, 12427, // alpha = 0.4658605 + 15480, 44674, 15490, 12351, // alpha = 0.4877803 + 15438, 44589, 15447, 12262, // alpha = 0.5102041 + 15400, 44505, 15407, 12114, // alpha = 0.5331318 + 15366, 44412, 15371, 11959, // alpha = 0.5565634 + 15309, 44311, 15318, 11811, // alpha = 0.5804989 + 15251, 44210, 15257, 11663, // alpha = 0.6049383 + 15198, 44114, 15203, 11523, // alpha = 0.6298816 + 15150, 44005, 15153, 11385, // alpha = 0.6553288 + 15107, 43808, 15108, 11240, // alpha = 0.68128 + 15066, 43624, 15068, 10985, // alpha = 0.7077349 + 15031, 43435, 15032, 10746, // alpha = 0.7346939 + 14995, 43256, 14994, 10509, // alpha = 0.7621567 + 14965, 43080, 14964, 10313, // alpha = 0.7901235 + 14937, 42817, 14937, 9943, // alpha = 0.8185941 + 14913, 42491, 14912, 9544, // alpha = 0.8475687 + 14892, 42180, 14890, 9139, // alpha = 0.8770471 + 14871, 41757, 14868, 8339, // alpha = 0.9070295 + 14854, 41206, 14850, 7197, // alpha = 0.9375157 + 14839, 40323, 14833, 38149, // alpha = 0.9685059 + 14824, 38338, 14818, 40583, // alpha = 1 + + // Cos (theta) = 0.9876543 + 23585, 45331, 23613, 20797, // alpha = 0.001 + 23585, 45331, 23613, 20797, // alpha = 0.001 + 23585, 45331, 23612, 20797, // alpha = 0.001007811 + 23400, 45331, 23448, 20659, // alpha = 0.002267574 + 22577, 45331, 22601, 19794, // alpha = 0.004031243 + 21852, 45331, 21887, 19149, // alpha = 0.006298816 + 21362, 45331, 21407, 18617, // alpha = 0.009070295 + 20856, 45331, 20891, 18160, // alpha = 0.01234568 + 20528, 45331, 20555, 17745, // alpha = 0.01612497 + 20126, 45331, 20168, 17459, // alpha = 0.02040816 + 19805, 45331, 19838, 17102, // alpha = 0.02519527 + 19565, 45331, 19595, 16798, // alpha = 0.03048627 + 19314, 45331, 19361, 16569, // alpha = 0.03628118 + 19031, 45331, 19072, 16390, // alpha = 0.04258 + 18807, 45331, 18842, 16111, // alpha = 0.04938272 + 18627, 45331, 18657, 15882, // alpha = 0.05668934 + 18479, 45331, 18505, 15695, // alpha = 0.06449988 + 18280, 45331, 18329, 15539, // alpha = 0.07281432 + 18075, 45331, 18118, 15409, // alpha = 0.08163266 + 17900, 45331, 17939, 15235, // alpha = 0.09095491 + 17752, 45331, 17786, 15048, // alpha = 0.1007811 + 17626, 45331, 17655, 14887, // alpha = 0.1111111 + 17514, 45331, 17542, 14745, // alpha = 0.1219451 + 17417, 45331, 17443, 14622, // alpha = 0.1332829 + 17255, 45331, 17303, 14514, // alpha = 0.1451247 + 17105, 45331, 17148, 14419, // alpha = 0.1574704 + 16972, 45330, 17012, 14332, // alpha = 0.17032 + 16853, 45330, 16889, 14182, // alpha = 0.1836735 + 16746, 45330, 16781, 14046, // alpha = 0.1975309 + 16651, 45330, 16682, 13925, // alpha = 0.2118922 + 16565, 45330, 16593, 13815, // alpha = 0.2267574 + 16486, 45329, 16512, 13716, // alpha = 0.2421265 + 16415, 45328, 16439, 13625, // alpha = 0.2579995 + 16317, 45321, 16362, 13542, // alpha = 0.2743765 + 16199, 45312, 16241, 13466, // alpha = 0.2912573 + 16094, 45298, 16133, 13397, // alpha = 0.308642 + 15996, 45284, 16033, 13331, // alpha = 0.3265306 + 15909, 45266, 15942, 13230, // alpha = 0.3449232 + 15829, 45241, 15859, 13119, // alpha = 0.3638196 + 15756, 45212, 15784, 13010, // alpha = 0.38322 + 15690, 45176, 15716, 12908, // alpha = 0.4031242 + 15630, 45136, 15653, 12810, // alpha = 0.4235324 + 15576, 45095, 15596, 12717, // alpha = 0.4444445 + 15527, 45047, 15543, 12626, // alpha = 0.4658605 + 15481, 44950, 15496, 12534, // alpha = 0.4877803 + 15440, 44853, 15452, 12447, // alpha = 0.5102041 + 15402, 44751, 15412, 12354, // alpha = 0.5331318 + 15368, 44646, 15376, 12251, // alpha = 0.5565634 + 15313, 44531, 15325, 12077, // alpha = 0.5804989 + 15255, 44414, 15264, 11905, // alpha = 0.6049383 + 15203, 44301, 15209, 11740, // alpha = 0.6298816 + 15154, 44190, 15159, 11578, // alpha = 0.6553288 + 15111, 44075, 15113, 11425, // alpha = 0.68128 + 15070, 43899, 15072, 11273, // alpha = 0.7077349 + 15035, 43686, 15036, 11010, // alpha = 0.7346939 + 14998, 43473, 14998, 10737, // alpha = 0.7621567 + 14969, 43270, 14968, 10484, // alpha = 0.7901235 + 14940, 43074, 14939, 10231, // alpha = 0.8185941 + 14916, 42755, 14914, 9772, // alpha = 0.8475687 + 14895, 42394, 14892, 9324, // alpha = 0.8770471 + 14874, 42043, 14870, 8546, // alpha = 0.9070295 + 14857, 41438, 14851, 7314, // alpha = 0.9375157 + 14842, 40596, 14835, 38854, // alpha = 0.9685059 + 14828, 38901, 14820, 40817, // alpha = 1 + + // Cos (theta) = 0.983875 + 23582, 45521, 23617, 20990, // alpha = 0.001 + 23582, 45521, 23617, 20990, // alpha = 0.001 + 23583, 45521, 23617, 20991, // alpha = 0.001007811 + 23396, 45521, 23459, 20832, // alpha = 0.002267574 + 22575, 45521, 22608, 19989, // alpha = 0.004031243 + 21852, 45521, 21897, 19404, // alpha = 0.006298816 + 21360, 45521, 21421, 18793, // alpha = 0.009070295 + 20856, 45521, 20902, 18420, // alpha = 0.01234568 + 20527, 45521, 20563, 17942, // alpha = 0.01612497 + 20126, 45521, 20180, 17616, // alpha = 0.02040816 + 19804, 45521, 19849, 17355, // alpha = 0.02519527 + 19566, 45521, 19603, 17009, // alpha = 0.03048627 + 19313, 45521, 19375, 16745, // alpha = 0.03628118 + 19031, 45521, 19084, 16540, // alpha = 0.04258 + 18807, 45521, 18854, 16371, // alpha = 0.04938272 + 18627, 45521, 18666, 16109, // alpha = 0.05668934 + 18479, 45521, 18514, 15894, // alpha = 0.06449988 + 18280, 45521, 18342, 15715, // alpha = 0.07281432 + 18075, 45521, 18130, 15566, // alpha = 0.08163266 + 17901, 45521, 17951, 15438, // alpha = 0.09095491 + 17753, 45521, 17798, 15302, // alpha = 0.1007811 + 17624, 45521, 17666, 15116, // alpha = 0.1111111 + 17514, 45520, 17550, 14955, // alpha = 0.1219451 + 17417, 45520, 17450, 14814, // alpha = 0.1332829 + 17256, 45520, 17317, 14690, // alpha = 0.1451247 + 17106, 45520, 17162, 14581, // alpha = 0.1574704 + 16972, 45520, 17024, 14484, // alpha = 0.17032 + 16853, 45520, 16901, 14397, // alpha = 0.1836735 + 16747, 45519, 16791, 14304, // alpha = 0.1975309 + 16651, 45519, 16692, 14165, // alpha = 0.2118922 + 16564, 45519, 16602, 14038, // alpha = 0.2267574 + 16486, 45518, 16521, 13925, // alpha = 0.2421265 + 16415, 45515, 16448, 13820, // alpha = 0.2579995 + 16317, 45507, 16378, 13725, // alpha = 0.2743765 + 16200, 45497, 16256, 13638, // alpha = 0.2912573 + 16094, 45482, 16146, 13559, // alpha = 0.308642 + 15997, 45464, 16045, 13483, // alpha = 0.3265306 + 15910, 45443, 15954, 13415, // alpha = 0.3449232 + 15830, 45415, 15871, 13350, // alpha = 0.3638196 + 15757, 45380, 15794, 13264, // alpha = 0.38322 + 15692, 45340, 15725, 13147, // alpha = 0.4031242 + 15632, 45295, 15662, 13035, // alpha = 0.4235324 + 15578, 45249, 15603, 12928, // alpha = 0.4444445 + 15529, 45198, 15550, 12824, // alpha = 0.4658605 + 15483, 45143, 15502, 12720, // alpha = 0.4877803 + 15443, 45087, 15458, 12620, // alpha = 0.5102041 + 15406, 44999, 15418, 12519, // alpha = 0.5331318 + 15371, 44879, 15381, 12417, // alpha = 0.5565634 + 15319, 44754, 15334, 12318, // alpha = 0.5804989 + 15260, 44619, 15272, 12149, // alpha = 0.6049383 + 15208, 44487, 15216, 11962, // alpha = 0.6298816 + 15159, 44359, 15165, 11773, // alpha = 0.6553288 + 15115, 44235, 15119, 11598, // alpha = 0.68128 + 15074, 44105, 15077, 11422, // alpha = 0.7077349 + 15038, 43935, 15040, 11269, // alpha = 0.7346939 + 15002, 43693, 15001, 10952, // alpha = 0.7621567 + 14972, 43463, 14970, 10671, // alpha = 0.7901235 + 14943, 43237, 14941, 10380, // alpha = 0.8185941 + 14919, 43023, 14916, 10012, // alpha = 0.8475687 + 14897, 42611, 14892, 9476, // alpha = 0.8770471 + 14877, 42221, 14871, 8799, // alpha = 0.9070295 + 14861, 41664, 14854, 7466, // alpha = 0.9375157 + 14845, 40958, 14837, 38671, // alpha = 0.9685059 + 14832, 39156, 14821, 41027, // alpha = 1 + + // Cos (theta) = 0.9795918 + 23580, 45713, 23624, 21183, // alpha = 0.001 + 23580, 45713, 23624, 21183, // alpha = 0.001 + 23581, 45713, 23626, 21185, // alpha = 0.001007811 + 23392, 45713, 23472, 21006, // alpha = 0.002267574 + 22573, 45713, 22618, 20186, // alpha = 0.004031243 + 21850, 45713, 21906, 19557, // alpha = 0.006298816 + 21363, 45713, 21442, 18973, // alpha = 0.009070295 + 20856, 45713, 20914, 18557, // alpha = 0.01234568 + 20528, 45713, 20573, 18143, // alpha = 0.01612497 + 20125, 45713, 20197, 17774, // alpha = 0.02040816 + 19804, 45713, 19862, 17510, // alpha = 0.02519527 + 19566, 45713, 19613, 17222, // alpha = 0.03048627 + 19312, 45713, 19393, 16923, // alpha = 0.03628118 + 19031, 45713, 19100, 16692, // alpha = 0.04258 + 18807, 45713, 18866, 16508, // alpha = 0.04938272 + 18626, 45713, 18677, 16335, // alpha = 0.05668934 + 18479, 45713, 18523, 16093, // alpha = 0.06449988 + 18280, 45713, 18360, 15892, // alpha = 0.07281432 + 18075, 45712, 18146, 15724, // alpha = 0.08163266 + 17901, 45712, 17965, 15581, // alpha = 0.09095491 + 17752, 45712, 17810, 15459, // alpha = 0.1007811 + 17624, 45712, 17676, 15348, // alpha = 0.1111111 + 17514, 45712, 17561, 15166, // alpha = 0.1219451 + 17418, 45712, 17460, 15009, // alpha = 0.1332829 + 17256, 45711, 17334, 14867, // alpha = 0.1451247 + 17106, 45711, 17178, 14744, // alpha = 0.1574704 + 16973, 45711, 17039, 14634, // alpha = 0.17032 + 16854, 45711, 16914, 14537, // alpha = 0.1836735 + 16747, 45710, 16803, 14450, // alpha = 0.1975309 + 16651, 45710, 16704, 14371, // alpha = 0.2118922 + 16565, 45709, 16613, 14264, // alpha = 0.2267574 + 16487, 45709, 16531, 14135, // alpha = 0.2421265 + 16416, 45704, 16458, 14017, // alpha = 0.2579995 + 16319, 45696, 16390, 13912, // alpha = 0.2743765 + 16202, 45684, 16273, 13813, // alpha = 0.2912573 + 16095, 45667, 16161, 13722, // alpha = 0.308642 + 15999, 45645, 16060, 13637, // alpha = 0.3265306 + 15912, 45621, 15967, 13560, // alpha = 0.3449232 + 15832, 45589, 15883, 13486, // alpha = 0.3638196 + 15759, 45549, 15806, 13417, // alpha = 0.38322 + 15694, 45504, 15736, 13351, // alpha = 0.4031242 + 15634, 45456, 15672, 13265, // alpha = 0.4235324 + 15580, 45403, 15613, 13143, // alpha = 0.4444445 + 15531, 45344, 15559, 13025, // alpha = 0.4658605 + 15486, 45283, 15509, 12908, // alpha = 0.4877803 + 15445, 45219, 15465, 12792, // alpha = 0.5102041 + 15408, 45152, 15424, 12678, // alpha = 0.5331318 + 15373, 45084, 15386, 12566, // alpha = 0.5565634 + 15325, 44972, 15344, 12454, // alpha = 0.5804989 + 15267, 44827, 15282, 12342, // alpha = 0.6049383 + 15214, 44676, 15224, 12180, // alpha = 0.6298816 + 15165, 44531, 15172, 11974, // alpha = 0.6553288 + 15121, 44389, 15125, 11772, // alpha = 0.68128 + 15078, 44248, 15082, 11579, // alpha = 0.7077349 + 15042, 44110, 15044, 11401, // alpha = 0.7346939 + 15006, 43922, 15005, 11179, // alpha = 0.7621567 + 14975, 43656, 14974, 10861, // alpha = 0.7901235 + 14946, 43405, 14944, 10533, // alpha = 0.8185941 + 14922, 43159, 14918, 10238, // alpha = 0.8475687 + 14900, 42850, 14895, 9653, // alpha = 0.8770471 + 14881, 42395, 14874, 8992, // alpha = 0.9070295 + 14864, 41934, 14855, 7662, // alpha = 0.9375157 + 14848, 41132, 14838, 38619, // alpha = 0.9685059 + 14836, 39414, 14823, 41157, // alpha = 1 + + // Cos (theta) = 0.9748048 + 23578, 45907, 23634, 21378, // alpha = 0.001 + 23578, 45907, 23634, 21378, // alpha = 0.001 + 23578, 45907, 23634, 21378, // alpha = 0.001007811 + 23387, 45907, 23486, 21180, // alpha = 0.002267574 + 22578, 45907, 22635, 20399, // alpha = 0.004031243 + 21853, 45907, 21925, 19689, // alpha = 0.006298816 + 21362, 45907, 21461, 19152, // alpha = 0.009070295 + 20854, 45907, 20931, 18688, // alpha = 0.01234568 + 20527, 45907, 20584, 18345, // alpha = 0.01612497 + 20125, 45906, 20214, 17934, // alpha = 0.02040816 + 19804, 45906, 19876, 17639, // alpha = 0.02519527 + 19565, 45906, 19626, 17421, // alpha = 0.03048627 + 19313, 45906, 19412, 17104, // alpha = 0.03628118 + 19031, 45906, 19115, 16845, // alpha = 0.04258 + 18807, 45906, 18881, 16641, // alpha = 0.04938272 + 18626, 45906, 18690, 16475, // alpha = 0.05668934 + 18479, 45906, 18535, 16296, // alpha = 0.06449988 + 18281, 45906, 18379, 16072, // alpha = 0.07281432 + 18076, 45906, 18164, 15884, // alpha = 0.08163266 + 17901, 45906, 17981, 15724, // alpha = 0.09095491 + 17753, 45906, 17824, 15588, // alpha = 0.1007811 + 17625, 45905, 17690, 15471, // alpha = 0.1111111 + 17514, 45905, 17572, 15370, // alpha = 0.1219451 + 17417, 45905, 17471, 15201, // alpha = 0.1332829 + 17256, 45904, 17354, 15046, // alpha = 0.1451247 + 17106, 45904, 17196, 14910, // alpha = 0.1574704 + 16972, 45904, 17055, 14787, // alpha = 0.17032 + 16854, 45903, 16929, 14679, // alpha = 0.1836735 + 16747, 45903, 16818, 14581, // alpha = 0.1975309 + 16652, 45902, 16716, 14493, // alpha = 0.2118922 + 16565, 45902, 16626, 14414, // alpha = 0.2267574 + 16487, 45900, 16543, 14342, // alpha = 0.2421265 + 16416, 45894, 16468, 14217, // alpha = 0.2579995 + 16319, 45885, 16400, 14098, // alpha = 0.2743765 + 16203, 45871, 16292, 13989, // alpha = 0.2912573 + 16098, 45853, 16179, 13888, // alpha = 0.308642 + 16001, 45828, 16076, 13793, // alpha = 0.3265306 + 15913, 45800, 15982, 13707, // alpha = 0.3449232 + 15833, 45764, 15897, 13624, // alpha = 0.3638196 + 15761, 45719, 15819, 13547, // alpha = 0.38322 + 15695, 45670, 15748, 13473, // alpha = 0.4031242 + 15636, 45616, 15683, 13403, // alpha = 0.4235324 + 15582, 45557, 15624, 13336, // alpha = 0.4444445 + 15533, 45492, 15568, 13226, // alpha = 0.4658605 + 15489, 45423, 15518, 13096, // alpha = 0.4877803 + 15448, 45351, 15472, 12968, // alpha = 0.5102041 + 15411, 45277, 15431, 12841, // alpha = 0.5331318 + 15377, 45201, 15392, 12714, // alpha = 0.5565634 + 15331, 45123, 15355, 12588, // alpha = 0.5804989 + 15273, 45033, 15292, 12467, // alpha = 0.6049383 + 15220, 44868, 15233, 12347, // alpha = 0.6298816 + 15172, 44706, 15180, 12176, // alpha = 0.6553288 + 15126, 44548, 15132, 11952, // alpha = 0.68128 + 15085, 44393, 15088, 11737, // alpha = 0.7077349 + 15046, 44237, 15049, 11534, // alpha = 0.7346939 + 15010, 44089, 15010, 11334, // alpha = 0.7621567 + 14979, 43856, 14977, 11049, // alpha = 0.7901235 + 14950, 43577, 14947, 10696, // alpha = 0.8185941 + 14926, 43306, 14921, 10364, // alpha = 0.8475687 + 14902, 43047, 14897, 9837, // alpha = 0.8770471 + 14884, 42579, 14875, 9232, // alpha = 0.9070295 + 14866, 42109, 14856, 7978, // alpha = 0.9375157 + 14852, 41294, 14840, 38607, // alpha = 0.9685059 + 14839, 39900, 14825, 41231, // alpha = 1 + + // Cos (theta) = 0.9695137 + 23575, 46091, 23641, 21539, // alpha = 0.001 + 23575, 46091, 23641, 21539, // alpha = 0.001 + 23575, 46091, 23643, 21539, // alpha = 0.001007811 + 23397, 46091, 23539, 21370, // alpha = 0.002267574 + 22578, 46091, 22644, 20542, // alpha = 0.004031243 + 21853, 46091, 21940, 19820, // alpha = 0.006298816 + 21361, 46091, 21480, 19334, // alpha = 0.009070295 + 20855, 46091, 20946, 18822, // alpha = 0.01234568 + 20527, 46091, 20597, 18491, // alpha = 0.01612497 + 20125, 46091, 20236, 18096, // alpha = 0.02040816 + 19804, 46091, 19892, 17771, // alpha = 0.02519527 + 19566, 46091, 19638, 17530, // alpha = 0.03048627 + 19314, 46091, 19434, 17287, // alpha = 0.03628118 + 19031, 46091, 19134, 17001, // alpha = 0.04258 + 18807, 46091, 18896, 16774, // alpha = 0.04938272 + 18627, 46091, 18704, 16592, // alpha = 0.05668934 + 18478, 46091, 18547, 16442, // alpha = 0.06449988 + 18279, 46091, 18402, 16251, // alpha = 0.07281432 + 18075, 46091, 18183, 16046, // alpha = 0.08163266 + 17901, 46091, 17998, 15869, // alpha = 0.09095491 + 17753, 46091, 17840, 15719, // alpha = 0.1007811 + 17625, 46090, 17703, 15590, // alpha = 0.1111111 + 17514, 46090, 17585, 15478, // alpha = 0.1219451 + 17417, 46090, 17482, 15380, // alpha = 0.1332829 + 17257, 46090, 17375, 15228, // alpha = 0.1451247 + 17106, 46090, 17215, 15077, // alpha = 0.1574704 + 16972, 46089, 17074, 14941, // alpha = 0.17032 + 16854, 46089, 16947, 14821, // alpha = 0.1836735 + 16748, 46089, 16833, 14713, // alpha = 0.1975309 + 16652, 46088, 16732, 14618, // alpha = 0.2118922 + 16565, 46088, 16639, 14529, // alpha = 0.2267574 + 16487, 46086, 16556, 14450, // alpha = 0.2421265 + 16417, 46083, 16480, 14377, // alpha = 0.2579995 + 16321, 46076, 16411, 14288, // alpha = 0.2743765 + 16205, 46061, 16313, 14167, // alpha = 0.2912573 + 16099, 46039, 16198, 14056, // alpha = 0.308642 + 16002, 46011, 16094, 13951, // alpha = 0.3265306 + 15915, 45979, 16000, 13854, // alpha = 0.3449232 + 15835, 45939, 15913, 13765, // alpha = 0.3638196 + 15763, 45889, 15834, 13680, // alpha = 0.38322 + 15698, 45836, 15762, 13597, // alpha = 0.4031242 + 15638, 45777, 15695, 13520, // alpha = 0.4235324 + 15585, 45710, 15635, 13445, // alpha = 0.4444445 + 15536, 45639, 15578, 13372, // alpha = 0.4658605 + 15492, 45563, 15527, 13289, // alpha = 0.4877803 + 15451, 45485, 15481, 13146, // alpha = 0.5102041 + 15414, 45403, 15438, 13006, // alpha = 0.5331318 + 15380, 45318, 15399, 12865, // alpha = 0.5565634 + 15338, 45234, 15364, 12730, // alpha = 0.5804989 + 15280, 45147, 15303, 12593, // alpha = 0.6049383 + 15227, 45059, 15243, 12460, // alpha = 0.6298816 + 15178, 44881, 15189, 12334, // alpha = 0.6553288 + 15132, 44706, 15140, 12128, // alpha = 0.68128 + 15090, 44536, 15094, 11898, // alpha = 0.7077349 + 15052, 44369, 15054, 11674, // alpha = 0.7346939 + 15014, 44205, 15014, 11454, // alpha = 0.7621567 + 14983, 44048, 14981, 11252, // alpha = 0.7901235 + 14953, 43751, 14950, 10851, // alpha = 0.8185941 + 14928, 43453, 14923, 10495, // alpha = 0.8475687 + 14906, 43164, 14899, 10028, // alpha = 0.8770471 + 14887, 42788, 14877, 9371, // alpha = 0.9070295 + 14870, 42256, 14859, 8229, // alpha = 0.9375157 + 14857, 41506, 14843, 38419, // alpha = 0.9685059 + 14843, 40138, 14827, 41307, // alpha = 1 + + // Cos (theta) = 0.9637188 + 23598, 46190, 23677, 21666, // alpha = 0.001 + 23598, 46190, 23677, 21666, // alpha = 0.001 + 23575, 46190, 23688, 21639, // alpha = 0.001007811 + 23412, 46190, 23553, 21537, // alpha = 0.002267574 + 22575, 46190, 22655, 20643, // alpha = 0.004031243 + 21854, 46190, 21960, 19954, // alpha = 0.006298816 + 21360, 46190, 21506, 19487, // alpha = 0.009070295 + 20856, 46190, 20964, 18959, // alpha = 0.01234568 + 20525, 46190, 20612, 18593, // alpha = 0.01612497 + 20126, 46190, 20255, 18261, // alpha = 0.02040816 + 19804, 46190, 19910, 17904, // alpha = 0.02519527 + 19566, 46190, 19653, 17640, // alpha = 0.03048627 + 19313, 46190, 19458, 17439, // alpha = 0.03628118 + 19031, 46190, 19155, 17158, // alpha = 0.04258 + 18808, 46190, 18914, 16911, // alpha = 0.04938272 + 18627, 46190, 18721, 16710, // alpha = 0.05668934 + 18479, 46190, 18561, 16546, // alpha = 0.06449988 + 18281, 46190, 18424, 16411, // alpha = 0.07281432 + 18075, 46190, 18205, 16209, // alpha = 0.08163266 + 17901, 46190, 18017, 16016, // alpha = 0.09095491 + 17753, 46190, 17857, 15852, // alpha = 0.1007811 + 17625, 46189, 17719, 15710, // alpha = 0.1111111 + 17514, 46189, 17599, 15587, // alpha = 0.1219451 + 17417, 46189, 17495, 15480, // alpha = 0.1332829 + 17256, 46189, 17399, 15386, // alpha = 0.1451247 + 17106, 46188, 17238, 15245, // alpha = 0.1574704 + 16973, 46188, 17094, 15097, // alpha = 0.17032 + 16855, 46188, 16966, 14966, // alpha = 0.1836735 + 16748, 46187, 16851, 14848, // alpha = 0.1975309 + 16653, 46187, 16748, 14742, // alpha = 0.2118922 + 16566, 46186, 16654, 14646, // alpha = 0.2267574 + 16488, 46184, 16569, 14559, // alpha = 0.2421265 + 16417, 46180, 16493, 14480, // alpha = 0.2579995 + 16323, 46174, 16424, 14408, // alpha = 0.2743765 + 16206, 46166, 16335, 14341, // alpha = 0.2912573 + 16100, 46154, 16220, 14225, // alpha = 0.308642 + 16004, 46138, 16114, 14110, // alpha = 0.3265306 + 15916, 46119, 16017, 14005, // alpha = 0.3449232 + 15837, 46097, 15930, 13906, // alpha = 0.3638196 + 15766, 46061, 15850, 13812, // alpha = 0.38322 + 15700, 46003, 15776, 13723, // alpha = 0.4031242 + 15641, 45938, 15709, 13638, // alpha = 0.4235324 + 15588, 45865, 15646, 13556, // alpha = 0.4444445 + 15540, 45787, 15590, 13476, // alpha = 0.4658605 + 15495, 45705, 15538, 13397, // alpha = 0.4877803 + 15455, 45618, 15490, 13320, // alpha = 0.5102041 + 15417, 45529, 15446, 13172, // alpha = 0.5331318 + 15384, 45437, 15407, 13017, // alpha = 0.5565634 + 15345, 45343, 15371, 12868, // alpha = 0.5804989 + 15288, 45250, 15315, 12722, // alpha = 0.6049383 + 15234, 45155, 15254, 12576, // alpha = 0.6298816 + 15184, 45058, 15198, 12437, // alpha = 0.6553288 + 15138, 44869, 15148, 12301, // alpha = 0.68128 + 15096, 44683, 15102, 12058, // alpha = 0.7077349 + 15057, 44502, 15060, 11812, // alpha = 0.7346939 + 15019, 44321, 15019, 11572, // alpha = 0.7621567 + 14988, 44149, 14985, 11357, // alpha = 0.7901235 + 14958, 43934, 14954, 11017, // alpha = 0.8185941 + 14933, 43610, 14927, 10631, // alpha = 0.8475687 + 14910, 43300, 14902, 10238, // alpha = 0.8770471 + 14891, 42983, 14880, 9492, // alpha = 0.9070295 + 14875, 42415, 14861, 8363, // alpha = 0.9375157 + 14861, 41755, 14845, 37917, // alpha = 0.9685059 + 14848, 40409, 14830, 41365, // alpha = 1 + + // Cos (theta) = 0.95742 + 23594, 46291, 23689, 21765, // alpha = 0.001 + 23594, 46291, 23689, 21765, // alpha = 0.001 + 23585, 46291, 23694, 21755, // alpha = 0.001007811 + 23407, 46291, 23563, 21628, // alpha = 0.002267574 + 22579, 46291, 22665, 20753, // alpha = 0.004031243 + 21852, 46291, 21979, 20087, // alpha = 0.006298816 + 21363, 46291, 21518, 19582, // alpha = 0.009070295 + 20857, 46291, 20984, 19097, // alpha = 0.01234568 + 20526, 46291, 20626, 18698, // alpha = 0.01612497 + 20126, 46291, 20280, 18427, // alpha = 0.02040816 + 19804, 46291, 19928, 18038, // alpha = 0.02519527 + 19566, 46291, 19669, 17752, // alpha = 0.03048627 + 19314, 46291, 19471, 17533, // alpha = 0.03628118 + 19030, 46291, 19179, 17316, // alpha = 0.04258 + 18808, 46291, 18935, 17048, // alpha = 0.04938272 + 18626, 46291, 18738, 16829, // alpha = 0.05668934 + 18479, 46291, 18576, 16652, // alpha = 0.06449988 + 18281, 46291, 18443, 16504, // alpha = 0.07281432 + 18076, 46290, 18228, 16376, // alpha = 0.08163266 + 17901, 46290, 18038, 16166, // alpha = 0.09095491 + 17753, 46290, 17877, 15986, // alpha = 0.1007811 + 17625, 46290, 17737, 15832, // alpha = 0.1111111 + 17514, 46289, 17617, 15698, // alpha = 0.1219451 + 17417, 46289, 17510, 15582, // alpha = 0.1332829 + 17258, 46289, 17417, 15480, // alpha = 0.1451247 + 17107, 46288, 17262, 15388, // alpha = 0.1574704 + 16974, 46288, 17117, 15257, // alpha = 0.17032 + 16855, 46287, 16986, 15112, // alpha = 0.1836735 + 16749, 46287, 16870, 14984, // alpha = 0.1975309 + 16653, 46286, 16765, 14869, // alpha = 0.2118922 + 16567, 46285, 16671, 14765, // alpha = 0.2267574 + 16489, 46282, 16586, 14669, // alpha = 0.2421265 + 16418, 46278, 16507, 14584, // alpha = 0.2579995 + 16325, 46271, 16437, 14506, // alpha = 0.2743765 + 16208, 46262, 16361, 14433, // alpha = 0.2912573 + 16102, 46248, 16243, 14367, // alpha = 0.308642 + 16006, 46231, 16136, 14272, // alpha = 0.3265306 + 15918, 46210, 16038, 14157, // alpha = 0.3449232 + 15840, 46185, 15950, 14050, // alpha = 0.3638196 + 15768, 46157, 15867, 13948, // alpha = 0.38322 + 15702, 46125, 15793, 13850, // alpha = 0.4031242 + 15644, 46089, 15724, 13758, // alpha = 0.4235324 + 15591, 46020, 15661, 13668, // alpha = 0.4444445 + 15543, 45936, 15602, 13580, // alpha = 0.4658605 + 15499, 45847, 15549, 13494, // alpha = 0.4877803 + 15459, 45752, 15501, 13409, // alpha = 0.5102041 + 15422, 45655, 15456, 13325, // alpha = 0.5331318 + 15388, 45556, 15415, 13170, // alpha = 0.5565634 + 15354, 45455, 15378, 13011, // alpha = 0.5804989 + 15295, 45354, 15327, 12849, // alpha = 0.6049383 + 15242, 45252, 15266, 12696, // alpha = 0.6298816 + 15191, 45149, 15209, 12543, // alpha = 0.6553288 + 15145, 45034, 15157, 12395, // alpha = 0.68128 + 15103, 44831, 15110, 12221, // alpha = 0.7077349 + 15063, 44635, 15067, 11953, // alpha = 0.7346939 + 15025, 44445, 15026, 11700, // alpha = 0.7621567 + 14992, 44255, 14990, 11459, // alpha = 0.7901235 + 14962, 44075, 14958, 11197, // alpha = 0.8185941 + 14937, 43769, 14930, 10769, // alpha = 0.8475687 + 14913, 43430, 14905, 10348, // alpha = 0.8770471 + 14895, 43109, 14883, 9650, // alpha = 0.9070295 + 14880, 42581, 14864, 8563, // alpha = 0.9375157 + 14865, 41982, 14847, 36641, // alpha = 0.9685059 + 14852, 40763, 14832, 41374, // alpha = 1 + + // Cos (theta) = 0.9506173 + 23590, 46393, 23707, 21867, // alpha = 0.001 + 23590, 46393, 23707, 21867, // alpha = 0.001 + 23591, 46393, 23705, 21868, // alpha = 0.001007811 + 23399, 46393, 23578, 21717, // alpha = 0.002267574 + 22575, 46393, 22693, 20855, // alpha = 0.004031243 + 21853, 46393, 21998, 20226, // alpha = 0.006298816 + 21358, 46393, 21535, 19674, // alpha = 0.009070295 + 20857, 46393, 21005, 19238, // alpha = 0.01234568 + 20527, 46393, 20643, 18807, // alpha = 0.01612497 + 20126, 46393, 20306, 18514, // alpha = 0.02040816 + 19803, 46393, 19950, 18175, // alpha = 0.02519527 + 19566, 46393, 19686, 17864, // alpha = 0.03048627 + 19311, 46393, 19486, 17627, // alpha = 0.03628118 + 19031, 46393, 19204, 17444, // alpha = 0.04258 + 18807, 46393, 18956, 17187, // alpha = 0.04938272 + 18627, 46393, 18756, 16952, // alpha = 0.05668934 + 18479, 46393, 18593, 16758, // alpha = 0.06449988 + 18281, 46393, 18457, 16599, // alpha = 0.07281432 + 18076, 46392, 18255, 16464, // alpha = 0.08163266 + 17901, 46392, 18062, 16316, // alpha = 0.09095491 + 17754, 46392, 17897, 16124, // alpha = 0.1007811 + 17625, 46392, 17756, 15955, // alpha = 0.1111111 + 17514, 46391, 17633, 15811, // alpha = 0.1219451 + 17417, 46391, 17526, 15685, // alpha = 0.1332829 + 17258, 46390, 17432, 15574, // alpha = 0.1451247 + 17107, 46390, 17288, 15476, // alpha = 0.1574704 + 16974, 46389, 17141, 15389, // alpha = 0.17032 + 16855, 46389, 17009, 15262, // alpha = 0.1836735 + 16749, 46388, 16892, 15123, // alpha = 0.1975309 + 16653, 46387, 16786, 14997, // alpha = 0.2118922 + 16567, 46385, 16689, 14884, // alpha = 0.2267574 + 16489, 46382, 16603, 14782, // alpha = 0.2421265 + 16419, 46377, 16524, 14689, // alpha = 0.2579995 + 16326, 46369, 16452, 14604, // alpha = 0.2743765 + 16210, 46358, 16387, 14526, // alpha = 0.2912573 + 16104, 46344, 16269, 14454, // alpha = 0.308642 + 16008, 46325, 16161, 14387, // alpha = 0.3265306 + 15921, 46301, 16061, 14313, // alpha = 0.3449232 + 15842, 46274, 15971, 14195, // alpha = 0.3638196 + 15770, 46244, 15887, 14085, // alpha = 0.38322 + 15705, 46209, 15809, 13979, // alpha = 0.4031242 + 15647, 46170, 15740, 13879, // alpha = 0.4235324 + 15594, 46128, 15675, 13781, // alpha = 0.4444445 + 15546, 46082, 15616, 13687, // alpha = 0.4658605 + 15502, 45987, 15561, 13592, // alpha = 0.4877803 + 15463, 45887, 15511, 13501, // alpha = 0.5102041 + 15426, 45783, 15466, 13411, // alpha = 0.5331318 + 15392, 45675, 15424, 13322, // alpha = 0.5565634 + 15360, 45567, 15386, 13156, // alpha = 0.5804989 + 15302, 45458, 15342, 12983, // alpha = 0.6049383 + 15248, 45349, 15278, 12814, // alpha = 0.6298816 + 15198, 45239, 15220, 12649, // alpha = 0.6553288 + 15152, 45129, 15167, 12490, // alpha = 0.68128 + 15109, 44983, 15117, 12340, // alpha = 0.7077349 + 15069, 44771, 15074, 12101, // alpha = 0.7346939 + 15032, 44568, 15032, 11828, // alpha = 0.7621567 + 14998, 44366, 14996, 11568, // alpha = 0.7901235 + 14967, 44169, 14962, 11318, // alpha = 0.8185941 + 14941, 43932, 14933, 10910, // alpha = 0.8475687 + 14919, 43570, 14908, 10455, // alpha = 0.8770471 + 14900, 43221, 14886, 9802, // alpha = 0.9070295 + 14883, 42764, 14866, 8784, // alpha = 0.9375157 + 14868, 42126, 14848, 3039, // alpha = 0.9685059 + 14858, 41023, 14834, 41397, // alpha = 1 + + // Cos (theta) = 0.9433107 + 23595, 46497, 23728, 21982, // alpha = 0.001 + 23595, 46497, 23728, 21982, // alpha = 0.001 + 23595, 46497, 23728, 21982, // alpha = 0.001007811 + 23401, 46497, 23593, 21815, // alpha = 0.002267574 + 22577, 46497, 22706, 20966, // alpha = 0.004031243 + 21855, 46497, 22019, 20367, // alpha = 0.006298816 + 21361, 46497, 21551, 19772, // alpha = 0.009070295 + 20857, 46497, 21028, 19380, // alpha = 0.01234568 + 20527, 46497, 20661, 18915, // alpha = 0.01612497 + 20125, 46497, 20335, 18600, // alpha = 0.02040816 + 19805, 46497, 19974, 18316, // alpha = 0.02519527 + 19565, 46497, 19706, 17978, // alpha = 0.03048627 + 19313, 46497, 19503, 17724, // alpha = 0.03628118 + 19031, 46497, 19232, 17526, // alpha = 0.04258 + 18806, 46497, 18980, 17328, // alpha = 0.04938272 + 18627, 46497, 18777, 17075, // alpha = 0.05668934 + 18479, 46496, 18611, 16867, // alpha = 0.06449988 + 18281, 46496, 18473, 16695, // alpha = 0.07281432 + 18075, 46496, 18283, 16550, // alpha = 0.08163266 + 17902, 46496, 18088, 16428, // alpha = 0.09095491 + 17753, 46495, 17920, 16262, // alpha = 0.1007811 + 17625, 46495, 17777, 16082, // alpha = 0.1111111 + 17514, 46495, 17652, 15926, // alpha = 0.1219451 + 17418, 46494, 17543, 15790, // alpha = 0.1332829 + 17258, 46493, 17448, 15670, // alpha = 0.1451247 + 17108, 46493, 17318, 15565, // alpha = 0.1574704 + 16974, 46492, 17168, 15471, // alpha = 0.17032 + 16856, 46491, 17035, 15387, // alpha = 0.1836735 + 16749, 46490, 16915, 15264, // alpha = 0.1975309 + 16654, 46489, 16806, 15129, // alpha = 0.2118922 + 16568, 46487, 16709, 15008, // alpha = 0.2267574 + 16490, 46483, 16621, 14896, // alpha = 0.2421265 + 16420, 46477, 16541, 14797, // alpha = 0.2579995 + 16328, 46468, 16469, 14705, // alpha = 0.2743765 + 16211, 46456, 16402, 14620, // alpha = 0.2912573 + 16106, 46440, 16299, 14543, // alpha = 0.308642 + 16011, 46419, 16188, 14470, // alpha = 0.3265306 + 15924, 46392, 16086, 14403, // alpha = 0.3449232 + 15845, 46363, 15993, 14339, // alpha = 0.3638196 + 15773, 46331, 15908, 14224, // alpha = 0.38322 + 15709, 46293, 15830, 14111, // alpha = 0.4031242 + 15650, 46251, 15758, 14002, // alpha = 0.4235324 + 15598, 46206, 15692, 13897, // alpha = 0.4444445 + 15550, 46157, 15630, 13796, // alpha = 0.4658605 + 15507, 46105, 15574, 13695, // alpha = 0.4877803 + 15467, 46022, 15524, 13597, // alpha = 0.5102041 + 15431, 45910, 15477, 13496, // alpha = 0.5331318 + 15396, 45795, 15434, 13399, // alpha = 0.5565634 + 15364, 45679, 15395, 13297, // alpha = 0.5804989 + 15312, 45562, 15357, 13115, // alpha = 0.6049383 + 15257, 45446, 15291, 12935, // alpha = 0.6298816 + 15206, 45330, 15231, 12759, // alpha = 0.6553288 + 15160, 45214, 15178, 12589, // alpha = 0.68128 + 15116, 45097, 15127, 12425, // alpha = 0.7077349 + 15075, 44910, 15081, 12247, // alpha = 0.7346939 + 15039, 44689, 15039, 11957, // alpha = 0.7621567 + 15004, 44477, 15002, 11677, // alpha = 0.7901235 + 14971, 44269, 14967, 11410, // alpha = 0.8185941 + 14946, 44069, 14937, 11053, // alpha = 0.8475687 + 14924, 43718, 14912, 10579, // alpha = 0.8770471 + 14904, 43339, 14889, 9984, // alpha = 0.9070295 + 14888, 42967, 14868, 9048, // alpha = 0.9375157 + 14874, 42270, 14851, 5365, // alpha = 0.9685059 + 14862, 41248, 14836, 41372, // alpha = 1 + + // Cos (theta) = 0.9355001 + 23597, 46603, 23735, 22095, // alpha = 0.001 + 23597, 46603, 23735, 22095, // alpha = 0.001 + 23591, 46603, 23743, 22086, // alpha = 0.001007811 + 23406, 46603, 23615, 21917, // alpha = 0.002267574 + 22573, 46603, 22723, 21070, // alpha = 0.004031243 + 21851, 46603, 22047, 20491, // alpha = 0.006298816 + 21360, 46603, 21569, 19870, // alpha = 0.009070295 + 20856, 46603, 21055, 19490, // alpha = 0.01234568 + 20528, 46603, 20680, 19027, // alpha = 0.01612497 + 20126, 46603, 20368, 18688, // alpha = 0.02040816 + 19803, 46603, 20000, 18444, // alpha = 0.02519527 + 19566, 46603, 19727, 18096, // alpha = 0.03048627 + 19312, 46603, 19521, 17822, // alpha = 0.03628118 + 19031, 46603, 19263, 17610, // alpha = 0.04258 + 18808, 46602, 19006, 17441, // alpha = 0.04938272 + 18627, 46602, 18801, 17201, // alpha = 0.05668934 + 18479, 46602, 18632, 16978, // alpha = 0.06449988 + 18281, 46602, 18491, 16793, // alpha = 0.07281432 + 18076, 46602, 18315, 16638, // alpha = 0.08163266 + 17902, 46601, 18116, 16506, // alpha = 0.09095491 + 17753, 46601, 17947, 16394, // alpha = 0.1007811 + 17626, 46600, 17801, 16211, // alpha = 0.1111111 + 17515, 46600, 17673, 16043, // alpha = 0.1219451 + 17418, 46599, 17563, 15896, // alpha = 0.1332829 + 17258, 46598, 17466, 15768, // alpha = 0.1451247 + 17108, 46598, 17352, 15654, // alpha = 0.1574704 + 16975, 46597, 17198, 15554, // alpha = 0.17032 + 16856, 46596, 17062, 15464, // alpha = 0.1836735 + 16750, 46594, 16940, 15384, // alpha = 0.1975309 + 16655, 46593, 16830, 15262, // alpha = 0.2118922 + 16568, 46590, 16731, 15131, // alpha = 0.2267574 + 16491, 46585, 16641, 15014, // alpha = 0.2421265 + 16420, 46578, 16560, 14905, // alpha = 0.2579995 + 16329, 46568, 16486, 14807, // alpha = 0.2743765 + 16213, 46555, 16418, 14717, // alpha = 0.2912573 + 16108, 46537, 16330, 14633, // alpha = 0.308642 + 16012, 46513, 16217, 14555, // alpha = 0.3265306 + 15926, 46485, 16112, 14482, // alpha = 0.3449232 + 15847, 46453, 16017, 14414, // alpha = 0.3638196 + 15776, 46418, 15931, 14351, // alpha = 0.38322 + 15712, 46377, 15851, 14244, // alpha = 0.4031242 + 15654, 46332, 15777, 14126, // alpha = 0.4235324 + 15601, 46284, 15709, 14014, // alpha = 0.4444445 + 15554, 46231, 15647, 13904, // alpha = 0.4658605 + 15511, 46176, 15589, 13797, // alpha = 0.4877803 + 15471, 46119, 15537, 13690, // alpha = 0.5102041 + 15435, 46038, 15488, 13587, // alpha = 0.5331318 + 15401, 45916, 15444, 13484, // alpha = 0.5565634 + 15370, 45793, 15404, 13382, // alpha = 0.5804989 + 15320, 45668, 15367, 13250, // alpha = 0.6049383 + 15265, 45544, 15306, 13055, // alpha = 0.6298816 + 15215, 45420, 15245, 12870, // alpha = 0.6553288 + 15168, 45299, 15189, 12689, // alpha = 0.68128 + 15124, 45176, 15137, 12512, // alpha = 0.7077349 + 15082, 45053, 15090, 12342, // alpha = 0.7346939 + 15046, 44819, 15047, 12092, // alpha = 0.7621567 + 15010, 44592, 15008, 11792, // alpha = 0.7901235 + 14977, 44372, 14972, 11506, // alpha = 0.8185941 + 14952, 44155, 14942, 11208, // alpha = 0.8475687 + 14929, 43865, 14916, 10699, // alpha = 0.8770471 + 14908, 43476, 14891, 10188, // alpha = 0.9070295 + 14893, 43086, 14872, 9250, // alpha = 0.9375157 + 14879, 42433, 14854, 6334, // alpha = 0.9685059 + 14866, 41496, 14838, 41299, // alpha = 1 + + // Cos (theta) = 0.9271857 + 23593, 46711, 23759, 22201, // alpha = 0.001 + 23593, 46711, 23759, 22201, // alpha = 0.001 + 23591, 46711, 23756, 22198, // alpha = 0.001007811 + 23398, 46711, 23626, 22010, // alpha = 0.002267574 + 22576, 46711, 22750, 21189, // alpha = 0.004031243 + 21853, 46711, 22073, 20565, // alpha = 0.006298816 + 21361, 46711, 21588, 19972, // alpha = 0.009070295 + 20855, 46711, 21083, 19563, // alpha = 0.01234568 + 20527, 46711, 20702, 19139, // alpha = 0.01612497 + 20125, 46711, 20401, 18776, // alpha = 0.02040816 + 19804, 46711, 20027, 18516, // alpha = 0.02519527 + 19565, 46711, 19751, 18215, // alpha = 0.03048627 + 19313, 46711, 19540, 17923, // alpha = 0.03628118 + 19031, 46710, 19296, 17695, // alpha = 0.04258 + 18808, 46710, 19036, 17515, // alpha = 0.04938272 + 18627, 46710, 18825, 17330, // alpha = 0.05668934 + 18479, 46710, 18654, 17090, // alpha = 0.06449988 + 18281, 46709, 18510, 16892, // alpha = 0.07281432 + 18076, 46709, 18350, 16726, // alpha = 0.08163266 + 17902, 46709, 18148, 16586, // alpha = 0.09095491 + 17754, 46708, 17975, 16466, // alpha = 0.1007811 + 17625, 46708, 17825, 16341, // alpha = 0.1111111 + 17515, 46707, 17696, 16162, // alpha = 0.1219451 + 17418, 46706, 17584, 16005, // alpha = 0.1332829 + 17259, 46705, 17484, 15868, // alpha = 0.1451247 + 17109, 46704, 17386, 15747, // alpha = 0.1574704 + 16976, 46703, 17231, 15639, // alpha = 0.17032 + 16857, 46702, 17092, 15542, // alpha = 0.1836735 + 16750, 46700, 16968, 15456, // alpha = 0.1975309 + 16655, 46698, 16856, 15379, // alpha = 0.2118922 + 16569, 46694, 16756, 15258, // alpha = 0.2267574 + 16492, 46689, 16664, 15132, // alpha = 0.2421265 + 16421, 46681, 16581, 15017, // alpha = 0.2579995 + 16331, 46670, 16506, 14911, // alpha = 0.2743765 + 16215, 46654, 16437, 14814, // alpha = 0.2912573 + 16110, 46634, 16364, 14724, // alpha = 0.308642 + 16015, 46609, 16248, 14641, // alpha = 0.3265306 + 15927, 46578, 16141, 14564, // alpha = 0.3449232 + 15850, 46544, 16045, 14491, // alpha = 0.3638196 + 15779, 46505, 15955, 14422, // alpha = 0.38322 + 15715, 46462, 15873, 14357, // alpha = 0.4031242 + 15658, 46414, 15797, 14255, // alpha = 0.4235324 + 15606, 46362, 15728, 14133, // alpha = 0.4444445 + 15558, 46307, 15664, 14016, // alpha = 0.4658605 + 15515, 46248, 15604, 13900, // alpha = 0.4877803 + 15476, 46187, 15550, 13788, // alpha = 0.5102041 + 15439, 46124, 15500, 13675, // alpha = 0.5331318 + 15406, 46037, 15455, 13564, // alpha = 0.5565634 + 15375, 45907, 15414, 13457, // alpha = 0.5804989 + 15330, 45775, 15376, 13352, // alpha = 0.6049383 + 15275, 45644, 15322, 13181, // alpha = 0.6298816 + 15224, 45513, 15259, 12981, // alpha = 0.6553288 + 15175, 45384, 15200, 12788, // alpha = 0.68128 + 15132, 45256, 15148, 12602, // alpha = 0.7077349 + 15090, 45128, 15099, 12424, // alpha = 0.7346939 + 15052, 44950, 15056, 12227, // alpha = 0.7621567 + 15017, 44708, 15015, 11908, // alpha = 0.7901235 + 14984, 44476, 14979, 11604, // alpha = 0.8185941 + 14957, 44251, 14947, 11319, // alpha = 0.8475687 + 14934, 44026, 14920, 10838, // alpha = 0.8770471 + 14914, 43605, 14895, 10315, // alpha = 0.9070295 + 14898, 43199, 14876, 9396, // alpha = 0.9375157 + 14884, 42617, 14858, 7178, // alpha = 0.9685059 + 14872, 41747, 14841, 41231, // alpha = 1 + + // Cos (theta) = 0.9183673 + 23590, 46821, 23786, 22310, // alpha = 0.001 + 23590, 46821, 23786, 22310, // alpha = 0.001 + 23587, 46821, 23776, 22305, // alpha = 0.001007811 + 23386, 46821, 23647, 22102, // alpha = 0.002267574 + 22579, 46821, 22776, 21310, // alpha = 0.004031243 + 21849, 46821, 22108, 20636, // alpha = 0.006298816 + 21364, 46821, 21609, 20076, // alpha = 0.009070295 + 20855, 46821, 21116, 19638, // alpha = 0.01234568 + 20527, 46821, 20727, 19254, // alpha = 0.01612497 + 20124, 46821, 20440, 18867, // alpha = 0.02040816 + 19804, 46821, 20058, 18591, // alpha = 0.02519527 + 19565, 46821, 19775, 18337, // alpha = 0.03048627 + 19313, 46821, 19561, 18025, // alpha = 0.03628118 + 19031, 46820, 19333, 17783, // alpha = 0.04258 + 18808, 46820, 19066, 17590, // alpha = 0.04938272 + 18627, 46820, 18853, 17434, // alpha = 0.05668934 + 18479, 46820, 18677, 17205, // alpha = 0.06449988 + 18281, 46819, 18532, 16994, // alpha = 0.07281432 + 18076, 46819, 18387, 16818, // alpha = 0.08163266 + 17902, 46818, 18182, 16667, // alpha = 0.09095491 + 17754, 46818, 18005, 16539, // alpha = 0.1007811 + 17626, 46817, 17853, 16429, // alpha = 0.1111111 + 17515, 46816, 17722, 16283, // alpha = 0.1219451 + 17418, 46815, 17607, 16116, // alpha = 0.1332829 + 17258, 46814, 17506, 15969, // alpha = 0.1451247 + 17108, 46813, 17416, 15840, // alpha = 0.1574704 + 16976, 46812, 17266, 15726, // alpha = 0.17032 + 16857, 46810, 17125, 15623, // alpha = 0.1836735 + 16750, 46808, 16998, 15531, // alpha = 0.1975309 + 16655, 46805, 16884, 15449, // alpha = 0.2118922 + 16570, 46801, 16782, 15374, // alpha = 0.2267574 + 16492, 46794, 16689, 15253, // alpha = 0.2421265 + 16422, 46785, 16604, 15130, // alpha = 0.2579995 + 16334, 46772, 16527, 15018, // alpha = 0.2743765 + 16217, 46755, 16456, 14915, // alpha = 0.2912573 + 16112, 46733, 16392, 14818, // alpha = 0.308642 + 16017, 46705, 16282, 14730, // alpha = 0.3265306 + 15931, 46673, 16173, 14647, // alpha = 0.3449232 + 15853, 46636, 16074, 14569, // alpha = 0.3638196 + 15783, 46593, 15981, 14497, // alpha = 0.38322 + 15719, 46548, 15897, 14427, // alpha = 0.4031242 + 15662, 46496, 15820, 14360, // alpha = 0.4235324 + 15610, 46441, 15748, 14254, // alpha = 0.4444445 + 15563, 46382, 15682, 14128, // alpha = 0.4658605 + 15520, 46320, 15621, 14006, // alpha = 0.4877803 + 15481, 46255, 15566, 13885, // alpha = 0.5102041 + 15444, 46189, 15514, 13766, // alpha = 0.5331318 + 15410, 46120, 15468, 13648, // alpha = 0.5565634 + 15379, 46022, 15425, 13533, // alpha = 0.5804989 + 15340, 45883, 15385, 13420, // alpha = 0.6049383 + 15286, 45744, 15340, 13309, // alpha = 0.6298816 + 15233, 45606, 15274, 13099, // alpha = 0.6553288 + 15185, 45470, 15214, 12893, // alpha = 0.68128 + 15142, 45336, 15160, 12694, // alpha = 0.7077349 + 15098, 45204, 15110, 12506, // alpha = 0.7346939 + 15059, 45071, 15065, 12328, // alpha = 0.7621567 + 15022, 44830, 15021, 12033, // alpha = 0.7901235 + 14992, 44583, 14985, 11704, // alpha = 0.8185941 + 14964, 44344, 14953, 11404, // alpha = 0.8475687 + 14940, 44115, 14925, 10975, // alpha = 0.8770471 + 14920, 43744, 14900, 10419, // alpha = 0.9070295 + 14904, 43322, 14879, 9565, // alpha = 0.9375157 + 14890, 42811, 14861, 7602, // alpha = 0.9685059 + 14877, 42014, 14844, 41115, // alpha = 1 + + // Cos (theta) = 0.9090451 + 23595, 46934, 23798, 22436, // alpha = 0.001 + 23595, 46934, 23798, 22436, // alpha = 0.001 + 23585, 46934, 23814, 22419, // alpha = 0.001007811 + 23410, 46934, 23681, 22228, // alpha = 0.002267574 + 22575, 46934, 22801, 21421, // alpha = 0.004031243 + 21853, 46934, 22137, 20715, // alpha = 0.006298816 + 21360, 46934, 21635, 20177, // alpha = 0.009070295 + 20857, 46934, 21149, 19716, // alpha = 0.01234568 + 20527, 46933, 20751, 19372, // alpha = 0.01612497 + 20126, 46933, 20481, 18961, // alpha = 0.02040816 + 19803, 46933, 20093, 18665, // alpha = 0.02519527 + 19565, 46933, 19804, 18447, // alpha = 0.03048627 + 19313, 46933, 19584, 18130, // alpha = 0.03628118 + 19031, 46933, 19372, 17871, // alpha = 0.04258 + 18808, 46933, 19100, 17667, // alpha = 0.04938272 + 18627, 46932, 18883, 17501, // alpha = 0.05668934 + 18479, 46932, 18703, 17324, // alpha = 0.06449988 + 18281, 46932, 18555, 17099, // alpha = 0.07281432 + 18076, 46931, 18429, 16911, // alpha = 0.08163266 + 17902, 46930, 18218, 16751, // alpha = 0.09095491 + 17753, 46930, 18039, 16614, // alpha = 0.1007811 + 17626, 46929, 17884, 16497, // alpha = 0.1111111 + 17515, 46928, 17750, 16396, // alpha = 0.1219451 + 17419, 46927, 17631, 16231, // alpha = 0.1332829 + 17259, 46925, 17528, 16074, // alpha = 0.1451247 + 17109, 46924, 17437, 15936, // alpha = 0.1574704 + 16975, 46922, 17306, 15814, // alpha = 0.17032 + 16858, 46920, 17161, 15705, // alpha = 0.1836735 + 16751, 46918, 17031, 15607, // alpha = 0.1975309 + 16656, 46914, 16915, 15519, // alpha = 0.2118922 + 16570, 46909, 16810, 15440, // alpha = 0.2267574 + 16493, 46901, 16715, 15368, // alpha = 0.2421265 + 16423, 46891, 16629, 15246, // alpha = 0.2579995 + 16334, 46876, 16550, 15126, // alpha = 0.2743765 + 16219, 46857, 16478, 15016, // alpha = 0.2912573 + 16114, 46832, 16412, 14914, // alpha = 0.308642 + 16019, 46803, 16318, 14819, // alpha = 0.3265306 + 15934, 46768, 16207, 14732, // alpha = 0.3449232 + 15856, 46727, 16105, 14649, // alpha = 0.3638196 + 15787, 46682, 16010, 14570, // alpha = 0.38322 + 15724, 46633, 15923, 14497, // alpha = 0.4031242 + 15666, 46579, 15843, 14425, // alpha = 0.4235324 + 15615, 46520, 15769, 14357, // alpha = 0.4444445 + 15569, 46457, 15702, 14244, // alpha = 0.4658605 + 15526, 46392, 15639, 14114, // alpha = 0.4877803 + 15487, 46324, 15581, 13984, // alpha = 0.5102041 + 15451, 46253, 15529, 13859, // alpha = 0.5331318 + 15416, 46182, 15480, 13734, // alpha = 0.5565634 + 15385, 46109, 15436, 13611, // alpha = 0.5804989 + 15350, 45992, 15395, 13492, // alpha = 0.6049383 + 15295, 45847, 15356, 13375, // alpha = 0.6298816 + 15244, 45702, 15290, 13214, // alpha = 0.6553288 + 15193, 45558, 15228, 12998, // alpha = 0.68128 + 15150, 45417, 15172, 12786, // alpha = 0.7077349 + 15107, 45278, 15120, 12589, // alpha = 0.7346939 + 15068, 45141, 15074, 12402, // alpha = 0.7621567 + 15030, 44955, 15029, 12156, // alpha = 0.7901235 + 14999, 44696, 14992, 11817, // alpha = 0.8185941 + 14971, 44445, 14959, 11496, // alpha = 0.8475687 + 14947, 44203, 14930, 11128, // alpha = 0.8770471 + 14926, 43894, 14904, 10542, // alpha = 0.9070295 + 14909, 43453, 14882, 9743, // alpha = 0.9375157 + 14896, 43012, 14864, 8114, // alpha = 0.9685059 + 14884, 42185, 14848, 40942, // alpha = 1 + + // Cos (theta) = 0.8992189 + 23587, 47049, 23858, 22535, // alpha = 0.001 + 23587, 47049, 23858, 22535, // alpha = 0.001 + 23590, 47049, 23830, 22538, // alpha = 0.001007811 + 23415, 47049, 23700, 22340, // alpha = 0.002267574 + 22576, 47049, 22826, 21523, // alpha = 0.004031243 + 21854, 47049, 22181, 20792, // alpha = 0.006298816 + 21362, 47049, 21657, 20287, // alpha = 0.009070295 + 20856, 47049, 21188, 19794, // alpha = 0.01234568 + 20528, 47049, 20782, 19475, // alpha = 0.01612497 + 20127, 47049, 20502, 19057, // alpha = 0.02040816 + 19803, 47049, 20129, 18742, // alpha = 0.02519527 + 19566, 47048, 19834, 18511, // alpha = 0.03048627 + 19313, 47048, 19610, 18238, // alpha = 0.03628118 + 19032, 47048, 19415, 17964, // alpha = 0.04258 + 18808, 47048, 19138, 17746, // alpha = 0.04938272 + 18627, 47047, 18914, 17570, // alpha = 0.05668934 + 18479, 47047, 18731, 17426, // alpha = 0.06449988 + 18281, 47046, 18579, 17206, // alpha = 0.07281432 + 18076, 47046, 18453, 17006, // alpha = 0.08163266 + 17902, 47045, 18259, 16836, // alpha = 0.09095491 + 17754, 47044, 18074, 16692, // alpha = 0.1007811 + 17626, 47043, 17916, 16568, // alpha = 0.1111111 + 17515, 47042, 17779, 16459, // alpha = 0.1219451 + 17419, 47041, 17658, 16347, // alpha = 0.1332829 + 17259, 47039, 17553, 16180, // alpha = 0.1451247 + 17110, 47037, 17460, 16035, // alpha = 0.1574704 + 16976, 47035, 17348, 15905, // alpha = 0.17032 + 16857, 47033, 17200, 15788, // alpha = 0.1836735 + 16751, 47030, 17067, 15685, // alpha = 0.1975309 + 16657, 47026, 16948, 15592, // alpha = 0.2118922 + 16571, 47019, 16841, 15508, // alpha = 0.2267574 + 16494, 47010, 16744, 15431, // alpha = 0.2421265 + 16423, 46998, 16655, 15362, // alpha = 0.2579995 + 16336, 46982, 16574, 15236, // alpha = 0.2743765 + 16221, 46960, 16501, 15120, // alpha = 0.2912573 + 16117, 46933, 16433, 15012, // alpha = 0.308642 + 16022, 46901, 16358, 14912, // alpha = 0.3265306 + 15937, 46864, 16244, 14818, // alpha = 0.3449232 + 15860, 46820, 16138, 14730, // alpha = 0.3638196 + 15790, 46772, 16041, 14647, // alpha = 0.38322 + 15727, 46719, 15952, 14568, // alpha = 0.4031242 + 15671, 46662, 15869, 14492, // alpha = 0.4235324 + 15620, 46599, 15792, 14420, // alpha = 0.4444445 + 15573, 46533, 15722, 14349, // alpha = 0.4658605 + 15531, 46464, 15658, 14224, // alpha = 0.4877803 + 15492, 46393, 15598, 14086, // alpha = 0.5102041 + 15456, 46319, 15544, 13954, // alpha = 0.5331318 + 15422, 46244, 15494, 13821, // alpha = 0.5565634 + 15390, 46168, 15448, 13691, // alpha = 0.5804989 + 15360, 46091, 15406, 13564, // alpha = 0.6049383 + 15305, 45949, 15368, 13441, // alpha = 0.6298816 + 15253, 45797, 15305, 13322, // alpha = 0.6553288 + 15204, 45647, 15242, 13105, // alpha = 0.68128 + 15160, 45500, 15185, 12886, // alpha = 0.7077349 + 15116, 45354, 15132, 12674, // alpha = 0.7346939 + 15075, 45213, 15083, 12477, // alpha = 0.7621567 + 15037, 45071, 15038, 12286, // alpha = 0.7901235 + 15005, 44812, 14999, 11927, // alpha = 0.8185941 + 14978, 44545, 14965, 11588, // alpha = 0.8475687 + 14953, 44294, 14935, 11274, // alpha = 0.8770471 + 14933, 44048, 14909, 10674, // alpha = 0.9070295 + 14916, 43579, 14887, 9937, // alpha = 0.9375157 + 14903, 43127, 14868, 8428, // alpha = 0.9685059 + 14890, 42379, 14851, 40542, // alpha = 1 + + // Cos (theta) = 0.8888889 + 23597, 47136, 23880, 22606, // alpha = 0.001 + 23597, 47136, 23880, 22606, // alpha = 0.001 + 23595, 47136, 23881, 22604, // alpha = 0.001007811 + 23385, 47136, 23719, 22419, // alpha = 0.002267574 + 22576, 47136, 22859, 21585, // alpha = 0.004031243 + 21850, 47136, 22214, 20868, // alpha = 0.006298816 + 21364, 47135, 21683, 20399, // alpha = 0.009070295 + 20857, 47135, 21227, 19876, // alpha = 0.01234568 + 20528, 47135, 20814, 19537, // alpha = 0.01612497 + 20125, 47135, 20527, 19153, // alpha = 0.02040816 + 19804, 47135, 20168, 18822, // alpha = 0.02519527 + 19565, 47135, 19866, 18576, // alpha = 0.03048627 + 19313, 47135, 19637, 18347, // alpha = 0.03628118 + 19031, 47135, 19459, 18057, // alpha = 0.04258 + 18807, 47135, 19178, 17826, // alpha = 0.04938272 + 18627, 47135, 18950, 17640, // alpha = 0.05668934 + 18479, 47134, 18762, 17488, // alpha = 0.06449988 + 18281, 47134, 18607, 17314, // alpha = 0.07281432 + 18076, 47134, 18476, 17103, // alpha = 0.08163266 + 17903, 47133, 18302, 16924, // alpha = 0.09095491 + 17754, 47133, 18114, 16771, // alpha = 0.1007811 + 17626, 47132, 17951, 16639, // alpha = 0.1111111 + 17515, 47131, 17811, 16524, // alpha = 0.1219451 + 17419, 47131, 17689, 16425, // alpha = 0.1332829 + 17259, 47130, 17580, 16289, // alpha = 0.1451247 + 17109, 47129, 17485, 16134, // alpha = 0.1574704 + 16977, 47128, 17392, 15997, // alpha = 0.17032 + 16858, 47126, 17241, 15874, // alpha = 0.1836735 + 16752, 47124, 17106, 15765, // alpha = 0.1975309 + 16657, 47122, 16984, 15666, // alpha = 0.2118922 + 16572, 47118, 16874, 15577, // alpha = 0.2267574 + 16494, 47113, 16774, 15496, // alpha = 0.2421265 + 16424, 47105, 16684, 15423, // alpha = 0.2579995 + 16338, 47088, 16601, 15351, // alpha = 0.2743765 + 16223, 47064, 16525, 15227, // alpha = 0.2912573 + 16119, 47035, 16456, 15112, // alpha = 0.308642 + 16024, 47001, 16392, 15005, // alpha = 0.3265306 + 15939, 46960, 16283, 14906, // alpha = 0.3449232 + 15863, 46914, 16174, 14813, // alpha = 0.3638196 + 15794, 46861, 16074, 14725, // alpha = 0.38322 + 15731, 46805, 15981, 14641, // alpha = 0.4031242 + 15675, 46745, 15896, 14561, // alpha = 0.4235324 + 15625, 46679, 15818, 14484, // alpha = 0.4444445 + 15578, 46609, 15744, 14409, // alpha = 0.4658605 + 15536, 46537, 15678, 14335, // alpha = 0.4877803 + 15497, 46462, 15617, 14189, // alpha = 0.5102041 + 15460, 46385, 15560, 14047, // alpha = 0.5331318 + 15428, 46306, 15509, 13911, // alpha = 0.5565634 + 15396, 46226, 15461, 13773, // alpha = 0.5804989 + 15366, 46146, 15418, 13639, // alpha = 0.6049383 + 15316, 46054, 15379, 13510, // alpha = 0.6298816 + 15262, 45895, 15324, 13385, // alpha = 0.6553288 + 15213, 45738, 15258, 13218, // alpha = 0.68128 + 15171, 45584, 15200, 12986, // alpha = 0.7077349 + 15126, 45432, 15145, 12763, // alpha = 0.7346939 + 15084, 45284, 15094, 12556, // alpha = 0.7621567 + 15045, 45138, 15047, 12356, // alpha = 0.7901235 + 15014, 44934, 15008, 12044, // alpha = 0.8185941 + 14985, 44655, 14972, 11695, // alpha = 0.8475687 + 14960, 44387, 14941, 11361, // alpha = 0.8770471 + 14939, 44131, 14914, 10811, // alpha = 0.9070295 + 14922, 43734, 14890, 10162, // alpha = 0.9375157 + 14908, 43245, 14871, 8750, // alpha = 0.9685059 + 14897, 42590, 14855, 40101, // alpha = 1 + + // Cos (theta) = 0.8780549 + 23589, 47196, 23905, 22660, // alpha = 0.001 + 23589, 47196, 23905, 22660, // alpha = 0.001 + 23588, 47196, 23905, 22660, // alpha = 0.001007811 + 23406, 47196, 23767, 22540, // alpha = 0.002267574 + 22572, 47196, 22882, 21644, // alpha = 0.004031243 + 21857, 47196, 22253, 20957, // alpha = 0.006298816 + 21360, 47196, 21716, 20494, // alpha = 0.009070295 + 20856, 47196, 21274, 19958, // alpha = 0.01234568 + 20527, 47196, 20847, 19600, // alpha = 0.01612497 + 20126, 47196, 20554, 19254, // alpha = 0.02040816 + 19804, 47196, 20211, 18903, // alpha = 0.02519527 + 19566, 47196, 19902, 18644, // alpha = 0.03048627 + 19313, 47196, 19667, 18446, // alpha = 0.03628118 + 19031, 47196, 19485, 18153, // alpha = 0.04258 + 18808, 47195, 19221, 17910, // alpha = 0.04938272 + 18627, 47195, 18988, 17712, // alpha = 0.05668934 + 18479, 47195, 18796, 17551, // alpha = 0.06449988 + 18283, 47194, 18636, 17418, // alpha = 0.07281432 + 18076, 47194, 18504, 17203, // alpha = 0.08163266 + 17903, 47193, 18349, 17014, // alpha = 0.09095491 + 17754, 47193, 18157, 16851, // alpha = 0.1007811 + 17626, 47192, 17990, 16713, // alpha = 0.1111111 + 17516, 47191, 17846, 16591, // alpha = 0.1219451 + 17419, 47190, 17721, 16486, // alpha = 0.1332829 + 17260, 47189, 17610, 16393, // alpha = 0.1451247 + 17110, 47188, 17511, 16238, // alpha = 0.1574704 + 16977, 47187, 17425, 16093, // alpha = 0.17032 + 16860, 47185, 17286, 15965, // alpha = 0.1836735 + 16753, 47183, 17149, 15847, // alpha = 0.1975309 + 16658, 47180, 17023, 15742, // alpha = 0.2118922 + 16573, 47175, 16910, 15649, // alpha = 0.2267574 + 16495, 47169, 16808, 15562, // alpha = 0.2421265 + 16425, 47161, 16715, 15484, // alpha = 0.2579995 + 16339, 47150, 16630, 15413, // alpha = 0.2743765 + 16226, 47137, 16552, 15335, // alpha = 0.2912573 + 16122, 47121, 16481, 15215, // alpha = 0.308642 + 16028, 47101, 16415, 15103, // alpha = 0.3265306 + 15943, 47057, 16325, 14996, // alpha = 0.3449232 + 15866, 47008, 16212, 14897, // alpha = 0.3638196 + 15797, 46952, 16108, 14805, // alpha = 0.38322 + 15736, 46892, 16013, 14716, // alpha = 0.4031242 + 15680, 46828, 15925, 14632, // alpha = 0.4235324 + 15630, 46759, 15843, 14549, // alpha = 0.4444445 + 15583, 46686, 15768, 14470, // alpha = 0.4658605 + 15541, 46610, 15699, 14392, // alpha = 0.4877803 + 15502, 46532, 15636, 14296, // alpha = 0.5102041 + 15465, 46451, 15577, 14145, // alpha = 0.5331318 + 15432, 46369, 15524, 14000, // alpha = 0.5565634 + 15402, 46286, 15475, 13856, // alpha = 0.5804989 + 15373, 46203, 15431, 13716, // alpha = 0.6049383 + 15328, 46120, 15389, 13579, // alpha = 0.6298816 + 15274, 45994, 15344, 13447, // alpha = 0.6553288 + 15223, 45830, 15275, 13320, // alpha = 0.68128 + 15181, 45668, 15215, 13085, // alpha = 0.7077349 + 15136, 45511, 15157, 12856, // alpha = 0.7346939 + 15093, 45357, 15105, 12635, // alpha = 0.7621567 + 15054, 45207, 15057, 12426, // alpha = 0.7901235 + 15021, 45058, 15016, 12165, // alpha = 0.8185941 + 14993, 44769, 14979, 11801, // alpha = 0.8475687 + 14967, 44488, 14948, 11450, // alpha = 0.8770471 + 14945, 44218, 14919, 10958, // alpha = 0.9070295 + 14928, 43888, 14895, 10322, // alpha = 0.9375157 + 14915, 43388, 14876, 9149, // alpha = 0.9685059 + 14903, 42790, 14859, 39326, // alpha = 1 + + // Cos (theta) = 0.866717 + 23587, 47259, 23937, 22722, // alpha = 0.001 + 23587, 47259, 23937, 22722, // alpha = 0.001 + 23586, 47259, 23937, 22722, // alpha = 0.001007811 + 23420, 47259, 23794, 22607, // alpha = 0.002267574 + 22575, 47259, 22925, 21712, // alpha = 0.004031243 + 21854, 47259, 22305, 21037, // alpha = 0.006298816 + 21358, 47259, 21747, 20551, // alpha = 0.009070295 + 20856, 47259, 21318, 20043, // alpha = 0.01234568 + 20528, 47259, 20881, 19666, // alpha = 0.01612497 + 20124, 47258, 20584, 19356, // alpha = 0.02040816 + 19804, 47258, 20255, 18987, // alpha = 0.02519527 + 19566, 47258, 19941, 18713, // alpha = 0.03048627 + 19313, 47258, 19700, 18504, // alpha = 0.03628118 + 19031, 47258, 19512, 18251, // alpha = 0.04258 + 18808, 47258, 19270, 17995, // alpha = 0.04938272 + 18627, 47257, 19029, 17786, // alpha = 0.05668934 + 18479, 47257, 18832, 17616, // alpha = 0.06449988 + 18281, 47257, 18669, 17475, // alpha = 0.07281432 + 18076, 47256, 18532, 17306, // alpha = 0.08163266 + 17903, 47255, 18400, 17106, // alpha = 0.09095491 + 17754, 47255, 18202, 16936, // alpha = 0.1007811 + 17627, 47254, 18033, 16789, // alpha = 0.1111111 + 17516, 47253, 17884, 16661, // alpha = 0.1219451 + 17419, 47252, 17755, 16549, // alpha = 0.1332829 + 17260, 47251, 17641, 16451, // alpha = 0.1451247 + 17110, 47249, 17541, 16344, // alpha = 0.1574704 + 16978, 47248, 17452, 16191, // alpha = 0.17032 + 16859, 47246, 17336, 16054, // alpha = 0.1836735 + 16753, 47243, 17194, 15931, // alpha = 0.1975309 + 16658, 47239, 17065, 15821, // alpha = 0.2118922 + 16573, 47234, 16949, 15721, // alpha = 0.2267574 + 16496, 47226, 16844, 15631, // alpha = 0.2421265 + 16425, 47217, 16748, 15548, // alpha = 0.2579995 + 16342, 47205, 16661, 15473, // alpha = 0.2743765 + 16228, 47191, 16581, 15404, // alpha = 0.2912573 + 16124, 47174, 16507, 15319, // alpha = 0.308642 + 16031, 47153, 16439, 15200, // alpha = 0.3265306 + 15946, 47130, 16369, 15089, // alpha = 0.3449232 + 15870, 47103, 16254, 14985, // alpha = 0.3638196 + 15802, 47044, 16146, 14886, // alpha = 0.38322 + 15741, 46980, 16046, 14793, // alpha = 0.4031242 + 15685, 46912, 15956, 14703, // alpha = 0.4235324 + 15635, 46840, 15871, 14616, // alpha = 0.4444445 + 15589, 46763, 15793, 14531, // alpha = 0.4658605 + 15547, 46684, 15722, 14450, // alpha = 0.4877803 + 15509, 46602, 15656, 14370, // alpha = 0.5102041 + 15472, 46517, 15595, 14244, // alpha = 0.5331318 + 15438, 46432, 15540, 14090, // alpha = 0.5565634 + 15407, 46346, 15490, 13940, // alpha = 0.5804989 + 15378, 46259, 15443, 13793, // alpha = 0.6049383 + 15340, 46173, 15401, 13648, // alpha = 0.6298816 + 15284, 46087, 15362, 13513, // alpha = 0.6553288 + 15234, 45924, 15293, 13380, // alpha = 0.68128 + 15191, 45757, 15230, 13191, // alpha = 0.7077349 + 15146, 45592, 15172, 12948, // alpha = 0.7346939 + 15103, 45431, 15118, 12716, // alpha = 0.7621567 + 15063, 45274, 15068, 12499, // alpha = 0.7901235 + 15032, 45122, 15027, 12295, // alpha = 0.8185941 + 15001, 44892, 14988, 11914, // alpha = 0.8475687 + 14976, 44593, 14955, 11540, // alpha = 0.8770471 + 14954, 44312, 14925, 11113, // alpha = 0.9070295 + 14936, 44041, 14901, 10446, // alpha = 0.9375157 + 14923, 43534, 14881, 9378, // alpha = 0.9685059 + 14910, 43025, 14863, 36052, // alpha = 1 + + // Cos (theta) = 0.8548753 + 23587, 47323, 23962, 22789, // alpha = 0.001 + 23587, 47323, 23962, 22789, // alpha = 0.001 + 23588, 47323, 23962, 22790, // alpha = 0.001007811 + 23383, 47323, 23823, 22644, // alpha = 0.002267574 + 22577, 47323, 22973, 21782, // alpha = 0.004031243 + 21851, 47323, 22354, 21121, // alpha = 0.006298816 + 21363, 47323, 21782, 20613, // alpha = 0.009070295 + 20858, 47323, 21369, 20133, // alpha = 0.01234568 + 20527, 47323, 20923, 19732, // alpha = 0.01612497 + 20124, 47323, 20615, 19459, // alpha = 0.02040816 + 19804, 47323, 20309, 19073, // alpha = 0.02519527 + 19565, 47323, 19982, 18784, // alpha = 0.03048627 + 19312, 47322, 19735, 18563, // alpha = 0.03628118 + 19031, 47322, 19542, 18354, // alpha = 0.04258 + 18808, 47322, 19321, 18082, // alpha = 0.04938272 + 18627, 47322, 19075, 17863, // alpha = 0.05668934 + 18479, 47321, 18872, 17683, // alpha = 0.06449988 + 18281, 47321, 18704, 17535, // alpha = 0.07281432 + 18077, 47320, 18563, 17411, // alpha = 0.08163266 + 17902, 47319, 18444, 17201, // alpha = 0.09095491 + 17754, 47318, 18253, 17021, // alpha = 0.1007811 + 17627, 47317, 18078, 16866, // alpha = 0.1111111 + 17516, 47316, 17925, 16731, // alpha = 0.1219451 + 17419, 47315, 17792, 16613, // alpha = 0.1332829 + 17259, 47313, 17676, 16509, // alpha = 0.1451247 + 17111, 47312, 17572, 16419, // alpha = 0.1574704 + 16978, 47310, 17481, 16291, // alpha = 0.17032 + 16859, 47307, 17390, 16147, // alpha = 0.1836735 + 16754, 47304, 17243, 16019, // alpha = 0.1975309 + 16659, 47299, 17111, 15901, // alpha = 0.2118922 + 16574, 47293, 16992, 15796, // alpha = 0.2267574 + 16496, 47285, 16882, 15701, // alpha = 0.2421265 + 16427, 47275, 16785, 15614, // alpha = 0.2579995 + 16343, 47261, 16695, 15533, // alpha = 0.2743765 + 16229, 47245, 16611, 15461, // alpha = 0.2912573 + 16127, 47227, 16536, 15394, // alpha = 0.308642 + 16034, 47205, 16466, 15302, // alpha = 0.3265306 + 15950, 47180, 16400, 15184, // alpha = 0.3449232 + 15876, 47151, 16298, 15074, // alpha = 0.3638196 + 15806, 47120, 16186, 14971, // alpha = 0.38322 + 15745, 47068, 16084, 14869, // alpha = 0.4031242 + 15690, 46996, 15990, 14776, // alpha = 0.4235324 + 15640, 46921, 15901, 14684, // alpha = 0.4444445 + 15595, 46841, 15820, 14595, // alpha = 0.4658605 + 15554, 46758, 15746, 14509, // alpha = 0.4877803 + 15515, 46672, 15679, 14424, // alpha = 0.5102041 + 15478, 46584, 15615, 14342, // alpha = 0.5331318 + 15445, 46496, 15558, 14185, // alpha = 0.5565634 + 15413, 46406, 15505, 14026, // alpha = 0.5804989 + 15384, 46316, 15457, 13872, // alpha = 0.6049383 + 15353, 46227, 15413, 13723, // alpha = 0.6298816 + 15297, 46138, 15373, 13577, // alpha = 0.6553288 + 15245, 46019, 15312, 13439, // alpha = 0.68128 + 15201, 45845, 15248, 13297, // alpha = 0.7077349 + 15158, 45675, 15188, 13045, // alpha = 0.7346939 + 15113, 45509, 15131, 12804, // alpha = 0.7621567 + 15075, 45346, 15080, 12577, // alpha = 0.7901235 + 15040, 45188, 15036, 12362, // alpha = 0.8185941 + 15009, 45009, 14996, 12028, // alpha = 0.8475687 + 14984, 44708, 14962, 11644, // alpha = 0.8770471 + 14961, 44413, 14931, 11277, // alpha = 0.9070295 + 14944, 44129, 14906, 10591, // alpha = 0.9375157 + 14929, 43683, 14885, 9607, // alpha = 0.9685059 + 14918, 43160, 14868, 6426, // alpha = 1 + + // Cos (theta) = 0.8425296 + 23593, 47389, 24017, 22866, // alpha = 0.001 + 23593, 47389, 24017, 22866, // alpha = 0.001 + 23582, 47389, 24026, 22852, // alpha = 0.001007811 + 23415, 47389, 23886, 22726, // alpha = 0.002267574 + 22574, 47389, 23003, 21849, // alpha = 0.004031243 + 21849, 47389, 22412, 21207, // alpha = 0.006298816 + 21361, 47389, 21822, 20674, // alpha = 0.009070295 + 20857, 47389, 21426, 20223, // alpha = 0.01234568 + 20526, 47389, 20967, 19800, // alpha = 0.01612497 + 20126, 47389, 20648, 19515, // alpha = 0.02040816 + 19804, 47389, 20365, 19162, // alpha = 0.02519527 + 19566, 47389, 20029, 18858, // alpha = 0.03048627 + 19313, 47389, 19773, 18626, // alpha = 0.03628118 + 19032, 47388, 19574, 18446, // alpha = 0.04258 + 18808, 47388, 19377, 18173, // alpha = 0.04938272 + 18627, 47388, 19124, 17942, // alpha = 0.05668934 + 18479, 47387, 18915, 17753, // alpha = 0.06449988 + 18282, 47387, 18742, 17597, // alpha = 0.07281432 + 18076, 47386, 18598, 17465, // alpha = 0.08163266 + 17904, 47385, 18474, 17301, // alpha = 0.09095491 + 17754, 47384, 18307, 17108, // alpha = 0.1007811 + 17627, 47383, 18127, 16946, // alpha = 0.1111111 + 17516, 47382, 17970, 16804, // alpha = 0.1219451 + 17419, 47380, 17833, 16680, // alpha = 0.1332829 + 17261, 47378, 17713, 16571, // alpha = 0.1451247 + 17111, 47376, 17607, 16475, // alpha = 0.1574704 + 16977, 47374, 17512, 16389, // alpha = 0.17032 + 16859, 47371, 17428, 16243, // alpha = 0.1836735 + 16754, 47367, 17297, 16107, // alpha = 0.1975309 + 16659, 47361, 17161, 15984, // alpha = 0.2118922 + 16574, 47354, 17036, 15873, // alpha = 0.2267574 + 16497, 47345, 16926, 15772, // alpha = 0.2421265 + 16427, 47333, 16824, 15681, // alpha = 0.2579995 + 16345, 47318, 16731, 15597, // alpha = 0.2743765 + 16231, 47301, 16645, 15519, // alpha = 0.2912573 + 16130, 47280, 16566, 15449, // alpha = 0.308642 + 16037, 47257, 16494, 15383, // alpha = 0.3265306 + 15954, 47230, 16426, 15282, // alpha = 0.3449232 + 15879, 47200, 16344, 15166, // alpha = 0.3638196 + 15811, 47167, 16229, 15055, // alpha = 0.38322 + 15750, 47131, 16122, 14951, // alpha = 0.4031242 + 15696, 47081, 16023, 14850, // alpha = 0.4235324 + 15646, 47002, 15932, 14754, // alpha = 0.4444445 + 15601, 46918, 15849, 14660, // alpha = 0.4658605 + 15560, 46832, 15772, 14569, // alpha = 0.4877803 + 15521, 46743, 15701, 14480, // alpha = 0.5102041 + 15485, 46652, 15636, 14393, // alpha = 0.5331318 + 15451, 46560, 15576, 14280, // alpha = 0.5565634 + 15420, 46467, 15522, 14116, // alpha = 0.5804989 + 15389, 46374, 15472, 13951, // alpha = 0.6049383 + 15362, 46281, 15426, 13796, // alpha = 0.6298816 + 15310, 46189, 15385, 13647, // alpha = 0.6553288 + 15257, 46098, 15333, 13501, // alpha = 0.68128 + 15214, 45937, 15266, 13360, // alpha = 0.7077349 + 15167, 45761, 15203, 13143, // alpha = 0.7346939 + 15125, 45587, 15146, 12896, // alpha = 0.7621567 + 15086, 45419, 15093, 12655, // alpha = 0.7901235 + 15050, 45256, 15047, 12433, // alpha = 0.8185941 + 15018, 45096, 15006, 12152, // alpha = 0.8475687 + 14993, 44825, 14970, 11751, // alpha = 0.8770471 + 14970, 44521, 14939, 11372, // alpha = 0.9070295 + 14952, 44222, 14912, 10744, // alpha = 0.9375157 + 14937, 43847, 14890, 9861, // alpha = 0.9685059 + 14925, 43303, 14871, 7574, // alpha = 1 + + // Cos (theta) = 0.82968 + 23594, 47458, 24084, 22938, // alpha = 0.001 + 23594, 47458, 24084, 22938, // alpha = 0.001 + 23598, 47458, 24055, 22943, // alpha = 0.001007811 + 23419, 47458, 23913, 22792, // alpha = 0.002267574 + 22572, 47458, 23056, 21917, // alpha = 0.004031243 + 21851, 47458, 22472, 21301, // alpha = 0.006298816 + 21359, 47458, 21865, 20737, // alpha = 0.009070295 + 20855, 47458, 21490, 20315, // alpha = 0.01234568 + 20528, 47458, 21012, 19874, // alpha = 0.01612497 + 20126, 47458, 20686, 19572, // alpha = 0.02040816 + 19804, 47458, 20425, 19254, // alpha = 0.02519527 + 19566, 47457, 20077, 18934, // alpha = 0.03048627 + 19314, 47457, 19814, 18690, // alpha = 0.03628118 + 19031, 47457, 19611, 18500, // alpha = 0.04258 + 18807, 47456, 19440, 18266, // alpha = 0.04938272 + 18627, 47456, 19177, 18024, // alpha = 0.05668934 + 18479, 47455, 18962, 17824, // alpha = 0.06449988 + 18281, 47455, 18785, 17659, // alpha = 0.07281432 + 18076, 47454, 18634, 17522, // alpha = 0.08163266 + 17903, 47453, 18508, 17401, // alpha = 0.09095491 + 17754, 47452, 18366, 17201, // alpha = 0.1007811 + 17627, 47450, 18180, 17029, // alpha = 0.1111111 + 17516, 47449, 18019, 16879, // alpha = 0.1219451 + 17419, 47447, 17878, 16748, // alpha = 0.1332829 + 17262, 47445, 17753, 16635, // alpha = 0.1451247 + 17111, 47443, 17644, 16533, // alpha = 0.1574704 + 16978, 47440, 17547, 16443, // alpha = 0.17032 + 16860, 47436, 17459, 16342, // alpha = 0.1836735 + 16754, 47432, 17355, 16199, // alpha = 0.1975309 + 16659, 47425, 17214, 16069, // alpha = 0.2118922 + 16574, 47417, 17087, 15953, // alpha = 0.2267574 + 16498, 47406, 16971, 15847, // alpha = 0.2421265 + 16428, 47393, 16867, 15750, // alpha = 0.2579995 + 16348, 47376, 16769, 15662, // alpha = 0.2743765 + 16234, 47357, 16681, 15581, // alpha = 0.2912573 + 16133, 47335, 16600, 15506, // alpha = 0.308642 + 16040, 47309, 16523, 15436, // alpha = 0.3265306 + 15958, 47280, 16454, 15371, // alpha = 0.3449232 + 15883, 47248, 16389, 15259, // alpha = 0.3638196 + 15817, 47213, 16274, 15143, // alpha = 0.38322 + 15756, 47175, 16163, 15032, // alpha = 0.4031242 + 15701, 47135, 16061, 14926, // alpha = 0.4235324 + 15652, 47084, 15965, 14826, // alpha = 0.4444445 + 15606, 46997, 15880, 14726, // alpha = 0.4658605 + 15564, 46907, 15799, 14630, // alpha = 0.4877803 + 15526, 46814, 15726, 14537, // alpha = 0.5102041 + 15491, 46720, 15658, 14446, // alpha = 0.5331318 + 15458, 46625, 15596, 14357, // alpha = 0.5565634 + 15425, 46529, 15539, 14204, // alpha = 0.5804989 + 15395, 46433, 15487, 14036, // alpha = 0.6049383 + 15368, 46337, 15440, 13871, // alpha = 0.6298816 + 15321, 46242, 15397, 13714, // alpha = 0.6553288 + 15271, 46147, 15356, 13564, // alpha = 0.68128 + 15225, 46030, 15286, 13417, // alpha = 0.7077349 + 15179, 45847, 15220, 13247, // alpha = 0.7346939 + 15135, 45668, 15160, 12983, // alpha = 0.7621567 + 15096, 45496, 15107, 12737, // alpha = 0.7901235 + 15060, 45324, 15058, 12507, // alpha = 0.8185941 + 15028, 45159, 15016, 12276, // alpha = 0.8475687 + 15000, 44946, 14979, 11865, // alpha = 0.8770471 + 14979, 44629, 14946, 11467, // alpha = 0.9070295 + 14960, 44326, 14919, 10914, // alpha = 0.9375157 + 14945, 44023, 14896, 10151, // alpha = 0.9685059 + 14934, 43464, 14877, 8329, // alpha = 1 + + // Cos (theta) = 0.8163265 + 23592, 47529, 24125, 23010, // alpha = 0.001 + 23592, 47529, 24125, 23010, // alpha = 0.001 + 23592, 47529, 24125, 23009, // alpha = 0.001007811 + 23409, 47529, 23965, 22852, // alpha = 0.002267574 + 22578, 47529, 23119, 22000, // alpha = 0.004031243 + 21848, 47529, 22534, 21392, // alpha = 0.006298816 + 21360, 47529, 21908, 20803, // alpha = 0.009070295 + 20857, 47529, 21529, 20414, // alpha = 0.01234568 + 20527, 47529, 21064, 19947, // alpha = 0.01612497 + 20126, 47529, 20727, 19630, // alpha = 0.02040816 + 19804, 47529, 20486, 19349, // alpha = 0.02519527 + 19566, 47528, 20133, 19013, // alpha = 0.03048627 + 19314, 47528, 19861, 18756, // alpha = 0.03628118 + 19031, 47528, 19649, 18556, // alpha = 0.04258 + 18807, 47527, 19481, 18363, // alpha = 0.04938272 + 18628, 47527, 19234, 18109, // alpha = 0.05668934 + 18479, 47526, 19012, 17899, // alpha = 0.06449988 + 18281, 47525, 18829, 17725, // alpha = 0.07281432 + 18076, 47524, 18675, 17580, // alpha = 0.08163266 + 17905, 47523, 18544, 17459, // alpha = 0.09095491 + 17754, 47522, 18431, 17295, // alpha = 0.1007811 + 17627, 47520, 18239, 17115, // alpha = 0.1111111 + 17516, 47518, 18073, 16957, // alpha = 0.1219451 + 17419, 47516, 17925, 16820, // alpha = 0.1332829 + 17260, 47514, 17798, 16699, // alpha = 0.1451247 + 17111, 47511, 17685, 16593, // alpha = 0.1574704 + 16979, 47508, 17583, 16499, // alpha = 0.17032 + 16860, 47504, 17493, 16415, // alpha = 0.1836735 + 16755, 47498, 17413, 16294, // alpha = 0.1975309 + 16660, 47491, 17272, 16157, // alpha = 0.2118922 + 16575, 47481, 17141, 16035, // alpha = 0.2267574 + 16498, 47469, 17021, 15923, // alpha = 0.2421265 + 16429, 47453, 16912, 15822, // alpha = 0.2579995 + 16349, 47436, 16811, 15728, // alpha = 0.2743765 + 16237, 47415, 16720, 15643, // alpha = 0.2912573 + 16134, 47390, 16635, 15564, // alpha = 0.308642 + 16044, 47363, 16556, 15491, // alpha = 0.3265306 + 15961, 47332, 16484, 15422, // alpha = 0.3449232 + 15888, 47298, 16416, 15356, // alpha = 0.3638196 + 15823, 47261, 16321, 15235, // alpha = 0.38322 + 15760, 47221, 16207, 15116, // alpha = 0.4031242 + 15707, 47178, 16099, 15006, // alpha = 0.4235324 + 15658, 47135, 16001, 14899, // alpha = 0.4444445 + 15614, 47075, 15912, 14796, // alpha = 0.4658605 + 15572, 46982, 15828, 14693, // alpha = 0.4877803 + 15532, 46885, 15751, 14595, // alpha = 0.5102041 + 15497, 46788, 15681, 14499, // alpha = 0.5331318 + 15464, 46690, 15617, 14407, // alpha = 0.5565634 + 15432, 46591, 15557, 14297, // alpha = 0.5804989 + 15402, 46492, 15504, 14121, // alpha = 0.6049383 + 15374, 46393, 15455, 13951, // alpha = 0.6298816 + 15333, 46295, 15410, 13786, // alpha = 0.6553288 + 15284, 46197, 15370, 13628, // alpha = 0.68128 + 15237, 46102, 15306, 13476, // alpha = 0.7077349 + 15189, 45936, 15239, 13334, // alpha = 0.7346939 + 15146, 45752, 15177, 13083, // alpha = 0.7621567 + 15108, 45573, 15121, 12823, // alpha = 0.7901235 + 15070, 45398, 15070, 12579, // alpha = 0.8185941 + 15037, 45227, 15027, 12353, // alpha = 0.8475687 + 15010, 45061, 14987, 11979, // alpha = 0.8770471 + 14989, 44747, 14955, 11569, // alpha = 0.9070295 + 14970, 44432, 14927, 11095, // alpha = 0.9375157 + 14954, 44128, 14902, 10353, // alpha = 0.9685059 + 14942, 43625, 14882, 8838, // alpha = 1 + + // Cos (theta) = 0.8024691 + 23579, 47603, 24211, 23067, // alpha = 0.001 + 23579, 47603, 24211, 23067, // alpha = 0.001 + 23600, 47603, 24172, 23098, // alpha = 0.001007811 + 23427, 47603, 24009, 22934, // alpha = 0.002267574 + 22577, 47603, 23177, 22075, // alpha = 0.004031243 + 21852, 47603, 22569, 21496, // alpha = 0.006298816 + 21361, 47603, 21959, 20872, // alpha = 0.009070295 + 20859, 47603, 21567, 20499, // alpha = 0.01234568 + 20527, 47603, 21120, 20025, // alpha = 0.01612497 + 20126, 47602, 20771, 19691, // alpha = 0.02040816 + 19803, 47602, 20522, 19447, // alpha = 0.02519527 + 19566, 47602, 20191, 19094, // alpha = 0.03048627 + 19313, 47602, 19911, 18824, // alpha = 0.03628118 + 19031, 47601, 19691, 18615, // alpha = 0.04258 + 18808, 47601, 19518, 18448, // alpha = 0.04938272 + 18627, 47600, 19299, 18195, // alpha = 0.05668934 + 18480, 47599, 19068, 17976, // alpha = 0.06449988 + 18281, 47598, 18879, 17793, // alpha = 0.07281432 + 18077, 47597, 18718, 17641, // alpha = 0.08163266 + 17903, 47596, 18583, 17512, // alpha = 0.09095491 + 17754, 47594, 18467, 17394, // alpha = 0.1007811 + 17626, 47593, 18304, 17203, // alpha = 0.1111111 + 17516, 47591, 18130, 17038, // alpha = 0.1219451 + 17419, 47588, 17978, 16894, // alpha = 0.1332829 + 17261, 47585, 17845, 16767, // alpha = 0.1451247 + 17111, 47582, 17727, 16655, // alpha = 0.1574704 + 16978, 47578, 17624, 16556, // alpha = 0.17032 + 16861, 47573, 17531, 16468, // alpha = 0.1836735 + 16755, 47566, 17447, 16388, // alpha = 0.1975309 + 16660, 47558, 17335, 16249, // alpha = 0.2118922 + 16576, 47547, 17198, 16120, // alpha = 0.2267574 + 16498, 47533, 17075, 16002, // alpha = 0.2421265 + 16429, 47516, 16961, 15895, // alpha = 0.2579995 + 16350, 47496, 16856, 15797, // alpha = 0.2743765 + 16239, 47473, 16761, 15707, // alpha = 0.2912573 + 16138, 47446, 16672, 15624, // alpha = 0.308642 + 16046, 47417, 16591, 15546, // alpha = 0.3265306 + 15966, 47384, 16514, 15475, // alpha = 0.3449232 + 15893, 47347, 16445, 15407, // alpha = 0.3638196 + 15826, 47308, 16375, 15324, // alpha = 0.38322 + 15767, 47266, 16253, 15203, // alpha = 0.4031242 + 15711, 47222, 16141, 15084, // alpha = 0.4235324 + 15663, 47176, 16039, 14971, // alpha = 0.4444445 + 15619, 47129, 15945, 14863, // alpha = 0.4658605 + 15578, 47058, 15858, 14758, // alpha = 0.4877803 + 15540, 46958, 15779, 14655, // alpha = 0.5102041 + 15503, 46857, 15705, 14555, // alpha = 0.5331318 + 15470, 46755, 15639, 14457, // alpha = 0.5565634 + 15438, 46653, 15577, 14363, // alpha = 0.5804989 + 15410, 46551, 15522, 14209, // alpha = 0.6049383 + 15381, 46449, 15471, 14029, // alpha = 0.6298816 + 15346, 46349, 15425, 13859, // alpha = 0.6553288 + 15295, 46248, 15382, 13696, // alpha = 0.68128 + 15252, 46150, 15330, 13539, // alpha = 0.7077349 + 15202, 46027, 15258, 13387, // alpha = 0.7346939 + 15158, 45838, 15194, 13179, // alpha = 0.7621567 + 15119, 45653, 15136, 12911, // alpha = 0.7901235 + 15081, 45472, 15084, 12663, // alpha = 0.8185941 + 15048, 45297, 15038, 12422, // alpha = 0.8475687 + 15021, 45126, 14999, 12105, // alpha = 0.8770471 + 14997, 44864, 14964, 11681, // alpha = 0.9070295 + 14979, 44545, 14935, 11278, // alpha = 0.9375157 + 14963, 44231, 14909, 10518, // alpha = 0.9685059 + 14950, 43818, 14887, 9320, // alpha = 1 + + // Cos (theta) = 0.7881078 + 23592, 47680, 24249, 23166, // alpha = 0.001 + 23592, 47680, 24249, 23166, // alpha = 0.001 + 23586, 47680, 24245, 23157, // alpha = 0.001007811 + 23393, 47680, 24047, 22979, // alpha = 0.002267574 + 22576, 47680, 23225, 22154, // alpha = 0.004031243 + 21848, 47680, 22607, 21549, // alpha = 0.006298816 + 21360, 47679, 22014, 20943, // alpha = 0.009070295 + 20857, 47679, 21607, 20550, // alpha = 0.01234568 + 20527, 47679, 21183, 20105, // alpha = 0.01612497 + 20126, 47679, 20820, 19755, // alpha = 0.02040816 + 19804, 47679, 20560, 19504, // alpha = 0.02519527 + 19565, 47679, 20256, 19178, // alpha = 0.03048627 + 19313, 47678, 19964, 18896, // alpha = 0.03628118 + 19031, 47678, 19738, 18675, // alpha = 0.04258 + 18807, 47677, 19557, 18500, // alpha = 0.04938272 + 18627, 47676, 19368, 18287, // alpha = 0.05668934 + 18479, 47676, 19129, 18056, // alpha = 0.06449988 + 18282, 47674, 18931, 17865, // alpha = 0.07281432 + 18077, 47673, 18767, 17704, // alpha = 0.08163266 + 17902, 47672, 18626, 17567, // alpha = 0.09095491 + 17754, 47670, 18506, 17452, // alpha = 0.1007811 + 17626, 47668, 18373, 17295, // alpha = 0.1111111 + 17516, 47665, 18194, 17122, // alpha = 0.1219451 + 17419, 47663, 18037, 16971, // alpha = 0.1332829 + 17261, 47659, 17898, 16838, // alpha = 0.1451247 + 17111, 47656, 17776, 16719, // alpha = 0.1574704 + 16979, 47651, 17668, 16616, // alpha = 0.17032 + 16861, 47645, 17571, 16523, // alpha = 0.1836735 + 16755, 47637, 17484, 16439, // alpha = 0.1975309 + 16660, 47627, 17403, 16343, // alpha = 0.2118922 + 16575, 47614, 17261, 16207, // alpha = 0.2267574 + 16499, 47598, 17132, 16084, // alpha = 0.2421265 + 16430, 47579, 17014, 15971, // alpha = 0.2579995 + 16351, 47557, 16906, 15867, // alpha = 0.2743765 + 16241, 47532, 16805, 15774, // alpha = 0.2912573 + 16141, 47503, 16714, 15687, // alpha = 0.308642 + 16051, 47471, 16627, 15605, // alpha = 0.3265306 + 15970, 47436, 16549, 15529, // alpha = 0.3449232 + 15897, 47398, 16474, 15458, // alpha = 0.3638196 + 15830, 47356, 16407, 15389, // alpha = 0.38322 + 15773, 47312, 16303, 15291, // alpha = 0.4031242 + 15719, 47266, 16185, 15167, // alpha = 0.4235324 + 15669, 47218, 16079, 15047, // alpha = 0.4444445 + 15626, 47169, 15981, 14935, // alpha = 0.4658605 + 15583, 47119, 15890, 14823, // alpha = 0.4877803 + 15544, 47031, 15807, 14715, // alpha = 0.5102041 + 15510, 46926, 15731, 14612, // alpha = 0.5331318 + 15477, 46822, 15662, 14510, // alpha = 0.5565634 + 15445, 46716, 15598, 14411, // alpha = 0.5804989 + 15415, 46611, 15540, 14296, // alpha = 0.6049383 + 15387, 46506, 15487, 14113, // alpha = 0.6298816 + 15360, 46403, 15439, 13935, // alpha = 0.6553288 + 15307, 46301, 15395, 13764, // alpha = 0.68128 + 15263, 46199, 15353, 13601, // alpha = 0.7077349 + 15215, 46100, 15278, 13445, // alpha = 0.7346939 + 15169, 45925, 15213, 13284, // alpha = 0.7621567 + 15130, 45735, 15152, 13003, // alpha = 0.7901235 + 15093, 45551, 15099, 12746, // alpha = 0.8185941 + 15060, 45368, 15052, 12494, // alpha = 0.8475687 + 15031, 45193, 15009, 12236, // alpha = 0.8770471 + 15006, 44990, 14973, 11798, // alpha = 0.9070295 + 14988, 44658, 14944, 11382, // alpha = 0.9375157 + 14973, 44339, 14917, 10697, // alpha = 0.9685059 + 14959, 44024, 14893, 9650, // alpha = 1 + + // Cos (theta) = 0.7732427 + 23591, 47759, 24303, 23248, // alpha = 0.001 + 23591, 47759, 24303, 23248, // alpha = 0.001 + 23580, 47759, 24306, 23229, // alpha = 0.001007811 + 23411, 47759, 24116, 23068, // alpha = 0.002267574 + 22577, 47759, 23298, 22240, // alpha = 0.004031243 + 21854, 47759, 22652, 21606, // alpha = 0.006298816 + 21365, 47759, 22076, 21021, // alpha = 0.009070295 + 20857, 47759, 21650, 20605, // alpha = 0.01234568 + 20528, 47759, 21248, 20190, // alpha = 0.01612497 + 20126, 47759, 20872, 19821, // alpha = 0.02040816 + 19804, 47759, 20603, 19557, // alpha = 0.02519527 + 19566, 47758, 20325, 19268, // alpha = 0.03048627 + 19313, 47758, 20025, 18970, // alpha = 0.03628118 + 19031, 47757, 19788, 18738, // alpha = 0.04258 + 18808, 47757, 19601, 18555, // alpha = 0.04938272 + 18628, 47756, 19443, 18383, // alpha = 0.05668934 + 18479, 47755, 19196, 18139, // alpha = 0.06449988 + 18282, 47754, 18990, 17939, // alpha = 0.07281432 + 18075, 47752, 18819, 17769, // alpha = 0.08163266 + 17903, 47750, 18673, 17627, // alpha = 0.09095491 + 17755, 47748, 18548, 17505, // alpha = 0.1007811 + 17626, 47746, 18440, 17391, // alpha = 0.1111111 + 17515, 47743, 18262, 17209, // alpha = 0.1219451 + 17419, 47740, 18099, 17050, // alpha = 0.1332829 + 17261, 47736, 17955, 16911, // alpha = 0.1451247 + 17112, 47732, 17828, 16787, // alpha = 0.1574704 + 16979, 47726, 17715, 16678, // alpha = 0.17032 + 16861, 47719, 17614, 16580, // alpha = 0.1836735 + 16755, 47710, 17525, 16491, // alpha = 0.1975309 + 16661, 47698, 17443, 16413, // alpha = 0.2118922 + 16576, 47683, 17330, 16298, // alpha = 0.2267574 + 16500, 47665, 17194, 16170, // alpha = 0.2421265 + 16431, 47644, 17072, 16050, // alpha = 0.2579995 + 16354, 47620, 16958, 15942, // alpha = 0.2743765 + 16243, 47592, 16854, 15843, // alpha = 0.2912573 + 16143, 47561, 16757, 15750, // alpha = 0.308642 + 16054, 47527, 16668, 15665, // alpha = 0.3265306 + 15974, 47489, 16584, 15586, // alpha = 0.3449232 + 15902, 47448, 16507, 15510, // alpha = 0.3638196 + 15838, 47405, 16436, 15440, // alpha = 0.38322 + 15780, 47359, 16356, 15372, // alpha = 0.4031242 + 15726, 47310, 16234, 15252, // alpha = 0.4235324 + 15676, 47260, 16122, 15127, // alpha = 0.4444445 + 15632, 47209, 16018, 15007, // alpha = 0.4658605 + 15590, 47157, 15924, 14891, // alpha = 0.4877803 + 15552, 47104, 15837, 14777, // alpha = 0.5102041 + 15515, 46996, 15758, 14668, // alpha = 0.5331318 + 15483, 46889, 15687, 14564, // alpha = 0.5565634 + 15453, 46780, 15620, 14461, // alpha = 0.5804989 + 15421, 46672, 15560, 14361, // alpha = 0.6049383 + 15393, 46564, 15505, 14195, // alpha = 0.6298816 + 15367, 46458, 15455, 14012, // alpha = 0.6553288 + 15321, 46353, 15409, 13834, // alpha = 0.68128 + 15276, 46249, 15369, 13664, // alpha = 0.7077349 + 15230, 46147, 15302, 13504, // alpha = 0.7346939 + 15183, 46016, 15232, 13352, // alpha = 0.7621567 + 15142, 45821, 15170, 13102, // alpha = 0.7901235 + 15106, 45629, 15114, 12831, // alpha = 0.8185941 + 15072, 45443, 15065, 12572, // alpha = 0.8475687 + 15041, 45263, 15021, 12333, // alpha = 0.8770471 + 15017, 45089, 14984, 11923, // alpha = 0.9070295 + 14998, 44779, 14952, 11492, // alpha = 0.9375157 + 14982, 44451, 14924, 10905, // alpha = 0.9685059 + 14969, 44129, 14901, 9968, // alpha = 1 + + // Cos (theta) = 0.7578735 + 23585, 47843, 24373, 23324, // alpha = 0.001 + 23585, 47843, 24373, 23324, // alpha = 0.001 + 23584, 47843, 24374, 23321, // alpha = 0.001007811 + 23414, 47843, 24159, 23148, // alpha = 0.002267574 + 22575, 47843, 23373, 22324, // alpha = 0.004031243 + 21853, 47843, 22697, 21662, // alpha = 0.006298816 + 21363, 47843, 22137, 21098, // alpha = 0.009070295 + 20855, 47843, 21699, 20661, // alpha = 0.01234568 + 20528, 47843, 21323, 20278, // alpha = 0.01612497 + 20126, 47842, 20931, 19890, // alpha = 0.02040816 + 19804, 47842, 20649, 19613, // alpha = 0.02519527 + 19565, 47842, 20405, 19358, // alpha = 0.03048627 + 19312, 47841, 20089, 19047, // alpha = 0.03628118 + 19032, 47841, 19844, 18805, // alpha = 0.04258 + 18807, 47840, 19649, 18612, // alpha = 0.04938272 + 18627, 47839, 19491, 18456, // alpha = 0.05668934 + 18480, 47838, 19268, 18227, // alpha = 0.06449988 + 18282, 47836, 19054, 18016, // alpha = 0.07281432 + 18075, 47834, 18876, 17838, // alpha = 0.08163266 + 17902, 47832, 18723, 17688, // alpha = 0.09095491 + 17754, 47830, 18594, 17560, // alpha = 0.1007811 + 17626, 47827, 18482, 17450, // alpha = 0.1111111 + 17516, 47824, 18337, 17301, // alpha = 0.1219451 + 17420, 47820, 18167, 17135, // alpha = 0.1332829 + 17261, 47816, 18018, 16987, // alpha = 0.1451247 + 17112, 47811, 17885, 16857, // alpha = 0.1574704 + 16979, 47804, 17768, 16742, // alpha = 0.17032 + 16861, 47795, 17662, 16639, // alpha = 0.1836735 + 16755, 47785, 17569, 16547, // alpha = 0.1975309 + 16661, 47771, 17484, 16463, // alpha = 0.2118922 + 16576, 47754, 17403, 16389, // alpha = 0.2267574 + 16500, 47734, 17263, 16255, // alpha = 0.2421265 + 16431, 47711, 17134, 16132, // alpha = 0.2579995 + 16355, 47684, 17015, 16018, // alpha = 0.2743765 + 16245, 47654, 16906, 15913, // alpha = 0.2912573 + 16146, 47620, 16803, 15817, // alpha = 0.308642 + 16059, 47583, 16710, 15728, // alpha = 0.3265306 + 15980, 47543, 16622, 15644, // alpha = 0.3449232 + 15909, 47500, 16541, 15565, // alpha = 0.3638196 + 15844, 47454, 16467, 15490, // alpha = 0.38322 + 15787, 47405, 16398, 15419, // alpha = 0.4031242 + 15733, 47355, 16283, 15341, // alpha = 0.4235324 + 15684, 47302, 16166, 15209, // alpha = 0.4444445 + 15639, 47249, 16059, 15083, // alpha = 0.4658605 + 15599, 47196, 15961, 14962, // alpha = 0.4877803 + 15559, 47141, 15870, 14841, // alpha = 0.5102041 + 15522, 47066, 15787, 14727, // alpha = 0.5331318 + 15489, 46956, 15713, 14617, // alpha = 0.5565634 + 15459, 46844, 15644, 14511, // alpha = 0.5804989 + 15428, 46733, 15581, 14408, // alpha = 0.6049383 + 15399, 46623, 15524, 14280, // alpha = 0.6298816 + 15375, 46514, 15472, 14092, // alpha = 0.6553288 + 15333, 46406, 15424, 13904, // alpha = 0.68128 + 15288, 46300, 15382, 13731, // alpha = 0.7077349 + 15241, 46196, 15325, 13564, // alpha = 0.7346939 + 15196, 46094, 15253, 13408, // alpha = 0.7621567 + 15156, 45907, 15190, 13203, // alpha = 0.7901235 + 15115, 45712, 15129, 12921, // alpha = 0.8185941 + 15084, 45521, 15079, 12654, // alpha = 0.8475687 + 15053, 45338, 15035, 12409, // alpha = 0.8770471 + 15028, 45156, 14995, 12053, // alpha = 0.9070295 + 15008, 44907, 14961, 11609, // alpha = 0.9375157 + 14994, 44567, 14934, 11099, // alpha = 0.9685059 + 14979, 44241, 14908, 10309, // alpha = 1 + + // Cos (theta) = 0.7420005 + 23586, 47930, 24479, 23415, // alpha = 0.001 + 23586, 47930, 24479, 23415, // alpha = 0.001 + 23583, 47930, 24481, 23410, // alpha = 0.001007811 + 23432, 47930, 24258, 23246, // alpha = 0.002267574 + 22580, 47930, 23467, 22424, // alpha = 0.004031243 + 21854, 47930, 22749, 21721, // alpha = 0.006298816 + 21358, 47930, 22215, 21174, // alpha = 0.009070295 + 20857, 47930, 21751, 20721, // alpha = 0.01234568 + 20529, 47930, 21399, 20370, // alpha = 0.01612497 + 20126, 47930, 20993, 19962, // alpha = 0.02040816 + 19805, 47929, 20701, 19672, // alpha = 0.02519527 + 19565, 47929, 20485, 19456, // alpha = 0.03048627 + 19314, 47928, 20161, 19129, // alpha = 0.03628118 + 19031, 47928, 19905, 18873, // alpha = 0.04258 + 18808, 47927, 19701, 18672, // alpha = 0.04938272 + 18627, 47926, 19537, 18508, // alpha = 0.05668934 + 18479, 47924, 19348, 18317, // alpha = 0.06449988 + 18280, 47922, 19126, 18095, // alpha = 0.07281432 + 18076, 47920, 18938, 17910, // alpha = 0.08163266 + 17903, 47918, 18779, 17753, // alpha = 0.09095491 + 17754, 47915, 18644, 17618, // alpha = 0.1007811 + 17627, 47912, 18527, 17503, // alpha = 0.1111111 + 17515, 47908, 18420, 17396, // alpha = 0.1219451 + 17419, 47904, 18241, 17220, // alpha = 0.1332829 + 17260, 47899, 18086, 17066, // alpha = 0.1451247 + 17111, 47893, 17948, 16930, // alpha = 0.1574704 + 16979, 47885, 17825, 16809, // alpha = 0.17032 + 16860, 47875, 17715, 16701, // alpha = 0.1836735 + 16755, 47862, 17616, 16603, // alpha = 0.1975309 + 16661, 47846, 17527, 16516, // alpha = 0.2118922 + 16576, 47827, 17446, 16437, // alpha = 0.2267574 + 16501, 47805, 17336, 16348, // alpha = 0.2421265 + 16432, 47779, 17201, 16216, // alpha = 0.2579995 + 16358, 47750, 17076, 16097, // alpha = 0.2743765 + 16247, 47716, 16959, 15986, // alpha = 0.2912573 + 16150, 47680, 16854, 15886, // alpha = 0.308642 + 16063, 47640, 16755, 15791, // alpha = 0.3265306 + 15982, 47597, 16663, 15702, // alpha = 0.3449232 + 15913, 47551, 16578, 15620, // alpha = 0.3638196 + 15849, 47503, 16500, 15541, // alpha = 0.38322 + 15790, 47453, 16427, 15466, // alpha = 0.4031242 + 15738, 47400, 16337, 15394, // alpha = 0.4235324 + 15688, 47345, 16213, 15290, // alpha = 0.4444445 + 15642, 47290, 16101, 15155, // alpha = 0.4658605 + 15604, 47235, 15999, 15031, // alpha = 0.4877803 + 15568, 47178, 15905, 14909, // alpha = 0.5102041 + 15530, 47121, 15819, 14787, // alpha = 0.5331318 + 15494, 47023, 15739, 14672, // alpha = 0.5565634 + 15466, 46909, 15669, 14562, // alpha = 0.5804989 + 15436, 46795, 15604, 14456, // alpha = 0.6049383 + 15406, 46682, 15544, 14352, // alpha = 0.6298816 + 15381, 46571, 15490, 14170, // alpha = 0.6553288 + 15349, 46460, 15439, 13981, // alpha = 0.68128 + 15304, 46352, 15396, 13801, // alpha = 0.7077349 + 15253, 46245, 15350, 13627, // alpha = 0.7346939 + 15211, 46141, 15277, 13465, // alpha = 0.7621567 + 15170, 45998, 15211, 13308, // alpha = 0.7901235 + 15129, 45797, 15148, 13019, // alpha = 0.8185941 + 15098, 45605, 15097, 12747, // alpha = 0.8475687 + 15067, 45412, 15049, 12489, // alpha = 0.8770471 + 15040, 45228, 15008, 12201, // alpha = 0.9070295 + 15018, 45040, 14972, 11735, // alpha = 0.9375157 + 15004, 44696, 14943, 11302, // alpha = 0.9685059 + 14990, 44357, 14917, 10516, // alpha = 1 + + // Cos (theta) = 0.7256235 + 23594, 48022, 24548, 23527, // alpha = 0.001 + 23594, 48022, 24548, 23527, // alpha = 0.001 + 23598, 48022, 24547, 23533, // alpha = 0.001007811 + 23412, 48022, 24320, 23313, // alpha = 0.002267574 + 22573, 48022, 23536, 22508, // alpha = 0.004031243 + 21852, 48022, 22803, 21781, // alpha = 0.006298816 + 21363, 48022, 22287, 21265, // alpha = 0.009070295 + 20855, 48022, 21809, 20783, // alpha = 0.01234568 + 20527, 48022, 21493, 20463, // alpha = 0.01612497 + 20126, 48021, 21064, 20038, // alpha = 0.02040816 + 19804, 48021, 20758, 19732, // alpha = 0.02519527 + 19565, 48020, 20532, 19506, // alpha = 0.03048627 + 19313, 48020, 20238, 19214, // alpha = 0.03628118 + 19031, 48019, 19971, 18946, // alpha = 0.04258 + 18808, 48018, 19758, 18735, // alpha = 0.04938272 + 18627, 48017, 19587, 18563, // alpha = 0.05668934 + 18479, 48015, 19437, 18413, // alpha = 0.06449988 + 18282, 48013, 19203, 18180, // alpha = 0.07281432 + 18076, 48011, 19007, 17985, // alpha = 0.08163266 + 17902, 48008, 18842, 17820, // alpha = 0.09095491 + 17754, 48005, 18699, 17679, // alpha = 0.1007811 + 17627, 48001, 18578, 17558, // alpha = 0.1111111 + 17515, 47997, 18471, 17452, // alpha = 0.1219451 + 17419, 47992, 18323, 17312, // alpha = 0.1332829 + 17260, 47986, 18161, 17150, // alpha = 0.1451247 + 17111, 47978, 18016, 17006, // alpha = 0.1574704 + 16978, 47969, 17887, 16879, // alpha = 0.17032 + 16860, 47957, 17773, 16765, // alpha = 0.1836735 + 16754, 47942, 17669, 16663, // alpha = 0.1975309 + 16660, 47924, 17575, 16571, // alpha = 0.2118922 + 16575, 47903, 17490, 16488, // alpha = 0.2267574 + 16501, 47877, 17412, 16413, // alpha = 0.2421265 + 16432, 47849, 17274, 16304, // alpha = 0.2579995 + 16359, 47816, 17142, 16178, // alpha = 0.2743765 + 16251, 47780, 17020, 16064, // alpha = 0.2912573 + 16155, 47741, 16907, 15958, // alpha = 0.308642 + 16065, 47698, 16803, 15857, // alpha = 0.3265306 + 15990, 47653, 16707, 15766, // alpha = 0.3449232 + 15917, 47604, 16618, 15676, // alpha = 0.3638196 + 15854, 47553, 16535, 15594, // alpha = 0.38322 + 15795, 47500, 16459, 15514, // alpha = 0.4031242 + 15743, 47445, 16389, 15439, // alpha = 0.4235324 + 15694, 47389, 16265, 15366, // alpha = 0.4444445 + 15652, 47331, 16146, 15236, // alpha = 0.4658605 + 15609, 47273, 16039, 15100, // alpha = 0.4877803 + 15571, 47216, 15940, 14973, // alpha = 0.5102041 + 15538, 47157, 15852, 14851, // alpha = 0.5331318 + 15503, 47091, 15769, 14730, // alpha = 0.5565634 + 15474, 46975, 15695, 14617, // alpha = 0.5804989 + 15441, 46858, 15626, 14504, // alpha = 0.6049383 + 15414, 46742, 15565, 14398, // alpha = 0.6298816 + 15387, 46628, 15508, 14252, // alpha = 0.6553288 + 15361, 46516, 15456, 14059, // alpha = 0.68128 + 15315, 46405, 15411, 13872, // alpha = 0.7077349 + 15268, 46296, 15369, 13694, // alpha = 0.7346939 + 15222, 46189, 15299, 13525, // alpha = 0.7621567 + 15185, 46084, 15233, 13366, // alpha = 0.7901235 + 15141, 45886, 15166, 13118, // alpha = 0.8185941 + 15111, 45686, 15114, 12838, // alpha = 0.8475687 + 15079, 45492, 15064, 12570, // alpha = 0.8770471 + 15053, 45302, 15021, 12316, // alpha = 0.9070295 + 15030, 45120, 14984, 11880, // alpha = 0.9375157 + 15015, 44828, 14954, 11425, // alpha = 0.9685059 + 15002, 44482, 14926, 10739, // alpha = 1 + + // Cos (theta) = 0.7087427 + 23590, 48119, 24597, 23586, // alpha = 0.001 + 23590, 48119, 24597, 23586, // alpha = 0.001 + 23586, 48119, 24605, 23581, // alpha = 0.001007811 + 23415, 48119, 24427, 23406, // alpha = 0.002267574 + 22572, 48119, 23601, 22567, // alpha = 0.004031243 + 21854, 48118, 22868, 21848, // alpha = 0.006298816 + 21369, 48118, 22375, 21360, // alpha = 0.009070295 + 20855, 48118, 21873, 20848, // alpha = 0.01234568 + 20528, 48118, 21547, 20523, // alpha = 0.01612497 + 20127, 48118, 21141, 20119, // alpha = 0.02040816 + 19804, 48117, 20821, 19797, // alpha = 0.02519527 + 19566, 48117, 20584, 19560, // alpha = 0.03048627 + 19313, 48116, 20327, 19303, // alpha = 0.03628118 + 19032, 48115, 20045, 19023, // alpha = 0.04258 + 18808, 48114, 19822, 18800, // alpha = 0.04938272 + 18627, 48112, 19642, 18620, // alpha = 0.05668934 + 18479, 48110, 19495, 18473, // alpha = 0.06449988 + 18282, 48108, 19289, 18270, // alpha = 0.07281432 + 18076, 48105, 19083, 18064, // alpha = 0.08163266 + 17903, 48102, 18910, 17891, // alpha = 0.09095491 + 17754, 48098, 18760, 17742, // alpha = 0.1007811 + 17626, 48094, 18632, 17615, // alpha = 0.1111111 + 17516, 48089, 18521, 17504, // alpha = 0.1219451 + 17418, 48084, 18415, 17406, // alpha = 0.1332829 + 17259, 48076, 18243, 17236, // alpha = 0.1451247 + 17111, 48068, 18091, 17086, // alpha = 0.1574704 + 16977, 48056, 17956, 16952, // alpha = 0.17032 + 16859, 48043, 17835, 16832, // alpha = 0.1836735 + 16754, 48025, 17726, 16725, // alpha = 0.1975309 + 16660, 48004, 17628, 16629, // alpha = 0.2118922 + 16576, 47980, 17538, 16541, // alpha = 0.2267574 + 16500, 47952, 17456, 16462, // alpha = 0.2421265 + 16433, 47920, 17352, 16390, // alpha = 0.2579995 + 16362, 47885, 17213, 16265, // alpha = 0.2743765 + 16252, 47845, 17084, 16142, // alpha = 0.2912573 + 16155, 47802, 16967, 16027, // alpha = 0.308642 + 16071, 47757, 16856, 15926, // alpha = 0.3265306 + 15994, 47708, 16754, 15829, // alpha = 0.3449232 + 15924, 47657, 16660, 15737, // alpha = 0.3638196 + 15861, 47604, 16574, 15649, // alpha = 0.38322 + 15804, 47549, 16493, 15567, // alpha = 0.4031242 + 15752, 47491, 16419, 15487, // alpha = 0.4235324 + 15703, 47432, 16319, 15411, // alpha = 0.4444445 + 15657, 47373, 16196, 15316, // alpha = 0.4658605 + 15616, 47313, 16082, 15174, // alpha = 0.4877803 + 15580, 47253, 15980, 15042, // alpha = 0.5102041 + 15542, 47193, 15885, 14911, // alpha = 0.5331318 + 15511, 47132, 15801, 14790, // alpha = 0.5565634 + 15478, 47041, 15723, 14669, // alpha = 0.5804989 + 15450, 46921, 15652, 14554, // alpha = 0.6049383 + 15422, 46803, 15587, 14445, // alpha = 0.6298816 + 15395, 46686, 15528, 14337, // alpha = 0.6553288 + 15368, 46571, 15475, 14136, // alpha = 0.68128 + 15333, 46458, 15427, 13946, // alpha = 0.7077349 + 15284, 46348, 15384, 13760, // alpha = 0.7346939 + 15235, 46238, 15326, 13586, // alpha = 0.7621567 + 15199, 46132, 15256, 13421, // alpha = 0.7901235 + 15156, 45975, 15187, 13223, // alpha = 0.8185941 + 15123, 45773, 15132, 12933, // alpha = 0.8475687 + 15093, 45573, 15080, 12657, // alpha = 0.8770471 + 15065, 45381, 15035, 12396, // alpha = 0.9070295 + 15043, 45194, 14997, 12024, // alpha = 0.9375157 + 15026, 44968, 14964, 11559, // alpha = 0.9685059 + 15013, 44614, 14936, 10969, // alpha = 1 + + // Cos (theta) = 0.691358 + 23584, 48174, 24667, 23631, // alpha = 0.001 + 23584, 48174, 24667, 23631, // alpha = 0.001 + 23595, 48174, 24672, 23643, // alpha = 0.001007811 + 23389, 48174, 24500, 23474, // alpha = 0.002267574 + 22576, 48174, 23659, 22624, // alpha = 0.004031243 + 21853, 48174, 22936, 21915, // alpha = 0.006298816 + 21361, 48174, 22476, 21446, // alpha = 0.009070295 + 20855, 48174, 21944, 20918, // alpha = 0.01234568 + 20528, 48174, 21600, 20576, // alpha = 0.01612497 + 20124, 48174, 21227, 20200, // alpha = 0.02040816 + 19804, 48173, 20889, 19866, // alpha = 0.02519527 + 19565, 48173, 20641, 19616, // alpha = 0.03048627 + 19312, 48173, 20422, 19397, // alpha = 0.03628118 + 19032, 48172, 20127, 19104, // alpha = 0.04258 + 18807, 48171, 19893, 18869, // alpha = 0.04938272 + 18627, 48170, 19703, 18681, // alpha = 0.05668934 + 18479, 48169, 19548, 18525, // alpha = 0.06449988 + 18281, 48168, 19383, 18363, // alpha = 0.07281432 + 18076, 48166, 19167, 18148, // alpha = 0.08163266 + 17902, 48165, 18984, 17965, // alpha = 0.09095491 + 17753, 48163, 18828, 17809, // alpha = 0.1007811 + 17626, 48160, 18693, 17676, // alpha = 0.1111111 + 17515, 48157, 18576, 17559, // alpha = 0.1219451 + 17418, 48154, 18474, 17457, // alpha = 0.1332829 + 17259, 48150, 18333, 17328, // alpha = 0.1451247 + 17109, 48144, 18174, 17169, // alpha = 0.1574704 + 16977, 48138, 18031, 17029, // alpha = 0.17032 + 16860, 48130, 17903, 16904, // alpha = 0.1836735 + 16754, 48111, 17789, 16790, // alpha = 0.1975309 + 16660, 48088, 17685, 16689, // alpha = 0.2118922 + 16575, 48060, 17590, 16596, // alpha = 0.2267574 + 16500, 48029, 17503, 16513, // alpha = 0.2421265 + 16433, 47993, 17423, 16437, // alpha = 0.2579995 + 16363, 47954, 17290, 16353, // alpha = 0.2743765 + 16255, 47912, 17154, 16224, // alpha = 0.2912573 + 16160, 47866, 17028, 16107, // alpha = 0.308642 + 16075, 47817, 16912, 15997, // alpha = 0.3265306 + 16000, 47765, 16804, 15895, // alpha = 0.3449232 + 15930, 47711, 16706, 15798, // alpha = 0.3638196 + 15868, 47655, 16613, 15707, // alpha = 0.38322 + 15811, 47597, 16529, 15620, // alpha = 0.4031242 + 15759, 47537, 16452, 15536, // alpha = 0.4235324 + 15710, 47476, 16376, 15456, // alpha = 0.4444445 + 15667, 47415, 16247, 15380, // alpha = 0.4658605 + 15625, 47353, 16129, 15251, // alpha = 0.4877803 + 15585, 47291, 16021, 15111, // alpha = 0.5102041 + 15552, 47229, 15923, 14979, // alpha = 0.5331318 + 15516, 47167, 15832, 14847, // alpha = 0.5565634 + 15488, 47106, 15752, 14726, // alpha = 0.5804989 + 15457, 46986, 15679, 14606, // alpha = 0.6049383 + 15428, 46865, 15611, 14490, // alpha = 0.6298816 + 15404, 46746, 15550, 14383, // alpha = 0.6553288 + 15375, 46628, 15494, 14219, // alpha = 0.68128 + 15341, 46514, 15444, 14022, // alpha = 0.7077349 + 15299, 46400, 15399, 13829, // alpha = 0.7346939 + 15251, 46289, 15353, 13652, // alpha = 0.7621567 + 15213, 46181, 15281, 13483, // alpha = 0.7901235 + 15171, 46070, 15210, 13324, // alpha = 0.8185941 + 15139, 45861, 15152, 13033, // alpha = 0.8475687 + 15105, 45661, 15097, 12753, // alpha = 0.8770471 + 15079, 45464, 15051, 12485, // alpha = 0.9070295 + 15057, 45273, 15011, 12181, // alpha = 0.9375157 + 15038, 45087, 14976, 11699, // alpha = 0.9685059 + 15024, 44755, 14945, 11242, // alpha = 1 + + // Cos (theta) = 0.6734694 + 23610, 48228, 24716, 23715, // alpha = 0.001 + 23610, 48228, 24716, 23715, // alpha = 0.001 + 23596, 48228, 24735, 23700, // alpha = 0.001007811 + 23430, 48228, 24576, 23585, // alpha = 0.002267574 + 22571, 48228, 23704, 22675, // alpha = 0.004031243 + 21857, 48228, 23016, 21991, // alpha = 0.006298816 + 21359, 48228, 22556, 21524, // alpha = 0.009070295 + 20856, 48228, 22025, 20992, // alpha = 0.01234568 + 20528, 48228, 21661, 20633, // alpha = 0.01612497 + 20127, 48227, 21322, 20292, // alpha = 0.02040816 + 19803, 48227, 20968, 19937, // alpha = 0.02519527 + 19566, 48227, 20704, 19676, // alpha = 0.03048627 + 19313, 48226, 20505, 19477, // alpha = 0.03628118 + 19031, 48226, 20218, 19188, // alpha = 0.04258 + 18807, 48225, 19971, 18942, // alpha = 0.04938272 + 18626, 48224, 19771, 18744, // alpha = 0.05668934 + 18479, 48222, 19608, 18582, // alpha = 0.06449988 + 18281, 48221, 19472, 18447, // alpha = 0.07281432 + 18075, 48219, 19261, 18235, // alpha = 0.08163266 + 17902, 48217, 19068, 18044, // alpha = 0.09095491 + 17753, 48215, 18902, 17881, // alpha = 0.1007811 + 17626, 48212, 18760, 17739, // alpha = 0.1111111 + 17514, 48208, 18637, 17616, // alpha = 0.1219451 + 17417, 48204, 18529, 17510, // alpha = 0.1332829 + 17259, 48199, 18433, 17416, // alpha = 0.1451247 + 17109, 48193, 18266, 17257, // alpha = 0.1574704 + 16976, 48185, 18115, 17110, // alpha = 0.17032 + 16858, 48176, 17979, 16978, // alpha = 0.1836735 + 16752, 48164, 17857, 16858, // alpha = 0.1975309 + 16659, 48151, 17747, 16752, // alpha = 0.2118922 + 16574, 48135, 17646, 16654, // alpha = 0.2267574 + 16500, 48108, 17554, 16567, // alpha = 0.2421265 + 16433, 48069, 17469, 16487, // alpha = 0.2579995 + 16364, 48026, 17374, 16414, // alpha = 0.2743765 + 16258, 47979, 17229, 16311, // alpha = 0.2912573 + 16165, 47930, 17094, 16189, // alpha = 0.308642 + 16079, 47877, 16973, 16071, // alpha = 0.3265306 + 16003, 47822, 16858, 15962, // alpha = 0.3449232 + 15936, 47765, 16753, 15861, // alpha = 0.3638196 + 15873, 47707, 16655, 15764, // alpha = 0.38322 + 15816, 47646, 16568, 15672, // alpha = 0.4031242 + 15766, 47584, 16486, 15586, // alpha = 0.4235324 + 15717, 47521, 16411, 15502, // alpha = 0.4444445 + 15674, 47457, 16302, 15422, // alpha = 0.4658605 + 15634, 47394, 16177, 15333, // alpha = 0.4877803 + 15595, 47330, 16065, 15184, // alpha = 0.5102041 + 15558, 47266, 15962, 15043, // alpha = 0.5331318 + 15526, 47203, 15868, 14910, // alpha = 0.5565634 + 15496, 47140, 15784, 14784, // alpha = 0.5804989 + 15466, 47052, 15707, 14660, // alpha = 0.6049383 + 15435, 46929, 15635, 14540, // alpha = 0.6298816 + 15410, 46808, 15573, 14428, // alpha = 0.6553288 + 15384, 46688, 15515, 14307, // alpha = 0.68128 + 15354, 46571, 15462, 14102, // alpha = 0.7077349 + 15318, 46457, 15416, 13909, // alpha = 0.7346939 + 15269, 46344, 15372, 13725, // alpha = 0.7621567 + 15227, 46233, 15305, 13550, // alpha = 0.7901235 + 15190, 46125, 15234, 13386, // alpha = 0.8185941 + 15154, 45962, 15172, 13152, // alpha = 0.8475687 + 15120, 45758, 15115, 12864, // alpha = 0.8770471 + 15094, 45556, 15066, 12591, // alpha = 0.9070295 + 15071, 45362, 15025, 12336, // alpha = 0.9375157 + 15052, 45171, 14988, 11889, // alpha = 0.9685059 + 15037, 44917, 14955, 11430, // alpha = 1 + + // Cos (theta) = 0.6550768 + 23594, 48285, 24780, 23757, // alpha = 0.001 + 23594, 48285, 24780, 23757, // alpha = 0.001 + 23582, 48285, 24777, 23744, // alpha = 0.001007811 + 23422, 48285, 24655, 23634, // alpha = 0.002267574 + 22568, 48285, 23769, 22731, // alpha = 0.004031243 + 21855, 48285, 23095, 22065, // alpha = 0.006298816 + 21359, 48285, 22616, 21577, // alpha = 0.009070295 + 20854, 48285, 22108, 21069, // alpha = 0.01234568 + 20528, 48285, 21728, 20692, // alpha = 0.01612497 + 20127, 48284, 21430, 20387, // alpha = 0.02040816 + 19804, 48284, 21053, 20014, // alpha = 0.02519527 + 19565, 48284, 20774, 19739, // alpha = 0.03048627 + 19313, 48283, 20565, 19530, // alpha = 0.03628118 + 19030, 48282, 20318, 19277, // alpha = 0.04258 + 18807, 48281, 20058, 19019, // alpha = 0.04938272 + 18626, 48280, 19847, 18811, // alpha = 0.05668934 + 18479, 48279, 19674, 18641, // alpha = 0.06449988 + 18280, 48277, 19531, 18499, // alpha = 0.07281432 + 18075, 48275, 19364, 18328, // alpha = 0.08163266 + 17901, 48272, 19161, 18127, // alpha = 0.09095491 + 17752, 48269, 18987, 17955, // alpha = 0.1007811 + 17625, 48266, 18835, 17807, // alpha = 0.1111111 + 17514, 48262, 18705, 17678, // alpha = 0.1219451 + 17417, 48257, 18590, 17566, // alpha = 0.1332829 + 17256, 48252, 18489, 17466, // alpha = 0.1451247 + 17107, 48244, 18366, 17349, // alpha = 0.1574704 + 16974, 48235, 18206, 17194, // alpha = 0.17032 + 16857, 48224, 18062, 17055, // alpha = 0.1836735 + 16752, 48211, 17933, 16930, // alpha = 0.1975309 + 16658, 48195, 17816, 16818, // alpha = 0.2118922 + 16574, 48178, 17708, 16716, // alpha = 0.2267574 + 16500, 48158, 17611, 16623, // alpha = 0.2421265 + 16434, 48137, 17519, 16539, // alpha = 0.2579995 + 16365, 48099, 17436, 16462, // alpha = 0.2743765 + 16260, 48048, 17309, 16391, // alpha = 0.2912573 + 16168, 47995, 17168, 16269, // alpha = 0.308642 + 16084, 47939, 17037, 16146, // alpha = 0.3265306 + 16010, 47881, 16916, 16034, // alpha = 0.3449232 + 15940, 47821, 16804, 15926, // alpha = 0.3638196 + 15879, 47759, 16702, 15824, // alpha = 0.38322 + 15824, 47695, 16608, 15728, // alpha = 0.4031242 + 15772, 47631, 16524, 15636, // alpha = 0.4235324 + 15724, 47566, 16445, 15549, // alpha = 0.4444445 + 15679, 47501, 16361, 15464, // alpha = 0.4658605 + 15640, 47435, 16231, 15386, // alpha = 0.4877803 + 15602, 47370, 16112, 15259, // alpha = 0.5102041 + 15568, 47304, 16006, 15114, // alpha = 0.5331318 + 15533, 47239, 15906, 14974, // alpha = 0.5565634 + 15500, 47176, 15819, 14839, // alpha = 0.5804989 + 15476, 47113, 15738, 14716, // alpha = 0.6049383 + 15444, 46997, 15664, 14594, // alpha = 0.6298816 + 15420, 46873, 15598, 14478, // alpha = 0.6553288 + 15394, 46752, 15537, 14368, // alpha = 0.68128 + 15367, 46634, 15482, 14192, // alpha = 0.7077349 + 15335, 46518, 15434, 13993, // alpha = 0.7346939 + 15289, 46403, 15389, 13804, // alpha = 0.7621567 + 15247, 46291, 15335, 13627, // alpha = 0.7901235 + 15208, 46182, 15260, 13462, // alpha = 0.8185941 + 15174, 46072, 15196, 13296, // alpha = 0.8475687 + 15141, 45863, 15136, 13000, // alpha = 0.8770471 + 15113, 45661, 15085, 12723, // alpha = 0.9070295 + 15089, 45462, 15040, 12457, // alpha = 0.9375157 + 15069, 45268, 15001, 12126, // alpha = 0.9685059 + 15051, 45081, 14965, 11653, // alpha = 1 + + // Cos (theta) = 0.6361803 + 23580, 48346, 24869, 23804, // alpha = 0.001 + 23580, 48346, 24869, 23804, // alpha = 0.001 + 23583, 48346, 24868, 23808, // alpha = 0.001007811 + 23388, 48346, 24733, 23670, // alpha = 0.002267574 + 22577, 48346, 23860, 22806, // alpha = 0.004031243 + 21853, 48346, 23197, 22146, // alpha = 0.006298816 + 21358, 48346, 22680, 21633, // alpha = 0.009070295 + 20857, 48346, 22208, 21155, // alpha = 0.01234568 + 20527, 48345, 21803, 20754, // alpha = 0.01612497 + 20126, 48345, 21526, 20483, // alpha = 0.02040816 + 19804, 48345, 21150, 20096, // alpha = 0.02519527 + 19566, 48344, 20855, 19807, // alpha = 0.03048627 + 19314, 48344, 20630, 19587, // alpha = 0.03628118 + 19032, 48343, 20432, 19375, // alpha = 0.04258 + 18806, 48341, 20156, 19102, // alpha = 0.04938272 + 18627, 48340, 19931, 18884, // alpha = 0.05668934 + 18479, 48338, 19748, 18704, // alpha = 0.06449988 + 18280, 48336, 19596, 18555, // alpha = 0.07281432 + 18074, 48334, 19468, 18427, // alpha = 0.08163266 + 17901, 48331, 19264, 18216, // alpha = 0.09095491 + 17752, 48328, 19079, 18035, // alpha = 0.1007811 + 17624, 48324, 18918, 17878, // alpha = 0.1111111 + 17513, 48319, 18780, 17743, // alpha = 0.1219451 + 17417, 48314, 18658, 17625, // alpha = 0.1332829 + 17256, 48307, 18550, 17520, // alpha = 0.1451247 + 17106, 48298, 18455, 17428, // alpha = 0.1574704 + 16973, 48287, 18308, 17283, // alpha = 0.17032 + 16856, 48274, 18155, 17138, // alpha = 0.1836735 + 16750, 48259, 18017, 17004, // alpha = 0.1975309 + 16656, 48242, 17891, 16886, // alpha = 0.2118922 + 16574, 48222, 17776, 16779, // alpha = 0.2267574 + 16500, 48200, 17671, 16682, // alpha = 0.2421265 + 16434, 48176, 17574, 16594, // alpha = 0.2579995 + 16367, 48151, 17485, 16513, // alpha = 0.2743765 + 16263, 48119, 17396, 16438, // alpha = 0.2912573 + 16173, 48062, 17246, 16355, // alpha = 0.308642 + 16089, 48002, 17106, 16227, // alpha = 0.3265306 + 16016, 47940, 16977, 16108, // alpha = 0.3449232 + 15946, 47877, 16860, 15993, // alpha = 0.3638196 + 15886, 47812, 16752, 15887, // alpha = 0.38322 + 15829, 47746, 16652, 15785, // alpha = 0.4031242 + 15780, 47679, 16561, 15691, // alpha = 0.4235324 + 15734, 47612, 16480, 15599, // alpha = 0.4444445 + 15690, 47545, 16404, 15512, // alpha = 0.4658605 + 15647, 47478, 16286, 15427, // alpha = 0.4877803 + 15609, 47411, 16163, 15338, // alpha = 0.5102041 + 15576, 47344, 16049, 15186, // alpha = 0.5331318 + 15542, 47278, 15947, 15041, // alpha = 0.5565634 + 15508, 47213, 15855, 14903, // alpha = 0.5804989 + 15482, 47149, 15771, 14772, // alpha = 0.6049383 + 15455, 47068, 15695, 14651, // alpha = 0.6298816 + 15429, 46943, 15625, 14531, // alpha = 0.6553288 + 15403, 46821, 15561, 14419, // alpha = 0.68128 + 15378, 46701, 15504, 14292, // alpha = 0.7077349 + 15355, 46583, 15454, 14088, // alpha = 0.7346939 + 15310, 46468, 15406, 13898, // alpha = 0.7621567 + 15271, 46355, 15364, 13719, // alpha = 0.7901235 + 15230, 46245, 15290, 13548, // alpha = 0.8185941 + 15200, 46137, 15222, 13387, // alpha = 0.8475687 + 15162, 45983, 15159, 13155, // alpha = 0.8770471 + 15133, 45777, 15104, 12877, // alpha = 0.9070295 + 15106, 45577, 15055, 12609, // alpha = 0.9375157 + 15086, 45380, 15015, 12352, // alpha = 0.9685059 + 15066, 45190, 14976, 11936, // alpha = 1 + + // Cos (theta) = 0.61678 + 23597, 48411, 24939, 23892, // alpha = 0.001 + 23597, 48411, 24939, 23892, // alpha = 0.001 + 23590, 48411, 24935, 23884, // alpha = 0.001007811 + 23420, 48411, 24816, 23750, // alpha = 0.002267574 + 22574, 48411, 23938, 22869, // alpha = 0.004031243 + 21848, 48411, 23303, 22226, // alpha = 0.006298816 + 21360, 48411, 22756, 21695, // alpha = 0.009070295 + 20854, 48411, 22323, 21240, // alpha = 0.01234568 + 20527, 48410, 21889, 20823, // alpha = 0.01612497 + 20125, 48410, 21592, 20536, // alpha = 0.02040816 + 19804, 48409, 21257, 20182, // alpha = 0.02519527 + 19566, 48409, 20944, 19879, // alpha = 0.03048627 + 19312, 48408, 20707, 19646, // alpha = 0.03628118 + 19030, 48407, 20520, 19466, // alpha = 0.04258 + 18806, 48406, 20266, 19190, // alpha = 0.04938272 + 18627, 48404, 20027, 18960, // alpha = 0.05668934 + 18478, 48402, 19831, 18771, // alpha = 0.06449988 + 18279, 48400, 19670, 18614, // alpha = 0.07281432 + 18074, 48397, 19533, 18482, // alpha = 0.08163266 + 17899, 48394, 19380, 18309, // alpha = 0.09095491 + 17752, 48390, 19182, 18119, // alpha = 0.1007811 + 17624, 48385, 19012, 17954, // alpha = 0.1111111 + 17513, 48380, 18864, 17813, // alpha = 0.1219451 + 17416, 48373, 18734, 17687, // alpha = 0.1332829 + 17255, 48365, 18619, 17577, // alpha = 0.1451247 + 17104, 48354, 18518, 17480, // alpha = 0.1574704 + 16972, 48341, 18419, 17379, // alpha = 0.17032 + 16854, 48326, 18257, 17223, // alpha = 0.1836735 + 16748, 48309, 18109, 17084, // alpha = 0.1975309 + 16655, 48290, 17974, 16959, // alpha = 0.2118922 + 16574, 48267, 17851, 16847, // alpha = 0.2267574 + 16501, 48243, 17739, 16745, // alpha = 0.2421265 + 16436, 48217, 17633, 16652, // alpha = 0.2579995 + 16371, 48189, 17538, 16566, // alpha = 0.2743765 + 16268, 48160, 17450, 16488, // alpha = 0.2912573 + 16174, 48129, 17330, 16413, // alpha = 0.308642 + 16095, 48066, 17180, 16310, // alpha = 0.3265306 + 16022, 48000, 17043, 16185, // alpha = 0.3449232 + 15953, 47933, 16918, 16064, // alpha = 0.3638196 + 15892, 47865, 16804, 15952, // alpha = 0.38322 + 15836, 47797, 16698, 15845, // alpha = 0.4031242 + 15786, 47728, 16604, 15745, // alpha = 0.4235324 + 15738, 47659, 16516, 15648, // alpha = 0.4444445 + 15700, 47590, 16438, 15560, // alpha = 0.4658605 + 15657, 47521, 16347, 15472, // alpha = 0.4877803 + 15616, 47453, 16218, 15388, // alpha = 0.5102041 + 15584, 47385, 16099, 15263, // alpha = 0.5331318 + 15551, 47318, 15992, 15113, // alpha = 0.5565634 + 15520, 47252, 15896, 14971, // alpha = 0.5804989 + 15491, 47187, 15807, 14835, // alpha = 0.6049383 + 15462, 47123, 15727, 14708, // alpha = 0.6298816 + 15439, 47018, 15655, 14590, // alpha = 0.6553288 + 15413, 46895, 15589, 14473, // alpha = 0.68128 + 15388, 46773, 15528, 14367, // alpha = 0.7077349 + 15371, 46655, 15476, 14195, // alpha = 0.7346939 + 15333, 46539, 15427, 13999, // alpha = 0.7621567 + 15299, 46425, 15382, 13820, // alpha = 0.7901235 + 15257, 46314, 15323, 13648, // alpha = 0.8185941 + 15224, 46205, 15251, 13484, // alpha = 0.8475687 + 15187, 46098, 15185, 13331, // alpha = 0.8770471 + 15154, 45909, 15124, 13059, // alpha = 0.9070295 + 15126, 45706, 15072, 12786, // alpha = 0.9375157 + 15105, 45507, 15030, 12524, // alpha = 0.9685059 + 15080, 45315, 14985, 12269, // alpha = 1 + + // Cos (theta) = 0.5968758 + 23608, 48480, 25030, 23979, // alpha = 0.001 + 23608, 48480, 25030, 23979, // alpha = 0.001 + 23596, 48480, 25035, 23964, // alpha = 0.001007811 + 23417, 48480, 24874, 23814, // alpha = 0.002267574 + 22575, 48480, 24036, 22944, // alpha = 0.004031243 + 21851, 48480, 23425, 22324, // alpha = 0.006298816 + 21361, 48480, 22843, 21760, // alpha = 0.009070295 + 20853, 48480, 22445, 21334, // alpha = 0.01234568 + 20529, 48480, 21983, 20897, // alpha = 0.01612497 + 20125, 48479, 21669, 20594, // alpha = 0.02040816 + 19802, 48479, 21380, 20273, // alpha = 0.02519527 + 19566, 48478, 21044, 19955, // alpha = 0.03048627 + 19314, 48477, 20790, 19712, // alpha = 0.03628118 + 19031, 48476, 20592, 19521, // alpha = 0.04258 + 18808, 48475, 20388, 19286, // alpha = 0.04938272 + 18626, 48473, 20134, 19042, // alpha = 0.05668934 + 18478, 48470, 19925, 18843, // alpha = 0.06449988 + 18279, 48468, 19752, 18677, // alpha = 0.07281432 + 18073, 48464, 19607, 18538, // alpha = 0.08163266 + 17900, 48460, 19483, 18411, // alpha = 0.09095491 + 17752, 48456, 19299, 18210, // alpha = 0.1007811 + 17623, 48451, 19117, 18036, // alpha = 0.1111111 + 17512, 48444, 18959, 17885, // alpha = 0.1219451 + 17415, 48436, 18819, 17753, // alpha = 0.1332829 + 17252, 48426, 18696, 17638, // alpha = 0.1451247 + 17102, 48413, 18587, 17535, // alpha = 0.1574704 + 16969, 48399, 18490, 17443, // alpha = 0.17032 + 16851, 48381, 18370, 17314, // alpha = 0.1836735 + 16747, 48361, 18211, 17169, // alpha = 0.1975309 + 16654, 48339, 18065, 17036, // alpha = 0.2118922 + 16572, 48314, 17932, 16917, // alpha = 0.2267574 + 16500, 48288, 17811, 16809, // alpha = 0.2421265 + 16436, 48259, 17698, 16711, // alpha = 0.2579995 + 16375, 48228, 17596, 16623, // alpha = 0.2743765 + 16271, 48196, 17501, 16538, // alpha = 0.2912573 + 16181, 48163, 17414, 16462, // alpha = 0.308642 + 16098, 48129, 17262, 16390, // alpha = 0.3265306 + 16026, 48061, 17115, 16262, // alpha = 0.3449232 + 15959, 47991, 16981, 16137, // alpha = 0.3638196 + 15899, 47920, 16860, 16019, // alpha = 0.38322 + 15843, 47849, 16750, 15906, // alpha = 0.4031242 + 15791, 47777, 16649, 15800, // alpha = 0.4235324 + 15747, 47706, 16558, 15701, // alpha = 0.4444445 + 15703, 47636, 16473, 15607, // alpha = 0.4658605 + 15665, 47565, 16398, 15517, // alpha = 0.4877803 + 15628, 47496, 16277, 15432, // alpha = 0.5102041 + 15592, 47428, 16153, 15338, // alpha = 0.5331318 + 15562, 47360, 16040, 15190, // alpha = 0.5565634 + 15530, 47293, 15939, 15042, // alpha = 0.5804989 + 15503, 47228, 15847, 14905, // alpha = 0.6049383 + 15475, 47163, 15762, 14774, // alpha = 0.6298816 + 15451, 47096, 15687, 14653, // alpha = 0.6553288 + 15427, 46973, 15619, 14537, // alpha = 0.68128 + 15403, 46851, 15556, 14427, // alpha = 0.7077349 + 15383, 46732, 15499, 14313, // alpha = 0.7346939 + 15360, 46616, 15449, 14116, // alpha = 0.7621567 + 15325, 46502, 15403, 13935, // alpha = 0.7901235 + 15285, 46390, 15357, 13757, // alpha = 0.8185941 + 15246, 46279, 15279, 13592, // alpha = 0.8475687 + 15213, 46172, 15212, 13439, // alpha = 0.8770471 + 15181, 46055, 15150, 13269, // alpha = 0.9070295 + 15151, 45850, 15094, 12990, // alpha = 0.9375157 + 15122, 45650, 15042, 12725, // alpha = 0.9685059 + 15098, 45456, 15001, 12470, // alpha = 1 + + // Cos (theta) = 0.5764676 + 23587, 48555, 25173, 24028, // alpha = 0.001 + 23587, 48555, 25173, 24028, // alpha = 0.001 + 23591, 48555, 25175, 24034, // alpha = 0.001007811 + 23439, 48555, 24978, 23899, // alpha = 0.002267574 + 22576, 48555, 24147, 23024, // alpha = 0.004031243 + 21851, 48555, 23560, 22424, // alpha = 0.006298816 + 21360, 48555, 22936, 21829, // alpha = 0.009070295 + 20858, 48555, 22556, 21443, // alpha = 0.01234568 + 20528, 48555, 22092, 20976, // alpha = 0.01612497 + 20125, 48554, 21753, 20656, // alpha = 0.02040816 + 19804, 48554, 21511, 20376, // alpha = 0.02519527 + 19565, 48553, 21159, 20038, // alpha = 0.03048627 + 19312, 48552, 20886, 19780, // alpha = 0.03628118 + 19030, 48550, 20674, 19580, // alpha = 0.04258 + 18806, 48548, 20505, 19387, // alpha = 0.04938272 + 18625, 48546, 20255, 19130, // alpha = 0.05668934 + 18478, 48544, 20031, 18920, // alpha = 0.06449988 + 18278, 48540, 19845, 18746, // alpha = 0.07281432 + 18073, 48536, 19689, 18599, // alpha = 0.08163266 + 17899, 48532, 19557, 18475, // alpha = 0.09095491 + 17750, 48527, 19431, 18306, // alpha = 0.1007811 + 17623, 48520, 19236, 18124, // alpha = 0.1111111 + 17510, 48512, 19065, 17963, // alpha = 0.1219451 + 17414, 48503, 18915, 17824, // alpha = 0.1332829 + 17248, 48491, 18783, 17701, // alpha = 0.1451247 + 17099, 48476, 18665, 17593, // alpha = 0.1574704 + 16966, 48459, 18559, 17497, // alpha = 0.17032 + 16850, 48439, 18465, 17410, // alpha = 0.1836735 + 16746, 48416, 18325, 17258, // alpha = 0.1975309 + 16653, 48391, 18168, 17118, // alpha = 0.2118922 + 16572, 48363, 18023, 16992, // alpha = 0.2267574 + 16500, 48333, 17892, 16879, // alpha = 0.2421265 + 16437, 48301, 17770, 16775, // alpha = 0.2579995 + 16376, 48268, 17658, 16680, // alpha = 0.2743765 + 16275, 48234, 17558, 16592, // alpha = 0.2912573 + 16185, 48199, 17465, 16510, // alpha = 0.308642 + 16106, 48162, 17348, 16436, // alpha = 0.3265306 + 16034, 48123, 17193, 16347, // alpha = 0.3449232 + 15968, 48050, 17051, 16214, // alpha = 0.3638196 + 15909, 47975, 16922, 16089, // alpha = 0.38322 + 15854, 47901, 16804, 15972, // alpha = 0.4031242 + 15802, 47828, 16697, 15860, // alpha = 0.4235324 + 15753, 47755, 16600, 15755, // alpha = 0.4444445 + 15710, 47683, 16513, 15655, // alpha = 0.4658605 + 15677, 47612, 16435, 15565, // alpha = 0.4877803 + 15637, 47541, 16341, 15475, // alpha = 0.5102041 + 15605, 47472, 16212, 15394, // alpha = 0.5331318 + 15571, 47403, 16094, 15268, // alpha = 0.5565634 + 15541, 47337, 15987, 15116, // alpha = 0.5804989 + 15515, 47271, 15891, 14980, // alpha = 0.6049383 + 15487, 47206, 15802, 14846, // alpha = 0.6298816 + 15461, 47142, 15722, 14720, // alpha = 0.6553288 + 15444, 47056, 15651, 14607, // alpha = 0.68128 + 15416, 46935, 15585, 14493, // alpha = 0.7077349 + 15396, 46816, 15526, 14390, // alpha = 0.7346939 + 15377, 46699, 15473, 14248, // alpha = 0.7621567 + 15351, 46585, 15424, 14059, // alpha = 0.7901235 + 15313, 46472, 15378, 13884, // alpha = 0.8185941 + 15277, 46362, 15317, 13719, // alpha = 0.8475687 + 15240, 46255, 15244, 13559, // alpha = 0.8770471 + 15212, 46148, 15180, 13409, // alpha = 0.9070295 + 15177, 46010, 15120, 13223, // alpha = 0.9375157 + 15144, 45810, 15064, 12952, // alpha = 0.9685059 + 15119, 45613, 15017, 12693, // alpha = 1 + + // Cos (theta) = 0.5555555 + 23584, 48637, 25298, 24109, // alpha = 0.001 + 23584, 48637, 25298, 24109, // alpha = 0.001 + 23604, 48637, 25270, 24139, // alpha = 0.001007811 + 23422, 48637, 25104, 23963, // alpha = 0.002267574 + 22575, 48637, 24260, 23106, // alpha = 0.004031243 + 21852, 48636, 23638, 22531, // alpha = 0.006298816 + 21359, 48636, 23046, 21904, // alpha = 0.009070295 + 20855, 48636, 22637, 21527, // alpha = 0.01234568 + 20527, 48636, 22216, 21059, // alpha = 0.01612497 + 20126, 48635, 21851, 20723, // alpha = 0.02040816 + 19804, 48634, 21589, 20482, // alpha = 0.02519527 + 19565, 48633, 21291, 20127, // alpha = 0.03048627 + 19311, 48632, 20994, 19855, // alpha = 0.03628118 + 19030, 48630, 20766, 19644, // alpha = 0.04258 + 18806, 48628, 20584, 19476, // alpha = 0.04938272 + 18625, 48626, 20393, 19225, // alpha = 0.05668934 + 18478, 48623, 20152, 19004, // alpha = 0.06449988 + 18278, 48619, 19953, 18819, // alpha = 0.07281432 + 18071, 48614, 19784, 18664, // alpha = 0.08163266 + 17898, 48609, 19641, 18534, // alpha = 0.09095491 + 17748, 48603, 19519, 18409, // alpha = 0.1007811 + 17620, 48595, 19369, 18216, // alpha = 0.1111111 + 17510, 48585, 19185, 18048, // alpha = 0.1219451 + 17412, 48574, 19024, 17900, // alpha = 0.1332829 + 17246, 48559, 18881, 17771, // alpha = 0.1451247 + 17096, 48542, 18753, 17656, // alpha = 0.1574704 + 16964, 48522, 18638, 17553, // alpha = 0.17032 + 16846, 48499, 18534, 17462, // alpha = 0.1836735 + 16743, 48473, 18441, 17352, // alpha = 0.1975309 + 16651, 48444, 18278, 17204, // alpha = 0.2118922 + 16571, 48413, 18123, 17072, // alpha = 0.2267574 + 16499, 48380, 17979, 16950, // alpha = 0.2421265 + 16437, 48346, 17848, 16841, // alpha = 0.2579995 + 16379, 48310, 17728, 16740, // alpha = 0.2743765 + 16280, 48272, 17617, 16648, // alpha = 0.2912573 + 16191, 48234, 17517, 16562, // alpha = 0.308642 + 16108, 48196, 17425, 16481, // alpha = 0.3265306 + 16038, 48157, 17277, 16407, // alpha = 0.3449232 + 15973, 48109, 17125, 16290, // alpha = 0.3638196 + 15917, 48032, 16988, 16162, // alpha = 0.38322 + 15860, 47956, 16863, 16037, // alpha = 0.4031242 + 15809, 47879, 16750, 15921, // alpha = 0.4235324 + 15761, 47805, 16648, 15811, // alpha = 0.4444445 + 15722, 47732, 16556, 15710, // alpha = 0.4658605 + 15685, 47659, 16473, 15614, // alpha = 0.4877803 + 15649, 47588, 16397, 15523, // alpha = 0.5102041 + 15613, 47518, 16274, 15437, // alpha = 0.5331318 + 15586, 47449, 16151, 15355, // alpha = 0.5565634 + 15552, 47382, 16039, 15200, // alpha = 0.5804989 + 15525, 47316, 15937, 15057, // alpha = 0.6049383 + 15503, 47251, 15846, 14926, // alpha = 0.6298816 + 15476, 47187, 15762, 14797, // alpha = 0.6553288 + 15455, 47125, 15687, 14680, // alpha = 0.68128 + 15433, 47025, 15618, 14569, // alpha = 0.7077349 + 15409, 46905, 15555, 14463, // alpha = 0.7346939 + 15390, 46789, 15499, 14364, // alpha = 0.7621567 + 15372, 46675, 15449, 14207, // alpha = 0.7901235 + 15344, 46562, 15401, 14027, // alpha = 0.8185941 + 15309, 46452, 15360, 13860, // alpha = 0.8475687 + 15274, 46344, 15283, 13700, // alpha = 0.8770471 + 15233, 46238, 15211, 13548, // alpha = 0.9070295 + 15205, 46134, 15150, 13402, // alpha = 0.9375157 + 15170, 45986, 15091, 13215, // alpha = 0.9685059 + 15137, 45785, 15036, 12946, // alpha = 1 + + // Cos (theta) = 0.5341396 + 23594, 48725, 25420, 24215, // alpha = 0.001 + 23594, 48725, 25420, 24215, // alpha = 0.001 + 23582, 48725, 25433, 24196, // alpha = 0.001007811 + 23420, 48725, 25229, 24045, // alpha = 0.002267574 + 22575, 48725, 24392, 23200, // alpha = 0.004031243 + 21854, 48725, 23729, 22591, // alpha = 0.006298816 + 21361, 48724, 23177, 21987, // alpha = 0.009070295 + 20854, 48724, 22731, 21586, // alpha = 0.01234568 + 20528, 48724, 22357, 21151, // alpha = 0.01612497 + 20126, 48723, 21962, 20796, // alpha = 0.02040816 + 19804, 48722, 21680, 20541, // alpha = 0.02519527 + 19565, 48721, 21440, 20224, // alpha = 0.03048627 + 19313, 48719, 21120, 19938, // alpha = 0.03628118 + 19030, 48717, 20873, 19714, // alpha = 0.04258 + 18805, 48715, 20675, 19535, // alpha = 0.04938272 + 18625, 48712, 20516, 19328, // alpha = 0.05668934 + 18477, 48708, 20291, 19093, // alpha = 0.06449988 + 18276, 48704, 20073, 18899, // alpha = 0.07281432 + 18071, 48698, 19892, 18735, // alpha = 0.08163266 + 17897, 48692, 19737, 18596, // alpha = 0.09095491 + 17747, 48685, 19604, 18477, // alpha = 0.1007811 + 17619, 48675, 19490, 18316, // alpha = 0.1111111 + 17508, 48664, 19323, 18139, // alpha = 0.1219451 + 17411, 48649, 19148, 17983, // alpha = 0.1332829 + 17244, 48632, 18991, 17845, // alpha = 0.1451247 + 17092, 48612, 18851, 17722, // alpha = 0.1574704 + 16960, 48588, 18727, 17614, // alpha = 0.17032 + 16843, 48561, 18613, 17517, // alpha = 0.1836735 + 16742, 48532, 18512, 17431, // alpha = 0.1975309 + 16650, 48500, 18403, 17296, // alpha = 0.2118922 + 16570, 48465, 18232, 17156, // alpha = 0.2267574 + 16500, 48429, 18076, 17027, // alpha = 0.2421265 + 16438, 48391, 17933, 16912, // alpha = 0.2579995 + 16382, 48352, 17803, 16805, // alpha = 0.2743765 + 16283, 48312, 17683, 16707, // alpha = 0.2912573 + 16196, 48271, 17574, 16616, // alpha = 0.308642 + 16115, 48230, 17477, 16530, // alpha = 0.3265306 + 16044, 48190, 17368, 16452, // alpha = 0.3449232 + 15979, 48149, 17206, 16372, // alpha = 0.3638196 + 15919, 48090, 17060, 16233, // alpha = 0.38322 + 15868, 48011, 16926, 16106, // alpha = 0.4031242 + 15821, 47933, 16808, 15987, // alpha = 0.4235324 + 15772, 47857, 16701, 15873, // alpha = 0.4444445 + 15732, 47782, 16601, 15766, // alpha = 0.4658605 + 15697, 47708, 16514, 15668, // alpha = 0.4877803 + 15660, 47636, 16435, 15573, // alpha = 0.5102041 + 15627, 47566, 16342, 15485, // alpha = 0.5331318 + 15598, 47497, 16214, 15403, // alpha = 0.5565634 + 15569, 47429, 16096, 15292, // alpha = 0.5804989 + 15538, 47364, 15990, 15143, // alpha = 0.6049383 + 15519, 47299, 15894, 15013, // alpha = 0.6298816 + 15493, 47236, 15806, 14884, // alpha = 0.6553288 + 15472, 47174, 15728, 14765, // alpha = 0.68128 + 15448, 47113, 15655, 14651, // alpha = 0.7077349 + 15427, 47002, 15589, 14545, // alpha = 0.7346939 + 15407, 46885, 15530, 14445, // alpha = 0.7621567 + 15386, 46771, 15475, 14350, // alpha = 0.7901235 + 15370, 46660, 15427, 14189, // alpha = 0.8185941 + 15336, 46549, 15382, 14015, // alpha = 0.8475687 + 15307, 46441, 15326, 13856, // alpha = 0.8770471 + 15268, 46335, 15250, 13699, // alpha = 0.9070295 + 15228, 46231, 15180, 13557, // alpha = 0.9375157 + 15202, 46128, 15123, 13407, // alpha = 0.9685059 + 15164, 45974, 15063, 13226, // alpha = 1 + + // Cos (theta) = 0.5122197 + 23582, 48821, 25556, 24295, // alpha = 0.001 + 23582, 48821, 25556, 24295, // alpha = 0.001 + 23601, 48821, 25541, 24328, // alpha = 0.001007811 + 23419, 48821, 25378, 24133, // alpha = 0.002267574 + 22577, 48821, 24566, 23304, // alpha = 0.004031243 + 21850, 48821, 23833, 22653, // alpha = 0.006298816 + 21362, 48821, 23320, 22078, // alpha = 0.009070295 + 20858, 48820, 22839, 21656, // alpha = 0.01234568 + 20528, 48820, 22522, 21253, // alpha = 0.01612497 + 20126, 48819, 22093, 20876, // alpha = 0.02040816 + 19803, 48818, 21786, 20605, // alpha = 0.02519527 + 19565, 48817, 21558, 20330, // alpha = 0.03048627 + 19314, 48815, 21263, 20028, // alpha = 0.03628118 + 19029, 48812, 20996, 19789, // alpha = 0.04258 + 18805, 48809, 20781, 19601, // alpha = 0.04938272 + 18625, 48806, 20608, 19442, // alpha = 0.05668934 + 18477, 48801, 20451, 19193, // alpha = 0.06449988 + 18275, 48796, 20214, 18985, // alpha = 0.07281432 + 18069, 48790, 20016, 18811, // alpha = 0.08163266 + 17895, 48782, 19846, 18664, // alpha = 0.09095491 + 17746, 48773, 19702, 18539, // alpha = 0.1007811 + 17617, 48762, 19577, 18426, // alpha = 0.1111111 + 17506, 48748, 19467, 18237, // alpha = 0.1219451 + 17409, 48730, 19287, 18071, // alpha = 0.1332829 + 17237, 48709, 19117, 17923, // alpha = 0.1451247 + 17089, 48685, 18964, 17794, // alpha = 0.1574704 + 16956, 48658, 18826, 17678, // alpha = 0.17032 + 16839, 48627, 18703, 17575, // alpha = 0.1836735 + 16739, 48593, 18590, 17484, // alpha = 0.1975309 + 16649, 48557, 18487, 17395, // alpha = 0.2118922 + 16570, 48519, 18354, 17245, // alpha = 0.2267574 + 16501, 48479, 18182, 17111, // alpha = 0.2421265 + 16440, 48437, 18027, 16987, // alpha = 0.2579995 + 16382, 48395, 17884, 16871, // alpha = 0.2743765 + 16289, 48352, 17756, 16769, // alpha = 0.2912573 + 16203, 48308, 17639, 16672, // alpha = 0.308642 + 16127, 48266, 17533, 16584, // alpha = 0.3265306 + 16055, 48223, 17437, 16500, // alpha = 0.3449232 + 15992, 48181, 17294, 16423, // alpha = 0.3638196 + 15933, 48139, 17138, 16316, // alpha = 0.38322 + 15877, 48068, 16998, 16179, // alpha = 0.4031242 + 15829, 47988, 16870, 16054, // alpha = 0.4235324 + 15783, 47910, 16756, 15934, // alpha = 0.4444445 + 15743, 47834, 16653, 15826, // alpha = 0.4658605 + 15705, 47759, 16560, 15722, // alpha = 0.4877803 + 15675, 47687, 16478, 15628, // alpha = 0.5102041 + 15638, 47616, 16402, 15535, // alpha = 0.5331318 + 15611, 47547, 16282, 15454, // alpha = 0.5565634 + 15583, 47480, 16158, 15375, // alpha = 0.5804989 + 15556, 47414, 16047, 15241, // alpha = 0.6049383 + 15532, 47350, 15946, 15104, // alpha = 0.6298816 + 15509, 47287, 15853, 14979, // alpha = 0.6553288 + 15485, 47225, 15771, 14858, // alpha = 0.68128 + 15465, 47164, 15695, 14742, // alpha = 0.7077349 + 15442, 47104, 15625, 14636, // alpha = 0.7346939 + 15427, 46989, 15565, 14538, // alpha = 0.7621567 + 15404, 46874, 15507, 14441, // alpha = 0.7901235 + 15387, 46762, 15456, 14350, // alpha = 0.8185941 + 15367, 46654, 15409, 14190, // alpha = 0.8475687 + 15331, 46546, 15365, 14021, // alpha = 0.8770471 + 15304, 46440, 15296, 13868, // alpha = 0.9070295 + 15262, 46334, 15219, 13714, // alpha = 0.9375157 + 15223, 46231, 15152, 13568, // alpha = 0.9685059 + 15197, 46129, 15098, 13428, // alpha = 1 + + // Cos (theta) = 0.4897959 + 23599, 48927, 25670, 24434, // alpha = 0.001 + 23599, 48927, 25670, 24434, // alpha = 0.001 + 23591, 48927, 25673, 24419, // alpha = 0.001007811 + 23419, 48927, 25523, 24233, // alpha = 0.002267574 + 22586, 48927, 24657, 23429, // alpha = 0.004031243 + 21852, 48926, 23954, 22725, // alpha = 0.006298816 + 21356, 48926, 23494, 22171, // alpha = 0.009070295 + 20856, 48926, 22963, 21726, // alpha = 0.01234568 + 20528, 48925, 22621, 21364, // alpha = 0.01612497 + 20125, 48924, 22242, 20962, // alpha = 0.02040816 + 19803, 48923, 21906, 20675, // alpha = 0.02519527 + 19565, 48921, 21658, 20446, // alpha = 0.03048627 + 19311, 48919, 21433, 20123, // alpha = 0.03628118 + 19030, 48916, 21138, 19872, // alpha = 0.04258 + 18805, 48913, 20903, 19672, // alpha = 0.04938272 + 18624, 48909, 20713, 19510, // alpha = 0.05668934 + 18476, 48903, 20558, 19300, // alpha = 0.06449988 + 18273, 48897, 20378, 19080, // alpha = 0.07281432 + 18068, 48889, 20159, 18895, // alpha = 0.08163266 + 17893, 48880, 19975, 18739, // alpha = 0.09095491 + 17744, 48869, 19816, 18605, // alpha = 0.1007811 + 17615, 48855, 19678, 18488, // alpha = 0.1111111 + 17504, 48838, 19558, 18343, // alpha = 0.1219451 + 17404, 48816, 19448, 18165, // alpha = 0.1332829 + 17233, 48792, 19260, 18009, // alpha = 0.1451247 + 17084, 48763, 19092, 17871, // alpha = 0.1574704 + 16953, 48731, 18940, 17749, // alpha = 0.17032 + 16836, 48696, 18802, 17639, // alpha = 0.1836735 + 16737, 48658, 18677, 17542, // alpha = 0.1975309 + 16647, 48617, 18564, 17453, // alpha = 0.2118922 + 16570, 48574, 18461, 17340, // alpha = 0.2267574 + 16503, 48530, 18301, 17199, // alpha = 0.2421265 + 16440, 48485, 18128, 17064, // alpha = 0.2579995 + 16388, 48439, 17974, 16946, // alpha = 0.2743765 + 16290, 48393, 17834, 16832, // alpha = 0.2912573 + 16205, 48347, 17708, 16730, // alpha = 0.308642 + 16128, 48302, 17595, 16635, // alpha = 0.3265306 + 16060, 48257, 17492, 16548, // alpha = 0.3449232 + 15994, 48213, 17389, 16465, // alpha = 0.3638196 + 15938, 48170, 17224, 16390, // alpha = 0.38322 + 15885, 48128, 17073, 16254, // alpha = 0.4031242 + 15846, 48045, 16939, 16130, // alpha = 0.4235324 + 15798, 47966, 16818, 16004, // alpha = 0.4444445 + 15753, 47889, 16709, 15887, // alpha = 0.4658605 + 15720, 47813, 16611, 15784, // alpha = 0.4877803 + 15687, 47740, 16523, 15685, // alpha = 0.5102041 + 15657, 47669, 16443, 15595, // alpha = 0.5331318 + 15625, 47600, 16358, 15508, // alpha = 0.5565634 + 15600, 47533, 16228, 15429, // alpha = 0.5804989 + 15573, 47467, 16111, 15350, // alpha = 0.6049383 + 15553, 47403, 16004, 15214, // alpha = 0.6298816 + 15524, 47341, 15907, 15081, // alpha = 0.6553288 + 15504, 47279, 15819, 14961, // alpha = 0.68128 + 15488, 47219, 15741, 14849, // alpha = 0.7077349 + 15461, 47160, 15668, 14737, // alpha = 0.7346939 + 15442, 47100, 15602, 14635, // alpha = 0.7621567 + 15424, 46986, 15542, 14539, // alpha = 0.7901235 + 15401, 46875, 15488, 14445, // alpha = 0.8185941 + 15381, 46765, 15438, 14358, // alpha = 0.8475687 + 15365, 46658, 15394, 14212, // alpha = 0.8770471 + 15332, 46551, 15345, 14049, // alpha = 0.9070295 + 15300, 46446, 15268, 13895, // alpha = 0.9375157 + 15256, 46343, 15197, 13745, // alpha = 0.9685059 + 15213, 46242, 15128, 13599, // alpha = 1 + + // Cos (theta) = 0.4668682 + 23590, 49044, 25797, 24539, // alpha = 0.001 + 23590, 49044, 25797, 24539, // alpha = 0.001 + 23611, 49044, 25749, 24578, // alpha = 0.001007811 + 23433, 49044, 25622, 24356, // alpha = 0.002267574 + 22575, 49044, 24779, 23533, // alpha = 0.004031243 + 21851, 49043, 24101, 22802, // alpha = 0.006298816 + 21362, 49043, 23622, 22285, // alpha = 0.009070295 + 20856, 49043, 23109, 21806, // alpha = 0.01234568 + 20527, 49042, 22733, 21483, // alpha = 0.01612497 + 20124, 49041, 22420, 21058, // alpha = 0.02040816 + 19803, 49039, 22050, 20753, // alpha = 0.02519527 + 19565, 49037, 21775, 20527, // alpha = 0.03048627 + 19311, 49035, 21568, 20231, // alpha = 0.03628118 + 19029, 49031, 21307, 19964, // alpha = 0.04258 + 18804, 49027, 21048, 19750, // alpha = 0.04938272 + 18623, 49022, 20838, 19579, // alpha = 0.05668934 + 18475, 49015, 20667, 19419, // alpha = 0.06449988 + 18273, 49008, 20523, 19185, // alpha = 0.07281432 + 18065, 48999, 20328, 18987, // alpha = 0.08163266 + 17891, 48987, 20124, 18820, // alpha = 0.09095491 + 17742, 48974, 19947, 18677, // alpha = 0.1007811 + 17612, 48956, 19796, 18553, // alpha = 0.1111111 + 17500, 48935, 19662, 18445, // alpha = 0.1219451 + 17398, 48909, 19545, 18269, // alpha = 0.1332829 + 17228, 48880, 19425, 18102, // alpha = 0.1451247 + 17079, 48846, 19237, 17955, // alpha = 0.1574704 + 16947, 48809, 19068, 17823, // alpha = 0.17032 + 16834, 48768, 18915, 17708, // alpha = 0.1836735 + 16733, 48725, 18776, 17603, // alpha = 0.1975309 + 16646, 48679, 18650, 17509, // alpha = 0.2118922 + 16568, 48632, 18535, 17424, // alpha = 0.2267574 + 16503, 48583, 18431, 17290, // alpha = 0.2421265 + 16441, 48534, 18244, 17147, // alpha = 0.2579995 + 16390, 48485, 18073, 17021, // alpha = 0.2743765 + 16301, 48435, 17922, 16904, // alpha = 0.2912573 + 16213, 48387, 17785, 16793, // alpha = 0.308642 + 16136, 48339, 17661, 16693, // alpha = 0.3265306 + 16067, 48292, 17551, 16600, // alpha = 0.3449232 + 16003, 48246, 17452, 16513, // alpha = 0.3638196 + 15945, 48202, 17316, 16433, // alpha = 0.38322 + 15900, 48159, 17158, 16340, // alpha = 0.4031242 + 15850, 48106, 17014, 16201, // alpha = 0.4235324 + 15809, 48025, 16885, 16075, // alpha = 0.4444445 + 15770, 47946, 16771, 15959, // alpha = 0.4658605 + 15733, 47870, 16667, 15849, // alpha = 0.4877803 + 15706, 47797, 16574, 15754, // alpha = 0.5102041 + 15672, 47725, 16490, 15656, // alpha = 0.5331318 + 15645, 47656, 16414, 15571, // alpha = 0.5565634 + 15617, 47589, 16305, 15490, // alpha = 0.5804989 + 15590, 47524, 16180, 15414, // alpha = 0.6049383 + 15568, 47460, 16069, 15328, // alpha = 0.6298816 + 15548, 47397, 15966, 15200, // alpha = 0.6553288 + 15519, 47337, 15872, 15074, // alpha = 0.68128 + 15508, 47277, 15792, 14963, // alpha = 0.7077349 + 15485, 47218, 15716, 14853, // alpha = 0.7346939 + 15459, 47161, 15646, 14745, // alpha = 0.7621567 + 15440, 47105, 15583, 14648, // alpha = 0.7901235 + 15422, 46993, 15526, 14554, // alpha = 0.8185941 + 15401, 46884, 15474, 14464, // alpha = 0.8475687 + 15382, 46776, 15424, 14375, // alpha = 0.8770471 + 15362, 46669, 15381, 14250, // alpha = 0.9070295 + 15324, 46565, 15319, 14092, // alpha = 0.9375157 + 15287, 46464, 15247, 13938, // alpha = 0.9685059 + 15248, 46363, 15178, 13791, // alpha = 1 + + // Cos (theta) = 0.4434366 + 23587, 49163, 25930, 24622, // alpha = 0.001 + 23587, 49163, 25930, 24622, // alpha = 0.001 + 23586, 49163, 25933, 24622, // alpha = 0.001007811 + 23414, 49163, 25790, 24458, // alpha = 0.002267574 + 22577, 49163, 24911, 23612, // alpha = 0.004031243 + 21854, 49163, 24267, 22892, // alpha = 0.006298816 + 21360, 49163, 23740, 22404, // alpha = 0.009070295 + 20855, 49162, 23279, 21894, // alpha = 0.01234568 + 20528, 49162, 22865, 21563, // alpha = 0.01612497 + 20123, 49161, 22579, 21164, // alpha = 0.02040816 + 19802, 49160, 22219, 20839, // alpha = 0.02519527 + 19564, 49159, 21916, 20598, // alpha = 0.03048627 + 19310, 49157, 21684, 20351, // alpha = 0.03628118 + 19027, 49155, 21504, 20064, // alpha = 0.04258 + 18803, 49153, 21217, 19837, // alpha = 0.04938272 + 18622, 49147, 20987, 19653, // alpha = 0.05668934 + 18474, 49140, 20795, 19503, // alpha = 0.06449988 + 18270, 49130, 20637, 19300, // alpha = 0.07281432 + 18064, 49119, 20502, 19090, // alpha = 0.08163266 + 17888, 49105, 20299, 18911, // alpha = 0.09095491 + 17738, 49088, 20103, 18757, // alpha = 0.1007811 + 17609, 49066, 19932, 18624, // alpha = 0.1111111 + 17497, 49040, 19783, 18508, // alpha = 0.1219451 + 17391, 49009, 19653, 18382, // alpha = 0.1332829 + 17221, 48974, 19535, 18203, // alpha = 0.1451247 + 17073, 48934, 19404, 18046, // alpha = 0.1574704 + 16943, 48891, 19213, 17906, // alpha = 0.17032 + 16832, 48844, 19042, 17783, // alpha = 0.1836735 + 16733, 48795, 18886, 17671, // alpha = 0.1975309 + 16645, 48744, 18745, 17570, // alpha = 0.2118922 + 16570, 48692, 18619, 17480, // alpha = 0.2267574 + 16504, 48638, 18503, 17389, // alpha = 0.2421265 + 16444, 48585, 18369, 17238, // alpha = 0.2579995 + 16390, 48532, 18183, 17099, // alpha = 0.2743765 + 16306, 48479, 18017, 16976, // alpha = 0.2912573 + 16217, 48428, 17869, 16857, // alpha = 0.308642 + 16141, 48378, 17735, 16751, // alpha = 0.3265306 + 16076, 48329, 17616, 16655, // alpha = 0.3449232 + 16019, 48281, 17510, 16566, // alpha = 0.3638196 + 15960, 48235, 17414, 16482, // alpha = 0.38322 + 15908, 48191, 17250, 16403, // alpha = 0.4031242 + 15862, 48148, 17099, 16283, // alpha = 0.4235324 + 15826, 48087, 16963, 16158, // alpha = 0.4444445 + 15784, 48007, 16839, 16033, // alpha = 0.4658605 + 15747, 47931, 16728, 15920, // alpha = 0.4877803 + 15720, 47856, 16629, 15822, // alpha = 0.5102041 + 15687, 47785, 16541, 15724, // alpha = 0.5331318 + 15660, 47715, 16460, 15637, // alpha = 0.5565634 + 15640, 47648, 16388, 15558, // alpha = 0.5804989 + 15609, 47583, 16258, 15480, // alpha = 0.6049383 + 15587, 47519, 16139, 15411, // alpha = 0.6298816 + 15567, 47458, 16032, 15328, // alpha = 0.6553288 + 15544, 47397, 15934, 15206, // alpha = 0.68128 + 15517, 47338, 15845, 15084, // alpha = 0.7077349 + 15505, 47280, 15769, 14978, // alpha = 0.7346939 + 15483, 47223, 15695, 14869, // alpha = 0.7621567 + 15460, 47167, 15628, 14768, // alpha = 0.7901235 + 15440, 47112, 15568, 14671, // alpha = 0.8185941 + 15422, 47010, 15512, 14580, // alpha = 0.8475687 + 15400, 46902, 15461, 14490, // alpha = 0.8770471 + 15380, 46797, 15414, 14406, // alpha = 0.9070295 + 15354, 46694, 15371, 14309, // alpha = 0.9375157 + 15313, 46591, 15303, 14151, // alpha = 0.9685059 + 15283, 46489, 15232, 13996, // alpha = 1 + + // Cos (theta) = 0.4195011 + 23596, 49236, 26070, 24707, // alpha = 0.001 + 23596, 49236, 26070, 24707, // alpha = 0.001 + 23591, 49236, 26073, 24702, // alpha = 0.001007811 + 23403, 49236, 25941, 24580, // alpha = 0.002267574 + 22580, 49236, 25070, 23692, // alpha = 0.004031243 + 21852, 49236, 24477, 22988, // alpha = 0.006298816 + 21361, 49235, 23879, 22534, // alpha = 0.009070295 + 20852, 49235, 23490, 21990, // alpha = 0.01234568 + 20528, 49235, 23025, 21640, // alpha = 0.01612497 + 20125, 49234, 22704, 21287, // alpha = 0.02040816 + 19803, 49233, 22423, 20938, // alpha = 0.02519527 + 19564, 49231, 22083, 20679, // alpha = 0.03048627 + 19310, 49229, 21825, 20483, // alpha = 0.03628118 + 19028, 49227, 21622, 20180, // alpha = 0.04258 + 18803, 49224, 21421, 19935, // alpha = 0.04938272 + 18621, 49220, 21162, 19737, // alpha = 0.05668934 + 18472, 49215, 20948, 19576, // alpha = 0.06449988 + 18267, 49209, 20770, 19428, // alpha = 0.07281432 + 18060, 49202, 20621, 19202, // alpha = 0.08163266 + 17886, 49193, 20492, 19011, // alpha = 0.09095491 + 17735, 49182, 20286, 18845, // alpha = 0.1007811 + 17605, 49169, 20095, 18702, // alpha = 0.1111111 + 17493, 49153, 19926, 18578, // alpha = 0.1219451 + 17384, 49116, 19778, 18469, // alpha = 0.1332829 + 17213, 49074, 19645, 18313, // alpha = 0.1451247 + 17066, 49027, 19525, 18145, // alpha = 0.1574704 + 16940, 48977, 19381, 17997, // alpha = 0.17032 + 16830, 48924, 19186, 17865, // alpha = 0.1836735 + 16730, 48868, 19011, 17744, // alpha = 0.1975309 + 16646, 48811, 18854, 17636, // alpha = 0.2118922 + 16571, 48753, 18712, 17539, // alpha = 0.2267574 + 16503, 48695, 18585, 17450, // alpha = 0.2421265 + 16445, 48637, 18471, 17331, // alpha = 0.2579995 + 16394, 48580, 18307, 17187, // alpha = 0.2743765 + 16312, 48525, 18125, 17052, // alpha = 0.2912573 + 16230, 48471, 17963, 16930, // alpha = 0.308642 + 16154, 48418, 17819, 16817, // alpha = 0.3265306 + 16086, 48367, 17689, 16713, // alpha = 0.3449232 + 16029, 48318, 17574, 16619, // alpha = 0.3638196 + 15973, 48271, 17473, 16533, // alpha = 0.38322 + 15919, 48225, 17357, 16450, // alpha = 0.4031242 + 15883, 48182, 17192, 16379, // alpha = 0.4235324 + 15842, 48140, 17047, 16243, // alpha = 0.4444445 + 15805, 48072, 16916, 16119, // alpha = 0.4658605 + 15770, 47995, 16798, 16006, // alpha = 0.4877803 + 15737, 47920, 16693, 15899, // alpha = 0.5102041 + 15710, 47848, 16598, 15804, // alpha = 0.5331318 + 15678, 47779, 16512, 15712, // alpha = 0.5565634 + 15661, 47711, 16434, 15636, // alpha = 0.5804989 + 15635, 47646, 16345, 15558, // alpha = 0.6049383 + 15605, 47583, 16219, 15483, // alpha = 0.6298816 + 15590, 47521, 16107, 15418, // alpha = 0.6553288 + 15564, 47461, 16003, 15347, // alpha = 0.68128 + 15541, 47402, 15909, 15225, // alpha = 0.7077349 + 15517, 47345, 15823, 15110, // alpha = 0.7346939 + 15500, 47288, 15748, 15004, // alpha = 0.7621567 + 15480, 47232, 15677, 14902, // alpha = 0.7901235 + 15458, 47178, 15614, 14799, // alpha = 0.8185941 + 15438, 47124, 15556, 14707, // alpha = 0.8475687 + 15413, 47038, 15500, 14612, // alpha = 0.8770471 + 15398, 46934, 15453, 14527, // alpha = 0.9070295 + 15375, 46830, 15406, 14440, // alpha = 0.9375157 + 15346, 46727, 15364, 14358, // alpha = 0.9685059 + 15310, 46626, 15290, 14224, // alpha = 1 + + // Cos (theta) = 0.3950617 + 23593, 49319, 26286, 24790, // alpha = 0.001 + 23593, 49319, 26286, 24790, // alpha = 0.001 + 23587, 49319, 26252, 24784, // alpha = 0.001007811 + 23383, 49319, 26088, 24644, // alpha = 0.002267574 + 22576, 49318, 25268, 23775, // alpha = 0.004031243 + 21850, 49318, 24650, 23096, // alpha = 0.006298816 + 21360, 49318, 24054, 22610, // alpha = 0.009070295 + 20854, 49318, 23649, 22105, // alpha = 0.01234568 + 20526, 49317, 23219, 21724, // alpha = 0.01612497 + 20124, 49316, 22858, 21422, // alpha = 0.02040816 + 19803, 49315, 22599, 21049, // alpha = 0.02519527 + 19564, 49313, 22285, 20769, // alpha = 0.03048627 + 19309, 49310, 21995, 20558, // alpha = 0.03628118 + 19027, 49307, 21767, 20308, // alpha = 0.04258 + 18801, 49303, 21586, 20044, // alpha = 0.04938272 + 18620, 49298, 21374, 19833, // alpha = 0.05668934 + 18471, 49293, 21132, 19659, // alpha = 0.06449988 + 18265, 49285, 20933, 19515, // alpha = 0.07281432 + 18057, 49277, 20762, 19329, // alpha = 0.08163266 + 17881, 49265, 20617, 19121, // alpha = 0.09095491 + 17730, 49251, 20492, 18943, // alpha = 0.1007811 + 17601, 49234, 20286, 18789, // alpha = 0.1111111 + 17488, 49214, 20095, 18655, // alpha = 0.1219451 + 17374, 49192, 19925, 18537, // alpha = 0.1332829 + 17205, 49166, 19773, 18433, // alpha = 0.1451247 + 17061, 49126, 19637, 18255, // alpha = 0.1574704 + 16937, 49068, 19514, 18096, // alpha = 0.17032 + 16826, 49007, 19352, 17950, // alpha = 0.1836735 + 16729, 48944, 19153, 17822, // alpha = 0.1975309 + 16646, 48881, 18975, 17706, // alpha = 0.2118922 + 16571, 48817, 18817, 17602, // alpha = 0.2267574 + 16507, 48754, 18675, 17508, // alpha = 0.2421265 + 16452, 48692, 18549, 17423, // alpha = 0.2579995 + 16397, 48631, 18438, 17278, // alpha = 0.2743765 + 16319, 48572, 18244, 17135, // alpha = 0.2912573 + 16241, 48515, 18066, 17006, // alpha = 0.308642 + 16166, 48460, 17911, 16887, // alpha = 0.3265306 + 16098, 48408, 17772, 16776, // alpha = 0.3449232 + 16045, 48357, 17648, 16681, // alpha = 0.3638196 + 15992, 48308, 17538, 16590, // alpha = 0.38322 + 15939, 48262, 17441, 16506, // alpha = 0.4031242 + 15895, 48218, 17297, 16429, // alpha = 0.4235324 + 15866, 48175, 17141, 16345, // alpha = 0.4444445 + 15823, 48135, 16999, 16214, // alpha = 0.4658605 + 15785, 48063, 16876, 16095, // alpha = 0.4877803 + 15763, 47988, 16762, 15994, // alpha = 0.5102041 + 15731, 47915, 16661, 15893, // alpha = 0.5331318 + 15702, 47846, 16569, 15802, // alpha = 0.5565634 + 15674, 47778, 16487, 15716, // alpha = 0.5804989 + 15656, 47713, 16414, 15641, // alpha = 0.6049383 + 15626, 47650, 16308, 15565, // alpha = 0.6298816 + 15604, 47588, 16188, 15497, // alpha = 0.6553288 + 15584, 47529, 16081, 15431, // alpha = 0.68128 + 15562, 47470, 15981, 15371, // alpha = 0.7077349 + 15539, 47413, 15891, 15262, // alpha = 0.7346939 + 15519, 47356, 15808, 15150, // alpha = 0.7621567 + 15496, 47301, 15734, 15043, // alpha = 0.7901235 + 15475, 47247, 15668, 14942, // alpha = 0.8185941 + 15455, 47194, 15606, 14843, // alpha = 0.8475687 + 15431, 47142, 15549, 14747, // alpha = 0.8770471 + 15412, 47075, 15498, 14656, // alpha = 0.9070295 + 15394, 46972, 15450, 14571, // alpha = 0.9375157 + 15372, 46871, 15406, 14486, // alpha = 0.9685059 + 15344, 46771, 15364, 14404, // alpha = 1 + + // Cos (theta) = 0.3701184 + 23594, 49413, 26495, 24890, // alpha = 0.001 + 23594, 49413, 26495, 24890, // alpha = 0.001 + 23587, 49413, 26547, 24881, // alpha = 0.001007811 + 23416, 49413, 26323, 24752, // alpha = 0.002267574 + 22577, 49413, 25500, 23875, // alpha = 0.004031243 + 21853, 49413, 24801, 23227, // alpha = 0.006298816 + 21363, 49412, 24265, 22700, // alpha = 0.009070295 + 20855, 49412, 23805, 22235, // alpha = 0.01234568 + 20528, 49411, 23456, 21824, // alpha = 0.01612497 + 20124, 49410, 23045, 21541, // alpha = 0.02040816 + 19803, 49408, 22751, 21174, // alpha = 0.02519527 + 19564, 49406, 22533, 20874, // alpha = 0.03048627 + 19307, 49403, 22204, 20644, // alpha = 0.03628118 + 19024, 49399, 21944, 20452, // alpha = 0.04258 + 18800, 49394, 21737, 20170, // alpha = 0.04938272 + 18618, 49388, 21568, 19940, // alpha = 0.05668934 + 18470, 49381, 21357, 19753, // alpha = 0.06449988 + 18259, 49371, 21129, 19595, // alpha = 0.07281432 + 18052, 49360, 20934, 19463, // alpha = 0.08163266 + 17875, 49345, 20768, 19245, // alpha = 0.09095491 + 17724, 49327, 20624, 19052, // alpha = 0.1007811 + 17594, 49306, 20498, 18885, // alpha = 0.1111111 + 17483, 49281, 20295, 18739, // alpha = 0.1219451 + 17364, 49254, 20098, 18613, // alpha = 0.1332829 + 17199, 49223, 19922, 18502, // alpha = 0.1451247 + 17055, 49191, 19765, 18375, // alpha = 0.1574704 + 16930, 49158, 19625, 18201, // alpha = 0.17032 + 16824, 49094, 19498, 18047, // alpha = 0.1836735 + 16728, 49024, 19314, 17907, // alpha = 0.1975309 + 16648, 48953, 19115, 17785, // alpha = 0.2118922 + 16574, 48884, 18937, 17670, // alpha = 0.2267574 + 16509, 48815, 18778, 17568, // alpha = 0.2421265 + 16451, 48749, 18638, 17475, // alpha = 0.2579995 + 16401, 48684, 18515, 17375, // alpha = 0.2743765 + 16329, 48622, 18379, 17225, // alpha = 0.2912573 + 16247, 48562, 18187, 17084, // alpha = 0.308642 + 16180, 48505, 18016, 16962, // alpha = 0.3265306 + 16112, 48451, 17865, 16846, // alpha = 0.3449232 + 16052, 48398, 17731, 16742, // alpha = 0.3638196 + 16008, 48349, 17612, 16651, // alpha = 0.38322 + 15957, 48301, 17506, 16565, // alpha = 0.4031242 + 15921, 48256, 17411, 16490, // alpha = 0.4235324 + 15886, 48213, 17248, 16419, // alpha = 0.4444445 + 15844, 48172, 17098, 16321, // alpha = 0.4658605 + 15811, 48132, 16961, 16202, // alpha = 0.4877803 + 15777, 48060, 16841, 16089, // alpha = 0.5102041 + 15757, 47988, 16732, 15997, // alpha = 0.5331318 + 15726, 47917, 16636, 15902, // alpha = 0.5565634 + 15703, 47850, 16549, 15818, // alpha = 0.5804989 + 15677, 47784, 16470, 15733, // alpha = 0.6049383 + 15653, 47721, 16398, 15658, // alpha = 0.6298816 + 15624, 47659, 16282, 15584, // alpha = 0.6553288 + 15609, 47600, 16169, 15521, // alpha = 0.68128 + 15583, 47541, 16062, 15454, // alpha = 0.7077349 + 15561, 47484, 15969, 15394, // alpha = 0.7346939 + 15534, 47428, 15881, 15309, // alpha = 0.7621567 + 15517, 47374, 15804, 15202, // alpha = 0.7901235 + 15491, 47320, 15731, 15091, // alpha = 0.8185941 + 15468, 47267, 15664, 14990, // alpha = 0.8475687 + 15451, 47215, 15607, 14893, // alpha = 0.8770471 + 15429, 47164, 15551, 14799, // alpha = 0.9070295 + 15405, 47113, 15499, 14708, // alpha = 0.9375157 + 15385, 47022, 15450, 14620, // alpha = 0.9685059 + 15368, 46924, 15406, 14541, // alpha = 1 + + // Cos (theta) = 0.3446712 + 23612, 49522, 26663, 25029, // alpha = 0.001 + 23612, 49522, 26663, 25029, // alpha = 0.001 + 23583, 49522, 26725, 24989, // alpha = 0.001007811 + 23408, 49522, 26557, 24849, // alpha = 0.002267574 + 22581, 49522, 25704, 23994, // alpha = 0.004031243 + 21851, 49522, 24991, 23371, // alpha = 0.006298816 + 21366, 49522, 24531, 22804, // alpha = 0.009070295 + 20853, 49521, 24000, 22382, // alpha = 0.01234568 + 20526, 49520, 23654, 21937, // alpha = 0.01612497 + 20124, 49518, 23280, 21631, // alpha = 0.02040816 + 19804, 49516, 22940, 21321, // alpha = 0.02519527 + 19562, 49513, 22688, 20991, // alpha = 0.03048627 + 19306, 49509, 22464, 20744, // alpha = 0.03628118 + 19024, 49504, 22165, 20551, // alpha = 0.04258 + 18798, 49498, 21924, 20313, // alpha = 0.04938272 + 18617, 49490, 21730, 20065, // alpha = 0.05668934 + 18467, 49481, 21571, 19860, // alpha = 0.06449988 + 18255, 49469, 21371, 19689, // alpha = 0.07281432 + 18046, 49453, 21145, 19544, // alpha = 0.08163266 + 17869, 49434, 20952, 19387, // alpha = 0.09095491 + 17718, 49411, 20784, 19176, // alpha = 0.1007811 + 17588, 49384, 20637, 18994, // alpha = 0.1111111 + 17477, 49354, 20508, 18836, // alpha = 0.1219451 + 17356, 49320, 20304, 18699, // alpha = 0.1332829 + 17191, 49284, 20099, 18577, // alpha = 0.1451247 + 17050, 49247, 19915, 18470, // alpha = 0.1574704 + 16928, 49208, 19752, 18321, // alpha = 0.17032 + 16822, 49169, 19607, 18152, // alpha = 0.1836735 + 16728, 49107, 19479, 18000, // alpha = 0.1975309 + 16648, 49030, 19273, 17866, // alpha = 0.2118922 + 16577, 48954, 19072, 17745, // alpha = 0.2267574 + 16511, 48880, 18895, 17633, // alpha = 0.2421265 + 16457, 48809, 18740, 17536, // alpha = 0.2579995 + 16411, 48740, 18604, 17448, // alpha = 0.2743765 + 16350, 48675, 18483, 17328, // alpha = 0.2912573 + 16269, 48613, 18324, 17180, // alpha = 0.308642 + 16196, 48553, 18137, 17044, // alpha = 0.3265306 + 16137, 48497, 17972, 16928, // alpha = 0.3449232 + 16076, 48443, 17826, 16817, // alpha = 0.3638196 + 16028, 48392, 17697, 16722, // alpha = 0.38322 + 15978, 48344, 17581, 16631, // alpha = 0.4031242 + 15941, 48298, 17479, 16554, // alpha = 0.4235324 + 15902, 48254, 17369, 16481, // alpha = 0.4444445 + 15873, 48212, 17208, 16416, // alpha = 0.4658605 + 15835, 48172, 17060, 16322, // alpha = 0.4877803 + 15808, 48133, 16931, 16216, // alpha = 0.5102041 + 15777, 48065, 16814, 16110, // alpha = 0.5331318 + 15752, 47995, 16710, 16016, // alpha = 0.5565634 + 15720, 47926, 16615, 15921, // alpha = 0.5804989 + 15704, 47860, 16531, 15842, // alpha = 0.6049383 + 15674, 47796, 16455, 15761, // alpha = 0.6298816 + 15646, 47734, 16386, 15684, // alpha = 0.6553288 + 15623, 47674, 16267, 15615, // alpha = 0.68128 + 15609, 47616, 16159, 15551, // alpha = 0.7077349 + 15581, 47559, 16059, 15485, // alpha = 0.7346939 + 15553, 47504, 15964, 15422, // alpha = 0.7621567 + 15533, 47449, 15881, 15366, // alpha = 0.7901235 + 15511, 47395, 15806, 15261, // alpha = 0.8185941 + 15490, 47343, 15737, 15155, // alpha = 0.8475687 + 15464, 47292, 15671, 15050, // alpha = 0.8770471 + 15443, 47242, 15612, 14956, // alpha = 0.9070295 + 15425, 47191, 15558, 14863, // alpha = 0.9375157 + 15406, 47142, 15508, 14772, // alpha = 0.9685059 + 15378, 47083, 15455, 14681, // alpha = 1 + + // Cos (theta) = 0.3187201 + 23604, 49651, 26880, 25151, // alpha = 0.001 + 23604, 49651, 26880, 25151, // alpha = 0.001 + 23580, 49651, 26916, 25116, // alpha = 0.001007811 + 23393, 49651, 26786, 24957, // alpha = 0.002267574 + 22580, 49650, 25888, 24127, // alpha = 0.004031243 + 21849, 49650, 25239, 23539, // alpha = 0.006298816 + 21359, 49650, 24725, 22918, // alpha = 0.009070295 + 20855, 49649, 24249, 22544, // alpha = 0.01234568 + 20526, 49647, 23842, 22070, // alpha = 0.01612497 + 20124, 49645, 23566, 21737, // alpha = 0.02040816 + 19801, 49642, 23182, 21488, // alpha = 0.02519527 + 19562, 49638, 22887, 21132, // alpha = 0.03048627 + 19305, 49633, 22662, 20861, // alpha = 0.03628118 + 19022, 49627, 22444, 20649, // alpha = 0.04258 + 18796, 49619, 22163, 20480, // alpha = 0.04938272 + 18614, 49609, 21935, 20208, // alpha = 0.05668934 + 18464, 49596, 21748, 19983, // alpha = 0.06449988 + 18248, 49580, 21590, 19796, // alpha = 0.07281432 + 18038, 49559, 21410, 19636, // alpha = 0.08163266 + 17860, 49533, 21181, 19502, // alpha = 0.09095491 + 17710, 49504, 20980, 19317, // alpha = 0.1007811 + 17581, 49470, 20806, 19117, // alpha = 0.1111111 + 17471, 49432, 20652, 18944, // alpha = 0.1219451 + 17346, 49392, 20515, 18794, // alpha = 0.1332829 + 17187, 49349, 20307, 18663, // alpha = 0.1451247 + 17048, 49305, 20091, 18546, // alpha = 0.1574704 + 16928, 49261, 19901, 18443, // alpha = 0.17032 + 16823, 49217, 19732, 18270, // alpha = 0.1836735 + 16727, 49173, 19585, 18101, // alpha = 0.1975309 + 16651, 49109, 19453, 17959, // alpha = 0.2118922 + 16581, 49027, 19228, 17826, // alpha = 0.2267574 + 16519, 48948, 19030, 17708, // alpha = 0.2421265 + 16464, 48872, 18857, 17603, // alpha = 0.2579995 + 16412, 48800, 18706, 17503, // alpha = 0.2743765 + 16351, 48732, 18573, 17417, // alpha = 0.2912573 + 16289, 48667, 18455, 17282, // alpha = 0.308642 + 16216, 48605, 18274, 17139, // alpha = 0.3265306 + 16161, 48547, 18093, 17019, // alpha = 0.3449232 + 16100, 48492, 17934, 16904, // alpha = 0.3638196 + 16061, 48439, 17793, 16809, // alpha = 0.38322 + 16011, 48390, 17667, 16715, // alpha = 0.4031242 + 15963, 48343, 17556, 16629, // alpha = 0.4235324 + 15932, 48298, 17458, 16558, // alpha = 0.4444445 + 15900, 48255, 17332, 16488, // alpha = 0.4658605 + 15864, 48215, 17174, 16425, // alpha = 0.4877803 + 15825, 48176, 17033, 16341, // alpha = 0.5102041 + 15804, 48138, 16909, 16240, // alpha = 0.5331318 + 15775, 48077, 16796, 16140, // alpha = 0.5565634 + 15745, 48008, 16695, 16046, // alpha = 0.5804989 + 15720, 47941, 16604, 15958, // alpha = 0.6049383 + 15697, 47877, 16524, 15876, // alpha = 0.6298816 + 15672, 47814, 16451, 15798, // alpha = 0.6553288 + 15642, 47755, 16383, 15721, // alpha = 0.68128 + 15611, 47696, 16263, 15646, // alpha = 0.7077349 + 15594, 47638, 16156, 15584, // alpha = 0.7346939 + 15572, 47583, 16059, 15523, // alpha = 0.7621567 + 15551, 47529, 15971, 15463, // alpha = 0.7901235 + 15522, 47476, 15885, 15401, // alpha = 0.8185941 + 15503, 47424, 15810, 15338, // alpha = 0.8475687 + 15478, 47373, 15742, 15229, // alpha = 0.8770471 + 15463, 47323, 15683, 15131, // alpha = 0.9070295 + 15437, 47273, 15623, 15030, // alpha = 0.9375157 + 15412, 47224, 15567, 14930, // alpha = 0.9685059 + 15390, 47176, 15515, 14840, // alpha = 1 + + // Cos (theta) = 0.292265 + 23573, 49803, 27170, 25260, // alpha = 0.001 + 23573, 49803, 27170, 25260, // alpha = 0.001 + 23586, 49803, 27130, 25283, // alpha = 0.001007811 + 23422, 49803, 27002, 25121, // alpha = 0.002267574 + 22578, 49803, 26140, 24284, // alpha = 0.004031243 + 21853, 49803, 25556, 23650, // alpha = 0.006298816 + 21355, 49802, 24944, 23057, // alpha = 0.009070295 + 20857, 49801, 24572, 22650, // alpha = 0.01234568 + 20527, 49799, 24091, 22231, // alpha = 0.01612497 + 20123, 49796, 23760, 21862, // alpha = 0.02040816 + 19801, 49792, 23496, 21597, // alpha = 0.02519527 + 19561, 49787, 23146, 21297, // alpha = 0.03048627 + 19303, 49780, 22875, 20998, // alpha = 0.03628118 + 19019, 49772, 22667, 20765, // alpha = 0.04258 + 18793, 49761, 22471, 20579, // alpha = 0.04938272 + 18610, 49747, 22199, 20376, // alpha = 0.05668934 + 18460, 49730, 21973, 20127, // alpha = 0.06449988 + 18238, 49707, 21785, 19920, // alpha = 0.07281432 + 18028, 49679, 21624, 19744, // alpha = 0.08163266 + 17851, 49645, 21468, 19595, // alpha = 0.09095491 + 17700, 49607, 21225, 19467, // alpha = 0.1007811 + 17574, 49564, 21013, 19260, // alpha = 0.1111111 + 17465, 49518, 20827, 19068, // alpha = 0.1219451 + 17338, 49469, 20663, 18903, // alpha = 0.1332829 + 17177, 49418, 20517, 18756, // alpha = 0.1451247 + 17041, 49368, 20299, 18628, // alpha = 0.1574704 + 16926, 49317, 20075, 18516, // alpha = 0.17032 + 16824, 49268, 19880, 18399, // alpha = 0.1836735 + 16735, 49220, 19710, 18219, // alpha = 0.1975309 + 16655, 49173, 19562, 18058, // alpha = 0.2118922 + 16588, 49106, 19409, 17918, // alpha = 0.2267574 + 16528, 49021, 19188, 17789, // alpha = 0.2421265 + 16475, 48941, 18992, 17677, // alpha = 0.2579995 + 16427, 48865, 18824, 17574, // alpha = 0.2743765 + 16382, 48794, 18676, 17483, // alpha = 0.2912573 + 16315, 48726, 18547, 17400, // alpha = 0.308642 + 16244, 48662, 18434, 17251, // alpha = 0.3265306 + 16179, 48602, 18236, 17120, // alpha = 0.3449232 + 16133, 48545, 18061, 17007, // alpha = 0.3638196 + 16091, 48491, 17903, 16907, // alpha = 0.38322 + 16039, 48440, 17768, 16807, // alpha = 0.4031242 + 15997, 48392, 17645, 16721, // alpha = 0.4235324 + 15955, 48346, 17538, 16639, // alpha = 0.4444445 + 15925, 48303, 17442, 16572, // alpha = 0.4658605 + 15892, 48261, 17305, 16506, // alpha = 0.4877803 + 15856, 48222, 17153, 16443, // alpha = 0.5102041 + 15830, 48183, 17017, 16389, // alpha = 0.5331318 + 15804, 48147, 16896, 16288, // alpha = 0.5565634 + 15767, 48096, 16789, 16182, // alpha = 0.5804989 + 15741, 48028, 16692, 16088, // alpha = 0.6049383 + 15707, 47963, 16603, 15995, // alpha = 0.6298816 + 15696, 47900, 16527, 15926, // alpha = 0.6553288 + 15666, 47839, 16454, 15844, // alpha = 0.68128 + 15643, 47780, 16391, 15771, // alpha = 0.7077349 + 15611, 47723, 16279, 15696, // alpha = 0.7346939 + 15582, 47667, 16169, 15627, // alpha = 0.7621567 + 15569, 47613, 16075, 15569, // alpha = 0.7901235 + 15540, 47561, 15985, 15506, // alpha = 0.8185941 + 15512, 47508, 15902, 15445, // alpha = 0.8475687 + 15492, 47457, 15828, 15392, // alpha = 0.8770471 + 15471, 47407, 15762, 15317, // alpha = 0.9070295 + 15447, 47358, 15698, 15214, // alpha = 0.9375157 + 15423, 47309, 15638, 15114, // alpha = 0.9685059 + 15406, 47260, 15581, 15021, // alpha = 1 + + // Cos (theta) = 0.2653061 + 23583, 49989, 27505, 25468, // alpha = 0.001 + 23583, 49989, 27505, 25468, // alpha = 0.001 + 23588, 49989, 27503, 25478, // alpha = 0.001007811 + 23421, 49989, 27273, 25293, // alpha = 0.002267574 + 22575, 49988, 26490, 24474, // alpha = 0.004031243 + 21853, 49988, 25789, 23776, // alpha = 0.006298816 + 21363, 49987, 25241, 23236, // alpha = 0.009070295 + 20855, 49985, 24793, 22774, // alpha = 0.01234568 + 20527, 49982, 24420, 22424, // alpha = 0.01612497 + 20122, 49979, 24023, 22012, // alpha = 0.02040816 + 19798, 49973, 23735, 21718, // alpha = 0.02519527 + 19560, 49966, 23490, 21497, // alpha = 0.03048627 + 19299, 49957, 23164, 21164, // alpha = 0.03628118 + 19016, 49946, 22908, 20905, // alpha = 0.04258 + 18789, 49931, 22703, 20697, // alpha = 0.04938272 + 18606, 49911, 22537, 20528, // alpha = 0.05668934 + 18455, 49886, 22269, 20301, // alpha = 0.06449988 + 18225, 49854, 22039, 20065, // alpha = 0.07281432 + 18015, 49815, 21839, 19869, // alpha = 0.08163266 + 17841, 49771, 21668, 19704, // alpha = 0.09095491 + 17690, 49721, 21519, 19561, // alpha = 0.1007811 + 17566, 49667, 21272, 19424, // alpha = 0.1111111 + 17459, 49610, 21042, 19210, // alpha = 0.1219451 + 17331, 49551, 20841, 19028, // alpha = 0.1332829 + 17179, 49492, 20666, 18868, // alpha = 0.1451247 + 17042, 49434, 20513, 18724, // alpha = 0.1574704 + 16930, 49377, 20282, 18600, // alpha = 0.17032 + 16825, 49322, 20056, 18486, // alpha = 0.1836735 + 16743, 49269, 19858, 18350, // alpha = 0.1975309 + 16668, 49219, 19688, 18178, // alpha = 0.2118922 + 16598, 49171, 19541, 18020, // alpha = 0.2267574 + 16539, 49101, 19373, 17883, // alpha = 0.2421265 + 16490, 49016, 19155, 17763, // alpha = 0.2579995 + 16443, 48937, 18965, 17655, // alpha = 0.2743765 + 16399, 48862, 18799, 17557, // alpha = 0.2912573 + 16349, 48792, 18654, 17474, // alpha = 0.308642 + 16285, 48725, 18527, 17391, // alpha = 0.3265306 + 16226, 48663, 18402, 17254, // alpha = 0.3449232 + 16165, 48604, 18207, 17127, // alpha = 0.3638196 + 16109, 48549, 18037, 17014, // alpha = 0.38322 + 16076, 48496, 17885, 16923, // alpha = 0.4031242 + 16027, 48447, 17752, 16827, // alpha = 0.4235324 + 15998, 48399, 17633, 16752, // alpha = 0.4444445 + 15965, 48355, 17529, 16676, // alpha = 0.4658605 + 15922, 48312, 17435, 16601, // alpha = 0.4877803 + 15882, 48271, 17295, 16533, // alpha = 0.5102041 + 15849, 48232, 17149, 16471, // alpha = 0.5331318 + 15835, 48195, 17018, 16422, // alpha = 0.5565634 + 15798, 48159, 16901, 16345, // alpha = 0.5804989 + 15764, 48122, 16793, 16242, // alpha = 0.6049383 + 15730, 48055, 16699, 16145, // alpha = 0.6298816 + 15708, 47992, 16613, 16063, // alpha = 0.6553288 + 15689, 47930, 16538, 15982, // alpha = 0.68128 + 15664, 47871, 16467, 15903, // alpha = 0.7077349 + 15633, 47814, 16402, 15825, // alpha = 0.7346939 + 15602, 47758, 16305, 15750, // alpha = 0.7621567 + 15574, 47703, 16195, 15681, // alpha = 0.7901235 + 15556, 47650, 16100, 15622, // alpha = 0.8185941 + 15530, 47597, 16011, 15560, // alpha = 0.8475687 + 15512, 47546, 15933, 15505, // alpha = 0.8770471 + 15483, 47495, 15853, 15445, // alpha = 0.9070295 + 15456, 47445, 15784, 15388, // alpha = 0.9375157 + 15436, 47396, 15717, 15316, // alpha = 0.9685059 + 15409, 47348, 15655, 15208, // alpha = 1 + + // Cos (theta) = 0.2378433 + 23584, 50197, 27805, 25653, // alpha = 0.001 + 23584, 50197, 27805, 25653, // alpha = 0.001 + 23591, 50197, 27806, 25661, // alpha = 0.001007811 + 23400, 50197, 27674, 25488, // alpha = 0.002267574 + 22573, 50197, 26790, 24643, // alpha = 0.004031243 + 21854, 50197, 26093, 23931, // alpha = 0.006298816 + 21366, 50196, 25627, 23453, // alpha = 0.009070295 + 20854, 50195, 25094, 22930, // alpha = 0.01234568 + 20526, 50193, 24730, 22595, // alpha = 0.01612497 + 20120, 50190, 24384, 22200, // alpha = 0.02040816 + 19798, 50187, 24027, 21869, // alpha = 0.02519527 + 19558, 50182, 23759, 21623, // alpha = 0.03048627 + 19296, 50174, 23554, 21369, // alpha = 0.03628118 + 19010, 50158, 23238, 21075, // alpha = 0.04258 + 18782, 50136, 22983, 20840, // alpha = 0.04938272 + 18599, 50107, 22773, 20650, // alpha = 0.05668934 + 18448, 50069, 22599, 20492, // alpha = 0.06449988 + 18210, 50024, 22376, 20240, // alpha = 0.07281432 + 18002, 49971, 22123, 20020, // alpha = 0.08163266 + 17826, 49911, 21904, 19831, // alpha = 0.09095491 + 17680, 49847, 21715, 19671, // alpha = 0.1007811 + 17559, 49779, 21549, 19535, // alpha = 0.1111111 + 17455, 49709, 21306, 19378, // alpha = 0.1219451 + 17322, 49640, 21061, 19168, // alpha = 0.1332829 + 17177, 49572, 20846, 18991, // alpha = 0.1451247 + 17046, 49505, 20664, 18833, // alpha = 0.1574704 + 16937, 49441, 20507, 18695, // alpha = 0.17032 + 16830, 49380, 20268, 18568, // alpha = 0.1836735 + 16742, 49323, 20039, 18459, // alpha = 0.1975309 + 16669, 49269, 19843, 18298, // alpha = 0.2118922 + 16611, 49218, 19674, 18138, // alpha = 0.2267574 + 16554, 49171, 19529, 17992, // alpha = 0.2421265 + 16503, 49100, 19351, 17863, // alpha = 0.2579995 + 16460, 49017, 19135, 17749, // alpha = 0.2743765 + 16416, 48939, 18946, 17646, // alpha = 0.2912573 + 16371, 48865, 18783, 17554, // alpha = 0.308642 + 16325, 48796, 18640, 17482, // alpha = 0.3265306 + 16261, 48731, 18516, 17408, // alpha = 0.3449232 + 16215, 48670, 18387, 17287, // alpha = 0.3638196 + 16170, 48613, 18195, 17170, // alpha = 0.38322 + 16116, 48558, 18026, 17059, // alpha = 0.4031242 + 16062, 48507, 17878, 16956, // alpha = 0.4235324 + 16029, 48458, 17748, 16871, // alpha = 0.4444445 + 15981, 48412, 17632, 16783, // alpha = 0.4658605 + 15960, 48368, 17530, 16716, // alpha = 0.4877803 + 15917, 48326, 17439, 16641, // alpha = 0.5102041 + 15877, 48285, 17309, 16572, // alpha = 0.5331318 + 15837, 48247, 17162, 16507, // alpha = 0.5565634 + 15826, 48211, 17036, 16459, // alpha = 0.5804989 + 15794, 48176, 16921, 16405, // alpha = 0.6049383 + 15764, 48142, 16816, 16323, // alpha = 0.6298816 + 15728, 48091, 16721, 16222, // alpha = 0.6553288 + 15693, 48028, 16634, 16126, // alpha = 0.68128 + 15660, 47967, 16554, 16038, // alpha = 0.7077349 + 15627, 47908, 16482, 15954, // alpha = 0.7346939 + 15616, 47851, 16418, 15889, // alpha = 0.7621567 + 15586, 47795, 16335, 15815, // alpha = 0.7901235 + 15567, 47741, 16229, 15754, // alpha = 0.8185941 + 15538, 47687, 16129, 15685, // alpha = 0.8475687 + 15508, 47635, 16037, 15617, // alpha = 0.8770471 + 15479, 47584, 15952, 15554, // alpha = 0.9070295 + 15464, 47534, 15880, 15498, // alpha = 0.9375157 + 15437, 47485, 15806, 15442, // alpha = 0.9685059 + 15427, 47437, 15743, 15398, // alpha = 1 + + // Cos (theta) = 0.2098765 + 23587, 50345, 28136, 25809, // alpha = 0.001 + 23587, 50345, 28136, 25809, // alpha = 0.001 + 23591, 50345, 28119, 25814, // alpha = 0.001007811 + 23401, 50344, 27983, 25681, // alpha = 0.002267574 + 22576, 50344, 27116, 24801, // alpha = 0.004031243 + 21854, 50344, 26516, 24127, // alpha = 0.006298816 + 21358, 50342, 25926, 23635, // alpha = 0.009070295 + 20853, 50341, 25531, 23129, // alpha = 0.01234568 + 20526, 50338, 25062, 22747, // alpha = 0.01612497 + 20118, 50334, 24741, 22438, // alpha = 0.02040816 + 19795, 50329, 24445, 22060, // alpha = 0.02519527 + 19556, 50321, 24100, 21780, // alpha = 0.03048627 + 19289, 50312, 23838, 21565, // alpha = 0.03628118 + 19002, 50299, 23630, 21288, // alpha = 0.04258 + 18775, 50282, 23376, 21019, // alpha = 0.04938272 + 18589, 50259, 23102, 20799, // alpha = 0.05668934 + 18437, 50231, 22874, 20618, // alpha = 0.06449988 + 18191, 50199, 22679, 20453, // alpha = 0.07281432 + 17986, 50148, 22498, 20201, // alpha = 0.08163266 + 17816, 50069, 22212, 19988, // alpha = 0.09095491 + 17673, 49986, 21965, 19806, // alpha = 0.1007811 + 17553, 49902, 21754, 19649, // alpha = 0.1111111 + 17453, 49818, 21572, 19515, // alpha = 0.1219451 + 17326, 49736, 21333, 19338, // alpha = 0.1332829 + 17181, 49658, 21071, 19136, // alpha = 0.1451247 + 17046, 49582, 20851, 18953, // alpha = 0.1574704 + 16942, 49512, 20662, 18802, // alpha = 0.17032 + 16852, 49446, 20504, 18670, // alpha = 0.1836735 + 16771, 49383, 20259, 18553, // alpha = 0.1975309 + 16692, 49325, 20031, 18447, // alpha = 0.2118922 + 16637, 49271, 19833, 18289, // alpha = 0.2267574 + 16579, 49221, 19668, 18130, // alpha = 0.2421265 + 16528, 49174, 19524, 17990, // alpha = 0.2579995 + 16490, 49108, 19341, 17874, // alpha = 0.2743765 + 16447, 49026, 19126, 17765, // alpha = 0.2912573 + 16406, 48948, 18942, 17665, // alpha = 0.308642 + 16368, 48876, 18780, 17582, // alpha = 0.3265306 + 16300, 48809, 18641, 17502, // alpha = 0.3449232 + 16255, 48745, 18516, 17437, // alpha = 0.3638196 + 16194, 48684, 18388, 17331, // alpha = 0.38322 + 16163, 48627, 18198, 17230, // alpha = 0.4031242 + 16108, 48574, 18035, 17115, // alpha = 0.4235324 + 16056, 48523, 17891, 17013, // alpha = 0.4444445 + 16006, 48474, 17762, 16917, // alpha = 0.4658605 + 15967, 48428, 17648, 16835, // alpha = 0.4877803 + 15947, 48385, 17547, 16766, // alpha = 0.5102041 + 15906, 48344, 17457, 16692, // alpha = 0.5331318 + 15875, 48304, 17345, 16626, // alpha = 0.5565634 + 15837, 48266, 17199, 16562, // alpha = 0.5804989 + 15800, 48230, 17069, 16501, // alpha = 0.6049383 + 15777, 48195, 16954, 16448, // alpha = 0.6298816 + 15749, 48162, 16845, 16397, // alpha = 0.6553288 + 15711, 48129, 16748, 16303, // alpha = 0.68128 + 15679, 48067, 16660, 16209, // alpha = 0.7077349 + 15649, 48006, 16580, 16122, // alpha = 0.7346939 + 15624, 47946, 16507, 16044, // alpha = 0.7621567 + 15593, 47889, 16444, 15961, // alpha = 0.7901235 + 15572, 47834, 16385, 15893, // alpha = 0.8185941 + 15543, 47780, 16276, 15819, // alpha = 0.8475687 + 15518, 47727, 16175, 15752, // alpha = 0.8770471 + 15493, 47676, 16082, 15682, // alpha = 0.9070295 + 15463, 47626, 16001, 15617, // alpha = 0.9375157 + 15448, 47577, 15923, 15566, // alpha = 0.9685059 + 15423, 47530, 15852, 15506, // alpha = 1 + + // Cos (theta) = 0.1814059 + 23578, 50540, 28669, 25998, // alpha = 0.001 + 23578, 50540, 28669, 25998, // alpha = 0.001 + 23590, 50540, 28653, 26016, // alpha = 0.001007811 + 23432, 50540, 28418, 25883, // alpha = 0.002267574 + 22574, 50539, 27630, 25003, // alpha = 0.004031243 + 21850, 50538, 26903, 24383, // alpha = 0.006298816 + 21358, 50536, 26380, 23816, // alpha = 0.009070295 + 20852, 50534, 25898, 23393, // alpha = 0.01234568 + 20524, 50529, 25570, 22948, // alpha = 0.01612497 + 20115, 50523, 25140, 22639, // alpha = 0.02040816 + 19792, 50515, 24827, 22311, // alpha = 0.02519527 + 19551, 50503, 24597, 21983, // alpha = 0.03048627 + 19279, 50488, 24261, 21731, // alpha = 0.03628118 + 18992, 50466, 23980, 21534, // alpha = 0.04258 + 18762, 50438, 23752, 21247, // alpha = 0.04938272 + 18576, 50402, 23564, 20989, // alpha = 0.05668934 + 18418, 50360, 23264, 20776, // alpha = 0.06449988 + 18173, 50313, 22996, 20601, // alpha = 0.07281432 + 17973, 50263, 22768, 20428, // alpha = 0.08163266 + 17805, 50210, 22575, 20177, // alpha = 0.09095491 + 17666, 50140, 22294, 19966, // alpha = 0.1007811 + 17552, 50037, 22018, 19787, // alpha = 0.1111111 + 17453, 49937, 21786, 19630, // alpha = 0.1219451 + 17331, 49842, 21593, 19495, // alpha = 0.1332829 + 17197, 49753, 21357, 19311, // alpha = 0.1451247 + 17074, 49669, 21087, 19111, // alpha = 0.1574704 + 16970, 49592, 20861, 18940, // alpha = 0.17032 + 16874, 49519, 20671, 18788, // alpha = 0.1836735 + 16792, 49452, 20510, 18659, // alpha = 0.1975309 + 16721, 49390, 20269, 18546, // alpha = 0.2118922 + 16655, 49333, 20039, 18448, // alpha = 0.2267574 + 16608, 49279, 19842, 18303, // alpha = 0.2421265 + 16555, 49229, 19673, 18153, // alpha = 0.2579995 + 16520, 49183, 19529, 18030, // alpha = 0.2743765 + 16476, 49126, 19355, 17910, // alpha = 0.2912573 + 16435, 49045, 19140, 17803, // alpha = 0.308642 + 16409, 48968, 18954, 17717, // alpha = 0.3265306 + 16361, 48896, 18795, 17627, // alpha = 0.3449232 + 16301, 48829, 18656, 17549, // alpha = 0.3638196 + 16236, 48765, 18536, 17475, // alpha = 0.38322 + 16175, 48705, 18426, 17408, // alpha = 0.4031242 + 16149, 48648, 18236, 17307, // alpha = 0.4235324 + 16096, 48595, 18074, 17192, // alpha = 0.4444445 + 16043, 48545, 17927, 17087, // alpha = 0.4658605 + 15993, 48496, 17797, 16989, // alpha = 0.4877803 + 15960, 48451, 17683, 16905, // alpha = 0.5102041 + 15931, 48407, 17579, 16833, // alpha = 0.5331318 + 15892, 48366, 17486, 16758, // alpha = 0.5565634 + 15863, 48326, 17396, 16692, // alpha = 0.5804989 + 15821, 48288, 17249, 16622, // alpha = 0.6049383 + 15780, 48251, 17114, 16555, // alpha = 0.6298816 + 15743, 48216, 16992, 16495, // alpha = 0.6553288 + 15705, 48182, 16884, 16438, // alpha = 0.68128 + 15675, 48149, 16784, 16388, // alpha = 0.7077349 + 15657, 48108, 16695, 16310, // alpha = 0.7346939 + 15625, 48047, 16614, 16215, // alpha = 0.7621567 + 15590, 47989, 16540, 16125, // alpha = 0.7901235 + 15561, 47932, 16472, 16044, // alpha = 0.8185941 + 15543, 47877, 16411, 15978, // alpha = 0.8475687 + 15513, 47824, 16331, 15901, // alpha = 0.8770471 + 15484, 47773, 16231, 15824, // alpha = 0.9070295 + 15456, 47722, 16140, 15752, // alpha = 0.9375157 + 15433, 47674, 16058, 15689, // alpha = 0.9685059 + 15407, 47626, 15971, 15627, // alpha = 1 + + // Cos (theta) = 0.1524313 + 23590, 50812, 29075, 26295, // alpha = 0.001 + 23590, 50812, 29075, 26295, // alpha = 0.001 + 23582, 50812, 29053, 26285, // alpha = 0.001007811 + 23389, 50811, 28921, 26104, // alpha = 0.002267574 + 22570, 50811, 28057, 25281, // alpha = 0.004031243 + 21849, 50809, 27443, 24661, // alpha = 0.006298816 + 21355, 50806, 26879, 24065, // alpha = 0.009070295 + 20850, 50801, 26445, 23655, // alpha = 0.01234568 + 20523, 50794, 25998, 23228, // alpha = 0.01612497 + 20111, 50784, 25692, 22857, // alpha = 0.02040816 + 19785, 50769, 25343, 22591, // alpha = 0.02519527 + 19545, 50749, 25012, 22261, // alpha = 0.03048627 + 19264, 50720, 24756, 21956, // alpha = 0.03628118 + 18973, 50682, 24528, 21716, // alpha = 0.04258 + 18744, 50633, 24195, 21525, // alpha = 0.04938272 + 18559, 50576, 23920, 21235, // alpha = 0.05668934 + 18394, 50513, 23690, 20982, // alpha = 0.06449988 + 18153, 50445, 23443, 20770, // alpha = 0.07281432 + 17959, 50377, 23120, 20596, // alpha = 0.08163266 + 17800, 50309, 22853, 20415, // alpha = 0.09095491 + 17666, 50244, 22632, 20164, // alpha = 0.1007811 + 17558, 50181, 22370, 19955, // alpha = 0.1111111 + 17466, 50070, 22069, 19777, // alpha = 0.1219451 + 17352, 49962, 21826, 19618, // alpha = 0.1332829 + 17220, 49862, 21621, 19489, // alpha = 0.1451247 + 17106, 49770, 21403, 19303, // alpha = 0.1574704 + 17014, 49685, 21122, 19118, // alpha = 0.17032 + 16926, 49607, 20889, 18957, // alpha = 0.1836735 + 16847, 49534, 20693, 18816, // alpha = 0.1975309 + 16772, 49468, 20530, 18691, // alpha = 0.2118922 + 16718, 49406, 20302, 18589, // alpha = 0.2267574 + 16657, 49348, 20069, 18494, // alpha = 0.2421265 + 16602, 49294, 19869, 18384, // alpha = 0.2579995 + 16556, 49244, 19701, 18237, // alpha = 0.2743765 + 16507, 49198, 19554, 18099, // alpha = 0.2912573 + 16462, 49154, 19404, 17977, // alpha = 0.308642 + 16421, 49074, 19193, 17866, // alpha = 0.3265306 + 16404, 48997, 19001, 17785, // alpha = 0.3449232 + 16347, 48925, 18843, 17692, // alpha = 0.3638196 + 16276, 48858, 18700, 17608, // alpha = 0.38322 + 16218, 48794, 18578, 17534, // alpha = 0.4031242 + 16155, 48734, 18469, 17462, // alpha = 0.4235324 + 16128, 48677, 18307, 17410, // alpha = 0.4444445 + 16072, 48623, 18136, 17291, // alpha = 0.4658605 + 16020, 48572, 17984, 17179, // alpha = 0.4877803 + 15973, 48523, 17846, 17081, // alpha = 0.5102041 + 15923, 48476, 17726, 16982, // alpha = 0.5331318 + 15891, 48432, 17617, 16904, // alpha = 0.5565634 + 15847, 48390, 17522, 16822, // alpha = 0.5804989 + 15840, 48350, 17436, 16768, // alpha = 0.6049383 + 15799, 48311, 17311, 16695, // alpha = 0.6298816 + 15759, 48274, 17174, 16627, // alpha = 0.6553288 + 15720, 48239, 17051, 16563, // alpha = 0.68128 + 15682, 48206, 16937, 16503, // alpha = 0.7077349 + 15646, 48173, 16838, 16447, // alpha = 0.7346939 + 15611, 48142, 16750, 16393, // alpha = 0.7621567 + 15577, 48097, 16666, 16301, // alpha = 0.7901235 + 15558, 48039, 16590, 16224, // alpha = 0.8185941 + 15529, 47983, 16524, 16138, // alpha = 0.8475687 + 15499, 47928, 16459, 16057, // alpha = 0.8770471 + 15476, 47876, 16401, 15984, // alpha = 0.9070295 + 15459, 47825, 16309, 15922, // alpha = 0.9375157 + 15437, 47775, 16217, 15854, // alpha = 0.9685059 + 15411, 47727, 16119, 15785, // alpha = 1 + + // Cos (theta) = 0.1229529 + 23589, 51209, 29770, 26669, // alpha = 0.001 + 23589, 51209, 29770, 26669, // alpha = 0.001 + 23581, 51209, 29761, 26663, // alpha = 0.001007811 + 23403, 51209, 29621, 26493, // alpha = 0.002267574 + 22571, 51208, 28757, 25654, // alpha = 0.004031243 + 21848, 51207, 28037, 24932, // alpha = 0.006298816 + 21360, 51204, 27558, 24445, // alpha = 0.009070295 + 20850, 51198, 27030, 23929, // alpha = 0.01234568 + 20518, 51184, 26687, 23594, // alpha = 0.01612497 + 20102, 51164, 26274, 23174, // alpha = 0.02040816 + 19777, 51135, 25930, 22842, // alpha = 0.02519527 + 19532, 51092, 25669, 22592, // alpha = 0.03048627 + 19235, 51035, 25333, 22270, // alpha = 0.03628118 + 18946, 50962, 25008, 21970, // alpha = 0.04258 + 18721, 50878, 24742, 21731, // alpha = 0.04938272 + 18541, 50786, 24473, 21536, // alpha = 0.05668934 + 18368, 50691, 24114, 21254, // alpha = 0.06449988 + 18144, 50597, 23823, 20996, // alpha = 0.07281432 + 17954, 50507, 23589, 20778, // alpha = 0.08163266 + 17813, 50421, 23245, 20605, // alpha = 0.09095491 + 17678, 50342, 22941, 20419, // alpha = 0.1007811 + 17577, 50269, 22697, 20175, // alpha = 0.1111111 + 17491, 50202, 22470, 19968, // alpha = 0.1219451 + 17415, 50107, 22147, 19794, // alpha = 0.1332829 + 17290, 49995, 21885, 19645, // alpha = 0.1451247 + 17160, 49894, 21674, 19512, // alpha = 0.1574704 + 17061, 49800, 21486, 19359, // alpha = 0.17032 + 16980, 49714, 21193, 19185, // alpha = 0.1836735 + 16896, 49636, 20951, 19023, // alpha = 0.1975309 + 16817, 49562, 20749, 18879, // alpha = 0.2118922 + 16748, 49494, 20578, 18756, // alpha = 0.2267574 + 16711, 49431, 20385, 18663, // alpha = 0.2421265 + 16652, 49373, 20147, 18564, // alpha = 0.2579995 + 16600, 49318, 19942, 18476, // alpha = 0.2743765 + 16547, 49267, 19769, 18359, // alpha = 0.2912573 + 16498, 49220, 19619, 18214, // alpha = 0.308642 + 16453, 49175, 19488, 18086, // alpha = 0.3265306 + 16411, 49115, 19292, 17970, // alpha = 0.3449232 + 16387, 49037, 19095, 17876, // alpha = 0.3638196 + 16318, 48963, 18922, 17780, // alpha = 0.38322 + 16248, 48894, 18771, 17691, // alpha = 0.4031242 + 16182, 48828, 18637, 17608, // alpha = 0.4235324 + 16122, 48766, 18519, 17534, // alpha = 0.4444445 + 16065, 48708, 18400, 17465, // alpha = 0.4658605 + 16008, 48652, 18218, 17395, // alpha = 0.4877803 + 15958, 48600, 18057, 17277, // alpha = 0.5102041 + 15943, 48551, 17914, 17195, // alpha = 0.5331318 + 15894, 48505, 17787, 17093, // alpha = 0.5565634 + 15860, 48460, 17674, 17008, // alpha = 0.5804989 + 15812, 48418, 17571, 16923, // alpha = 0.6049383 + 15773, 48378, 17486, 16839, // alpha = 0.6298816 + 15732, 48340, 17404, 16763, // alpha = 0.6553288 + 15694, 48304, 17260, 16695, // alpha = 0.68128 + 15659, 48269, 17128, 16629, // alpha = 0.7077349 + 15623, 48235, 17017, 16567, // alpha = 0.7346939 + 15590, 48203, 16913, 16510, // alpha = 0.7621567 + 15557, 48172, 16817, 16457, // alpha = 0.7901235 + 15526, 48143, 16731, 16408, // alpha = 0.8185941 + 15497, 48100, 16653, 16336, // alpha = 0.8475687 + 15496, 48044, 16579, 16282, // alpha = 0.8770471 + 15466, 47991, 16517, 16191, // alpha = 0.9070295 + 15437, 47938, 16459, 16105, // alpha = 0.9375157 + 15409, 47888, 16408, 16023, // alpha = 0.9685059 + 15381, 47839, 16336, 15945, // alpha = 1 + + // Cos (theta) = 0.09297051 + 23601, 51547, 30598, 27034, // alpha = 0.001 + 23601, 51547, 30598, 27034, // alpha = 0.001 + 23593, 51547, 30568, 27025, // alpha = 0.001007811 + 23427, 51546, 30381, 26888, // alpha = 0.002267574 + 22575, 51544, 29577, 26011, // alpha = 0.004031243 + 21849, 51541, 28883, 25378, // alpha = 0.006298816 + 21352, 51534, 28330, 24817, // alpha = 0.009070295 + 20844, 51524, 27863, 24376, // alpha = 0.01234568 + 20511, 51507, 27474, 23927, // alpha = 0.01612497 + 20085, 51483, 27051, 23617, // alpha = 0.02040816 + 19755, 51445, 26740, 23232, // alpha = 0.02519527 + 19509, 51394, 26380, 22895, // alpha = 0.03048627 + 19195, 51332, 26007, 22638, // alpha = 0.03628118 + 18915, 51262, 25710, 22345, // alpha = 0.04258 + 18701, 51180, 25344, 22029, // alpha = 0.04938272 + 18531, 51038, 24972, 21773, // alpha = 0.05668934 + 18375, 50902, 24680, 21573, // alpha = 0.06449988 + 18153, 50777, 24330, 21303, // alpha = 0.07281432 + 17979, 50662, 23977, 21034, // alpha = 0.08163266 + 17840, 50558, 23701, 20817, // alpha = 0.09095491 + 17714, 50465, 23418, 20632, // alpha = 0.1007811 + 17617, 50380, 23076, 20488, // alpha = 0.1111111 + 17543, 50304, 22800, 20264, // alpha = 0.1219451 + 17467, 50235, 22582, 20058, // alpha = 0.1332829 + 17389, 50168, 22287, 19885, // alpha = 0.1451247 + 17280, 50054, 21999, 19740, // alpha = 0.1574704 + 17177, 49948, 21767, 19617, // alpha = 0.17032 + 17076, 49852, 21577, 19505, // alpha = 0.1836735 + 16981, 49763, 21341, 19351, // alpha = 0.1975309 + 16887, 49680, 21083, 19168, // alpha = 0.2118922 + 16808, 49604, 20867, 19015, // alpha = 0.2267574 + 16741, 49534, 20683, 18885, // alpha = 0.2421265 + 16698, 49468, 20526, 18779, // alpha = 0.2579995 + 16640, 49407, 20306, 18673, // alpha = 0.2743765 + 16585, 49350, 20077, 18580, // alpha = 0.2912573 + 16529, 49297, 19880, 18491, // alpha = 0.308642 + 16475, 49247, 19711, 18381, // alpha = 0.3265306 + 16429, 49200, 19566, 18237, // alpha = 0.3449232 + 16385, 49157, 19430, 18105, // alpha = 0.3638196 + 16306, 49080, 19212, 17988, // alpha = 0.38322 + 16231, 49004, 19024, 17879, // alpha = 0.4031242 + 16168, 48933, 18861, 17785, // alpha = 0.4235324 + 16097, 48866, 18721, 17691, // alpha = 0.4444445 + 16028, 48804, 18599, 17604, // alpha = 0.4658605 + 15976, 48745, 18488, 17535, // alpha = 0.4877803 + 15923, 48690, 18351, 17466, // alpha = 0.5102041 + 15921, 48638, 18166, 17430, // alpha = 0.5331318 + 15872, 48589, 18015, 17337, // alpha = 0.5565634 + 15825, 48542, 17883, 17225, // alpha = 0.5804989 + 15783, 48498, 17763, 17125, // alpha = 0.6049383 + 15739, 48456, 17657, 17034, // alpha = 0.6298816 + 15699, 48416, 17566, 16946, // alpha = 0.6553288 + 15661, 48378, 17480, 16868, // alpha = 0.68128 + 15624, 48342, 17400, 16796, // alpha = 0.7077349 + 15592, 48308, 17259, 16730, // alpha = 0.7346939 + 15560, 48275, 17134, 16666, // alpha = 0.7621567 + 15528, 48243, 17025, 16606, // alpha = 0.7901235 + 15497, 48213, 16927, 16550, // alpha = 0.8185941 + 15474, 48183, 16840, 16505, // alpha = 0.8475687 + 15434, 48155, 16752, 16452, // alpha = 0.8770471 + 15406, 48128, 16682, 16406, // alpha = 0.9070295 + 15369, 48075, 16611, 16330, // alpha = 0.9375157 + 15328, 48023, 16551, 16249, // alpha = 0.9685059 + 15279, 47974, 16494, 16174, // alpha = 1 + + // Cos (theta) = 0.06248425 + 23598, 52220, 31744, 27690, // alpha = 0.001 + 23598, 52220, 31744, 27690, // alpha = 0.001 + 23587, 52220, 31744, 27683, // alpha = 0.001007811 + 23418, 52218, 31592, 27514, // alpha = 0.002267574 + 22565, 52212, 30762, 26663, // alpha = 0.004031243 + 21846, 52200, 30030, 25933, // alpha = 0.006298816 + 21345, 52179, 29505, 25425, // alpha = 0.009070295 + 20829, 52143, 28988, 24905, // alpha = 0.01234568 + 20493, 52083, 28608, 24553, // alpha = 0.01612497 + 20041, 51994, 28116, 24077, // alpha = 0.02040816 + 19714, 51879, 27748, 23735, // alpha = 0.02519527 + 19480, 51750, 27288, 23414, // alpha = 0.03048627 + 19162, 51620, 26868, 23033, // alpha = 0.03628118 + 18908, 51495, 26486, 22742, // alpha = 0.04258 + 18709, 51380, 26029, 22498, // alpha = 0.04938272 + 18555, 51278, 25690, 22146, // alpha = 0.05668934 + 18430, 51175, 25280, 21870, // alpha = 0.06449988 + 18243, 51015, 24904, 21659, // alpha = 0.07281432 + 18076, 50874, 24620, 21470, // alpha = 0.08163266 + 17941, 50749, 24231, 21202, // alpha = 0.09095491 + 17839, 50638, 23896, 20992, // alpha = 0.1007811 + 17732, 50538, 23639, 20802, // alpha = 0.1111111 + 17627, 50447, 23331, 20635, // alpha = 0.1219451 + 17548, 50366, 23012, 20508, // alpha = 0.1332829 + 17466, 50291, 22760, 20297, // alpha = 0.1451247 + 17383, 50224, 22559, 20098, // alpha = 0.1574704 + 17261, 50147, 22257, 19931, // alpha = 0.17032 + 17162, 50033, 21980, 19793, // alpha = 0.1836735 + 17062, 49928, 21753, 19667, // alpha = 0.1975309 + 16950, 49831, 21569, 19541, // alpha = 0.2118922 + 16847, 49741, 21324, 19405, // alpha = 0.2267574 + 16771, 49659, 21063, 19234, // alpha = 0.2421265 + 16703, 49582, 20845, 19083, // alpha = 0.2579995 + 16648, 49512, 20661, 18954, // alpha = 0.2743765 + 16569, 49447, 20509, 18813, // alpha = 0.2912573 + 16511, 49387, 20275, 18701, // alpha = 0.308642 + 16460, 49332, 20054, 18602, // alpha = 0.3265306 + 16410, 49280, 19867, 18512, // alpha = 0.3449232 + 16345, 49232, 19708, 18426, // alpha = 0.3638196 + 16265, 49187, 19565, 18287, // alpha = 0.38322 + 16191, 49139, 19429, 18161, // alpha = 0.4031242 + 16122, 49061, 19222, 18044, // alpha = 0.4235324 + 16059, 48988, 19037, 17942, // alpha = 0.4444445 + 15996, 48919, 18873, 17847, // alpha = 0.4658605 + 15939, 48855, 18733, 17757, // alpha = 0.4877803 + 15882, 48795, 18609, 17673, // alpha = 0.5102041 + 15827, 48738, 18502, 17593, // alpha = 0.5331318 + 15777, 48685, 18379, 17525, // alpha = 0.5565634 + 15732, 48635, 18212, 17459, // alpha = 0.5804989 + 15689, 48588, 18058, 17399, // alpha = 0.6049383 + 15649, 48542, 17921, 17289, // alpha = 0.6298816 + 15611, 48500, 17804, 17190, // alpha = 0.6553288 + 15617, 48459, 17698, 17138, // alpha = 0.68128 + 15539, 48421, 17603, 17013, // alpha = 0.7077349 + 15549, 48384, 17521, 16972, // alpha = 0.7346939 + 15476, 48349, 17441, 16864, // alpha = 0.7621567 + 15446, 48316, 17342, 16795, // alpha = 0.7901235 + 15464, 48284, 17193, 16769, // alpha = 0.8185941 + 15426, 48253, 17064, 16716, // alpha = 0.8475687 + 15400, 48224, 16967, 16657, // alpha = 0.8770471 + 15375, 48196, 16878, 16599, // alpha = 0.9070295 + 15341, 48170, 16798, 16550, // alpha = 0.9375157 + 15294, 48144, 16725, 16500, // alpha = 0.9685059 + 15248, 48110, 16657, 16454, // alpha = 1 + + // Cos (theta) = 0.03149408 + 23604, 53229, 31744, 28711, // alpha = 0.001 + 23604, 53229, 31744, 28711, // alpha = 0.001 + 23602, 53229, 31744, 28715, // alpha = 0.001007811 + 23402, 53221, 31744, 28508, // alpha = 0.002267574 + 22554, 53199, 31744, 27668, // alpha = 0.004031243 + 21827, 53152, 31744, 26909, // alpha = 0.006298816 + 21284, 53058, 31395, 26339, // alpha = 0.009070295 + 20766, 52909, 30837, 25806, // alpha = 0.01234568 + 20405, 52728, 30195, 25321, // alpha = 0.01612497 + 19986, 52549, 29689, 24852, // alpha = 0.02040816 + 19698, 52387, 29031, 24474, // alpha = 0.02519527 + 19497, 52249, 28535, 24019, // alpha = 0.03048627 + 19263, 52042, 27967, 23707, // alpha = 0.03628118 + 19033, 51846, 27528, 23394, // alpha = 0.04258 + 18840, 51681, 27010, 23045, // alpha = 0.04938272 + 18695, 51539, 26649, 22785, // alpha = 0.05668934 + 18568, 51417, 26163, 22580, // alpha = 0.06449988 + 18453, 51309, 25797, 22295, // alpha = 0.07281432 + 18283, 51215, 25453, 22030, // alpha = 0.08163266 + 18096, 51063, 25049, 21799, // alpha = 0.09095491 + 17964, 50915, 24731, 21631, // alpha = 0.1007811 + 17820, 50781, 24412, 21438, // alpha = 0.1111111 + 17704, 50661, 24040, 21182, // alpha = 0.1219451 + 17610, 50553, 23751, 20985, // alpha = 0.1332829 + 17485, 50457, 23519, 20765, // alpha = 0.1451247 + 17412, 50371, 23158, 20625, // alpha = 0.1574704 + 17289, 50293, 22870, 20507, // alpha = 0.17032 + 17086, 50222, 22659, 20244, // alpha = 0.1836735 + 16984, 50141, 22414, 20071, // alpha = 0.1975309 + 16889, 50025, 22108, 19918, // alpha = 0.2118922 + 16761, 49919, 21883, 19734, // alpha = 0.2267574 + 16685, 49822, 21677, 19621, // alpha = 0.2421265 + 16618, 49733, 21505, 19521, // alpha = 0.2579995 + 16557, 49652, 21217, 19406, // alpha = 0.2743765 + 16500, 49577, 20979, 19246, // alpha = 0.2912573 + 16444, 49507, 20779, 19097, // alpha = 0.308642 + 16326, 49443, 20633, 18904, // alpha = 0.3265306 + 16239, 49384, 20484, 18794, // alpha = 0.3449232 + 16100, 49329, 20244, 18666, // alpha = 0.3638196 + 16089, 49277, 20032, 18599, // alpha = 0.38322 + 16021, 49229, 19848, 18518, // alpha = 0.4031242 + 15961, 49185, 19689, 18446, // alpha = 0.4235324 + 15902, 49135, 19555, 18319, // alpha = 0.4444445 + 15843, 49057, 19419, 18195, // alpha = 0.4658605 + 15790, 48985, 19223, 18076, // alpha = 0.4877803 + 15740, 48917, 19042, 17973, // alpha = 0.5102041 + 15693, 48853, 18886, 17874, // alpha = 0.5331318 + 15647, 48793, 18748, 17787, // alpha = 0.5565634 + 15604, 48736, 18622, 17711, // alpha = 0.5804989 + 15564, 48683, 18515, 17637, // alpha = 0.6049383 + 15528, 48633, 18419, 17559, // alpha = 0.6298816 + 15492, 48585, 18250, 17493, // alpha = 0.6553288 + 15458, 48540, 18102, 17435, // alpha = 0.68128 + 15393, 48498, 17996, 17261, // alpha = 0.7077349 + 15426, 48458, 17869, 17239, // alpha = 0.7346939 + 15391, 48419, 17750, 17159, // alpha = 0.7621567 + 15255, 48383, 17671, 16993, // alpha = 0.7901235 + 15314, 48349, 17561, 16993, // alpha = 0.8185941 + 15177, 48316, 17526, 16809, // alpha = 0.8475687 + 15347, 48285, 17331, 16923, // alpha = 0.8770471 + 15296, 48255, 17201, 16850, // alpha = 0.9070295 + 15248, 48226, 17086, 16794, // alpha = 0.9375157 + 15233, 48199, 16958, 16762, // alpha = 0.9685059 + 15193, 48172, 16876, 16686, // alpha = 1 + + // Cos (theta) = 0.0003754022 + 24614, 57742, 31744, 31744, // alpha = 0.001 + 24614, 57742, 31744, 31744, // alpha = 0.001 + 24595, 57735, 31744, 31744, // alpha = 0.001007811 + 23553, 56663, 31744, 31744, // alpha = 0.002267574 + 22634, 55888, 31744, 30717, // alpha = 0.004031243 + 21801, 55339, 31744, 29189, // alpha = 0.006298816 + 21106, 54755, 31744, 28182, // alpha = 0.009070295 + 19738, 54366, 31744, 27307, // alpha = 0.01234568 + 19828, 53947, 31744, 27750, // alpha = 0.01612497 + 18625, 53592, 31744, 26786, // alpha = 0.02040816 + 19598, 53336, 31744, 27022, // alpha = 0.02519527 + 17952, 53042, 31744, 25229, // alpha = 0.03048627 + 17756, 52751, 31542, 25206, // alpha = 0.03628118 + 18989, 52524, 30237, 25587, // alpha = 0.04258 + 17691, 52343, 30585, 23908, // alpha = 0.04938272 + 44941, 52169, 30232, 22653, // alpha = 0.05668934 + 16103, 51930, 28557, 23899, // alpha = 0.06449988 + 17607, 51731, 29268, 22221, // alpha = 0.07281432 + 17283, 51565, 28476, 22561, // alpha = 0.08163266 + 16426, 51424, 27760, 22534, // alpha = 0.09095491 + 16334, 51304, 27184, 22230, // alpha = 0.1007811 + 13770, 51200, 27268, 21022, // alpha = 0.1111111 + 16420, 51021, 26886, 20909, // alpha = 0.1219451 + 16752, 50865, 26190, 21486, // alpha = 0.1332829 + 13483, 50727, 25998, 20483, // alpha = 0.1451247 + 16009, 50607, 25618, 20632, // alpha = 0.1574704 + 14535, 50499, 24731, 20844, // alpha = 0.17032 + 16098, 50404, 24818, 20537, // alpha = 0.1836735 + 15314, 50319, 24436, 20261, // alpha = 0.1975309 + 16577, 50243, 24124, 20099, // alpha = 0.2118922 + 16556, 50172, 23043, 20876, // alpha = 0.2267574 + 16434, 50048, 23564, 19807, // alpha = 0.2421265 + 16464, 49935, 23112, 19797, // alpha = 0.2579995 + 14836, 49833, 22702, 19558, // alpha = 0.2743765 + 16154, 49740, 22578, 19594, // alpha = 0.2912573 + 16451, 49655, 21665, 20125, // alpha = 0.308642 + 16096, 49577, 22319, 18866, // alpha = 0.3265306 + 15878, 49505, 22003, 18827, // alpha = 0.3449232 + 15539, 49440, 21928, 18567, // alpha = 0.3638196 + 16194, 49379, 20783, 19567, // alpha = 0.38322 + 15985, 49323, 20632, 19416, // alpha = 0.4031242 + 15915, 49271, 20470, 19246, // alpha = 0.4235324 + 15561, 49223, 20982, 18133, // alpha = 0.4444445 + 13362, 49178, 19955, 18394, // alpha = 0.4658605 + 15465, 49121, 20618, 17908, // alpha = 0.4877803 + 15095, 49043, 20529, 17735, // alpha = 0.5102041 + 15381, 48970, 20258, 17683, // alpha = 0.5331318 + 15674, 48902, 19316, 18568, // alpha = 0.5565634 + 15627, 48839, 19106, 18493, // alpha = 0.5804989 + 15020, 48779, 19800, 17318, // alpha = 0.6049383 + 15137, 48723, 19465, 17515, // alpha = 0.6298816 + 15380, 48670, 19107, 17534, // alpha = 0.6553288 + 15012, 48620, 19279, 17110, // alpha = 0.68128 + 15430, 48573, 18399, 17926, // alpha = 0.7077349 + 15199, 48529, 18812, 17059, // alpha = 0.7346939 + 15366, 48487, 18032, 17754, // alpha = 0.7621567 + 15169, 48447, 17866, 17641, // alpha = 0.7901235 + 15259, 48409, 17745, 17608, // alpha = 0.8185941 + 15347, 48373, 17629, 17580, // alpha = 0.8475687 + 15399, 48339, 17506, 17561, // alpha = 0.8770471 + 15242, 48307, 17426, 17459, // alpha = 0.9070295 + 15128, 48276, 17647, 16808, // alpha = 0.9375157 + 15145, 48246, 17138, 17299, // alpha = 0.9685059 + 15097, 48218, 17019, 17181, // alpha = 1 + }; + + // NOTE: Formerly, we needed to also export and create a table for the BRDF's amplitude factor + fresnel coefficient + // but it turns out these 2 factors are actually already precomputed and available in the FGD table corresponding + // to the BRDF_CookTorrance BRDF, therefore they are no longer exported... + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_CookTorrance.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_CookTorrance.cs.meta new file mode 100644 index 00000000..908c4b78 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_CookTorrance.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c435ba0443ef98a4e9e433deafc998ee +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_CookTorrance.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Disney.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Disney.cs new file mode 100644 index 00000000..3191c524 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Disney.cs @@ -0,0 +1,4248 @@ +using UnityEngine; +using System; + +namespace BadDog.Rendering.AreaLight +{ + public partial class LTCAreaLight + { + // [GENERATED CONTENT 31 10月 2025 11:27:12] + // Table contains 3x3 matrix coefficients of M^-1 for the fitting of the BRDF_Disney BRDF using the LTC technique + // Only the 0,2,4,6 of the 3x3 coefficients are emitted, and they are encoded into FP16 + // From "Real-Time Polygonal-Light Shading with Linearly Transformed Cosines" 2016 (https://eheitzresearch.wordpress.com/415-2/) + // + // The table is accessed via LTCAreaLight.s_LtcMatrixData_BRDF_Disney[ + 64 * ] // Theta values are along the Y axis, Roughness values are along the X axis + // • roughness = ( / 63 )^2 (the table is indexed by perceptual roughness) + // • cosTheta = 1 - ( / 63 )^2 + // + public static ushort[] s_LtcMatrixData_BRDF_Disney = new ushort[64 * 64 * 4] + { + // Cos (theta) = 1 + 15378, 0, 15378, 0, // alpha = 0.001 + 15378, 0, 15378, 0, // alpha = 0.001 + 15378, 0, 15378, 0, // alpha = 0.001007811 + 15378, 0, 15378, 0, // alpha = 0.002267574 + 15377, 0, 15377, 0, // alpha = 0.004031243 + 15376, 0, 15376, 0, // alpha = 0.006298816 + 15375, 0, 15375, 0, // alpha = 0.009070295 + 15375, 0, 15375, 0, // alpha = 0.01234568 + 15374, 0, 15374, 0, // alpha = 0.01612497 + 15373, 0, 15373, 0, // alpha = 0.02040816 + 15372, 0, 15372, 0, // alpha = 0.02519527 + 15371, 0, 15371, 0, // alpha = 0.03048627 + 15371, 0, 15371, 0, // alpha = 0.03628118 + 15370, 0, 15370, 0, // alpha = 0.04258 + 15369, 0, 15369, 0, // alpha = 0.04938272 + 15368, 0, 15368, 0, // alpha = 0.05668934 + 15367, 0, 15367, 0, // alpha = 0.06449988 + 15367, 0, 15367, 0, // alpha = 0.07281432 + 15366, 0, 15366, 0, // alpha = 0.08163266 + 15365, 0, 15365, 0, // alpha = 0.09095491 + 15364, 0, 15364, 0, // alpha = 0.1007811 + 15363, 0, 15363, 0, // alpha = 0.1111111 + 15363, 0, 15363, 0, // alpha = 0.1219451 + 15362, 0, 15362, 0, // alpha = 0.1332829 + 15361, 0, 15361, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15358, 0, 15358, 0, // alpha = 0.17032 + 15357, 0, 15357, 0, // alpha = 0.1836735 + 15355, 0, 15355, 0, // alpha = 0.1975309 + 15354, 0, 15354, 0, // alpha = 0.2118922 + 15352, 0, 15352, 0, // alpha = 0.2267574 + 15351, 0, 15351, 0, // alpha = 0.2421265 + 15349, 0, 15349, 0, // alpha = 0.2579995 + 15348, 0, 15348, 0, // alpha = 0.2743765 + 15346, 0, 15346, 0, // alpha = 0.2912573 + 15344, 0, 15344, 0, // alpha = 0.308642 + 15343, 0, 15343, 0, // alpha = 0.3265306 + 15341, 0, 15341, 0, // alpha = 0.3449232 + 15340, 0, 15340, 0, // alpha = 0.3638196 + 15338, 0, 15338, 0, // alpha = 0.38322 + 15337, 0, 15337, 0, // alpha = 0.4031242 + 15335, 0, 15335, 0, // alpha = 0.4235324 + 15334, 0, 15334, 0, // alpha = 0.4444445 + 15332, 0, 15332, 0, // alpha = 0.4658605 + 15330, 0, 15330, 0, // alpha = 0.4877803 + 15329, 0, 15329, 0, // alpha = 0.5102041 + 15327, 0, 15327, 0, // alpha = 0.5331318 + 15326, 0, 15326, 0, // alpha = 0.5565634 + 15324, 0, 15324, 0, // alpha = 0.5804989 + 15322, 0, 15322, 0, // alpha = 0.6049383 + 15321, 0, 15321, 0, // alpha = 0.6298816 + 15321, 0, 15321, 0, // alpha = 0.6553288 + 15318, 0, 15318, 0, // alpha = 0.68128 + 15316, 0, 15316, 0, // alpha = 0.7077349 + 15315, 0, 15315, 0, // alpha = 0.7346939 + 15313, 0, 15313, 0, // alpha = 0.7621567 + 15312, 0, 15312, 0, // alpha = 0.7901235 + 15310, 0, 15310, 0, // alpha = 0.8185941 + 15308, 0, 15308, 0, // alpha = 0.8475687 + 15307, 0, 15307, 0, // alpha = 0.8770471 + 15305, 0, 15305, 0, // alpha = 0.9070295 + 15304, 0, 15304, 0, // alpha = 0.9375157 + 15302, 0, 15302, 0, // alpha = 0.9685059 + 15301, 0, 15301, 0, // alpha = 1 + + // Cos (theta) = 0.9997481 + 15378, 539, 15378, 33317, // alpha = 0.001 + 15378, 539, 15378, 33317, // alpha = 0.001 + 15378, 539, 15378, 33317, // alpha = 0.001007811 + 15378, 574, 15378, 33352, // alpha = 0.002267574 + 15377, 765, 15377, 33622, // alpha = 0.004031243 + 15376, 955, 15376, 33739, // alpha = 0.006298816 + 15375, 1146, 15375, 33931, // alpha = 0.009070295 + 15375, 1336, 15375, 33499, // alpha = 0.01234568 + 15374, 1527, 15374, 33294, // alpha = 0.01612497 + 15373, 1717, 15373, 33346, // alpha = 0.02040816 + 15372, 1907, 15372, 34176, // alpha = 0.02519527 + 15371, 2072, 15371, 33752, // alpha = 0.03048627 + 15371, 2167, 15371, 34095, // alpha = 0.03628118 + 15370, 2262, 15370, 34512, // alpha = 0.04258 + 15369, 2357, 15369, 34556, // alpha = 0.04938272 + 15368, 2451, 15368, 34635, // alpha = 0.05668934 + 15367, 2546, 15367, 34559, // alpha = 0.06449988 + 15367, 2640, 15367, 34904, // alpha = 0.07281432 + 15366, 2735, 15366, 34940, // alpha = 0.08163266 + 15365, 2829, 15365, 34837, // alpha = 0.09095491 + 15364, 2923, 15364, 35014, // alpha = 0.1007811 + 15363, 3018, 15363, 34975, // alpha = 0.1111111 + 15363, 3092, 15363, 35005, // alpha = 0.1219451 + 15362, 3139, 15362, 35200, // alpha = 0.1332829 + 15361, 3186, 15361, 35245, // alpha = 0.1451247 + 15360, 3233, 15360, 35487, // alpha = 0.1574704 + 15358, 3280, 15358, 35687, // alpha = 0.17032 + 15357, 3327, 15357, 35560, // alpha = 0.1836735 + 15355, 3373, 15355, 35504, // alpha = 0.1975309 + 15354, 3420, 15354, 35526, // alpha = 0.2118922 + 15352, 3467, 15352, 35577, // alpha = 0.2267574 + 15351, 3514, 15351, 35578, // alpha = 0.2421265 + 15349, 3560, 15349, 35707, // alpha = 0.2579995 + 15348, 3607, 15348, 35723, // alpha = 0.2743765 + 15346, 3654, 15346, 35839, // alpha = 0.2912573 + 15344, 3700, 15344, 35866, // alpha = 0.308642 + 15343, 3747, 15343, 35903, // alpha = 0.3265306 + 15341, 3793, 15341, 35942, // alpha = 0.3449232 + 15340, 3840, 15340, 35997, // alpha = 0.3638196 + 15338, 3886, 15338, 35991, // alpha = 0.38322 + 15337, 3933, 15337, 36041, // alpha = 0.4031242 + 15335, 3979, 15335, 35998, // alpha = 0.4235324 + 15333, 4025, 15334, 36060, // alpha = 0.4444445 + 15332, 4072, 15332, 36101, // alpha = 0.4658605 + 15330, 4107, 15330, 36075, // alpha = 0.4877803 + 15329, 4130, 15329, 36179, // alpha = 0.5102041 + 15327, 4153, 15327, 36078, // alpha = 0.5331318 + 15326, 4176, 15326, 36267, // alpha = 0.5565634 + 15324, 4199, 15324, 36313, // alpha = 0.5804989 + 15322, 4222, 15323, 36220, // alpha = 0.6049383 + 15321, 4246, 15321, 36343, // alpha = 0.6298816 + 15319, 4269, 15319, 36272, // alpha = 0.6553288 + 15318, 4292, 15318, 36241, // alpha = 0.68128 + 15316, 4315, 15316, 36450, // alpha = 0.7077349 + 15315, 4337, 15315, 36335, // alpha = 0.7346939 + 15313, 4360, 15313, 36366, // alpha = 0.7621567 + 15311, 4383, 15311, 36385, // alpha = 0.7901235 + 15310, 4406, 15310, 36496, // alpha = 0.8185941 + 15308, 4429, 15308, 36540, // alpha = 0.8475687 + 15307, 4452, 15307, 36638, // alpha = 0.8770471 + 15305, 4475, 15305, 36678, // alpha = 0.9070295 + 15304, 4498, 15304, 36768, // alpha = 0.9375157 + 15302, 4521, 15302, 36465, // alpha = 0.9685059 + 15301, 4543, 15301, 36729, // alpha = 1 + + // Cos (theta) = 0.9989922 + 15378, 1077, 15378, 33106, // alpha = 0.001 + 15378, 1077, 15378, 33106, // alpha = 0.001 + 15378, 1077, 15378, 33106, // alpha = 0.001007811 + 15378, 1147, 15378, 33935, // alpha = 0.002267574 + 15377, 1529, 15377, 33305, // alpha = 0.004031243 + 15376, 1910, 15376, 33326, // alpha = 0.006298816 + 15375, 2170, 15375, 34139, // alpha = 0.009070295 + 15375, 2360, 15375, 34094, // alpha = 0.01234568 + 15374, 2550, 15374, 34828, // alpha = 0.01612497 + 15373, 2740, 15373, 34954, // alpha = 0.02040816 + 15372, 2930, 15372, 35085, // alpha = 0.02519527 + 15371, 3096, 15371, 35039, // alpha = 0.03048627 + 15371, 3191, 15371, 35277, // alpha = 0.03628118 + 15370, 3286, 15370, 35472, // alpha = 0.04258 + 15369, 3380, 15369, 35439, // alpha = 0.04938272 + 15368, 3475, 15368, 35499, // alpha = 0.05668934 + 15367, 3569, 15367, 35419, // alpha = 0.06449988 + 15367, 3664, 15367, 35663, // alpha = 0.07281432 + 15366, 3758, 15366, 35887, // alpha = 0.08163266 + 15365, 3853, 15365, 35867, // alpha = 0.09095491 + 15364, 3947, 15364, 35945, // alpha = 0.1007811 + 15363, 4041, 15363, 36042, // alpha = 0.1111111 + 15363, 4116, 15363, 36132, // alpha = 0.1219451 + 15362, 4163, 15362, 36180, // alpha = 0.1332829 + 15361, 4210, 15361, 36305, // alpha = 0.1451247 + 15360, 4256, 15360, 36501, // alpha = 0.1574704 + 15358, 4303, 15358, 36740, // alpha = 0.17032 + 15357, 4350, 15357, 36602, // alpha = 0.1836735 + 15355, 4397, 15355, 36540, // alpha = 0.1975309 + 15354, 4444, 15354, 36550, // alpha = 0.2118922 + 15352, 4491, 15352, 36611, // alpha = 0.2267574 + 15351, 4537, 15351, 36638, // alpha = 0.2421265 + 15349, 4584, 15349, 36722, // alpha = 0.2579995 + 15348, 4631, 15348, 36806, // alpha = 0.2743765 + 15346, 4677, 15346, 36842, // alpha = 0.2912573 + 15344, 4724, 15344, 36879, // alpha = 0.308642 + 15343, 4771, 15343, 36873, // alpha = 0.3265306 + 15341, 4817, 15341, 36915, // alpha = 0.3449232 + 15340, 4863, 15340, 37007, // alpha = 0.3638196 + 15338, 4910, 15338, 36980, // alpha = 0.38322 + 15337, 4956, 15337, 36983, // alpha = 0.4031242 + 15335, 5003, 15335, 37090, // alpha = 0.4235324 + 15334, 5049, 15333, 37111, // alpha = 0.4444445 + 15332, 5095, 15332, 37138, // alpha = 0.4658605 + 15330, 5131, 15330, 37097, // alpha = 0.4877803 + 15329, 5154, 15329, 37164, // alpha = 0.5102041 + 15327, 5177, 15327, 37256, // alpha = 0.5331318 + 15326, 5200, 15326, 37246, // alpha = 0.5565634 + 15324, 5223, 15324, 37200, // alpha = 0.5804989 + 15323, 5246, 15323, 37195, // alpha = 0.6049383 + 15321, 5269, 15321, 37356, // alpha = 0.6298816 + 15319, 5292, 15319, 37382, // alpha = 0.6553288 + 15318, 5315, 15318, 37410, // alpha = 0.68128 + 15316, 5338, 15316, 37405, // alpha = 0.7077349 + 15315, 5361, 15315, 37465, // alpha = 0.7346939 + 15313, 5384, 15313, 37369, // alpha = 0.7621567 + 15312, 5407, 15312, 37439, // alpha = 0.7901235 + 15310, 5430, 15310, 37493, // alpha = 0.8185941 + 15308, 5453, 15308, 37541, // alpha = 0.8475687 + 15307, 5476, 15307, 37491, // alpha = 0.8770471 + 15305, 5499, 15305, 37578, // alpha = 0.9070295 + 15304, 5521, 15304, 37708, // alpha = 0.9375157 + 15302, 5544, 15302, 37838, // alpha = 0.9685059 + 15301, 5567, 15301, 37749, // alpha = 1 + + // Cos (theta) = 0.9977324 + 15378, 1615, 15378, 33653, // alpha = 0.001 + 15378, 1615, 15378, 33653, // alpha = 0.001 + 15378, 1615, 15378, 33653, // alpha = 0.001007811 + 15378, 1720, 15378, 33352, // alpha = 0.002267574 + 15377, 2170, 15377, 34081, // alpha = 0.004031243 + 15376, 2456, 15376, 34295, // alpha = 0.006298816 + 15375, 2742, 15375, 35058, // alpha = 0.009070295 + 15375, 3027, 15375, 35132, // alpha = 0.01234568 + 15374, 3192, 15374, 35327, // alpha = 0.01612497 + 15373, 3335, 15373, 35261, // alpha = 0.02040816 + 15372, 3477, 15372, 35693, // alpha = 0.02519527 + 15371, 3619, 15371, 35700, // alpha = 0.03048627 + 15371, 3762, 15371, 35677, // alpha = 0.03628118 + 15370, 3904, 15370, 35990, // alpha = 0.04258 + 15369, 4046, 15369, 36103, // alpha = 0.04938272 + 15368, 4142, 15368, 36049, // alpha = 0.05668934 + 15367, 4213, 15367, 36269, // alpha = 0.06449988 + 15367, 4284, 15367, 36232, // alpha = 0.07281432 + 15366, 4354, 15366, 36394, // alpha = 0.08163266 + 15365, 4425, 15365, 36461, // alpha = 0.09095491 + 15364, 4496, 15364, 36493, // alpha = 0.1007811 + 15363, 4566, 15363, 36610, // alpha = 0.1111111 + 15363, 4637, 15363, 36741, // alpha = 0.1219451 + 15362, 4707, 15362, 36894, // alpha = 0.1332829 + 15361, 4778, 15361, 36944, // alpha = 0.1451247 + 15360, 4848, 15360, 37113, // alpha = 0.1574704 + 15358, 4919, 15358, 37277, // alpha = 0.17032 + 15357, 4989, 15357, 37178, // alpha = 0.1836735 + 15355, 5059, 15355, 37134, // alpha = 0.1975309 + 15354, 5125, 15354, 37146, // alpha = 0.2118922 + 15352, 5160, 15352, 37184, // alpha = 0.2267574 + 15351, 5195, 15351, 37216, // alpha = 0.2421265 + 15349, 5230, 15349, 37250, // alpha = 0.2579995 + 15348, 5265, 15348, 37286, // alpha = 0.2743765 + 15346, 5300, 15346, 37348, // alpha = 0.2912573 + 15344, 5335, 15344, 37393, // alpha = 0.308642 + 15343, 5369, 15343, 37449, // alpha = 0.3265306 + 15341, 5404, 15341, 37452, // alpha = 0.3449232 + 15340, 5439, 15340, 37498, // alpha = 0.3638196 + 15338, 5474, 15338, 37538, // alpha = 0.38322 + 15337, 5509, 15337, 37619, // alpha = 0.4031242 + 15335, 5544, 15335, 37627, // alpha = 0.4235324 + 15333, 5578, 15333, 37696, // alpha = 0.4444445 + 15332, 5613, 15332, 37663, // alpha = 0.4658605 + 15330, 5648, 15330, 37812, // alpha = 0.4877803 + 15329, 5682, 15329, 37837, // alpha = 0.5102041 + 15327, 5717, 15327, 37876, // alpha = 0.5331318 + 15326, 5752, 15326, 37891, // alpha = 0.5565634 + 15324, 5786, 15324, 37937, // alpha = 0.5804989 + 15322, 5821, 15323, 37934, // alpha = 0.6049383 + 15321, 5855, 15321, 37997, // alpha = 0.6298816 + 15319, 5890, 15319, 38022, // alpha = 0.6553288 + 15318, 5924, 15318, 37999, // alpha = 0.68128 + 15316, 5959, 15316, 38055, // alpha = 0.7077349 + 15315, 5993, 15315, 38035, // alpha = 0.7346939 + 15313, 6028, 15313, 38079, // alpha = 0.7621567 + 15312, 6062, 15312, 38066, // alpha = 0.7901235 + 15310, 6096, 15310, 38147, // alpha = 0.8185941 + 15308, 6131, 15308, 38178, // alpha = 0.8475687 + 15307, 6154, 15307, 38144, // alpha = 0.8770471 + 15305, 6172, 15305, 38205, // alpha = 0.9070295 + 15304, 6189, 15304, 38194, // alpha = 0.9375157 + 15302, 6206, 15302, 38282, // alpha = 0.9685059 + 15301, 6223, 15301, 38303, // alpha = 1 + + // Cos (theta) = 0.9959688 + 15378, 2100, 15378, 34200, // alpha = 0.001 + 15378, 2100, 15378, 34200, // alpha = 0.001 + 15378, 2100, 15378, 34200, // alpha = 0.001007811 + 15378, 2170, 15378, 33934, // alpha = 0.002267574 + 15377, 2551, 15377, 34836, // alpha = 0.004031243 + 15376, 2932, 15376, 35039, // alpha = 0.006298816 + 15375, 3193, 15375, 35061, // alpha = 0.009070295 + 15375, 3383, 15375, 35262, // alpha = 0.01234568 + 15374, 3573, 15374, 35680, // alpha = 0.01612497 + 15373, 3763, 15373, 35984, // alpha = 0.02040816 + 15372, 3953, 15372, 35881, // alpha = 0.02519527 + 15371, 4119, 15371, 36136, // alpha = 0.03048627 + 15371, 4214, 15371, 36147, // alpha = 0.03628118 + 15370, 4309, 15370, 36296, // alpha = 0.04258 + 15369, 4403, 15369, 36474, // alpha = 0.04938272 + 15368, 4498, 15368, 36497, // alpha = 0.05668934 + 15367, 4592, 15367, 36633, // alpha = 0.06449988 + 15367, 4687, 15367, 36843, // alpha = 0.07281432 + 15366, 4781, 15366, 36870, // alpha = 0.08163266 + 15365, 4875, 15365, 36953, // alpha = 0.09095491 + 15364, 4969, 15364, 36996, // alpha = 0.1007811 + 15364, 5063, 15363, 37078, // alpha = 0.1111111 + 15363, 5139, 15363, 37122, // alpha = 0.1219451 + 15362, 5186, 15362, 37224, // alpha = 0.1332829 + 15361, 5233, 15361, 37339, // alpha = 0.1451247 + 15360, 5280, 15360, 37558, // alpha = 0.1574704 + 15358, 5326, 15358, 37749, // alpha = 0.17032 + 15357, 5373, 15357, 37623, // alpha = 0.1836735 + 15355, 5420, 15355, 37559, // alpha = 0.1975309 + 15353, 5467, 15354, 37581, // alpha = 0.2118922 + 15352, 5514, 15352, 37609, // alpha = 0.2267574 + 15351, 5560, 15351, 37672, // alpha = 0.2421265 + 15349, 5607, 15349, 37724, // alpha = 0.2579995 + 15347, 5654, 15348, 37790, // alpha = 0.2743765 + 15346, 5700, 15346, 37827, // alpha = 0.2912573 + 15344, 5747, 15344, 37889, // alpha = 0.308642 + 15343, 5793, 15343, 37926, // alpha = 0.3265306 + 15341, 5840, 15341, 37949, // alpha = 0.3449232 + 15340, 5886, 15340, 37973, // alpha = 0.3638196 + 15338, 5933, 15338, 38004, // alpha = 0.38322 + 15337, 5979, 15337, 38053, // alpha = 0.4031242 + 15335, 6025, 15335, 38060, // alpha = 0.4235324 + 15333, 6072, 15334, 38082, // alpha = 0.4444445 + 15332, 6118, 15332, 38143, // alpha = 0.4658605 + 15330, 6154, 15330, 38152, // alpha = 0.4877803 + 15329, 6177, 15329, 38200, // alpha = 0.5102041 + 15327, 6200, 15327, 38194, // alpha = 0.5331318 + 15326, 6223, 15326, 38260, // alpha = 0.5565634 + 15324, 6246, 15324, 38288, // alpha = 0.5804989 + 15322, 6269, 15323, 38322, // alpha = 0.6049383 + 15321, 6292, 15321, 38329, // alpha = 0.6298816 + 15319, 6315, 15319, 38364, // alpha = 0.6553288 + 15318, 6338, 15318, 38408, // alpha = 0.68128 + 15316, 6361, 15316, 38403, // alpha = 0.7077349 + 15315, 6384, 15315, 38480, // alpha = 0.7346939 + 15313, 6407, 15313, 38509, // alpha = 0.7621567 + 15311, 6430, 15312, 38542, // alpha = 0.7901235 + 15310, 6453, 15310, 38584, // alpha = 0.8185941 + 15308, 6476, 15308, 38602, // alpha = 0.8475687 + 15307, 6499, 15307, 38630, // alpha = 0.8770471 + 15305, 6522, 15305, 38667, // alpha = 0.9070295 + 15304, 6544, 15304, 38665, // alpha = 0.9375157 + 15302, 6567, 15302, 38732, // alpha = 0.9685059 + 15301, 6590, 15301, 38688, // alpha = 1 + + // Cos (theta) = 0.9937012 + 15378, 2369, 15378, 34746, // alpha = 0.001 + 15378, 2369, 15378, 34746, // alpha = 0.001 + 15378, 2369, 15378, 34746, // alpha = 0.001007811 + 15378, 2456, 15378, 34515, // alpha = 0.002267574 + 15377, 2932, 15377, 34670, // alpha = 0.004031243 + 15376, 3240, 15376, 35523, // alpha = 0.006298816 + 15375, 3478, 15375, 35451, // alpha = 0.009070295 + 15375, 3716, 15375, 35888, // alpha = 0.01234568 + 15374, 3953, 15374, 35907, // alpha = 0.01612497 + 15373, 4143, 15373, 36158, // alpha = 0.02040816 + 15372, 4262, 15372, 36290, // alpha = 0.02519527 + 15371, 4380, 15371, 36298, // alpha = 0.03048627 + 15371, 4499, 15371, 36502, // alpha = 0.03628118 + 15370, 4617, 15370, 36582, // alpha = 0.04258 + 15369, 4735, 15369, 36816, // alpha = 0.04938272 + 15368, 4853, 15368, 36932, // alpha = 0.05668934 + 15367, 4971, 15367, 36960, // alpha = 0.06449988 + 15367, 5089, 15367, 37076, // alpha = 0.07281432 + 15366, 5163, 15366, 37116, // alpha = 0.08163266 + 15365, 5222, 15365, 37215, // alpha = 0.09095491 + 15364, 5281, 15364, 37266, // alpha = 0.1007811 + 15364, 5340, 15364, 37355, // alpha = 0.1111111 + 15363, 5399, 15363, 37457, // alpha = 0.1219451 + 15362, 5457, 15362, 37550, // alpha = 0.1332829 + 15361, 5516, 15361, 37712, // alpha = 0.1451247 + 15360, 5575, 15360, 37928, // alpha = 0.1574704 + 15358, 5633, 15358, 38055, // alpha = 0.17032 + 15357, 5692, 15357, 37994, // alpha = 0.1836735 + 15355, 5750, 15355, 37944, // alpha = 0.1975309 + 15353, 5809, 15354, 37945, // alpha = 0.2118922 + 15352, 5867, 15352, 37967, // alpha = 0.2267574 + 15350, 5925, 15351, 38001, // alpha = 0.2421265 + 15349, 5984, 15349, 38042, // alpha = 0.2579995 + 15347, 6042, 15348, 38079, // alpha = 0.2743765 + 15346, 6100, 15346, 38118, // alpha = 0.2912573 + 15344, 6151, 15344, 38156, // alpha = 0.308642 + 15343, 6180, 15343, 38192, // alpha = 0.3265306 + 15341, 6209, 15341, 38232, // alpha = 0.3449232 + 15340, 6238, 15340, 38250, // alpha = 0.3638196 + 15338, 6267, 15338, 38282, // alpha = 0.38322 + 15337, 6296, 15337, 38347, // alpha = 0.4031242 + 15335, 6325, 15335, 38355, // alpha = 0.4235324 + 15333, 6354, 15334, 38388, // alpha = 0.4444445 + 15332, 6383, 15332, 38459, // alpha = 0.4658605 + 15330, 6412, 15330, 38452, // alpha = 0.4877803 + 15329, 6441, 15329, 38524, // alpha = 0.5102041 + 15327, 6470, 15327, 38536, // alpha = 0.5331318 + 15326, 6498, 15326, 38605, // alpha = 0.5565634 + 15324, 6527, 15324, 38644, // alpha = 0.5804989 + 15322, 6556, 15323, 38684, // alpha = 0.6049383 + 15321, 6585, 15321, 38717, // alpha = 0.6298816 + 15319, 6613, 15319, 38754, // alpha = 0.6553288 + 15318, 6642, 15318, 38804, // alpha = 0.68128 + 15316, 6671, 15316, 38795, // alpha = 0.7077349 + 15315, 6699, 15315, 38850, // alpha = 0.7346939 + 15313, 6728, 15313, 38927, // alpha = 0.7621567 + 15311, 6757, 15312, 38938, // alpha = 0.7901235 + 15310, 6785, 15310, 38929, // alpha = 0.8185941 + 15308, 6814, 15308, 38939, // alpha = 0.8475687 + 15307, 6842, 15307, 39006, // alpha = 0.8770471 + 15305, 6871, 15305, 39008, // alpha = 0.9070295 + 15304, 6899, 15304, 38997, // alpha = 0.9375157 + 15302, 6928, 15302, 39018, // alpha = 0.9685059 + 15301, 6956, 15301, 39066, // alpha = 1 + + // Cos (theta) = 0.9909297 + 15378, 2630, 15378, 34110, // alpha = 0.001 + 15378, 2630, 15378, 34110, // alpha = 0.001 + 15378, 2630, 15378, 34110, // alpha = 0.001007811 + 15378, 2733, 15378, 34948, // alpha = 0.002267574 + 15377, 3187, 15377, 35260, // alpha = 0.004031243 + 15376, 3471, 15376, 35273, // alpha = 0.006298816 + 15375, 3755, 15375, 35667, // alpha = 0.009070295 + 15375, 4039, 15375, 35951, // alpha = 0.01234568 + 15374, 4209, 15374, 36281, // alpha = 0.01612497 + 15373, 4351, 15373, 36411, // alpha = 0.02040816 + 15372, 4493, 15372, 36438, // alpha = 0.02519527 + 15371, 4634, 15371, 36613, // alpha = 0.03048627 + 15371, 4775, 15371, 36962, // alpha = 0.03628118 + 15370, 4917, 15370, 37007, // alpha = 0.04258 + 15369, 5058, 15369, 37015, // alpha = 0.04938272 + 15368, 5159, 15368, 37074, // alpha = 0.05668934 + 15367, 5230, 15367, 37232, // alpha = 0.06449988 + 15367, 5300, 15367, 37330, // alpha = 0.07281432 + 15366, 5371, 15366, 37409, // alpha = 0.08163266 + 15365, 5441, 15365, 37489, // alpha = 0.09095491 + 15364, 5511, 15364, 37575, // alpha = 0.1007811 + 15364, 5581, 15364, 37642, // alpha = 0.1111111 + 15363, 5651, 15363, 37794, // alpha = 0.1219451 + 15362, 5721, 15362, 37894, // alpha = 0.1332829 + 15361, 5792, 15361, 37990, // alpha = 0.1451247 + 15360, 5861, 15360, 38128, // alpha = 0.1574704 + 15358, 5931, 15358, 38285, // alpha = 0.17032 + 15357, 6001, 15357, 38211, // alpha = 0.1836735 + 15355, 6071, 15355, 38158, // alpha = 0.1975309 + 15353, 6141, 15354, 38161, // alpha = 0.2118922 + 15352, 6177, 15352, 38189, // alpha = 0.2267574 + 15350, 6212, 15351, 38224, // alpha = 0.2421265 + 15349, 6247, 15349, 38271, // alpha = 0.2579995 + 15347, 6282, 15348, 38313, // alpha = 0.2743765 + 15346, 6316, 15346, 38359, // alpha = 0.2912573 + 15344, 6351, 15344, 38384, // alpha = 0.308642 + 15343, 6386, 15343, 38444, // alpha = 0.3265306 + 15341, 6421, 15341, 38476, // alpha = 0.3449232 + 15340, 6455, 15340, 38520, // alpha = 0.3638196 + 15338, 6490, 15338, 38583, // alpha = 0.38322 + 15336, 6524, 15337, 38599, // alpha = 0.4031242 + 15335, 6559, 15335, 38704, // alpha = 0.4235324 + 15333, 6593, 15333, 38747, // alpha = 0.4444445 + 15332, 6628, 15332, 38746, // alpha = 0.4658605 + 15330, 6662, 15330, 38809, // alpha = 0.4877803 + 15329, 6697, 15329, 38816, // alpha = 0.5102041 + 15327, 6731, 15327, 38916, // alpha = 0.5331318 + 15326, 6766, 15326, 38925, // alpha = 0.5565634 + 15324, 6800, 15324, 38950, // alpha = 0.5804989 + 15322, 6834, 15323, 38974, // alpha = 0.6049383 + 15321, 6869, 15321, 38995, // alpha = 0.6298816 + 15319, 6903, 15319, 39020, // alpha = 0.6553288 + 15318, 6937, 15318, 39042, // alpha = 0.68128 + 15316, 6972, 15316, 39057, // alpha = 0.7077349 + 15315, 7006, 15315, 39089, // alpha = 0.7346939 + 15313, 7040, 15313, 39075, // alpha = 0.7621567 + 15311, 7074, 15312, 39132, // alpha = 0.7901235 + 15310, 7108, 15310, 39135, // alpha = 0.8185941 + 15308, 7142, 15308, 39169, // alpha = 0.8475687 + 15307, 7172, 15307, 39181, // alpha = 0.8770471 + 15305, 7189, 15305, 39239, // alpha = 0.9070295 + 15304, 7206, 15304, 39240, // alpha = 0.9375157 + 15302, 7223, 15302, 39229, // alpha = 0.9685059 + 15300, 7240, 15301, 39297, // alpha = 1 + + // Cos (theta) = 0.9876543 + 15378, 2866, 15378, 34591, // alpha = 0.001 + 15378, 2866, 15378, 34591, // alpha = 0.001 + 15378, 2866, 15378, 34591, // alpha = 0.001007811 + 15378, 2985, 15378, 35204, // alpha = 0.002267574 + 15377, 3355, 15377, 35601, // alpha = 0.004031243 + 15376, 3681, 15376, 35699, // alpha = 0.006298816 + 15375, 4007, 15375, 36009, // alpha = 0.009070295 + 15375, 4214, 15375, 36124, // alpha = 0.01234568 + 15374, 4377, 15374, 36482, // alpha = 0.01612497 + 15373, 4539, 15373, 36543, // alpha = 0.02040816 + 15372, 4702, 15372, 36861, // alpha = 0.02519527 + 15371, 4864, 15371, 36971, // alpha = 0.03048627 + 15371, 5026, 15371, 36964, // alpha = 0.03628118 + 15370, 5154, 15370, 37193, // alpha = 0.04258 + 15369, 5235, 15369, 37253, // alpha = 0.04938272 + 15368, 5316, 15368, 37295, // alpha = 0.05668934 + 15367, 5397, 15367, 37402, // alpha = 0.06449988 + 15367, 5477, 15367, 37503, // alpha = 0.07281432 + 15366, 5558, 15366, 37623, // alpha = 0.08163266 + 15365, 5639, 15365, 37716, // alpha = 0.09095491 + 15364, 5719, 15364, 37862, // alpha = 0.1007811 + 15364, 5800, 15364, 37917, // alpha = 0.1111111 + 15363, 5880, 15363, 37969, // alpha = 0.1219451 + 15362, 5961, 15362, 38048, // alpha = 0.1332829 + 15361, 6041, 15361, 38156, // alpha = 0.1451247 + 15360, 6121, 15360, 38331, // alpha = 0.1574704 + 15358, 6173, 15358, 38493, // alpha = 0.17032 + 15357, 6213, 15357, 38404, // alpha = 0.1836735 + 15355, 6253, 15355, 38348, // alpha = 0.1975309 + 15353, 6293, 15354, 38348, // alpha = 0.2118922 + 15352, 6333, 15352, 38380, // alpha = 0.2267574 + 15350, 6373, 15351, 38430, // alpha = 0.2421265 + 15349, 6413, 15349, 38477, // alpha = 0.2579995 + 15347, 6453, 15348, 38526, // alpha = 0.2743765 + 15346, 6492, 15346, 38578, // alpha = 0.2912573 + 15344, 6532, 15344, 38624, // alpha = 0.308642 + 15343, 6572, 15343, 38676, // alpha = 0.3265306 + 15341, 6612, 15341, 38716, // alpha = 0.3449232 + 15339, 6652, 15340, 38787, // alpha = 0.3638196 + 15338, 6691, 15338, 38837, // alpha = 0.38322 + 15336, 6731, 15337, 38886, // alpha = 0.4031242 + 15335, 6771, 15335, 38923, // alpha = 0.4235324 + 15333, 6810, 15334, 38934, // alpha = 0.4444445 + 15332, 6850, 15332, 38964, // alpha = 0.4658605 + 15330, 6889, 15330, 39003, // alpha = 0.4877803 + 15329, 6929, 15329, 39013, // alpha = 0.5102041 + 15327, 6968, 15327, 39054, // alpha = 0.5331318 + 15325, 7008, 15326, 39064, // alpha = 0.5565634 + 15324, 7047, 15324, 39108, // alpha = 0.5804989 + 15322, 7087, 15323, 39133, // alpha = 0.6049383 + 15321, 7126, 15321, 39168, // alpha = 0.6298816 + 15319, 7165, 15319, 39185, // alpha = 0.6553288 + 15318, 7186, 15318, 39228, // alpha = 0.68128 + 15316, 7206, 15316, 39226, // alpha = 0.7077349 + 15314, 7226, 15315, 39270, // alpha = 0.7346939 + 15313, 7245, 15313, 39279, // alpha = 0.7621567 + 15311, 7265, 15312, 39289, // alpha = 0.7901235 + 15310, 7284, 15310, 39307, // alpha = 0.8185941 + 15308, 7304, 15309, 39343, // alpha = 0.8475687 + 15307, 7324, 15307, 39405, // alpha = 0.8770471 + 15305, 7343, 15305, 39428, // alpha = 0.9070295 + 15304, 7363, 15304, 39432, // alpha = 0.9375157 + 15302, 7382, 15302, 39455, // alpha = 0.9685059 + 15300, 7402, 15301, 39522, // alpha = 1 + + // Cos (theta) = 0.983875 + 15378, 3082, 15378, 34934, // alpha = 0.001 + 15378, 3082, 15378, 34934, // alpha = 0.001 + 15378, 3082, 15378, 34934, // alpha = 0.001007811 + 15378, 3149, 15378, 34974, // alpha = 0.002267574 + 15377, 3515, 15377, 35637, // alpha = 0.004031243 + 15376, 3881, 15376, 35973, // alpha = 0.006298816 + 15375, 4172, 15375, 36090, // alpha = 0.009070295 + 15375, 4354, 15375, 36408, // alpha = 0.01234568 + 15374, 4537, 15374, 36427, // alpha = 0.01612497 + 15373, 4719, 15373, 36886, // alpha = 0.02040816 + 15372, 4902, 15372, 36949, // alpha = 0.02519527 + 15371, 5084, 15371, 37064, // alpha = 0.03048627 + 15371, 5193, 15371, 37207, // alpha = 0.03628118 + 15370, 5284, 15370, 37268, // alpha = 0.04258 + 15369, 5375, 15369, 37359, // alpha = 0.04938272 + 15368, 5466, 15368, 37509, // alpha = 0.05668934 + 15367, 5556, 15367, 37669, // alpha = 0.06449988 + 15367, 5647, 15367, 37750, // alpha = 0.07281432 + 15366, 5738, 15366, 37817, // alpha = 0.08163266 + 15365, 5828, 15365, 37921, // alpha = 0.09095491 + 15364, 5919, 15364, 37998, // alpha = 0.1007811 + 15364, 6009, 15364, 38057, // alpha = 0.1111111 + 15363, 6099, 15363, 38131, // alpha = 0.1219451 + 15362, 6167, 15362, 38208, // alpha = 0.1332829 + 15361, 6212, 15361, 38318, // alpha = 0.1451247 + 15360, 6257, 15360, 38538, // alpha = 0.1574704 + 15358, 6302, 15358, 38690, // alpha = 0.17032 + 15356, 6347, 15357, 38601, // alpha = 0.1836735 + 15355, 6392, 15355, 38533, // alpha = 0.1975309 + 15353, 6437, 15354, 38535, // alpha = 0.2118922 + 15352, 6482, 15352, 38575, // alpha = 0.2267574 + 15350, 6527, 15351, 38621, // alpha = 0.2421265 + 15349, 6572, 15349, 38680, // alpha = 0.2579995 + 15347, 6616, 15348, 38729, // alpha = 0.2743765 + 15346, 6661, 15346, 38792, // alpha = 0.2912573 + 15344, 6706, 15344, 38851, // alpha = 0.308642 + 15342, 6750, 15343, 38904, // alpha = 0.3265306 + 15341, 6795, 15341, 38938, // alpha = 0.3449232 + 15339, 6840, 15340, 38968, // alpha = 0.3638196 + 15338, 6884, 15338, 38996, // alpha = 0.38322 + 15336, 6929, 15337, 39016, // alpha = 0.4031242 + 15335, 6973, 15335, 39057, // alpha = 0.4235324 + 15333, 7018, 15334, 39085, // alpha = 0.4444445 + 15332, 7062, 15332, 39097, // alpha = 0.4658605 + 15330, 7107, 15330, 39147, // alpha = 0.4877803 + 15328, 7151, 15329, 39165, // alpha = 0.5102041 + 15327, 7182, 15327, 39201, // alpha = 0.5331318 + 15325, 7204, 15326, 39209, // alpha = 0.5565634 + 15324, 7226, 15324, 39250, // alpha = 0.5804989 + 15322, 7248, 15323, 39273, // alpha = 0.6049383 + 15320, 7270, 15321, 39308, // alpha = 0.6298816 + 15319, 7292, 15319, 39335, // alpha = 0.6553288 + 15317, 7314, 15318, 39370, // alpha = 0.68128 + 15316, 7337, 15316, 39392, // alpha = 0.7077349 + 15314, 7359, 15315, 39433, // alpha = 0.7346939 + 15313, 7381, 15313, 39440, // alpha = 0.7621567 + 15311, 7403, 15312, 39524, // alpha = 0.7901235 + 15309, 7425, 15310, 39510, // alpha = 0.8185941 + 15308, 7447, 15309, 39558, // alpha = 0.8475687 + 15306, 7469, 15307, 39592, // alpha = 0.8770471 + 15305, 7490, 15306, 39606, // alpha = 0.9070295 + 15303, 7512, 15304, 39642, // alpha = 0.9375157 + 15302, 7534, 15302, 39665, // alpha = 0.9685059 + 15300, 7556, 15301, 39696, // alpha = 1 + + // Cos (theta) = 0.9795918 + 15378, 3193, 15378, 35160, // alpha = 0.001 + 15378, 3193, 15378, 35160, // alpha = 0.001 + 15378, 3193, 15378, 35160, // alpha = 0.001007811 + 15378, 3267, 15378, 35215, // alpha = 0.002267574 + 15377, 3673, 15377, 35552, // alpha = 0.004031243 + 15376, 4079, 15376, 36022, // alpha = 0.006298816 + 15375, 4290, 15375, 36229, // alpha = 0.009070295 + 15375, 4492, 15375, 36468, // alpha = 0.01234568 + 15374, 4695, 15374, 36777, // alpha = 0.01612497 + 15373, 4897, 15373, 36996, // alpha = 0.02040816 + 15372, 5099, 15372, 37037, // alpha = 0.02519527 + 15371, 5210, 15371, 37207, // alpha = 0.03048627 + 15371, 5311, 15371, 37351, // alpha = 0.03628118 + 15370, 5412, 15370, 37491, // alpha = 0.04258 + 15369, 5512, 15369, 37566, // alpha = 0.04938272 + 15368, 5613, 15368, 37704, // alpha = 0.05668934 + 15367, 5714, 15367, 37831, // alpha = 0.06449988 + 15367, 5814, 15367, 37905, // alpha = 0.07281432 + 15366, 5914, 15366, 37980, // alpha = 0.08163266 + 15365, 6015, 15365, 38040, // alpha = 0.09095491 + 15364, 6115, 15364, 38116, // alpha = 0.1007811 + 15364, 6179, 15364, 38194, // alpha = 0.1111111 + 15363, 6229, 15363, 38257, // alpha = 0.1219451 + 15362, 6279, 15362, 38366, // alpha = 0.1332829 + 15361, 6329, 15361, 38494, // alpha = 0.1451247 + 15360, 6379, 15360, 38733, // alpha = 0.1574704 + 15358, 6429, 15358, 38883, // alpha = 0.17032 + 15356, 6479, 15357, 38783, // alpha = 0.1836735 + 15354, 6529, 15355, 38707, // alpha = 0.1975309 + 15353, 6579, 15354, 38709, // alpha = 0.2118922 + 15351, 6628, 15352, 38762, // alpha = 0.2267574 + 15350, 6678, 15351, 38811, // alpha = 0.2421265 + 15348, 6728, 15349, 38882, // alpha = 0.2579995 + 15347, 6777, 15348, 38926, // alpha = 0.2743765 + 15345, 6827, 15346, 38954, // alpha = 0.2912573 + 15344, 6876, 15344, 38984, // alpha = 0.308642 + 15342, 6926, 15343, 39025, // alpha = 0.3265306 + 15341, 6975, 15341, 39047, // alpha = 0.3449232 + 15339, 7025, 15340, 39081, // alpha = 0.3638196 + 15338, 7074, 15338, 39115, // alpha = 0.38322 + 15336, 7124, 15337, 39152, // alpha = 0.4031242 + 15334, 7170, 15335, 39172, // alpha = 0.4235324 + 15333, 7195, 15334, 39212, // alpha = 0.4444445 + 15331, 7220, 15332, 39245, // alpha = 0.4658605 + 15330, 7244, 15330, 39274, // alpha = 0.4877803 + 15328, 7269, 15329, 39312, // alpha = 0.5102041 + 15327, 7293, 15327, 39345, // alpha = 0.5331318 + 15325, 7318, 15326, 39382, // alpha = 0.5565634 + 15323, 7342, 15324, 39410, // alpha = 0.5804989 + 15322, 7367, 15323, 39427, // alpha = 0.6049383 + 15320, 7391, 15321, 39474, // alpha = 0.6298816 + 15319, 7416, 15319, 39516, // alpha = 0.6553288 + 15317, 7440, 15318, 39510, // alpha = 0.68128 + 15316, 7465, 15316, 39574, // alpha = 0.7077349 + 15314, 7489, 15315, 39604, // alpha = 0.7346939 + 15312, 7514, 15313, 39634, // alpha = 0.7621567 + 15311, 7538, 15312, 39690, // alpha = 0.7901235 + 15309, 7562, 15310, 39687, // alpha = 0.8185941 + 15308, 7587, 15309, 39748, // alpha = 0.8475687 + 15306, 7611, 15307, 39783, // alpha = 0.8770471 + 15305, 7635, 15305, 39784, // alpha = 0.9070295 + 15303, 7660, 15304, 39842, // alpha = 0.9375157 + 15301, 7684, 15302, 39884, // alpha = 0.9685059 + 15300, 7708, 15301, 39891, // alpha = 1 + + // Cos (theta) = 0.9748048 + 15378, 3301, 15378, 35380, // alpha = 0.001 + 15378, 3301, 15378, 35380, // alpha = 0.001 + 15378, 3301, 15378, 35380, // alpha = 0.001007811 + 15378, 3382, 15378, 35449, // alpha = 0.002267574 + 15377, 3826, 15377, 35852, // alpha = 0.004031243 + 15376, 4183, 15376, 36138, // alpha = 0.006298816 + 15375, 4405, 15375, 36335, // alpha = 0.009070295 + 15375, 4626, 15375, 36740, // alpha = 0.01234568 + 15374, 4848, 15374, 36976, // alpha = 0.01612497 + 15373, 5069, 15373, 37034, // alpha = 0.02040816 + 15372, 5205, 15372, 37230, // alpha = 0.02519527 + 15371, 5315, 15371, 37364, // alpha = 0.03048627 + 15371, 5426, 15371, 37509, // alpha = 0.03628118 + 15370, 5536, 15370, 37606, // alpha = 0.04258 + 15369, 5646, 15369, 37722, // alpha = 0.04938272 + 15368, 5756, 15368, 37895, // alpha = 0.05668934 + 15367, 5866, 15367, 37946, // alpha = 0.06449988 + 15367, 5976, 15367, 38040, // alpha = 0.07281432 + 15366, 6086, 15366, 38095, // alpha = 0.08163266 + 15365, 6170, 15365, 38176, // alpha = 0.09095491 + 15364, 6225, 15364, 38246, // alpha = 0.1007811 + 15363, 6279, 15364, 38329, // alpha = 0.1111111 + 15363, 6334, 15363, 38415, // alpha = 0.1219451 + 15362, 6389, 15362, 38527, // alpha = 0.1332829 + 15361, 6444, 15361, 38675, // alpha = 0.1451247 + 15360, 6498, 15360, 38921, // alpha = 0.1574704 + 15358, 6553, 15358, 38994, // alpha = 0.17032 + 15356, 6607, 15357, 38938, // alpha = 0.1836735 + 15354, 6662, 15355, 38882, // alpha = 0.1975309 + 15353, 6716, 15354, 38890, // alpha = 0.2118922 + 15351, 6771, 15352, 38922, // alpha = 0.2267574 + 15350, 6825, 15351, 38960, // alpha = 0.2421265 + 15348, 6879, 15349, 38986, // alpha = 0.2579995 + 15347, 6934, 15348, 39019, // alpha = 0.2743765 + 15345, 6988, 15346, 39064, // alpha = 0.2912573 + 15344, 7042, 15344, 39097, // alpha = 0.308642 + 15342, 7096, 15343, 39128, // alpha = 0.3265306 + 15340, 7150, 15341, 39159, // alpha = 0.3449232 + 15339, 7186, 15340, 39204, // alpha = 0.3638196 + 15337, 7213, 15338, 39230, // alpha = 0.38322 + 15336, 7240, 15337, 39265, // alpha = 0.4031242 + 15334, 7267, 15335, 39294, // alpha = 0.4235324 + 15333, 7294, 15333, 39350, // alpha = 0.4444445 + 15331, 7321, 15332, 39373, // alpha = 0.4658605 + 15330, 7348, 15330, 39421, // alpha = 0.4877803 + 15328, 7375, 15329, 39452, // alpha = 0.5102041 + 15326, 7402, 15327, 39483, // alpha = 0.5331318 + 15325, 7429, 15326, 39530, // alpha = 0.5565634 + 15323, 7456, 15324, 39545, // alpha = 0.5804989 + 15322, 7482, 15322, 39594, // alpha = 0.6049383 + 15320, 7509, 15321, 39615, // alpha = 0.6298816 + 15318, 7536, 15319, 39658, // alpha = 0.6553288 + 15317, 7563, 15318, 39695, // alpha = 0.68128 + 15315, 7589, 15316, 39743, // alpha = 0.7077349 + 15314, 7616, 15315, 39770, // alpha = 0.7346939 + 15312, 7643, 15313, 39798, // alpha = 0.7621567 + 15311, 7670, 15312, 39825, // alpha = 0.7901235 + 15309, 7696, 15310, 39868, // alpha = 0.8185941 + 15308, 7723, 15308, 39926, // alpha = 0.8475687 + 15306, 7749, 15307, 39940, // alpha = 0.8770471 + 15304, 7776, 15305, 39972, // alpha = 0.9070295 + 15303, 7803, 15304, 39987, // alpha = 0.9375157 + 15301, 7829, 15302, 39996, // alpha = 0.9685059 + 15300, 7856, 15301, 40003, // alpha = 1 + + // Cos (theta) = 0.9695137 + 15378, 3403, 15378, 35587, // alpha = 0.001 + 15378, 3403, 15378, 35587, // alpha = 0.001 + 15378, 3403, 15378, 35587, // alpha = 0.001007811 + 15378, 3491, 15378, 35669, // alpha = 0.002267574 + 15377, 3971, 15377, 35998, // alpha = 0.004031243 + 15376, 4273, 15376, 36220, // alpha = 0.006298816 + 15375, 4513, 15375, 36554, // alpha = 0.009070295 + 15375, 4752, 15375, 36875, // alpha = 0.01234568 + 15374, 4992, 15374, 36969, // alpha = 0.01612497 + 15373, 5175, 15373, 37154, // alpha = 0.02040816 + 15372, 5295, 15372, 37293, // alpha = 0.02519527 + 15371, 5414, 15371, 37408, // alpha = 0.03048627 + 15371, 5534, 15371, 37637, // alpha = 0.03628118 + 15370, 5653, 15370, 37799, // alpha = 0.04258 + 15369, 5772, 15369, 37902, // alpha = 0.04938272 + 15368, 5891, 15368, 37954, // alpha = 0.05668934 + 15367, 6010, 15367, 38035, // alpha = 0.06449988 + 15367, 6129, 15367, 38111, // alpha = 0.07281432 + 15366, 6196, 15366, 38193, // alpha = 0.08163266 + 15365, 6255, 15365, 38293, // alpha = 0.09095491 + 15364, 6314, 15364, 38362, // alpha = 0.1007811 + 15363, 6374, 15364, 38439, // alpha = 0.1111111 + 15363, 6433, 15363, 38545, // alpha = 0.1219451 + 15362, 6492, 15362, 38671, // alpha = 0.1332829 + 15361, 6551, 15361, 38848, // alpha = 0.1451247 + 15360, 6610, 15360, 39012, // alpha = 0.1574704 + 15358, 6669, 15359, 39078, // alpha = 0.17032 + 15356, 6728, 15357, 39018, // alpha = 0.1836735 + 15354, 6787, 15355, 38979, // alpha = 0.1975309 + 15352, 6846, 15354, 38981, // alpha = 0.2118922 + 15351, 6905, 15352, 39012, // alpha = 0.2267574 + 15349, 6963, 15350, 39043, // alpha = 0.2421265 + 15348, 7022, 15349, 39075, // alpha = 0.2579995 + 15346, 7081, 15347, 39119, // alpha = 0.2743765 + 15345, 7140, 15346, 39160, // alpha = 0.2912573 + 15343, 7183, 15344, 39194, // alpha = 0.308642 + 15342, 7212, 15343, 39243, // alpha = 0.3265306 + 15340, 7242, 15341, 39267, // alpha = 0.3449232 + 15339, 7271, 15340, 39289, // alpha = 0.3638196 + 15337, 7300, 15338, 39343, // alpha = 0.38322 + 15336, 7329, 15337, 39388, // alpha = 0.4031242 + 15334, 7358, 15335, 39417, // alpha = 0.4235324 + 15332, 7388, 15333, 39471, // alpha = 0.4444445 + 15331, 7417, 15332, 39492, // alpha = 0.4658605 + 15329, 7446, 15330, 39529, // alpha = 0.4877803 + 15328, 7475, 15329, 39571, // alpha = 0.5102041 + 15326, 7504, 15327, 39616, // alpha = 0.5331318 + 15325, 7533, 15326, 39659, // alpha = 0.5565634 + 15323, 7562, 15324, 39687, // alpha = 0.5804989 + 15321, 7591, 15323, 39726, // alpha = 0.6049383 + 15320, 7620, 15321, 39754, // alpha = 0.6298816 + 15318, 7649, 15319, 39848, // alpha = 0.6553288 + 15317, 7678, 15318, 39867, // alpha = 0.68128 + 15315, 7707, 15316, 39871, // alpha = 0.7077349 + 15314, 7736, 15315, 39941, // alpha = 0.7346939 + 15312, 7765, 15313, 39958, // alpha = 0.7621567 + 15310, 7793, 15312, 39968, // alpha = 0.7901235 + 15309, 7822, 15310, 39988, // alpha = 0.8185941 + 15307, 7851, 15308, 40011, // alpha = 0.8475687 + 15306, 7880, 15307, 40018, // alpha = 0.8770471 + 15304, 7909, 15305, 40045, // alpha = 0.9070295 + 15303, 7937, 15304, 40068, // alpha = 0.9375157 + 15301, 7966, 15302, 40083, // alpha = 0.9685059 + 15299, 7995, 15301, 40112, // alpha = 1 + + // Cos (theta) = 0.9637188 + 15378, 3501, 15378, 35786, // alpha = 0.001 + 15378, 3501, 15378, 35786, // alpha = 0.001 + 15378, 3501, 15378, 35786, // alpha = 0.001007811 + 15378, 3595, 15378, 35627, // alpha = 0.002267574 + 15377, 4103, 15377, 36139, // alpha = 0.004031243 + 15376, 4360, 15376, 36468, // alpha = 0.006298816 + 15375, 4617, 15375, 36765, // alpha = 0.009070295 + 15375, 4873, 15375, 36903, // alpha = 0.01234568 + 15374, 5125, 15374, 37109, // alpha = 0.01612497 + 15373, 5253, 15373, 37246, // alpha = 0.02040816 + 15372, 5381, 15372, 37458, // alpha = 0.02519527 + 15371, 5509, 15371, 37600, // alpha = 0.03048627 + 15371, 5637, 15371, 37660, // alpha = 0.03628118 + 15370, 5765, 15370, 37917, // alpha = 0.04258 + 15369, 5893, 15369, 37990, // alpha = 0.04938272 + 15368, 6020, 15368, 38029, // alpha = 0.05668934 + 15367, 6146, 15368, 38151, // alpha = 0.06449988 + 15367, 6210, 15367, 38225, // alpha = 0.07281432 + 15366, 6273, 15366, 38293, // alpha = 0.08163266 + 15365, 6337, 15365, 38392, // alpha = 0.09095491 + 15364, 6400, 15364, 38463, // alpha = 0.1007811 + 15363, 6464, 15364, 38571, // alpha = 0.1111111 + 15363, 6527, 15363, 38670, // alpha = 0.1219451 + 15362, 6591, 15362, 38812, // alpha = 0.1332829 + 15361, 6654, 15361, 38967, // alpha = 0.1451247 + 15360, 6717, 15360, 39099, // alpha = 0.1574704 + 15358, 6781, 15358, 39161, // alpha = 0.17032 + 15356, 6844, 15357, 39092, // alpha = 0.1836735 + 15354, 6907, 15355, 39056, // alpha = 0.1975309 + 15352, 6970, 15353, 39064, // alpha = 0.2118922 + 15351, 7033, 15352, 39090, // alpha = 0.2267574 + 15349, 7096, 15350, 39131, // alpha = 0.2421265 + 15348, 7159, 15349, 39167, // alpha = 0.2579995 + 15346, 7195, 15347, 39206, // alpha = 0.2743765 + 15345, 7227, 15346, 39254, // alpha = 0.2912573 + 15343, 7258, 15344, 39295, // alpha = 0.308642 + 15342, 7289, 15343, 39332, // alpha = 0.3265306 + 15340, 7321, 15341, 39382, // alpha = 0.3449232 + 15338, 7352, 15340, 39406, // alpha = 0.3638196 + 15337, 7383, 15338, 39458, // alpha = 0.38322 + 15335, 7415, 15336, 39501, // alpha = 0.4031242 + 15334, 7446, 15335, 39550, // alpha = 0.4235324 + 15332, 7477, 15333, 39578, // alpha = 0.4444445 + 15331, 7508, 15332, 39596, // alpha = 0.4658605 + 15329, 7540, 15330, 39654, // alpha = 0.4877803 + 15327, 7571, 15329, 39699, // alpha = 0.5102041 + 15326, 7602, 15327, 39733, // alpha = 0.5331318 + 15324, 7633, 15326, 39790, // alpha = 0.5565634 + 15323, 7664, 15324, 39823, // alpha = 0.5804989 + 15321, 7695, 15322, 39857, // alpha = 0.6049383 + 15319, 7726, 15321, 39890, // alpha = 0.6298816 + 15318, 7757, 15319, 39927, // alpha = 0.6553288 + 15316, 7788, 15318, 39967, // alpha = 0.68128 + 15315, 7819, 15316, 39990, // alpha = 0.7077349 + 15313, 7850, 15315, 40009, // alpha = 0.7346939 + 15312, 7881, 15313, 40022, // alpha = 0.7621567 + 15310, 7912, 15312, 40037, // alpha = 0.7901235 + 15308, 7943, 15310, 40061, // alpha = 0.8185941 + 15307, 7974, 15308, 40086, // alpha = 0.8475687 + 15305, 8005, 15307, 40109, // alpha = 0.8770471 + 15304, 8036, 15305, 40130, // alpha = 0.9070295 + 15302, 8066, 15304, 40149, // alpha = 0.9375157 + 15300, 8097, 15302, 40175, // alpha = 0.9685059 + 15299, 8128, 15301, 40213, // alpha = 1 + + // Cos (theta) = 0.95742 + 15378, 3594, 15378, 35456, // alpha = 0.001 + 15378, 3594, 15378, 35456, // alpha = 0.001 + 15378, 3594, 15378, 35456, // alpha = 0.001007811 + 15378, 3695, 15378, 35831, // alpha = 0.002267574 + 15377, 4169, 15377, 36106, // alpha = 0.004031243 + 15376, 4443, 15376, 36637, // alpha = 0.006298816 + 15375, 4717, 15375, 36916, // alpha = 0.009070295 + 15375, 4990, 15375, 37021, // alpha = 0.01234568 + 15374, 5192, 15374, 37244, // alpha = 0.01612497 + 15373, 5328, 15373, 37331, // alpha = 0.02040816 + 15372, 5464, 15372, 37627, // alpha = 0.02519527 + 15371, 5601, 15371, 37678, // alpha = 0.03048627 + 15371, 5737, 15371, 37835, // alpha = 0.03628118 + 15370, 5873, 15370, 37952, // alpha = 0.04258 + 15369, 6009, 15369, 38061, // alpha = 0.04938272 + 15368, 6144, 15368, 38146, // alpha = 0.05668934 + 15367, 6212, 15367, 38236, // alpha = 0.06449988 + 15367, 6280, 15367, 38321, // alpha = 0.07281432 + 15366, 6348, 15366, 38415, // alpha = 0.08163266 + 15365, 6416, 15365, 38489, // alpha = 0.09095491 + 15364, 6483, 15364, 38583, // alpha = 0.1007811 + 15363, 6551, 15364, 38674, // alpha = 0.1111111 + 15363, 6618, 15363, 38792, // alpha = 0.1219451 + 15362, 6686, 15362, 38933, // alpha = 0.1332829 + 15361, 6753, 15361, 39046, // alpha = 0.1451247 + 15360, 6821, 15360, 39182, // alpha = 0.1574704 + 15358, 6888, 15358, 39236, // alpha = 0.17032 + 15356, 6955, 15357, 39164, // alpha = 0.1836735 + 15354, 7023, 15355, 39129, // alpha = 0.1975309 + 15352, 7090, 15353, 39140, // alpha = 0.2118922 + 15351, 7157, 15352, 39170, // alpha = 0.2267574 + 15349, 7196, 15350, 39211, // alpha = 0.2421265 + 15348, 7230, 15349, 39252, // alpha = 0.2579995 + 15346, 7263, 15347, 39297, // alpha = 0.2743765 + 15344, 7297, 15346, 39342, // alpha = 0.2912573 + 15343, 7330, 15344, 39380, // alpha = 0.308642 + 15341, 7363, 15343, 39429, // alpha = 0.3265306 + 15340, 7397, 15341, 39464, // alpha = 0.3449232 + 15338, 7430, 15340, 39513, // alpha = 0.3638196 + 15337, 7464, 15338, 39558, // alpha = 0.38322 + 15335, 7497, 15336, 39606, // alpha = 0.4031242 + 15334, 7530, 15335, 39644, // alpha = 0.4235324 + 15332, 7563, 15333, 39686, // alpha = 0.4444445 + 15330, 7597, 15332, 39734, // alpha = 0.4658605 + 15329, 7630, 15330, 39788, // alpha = 0.4877803 + 15327, 7663, 15329, 39831, // alpha = 0.5102041 + 15326, 7696, 15327, 39859, // alpha = 0.5331318 + 15324, 7729, 15326, 39909, // alpha = 0.5565634 + 15322, 7763, 15324, 39954, // alpha = 0.5804989 + 15321, 7796, 15322, 39969, // alpha = 0.6049383 + 15319, 7829, 15321, 40000, // alpha = 0.6298816 + 15317, 7862, 15319, 40014, // alpha = 0.6553288 + 15316, 7895, 15318, 40042, // alpha = 0.68128 + 15314, 7928, 15316, 40051, // alpha = 0.7077349 + 15313, 7961, 15315, 40073, // alpha = 0.7346939 + 15311, 7994, 15313, 40092, // alpha = 0.7621567 + 15310, 8027, 15311, 40131, // alpha = 0.7901235 + 15308, 8059, 15310, 40152, // alpha = 0.8185941 + 15306, 8092, 15308, 40177, // alpha = 0.8475687 + 15305, 8125, 15307, 40204, // alpha = 0.8770471 + 15303, 8158, 15305, 40224, // alpha = 0.9070295 + 15302, 8191, 15304, 40245, // alpha = 0.9375157 + 15300, 8208, 15302, 40258, // alpha = 0.9685059 + 15299, 8224, 15301, 40288, // alpha = 1 + + // Cos (theta) = 0.9506173 + 15378, 3684, 15378, 35860, // alpha = 0.001 + 15378, 3684, 15378, 35860, // alpha = 0.001 + 15378, 3684, 15378, 35860, // alpha = 0.001007811 + 15378, 3789, 15378, 35932, // alpha = 0.002267574 + 15377, 4232, 15377, 36234, // alpha = 0.004031243 + 15376, 4522, 15376, 36698, // alpha = 0.006298816 + 15375, 4811, 15375, 36876, // alpha = 0.009070295 + 15375, 5100, 15375, 37144, // alpha = 0.01234568 + 15374, 5255, 15374, 37236, // alpha = 0.01612497 + 15373, 5399, 15373, 37470, // alpha = 0.02040816 + 15372, 5543, 15372, 37599, // alpha = 0.02519527 + 15371, 5687, 15371, 37853, // alpha = 0.03048627 + 15371, 5831, 15371, 37957, // alpha = 0.03628118 + 15370, 5975, 15370, 38035, // alpha = 0.04258 + 15369, 6119, 15369, 38129, // alpha = 0.04938272 + 15368, 6203, 15368, 38204, // alpha = 0.05668934 + 15367, 6275, 15367, 38316, // alpha = 0.06449988 + 15367, 6347, 15367, 38402, // alpha = 0.07281432 + 15366, 6418, 15366, 38505, // alpha = 0.08163266 + 15365, 6490, 15365, 38580, // alpha = 0.09095491 + 15364, 6562, 15364, 38695, // alpha = 0.1007811 + 15363, 6633, 15364, 38786, // alpha = 0.1111111 + 15363, 6705, 15363, 38917, // alpha = 0.1219451 + 15362, 6776, 15362, 39000, // alpha = 0.1332829 + 15361, 6847, 15361, 39128, // alpha = 0.1451247 + 15360, 6919, 15360, 39262, // alpha = 0.1574704 + 15357, 6990, 15358, 39309, // alpha = 0.17032 + 15355, 7061, 15357, 39227, // alpha = 0.1836735 + 15353, 7132, 15355, 39200, // alpha = 0.1975309 + 15352, 7186, 15353, 39217, // alpha = 0.2118922 + 15350, 7221, 15352, 39249, // alpha = 0.2267574 + 15349, 7257, 15350, 39293, // alpha = 0.2421265 + 15347, 7292, 15349, 39332, // alpha = 0.2579995 + 15346, 7327, 15347, 39377, // alpha = 0.2743765 + 15344, 7363, 15346, 39426, // alpha = 0.2912573 + 15343, 7398, 15344, 39477, // alpha = 0.308642 + 15341, 7434, 15343, 39517, // alpha = 0.3265306 + 15339, 7469, 15341, 39563, // alpha = 0.3449232 + 15338, 7504, 15340, 39620, // alpha = 0.3638196 + 15336, 7539, 15338, 39665, // alpha = 0.38322 + 15335, 7575, 15336, 39702, // alpha = 0.4031242 + 15333, 7610, 15335, 39760, // alpha = 0.4235324 + 15332, 7645, 15333, 39803, // alpha = 0.4444445 + 15330, 7680, 15332, 39854, // alpha = 0.4658605 + 15328, 7715, 15330, 39887, // alpha = 0.4877803 + 15327, 7751, 15329, 39929, // alpha = 0.5102041 + 15325, 7786, 15327, 39966, // alpha = 0.5331318 + 15324, 7821, 15325, 39980, // alpha = 0.5565634 + 15322, 7856, 15324, 39999, // alpha = 0.5804989 + 15320, 7891, 15322, 40026, // alpha = 0.6049383 + 15319, 7926, 15321, 40054, // alpha = 0.6298816 + 15317, 7961, 15319, 40085, // alpha = 0.6553288 + 15316, 7996, 15318, 40114, // alpha = 0.68128 + 15314, 8030, 15316, 40124, // alpha = 0.7077349 + 15312, 8065, 15314, 40148, // alpha = 0.7346939 + 15311, 8100, 15313, 40179, // alpha = 0.7621567 + 15309, 8135, 15311, 40202, // alpha = 0.7901235 + 15308, 8170, 15310, 40229, // alpha = 0.8185941 + 15306, 8198, 15308, 40233, // alpha = 0.8475687 + 15304, 8216, 15307, 40270, // alpha = 0.8770471 + 15303, 8233, 15305, 40289, // alpha = 0.9070295 + 15301, 8250, 15304, 40312, // alpha = 0.9375157 + 15300, 8268, 15302, 40348, // alpha = 0.9685059 + 15298, 8285, 15300, 40358, // alpha = 1 + + // Cos (theta) = 0.9433107 + 15378, 3770, 15378, 35737, // alpha = 0.001 + 15378, 3770, 15378, 35737, // alpha = 0.001 + 15378, 3770, 15378, 35737, // alpha = 0.001007811 + 15378, 3881, 15378, 36025, // alpha = 0.002267574 + 15377, 4294, 15377, 36273, // alpha = 0.004031243 + 15376, 4599, 15376, 36573, // alpha = 0.006298816 + 15375, 4903, 15375, 36969, // alpha = 0.009070295 + 15375, 5164, 15375, 37081, // alpha = 0.01234568 + 15374, 5316, 15374, 37360, // alpha = 0.01612497 + 15373, 5468, 15373, 37499, // alpha = 0.02040816 + 15372, 5620, 15372, 37753, // alpha = 0.02519527 + 15371, 5771, 15371, 37913, // alpha = 0.03048627 + 15370, 5923, 15371, 37983, // alpha = 0.03628118 + 15370, 6074, 15370, 38102, // alpha = 0.04258 + 15369, 6185, 15369, 38195, // alpha = 0.04938272 + 15368, 6261, 15368, 38276, // alpha = 0.05668934 + 15367, 6336, 15367, 38388, // alpha = 0.06449988 + 15366, 6412, 15367, 38478, // alpha = 0.07281432 + 15366, 6487, 15366, 38592, // alpha = 0.08163266 + 15365, 6562, 15365, 38680, // alpha = 0.09095491 + 15364, 6638, 15364, 38781, // alpha = 0.1007811 + 15363, 6713, 15364, 38901, // alpha = 0.1111111 + 15363, 6788, 15363, 38971, // alpha = 0.1219451 + 15362, 6863, 15362, 39064, // alpha = 0.1332829 + 15361, 6939, 15361, 39207, // alpha = 0.1451247 + 15359, 7014, 15360, 39338, // alpha = 0.1574704 + 15357, 7089, 15358, 39368, // alpha = 0.17032 + 15355, 7164, 15357, 39287, // alpha = 0.1836735 + 15353, 7203, 15355, 39269, // alpha = 0.1975309 + 15352, 7241, 15353, 39290, // alpha = 0.2118922 + 15350, 7278, 15352, 39327, // alpha = 0.2267574 + 15349, 7315, 15350, 39372, // alpha = 0.2421265 + 15347, 7353, 15349, 39420, // alpha = 0.2579995 + 15345, 7390, 15347, 39458, // alpha = 0.2743765 + 15344, 7427, 15346, 39511, // alpha = 0.2912573 + 15342, 7465, 15344, 39555, // alpha = 0.308642 + 15341, 7502, 15343, 39607, // alpha = 0.3265306 + 15339, 7539, 15341, 39651, // alpha = 0.3449232 + 15338, 7576, 15339, 39704, // alpha = 0.3638196 + 15336, 7613, 15338, 39768, // alpha = 0.38322 + 15334, 7650, 15336, 39815, // alpha = 0.4031242 + 15333, 7687, 15335, 39862, // alpha = 0.4235324 + 15331, 7724, 15333, 39912, // alpha = 0.4444445 + 15330, 7761, 15332, 39949, // alpha = 0.4658605 + 15328, 7798, 15330, 39971, // alpha = 0.4877803 + 15326, 7835, 15329, 39994, // alpha = 0.5102041 + 15325, 7872, 15327, 40014, // alpha = 0.5331318 + 15323, 7909, 15325, 40040, // alpha = 0.5565634 + 15322, 7946, 15324, 40073, // alpha = 0.5804989 + 15320, 7983, 15322, 40101, // alpha = 0.6049383 + 15318, 8020, 15321, 40124, // alpha = 0.6298816 + 15317, 8057, 15319, 40150, // alpha = 0.6553288 + 15315, 8093, 15317, 40167, // alpha = 0.68128 + 15314, 8130, 15316, 40195, // alpha = 0.7077349 + 15312, 8167, 15314, 40209, // alpha = 0.7346939 + 15310, 8198, 15313, 40238, // alpha = 0.7621567 + 15309, 8216, 15311, 40271, // alpha = 0.7901235 + 15307, 8234, 15310, 40299, // alpha = 0.8185941 + 15306, 8253, 15308, 40319, // alpha = 0.8475687 + 15304, 8271, 15307, 40353, // alpha = 0.8770471 + 15302, 8289, 15305, 40363, // alpha = 0.9070295 + 15301, 8307, 15304, 40383, // alpha = 0.9375157 + 15299, 8326, 15302, 40429, // alpha = 0.9685059 + 15298, 8344, 15300, 40437, // alpha = 1 + + // Cos (theta) = 0.9355001 + 15378, 3852, 15378, 35872, // alpha = 0.001 + 15378, 3852, 15378, 35872, // alpha = 0.001 + 15378, 3852, 15378, 35872, // alpha = 0.001007811 + 15378, 3968, 15378, 36114, // alpha = 0.002267574 + 15377, 4352, 15377, 36391, // alpha = 0.004031243 + 15376, 4671, 15376, 36798, // alpha = 0.006298816 + 15375, 4990, 15375, 37057, // alpha = 0.009070295 + 15375, 5214, 15375, 37183, // alpha = 0.01234568 + 15374, 5374, 15374, 37425, // alpha = 0.01612497 + 15373, 5533, 15373, 37627, // alpha = 0.02040816 + 15372, 5692, 15372, 37849, // alpha = 0.02519527 + 15371, 5851, 15371, 37961, // alpha = 0.03048627 + 15370, 6010, 15371, 38064, // alpha = 0.03628118 + 15370, 6156, 15370, 38142, // alpha = 0.04258 + 15369, 6235, 15369, 38266, // alpha = 0.04938272 + 15368, 6315, 15368, 38362, // alpha = 0.05668934 + 15367, 6394, 15367, 38461, // alpha = 0.06449988 + 15366, 6473, 15367, 38561, // alpha = 0.07281432 + 15366, 6552, 15366, 38650, // alpha = 0.08163266 + 15365, 6631, 15365, 38760, // alpha = 0.09095491 + 15364, 6710, 15364, 38885, // alpha = 0.1007811 + 15363, 6789, 15364, 38954, // alpha = 0.1111111 + 15362, 6867, 15363, 39037, // alpha = 0.1219451 + 15362, 6946, 15362, 39137, // alpha = 0.1332829 + 15361, 7025, 15361, 39281, // alpha = 0.1451247 + 15359, 7104, 15360, 39405, // alpha = 0.1574704 + 15357, 7175, 15358, 39424, // alpha = 0.17032 + 15355, 7214, 15357, 39345, // alpha = 0.1836735 + 15353, 7254, 15355, 39335, // alpha = 0.1975309 + 15351, 7293, 15353, 39357, // alpha = 0.2118922 + 15350, 7332, 15352, 39401, // alpha = 0.2267574 + 15348, 7371, 15350, 39446, // alpha = 0.2421265 + 15347, 7410, 15349, 39496, // alpha = 0.2579995 + 15345, 7449, 15347, 39545, // alpha = 0.2743765 + 15344, 7488, 15346, 39596, // alpha = 0.2912573 + 15342, 7527, 15344, 39650, // alpha = 0.308642 + 15341, 7566, 15342, 39695, // alpha = 0.3265306 + 15339, 7605, 15341, 39754, // alpha = 0.3449232 + 15337, 7644, 15339, 39800, // alpha = 0.3638196 + 15336, 7683, 15338, 39857, // alpha = 0.38322 + 15334, 7722, 15336, 39905, // alpha = 0.4031242 + 15333, 7761, 15335, 39941, // alpha = 0.4235324 + 15331, 7799, 15333, 39972, // alpha = 0.4444445 + 15329, 7838, 15332, 40000, // alpha = 0.4658605 + 15328, 7877, 15330, 40017, // alpha = 0.4877803 + 15326, 7916, 15328, 40049, // alpha = 0.5102041 + 15325, 7954, 15327, 40079, // alpha = 0.5331318 + 15323, 7993, 15325, 40102, // alpha = 0.5565634 + 15321, 8032, 15324, 40133, // alpha = 0.5804989 + 15320, 8070, 15322, 40152, // alpha = 0.6049383 + 15318, 8109, 15320, 40178, // alpha = 0.6298816 + 15316, 8147, 15319, 40203, // alpha = 0.6553288 + 15315, 8186, 15317, 40229, // alpha = 0.68128 + 15313, 8208, 15316, 40261, // alpha = 0.7077349 + 15312, 8227, 15314, 40279, // alpha = 0.7346939 + 15310, 8247, 15313, 40308, // alpha = 0.7621567 + 15308, 8266, 15311, 40328, // alpha = 0.7901235 + 15307, 8285, 15310, 40360, // alpha = 0.8185941 + 15305, 8304, 15308, 40381, // alpha = 0.8475687 + 15304, 8323, 15306, 40413, // alpha = 0.8770471 + 15302, 8342, 15305, 40442, // alpha = 0.9070295 + 15300, 8362, 15303, 40471, // alpha = 0.9375157 + 15299, 8381, 15302, 40491, // alpha = 0.9685059 + 15297, 8400, 15300, 40528, // alpha = 1 + + // Cos (theta) = 0.9271857 + 15378, 3930, 15378, 35951, // alpha = 0.001 + 15378, 3930, 15378, 35951, // alpha = 0.001 + 15378, 3930, 15378, 35951, // alpha = 0.001007811 + 15378, 4052, 15378, 35961, // alpha = 0.002267574 + 15377, 4407, 15377, 36504, // alpha = 0.004031243 + 15376, 4741, 15376, 36838, // alpha = 0.006298816 + 15375, 5074, 15375, 37012, // alpha = 0.009070295 + 15374, 5263, 15375, 37305, // alpha = 0.01234568 + 15374, 5429, 15374, 37488, // alpha = 0.01612497 + 15373, 5595, 15373, 37659, // alpha = 0.02040816 + 15372, 5761, 15372, 37915, // alpha = 0.02519527 + 15371, 5927, 15371, 38010, // alpha = 0.03048627 + 15370, 6093, 15371, 38108, // alpha = 0.03628118 + 15370, 6201, 15370, 38233, // alpha = 0.04258 + 15369, 6284, 15369, 38310, // alpha = 0.04938272 + 15368, 6367, 15368, 38426, // alpha = 0.05668934 + 15367, 6449, 15367, 38545, // alpha = 0.06449988 + 15366, 6532, 15367, 38649, // alpha = 0.07281432 + 15366, 6614, 15366, 38750, // alpha = 0.08163266 + 15365, 6697, 15365, 38854, // alpha = 0.09095491 + 15364, 6779, 15364, 38949, // alpha = 0.1007811 + 15363, 6861, 15364, 39002, // alpha = 0.1111111 + 15362, 6943, 15363, 39086, // alpha = 0.1219451 + 15362, 7026, 15362, 39204, // alpha = 0.1332829 + 15361, 7108, 15361, 39359, // alpha = 0.1451247 + 15359, 7179, 15360, 39470, // alpha = 0.1574704 + 15357, 7220, 15358, 39472, // alpha = 0.17032 + 15355, 7261, 15357, 39402, // alpha = 0.1836735 + 15353, 7302, 15355, 39405, // alpha = 0.1975309 + 15351, 7343, 15353, 39427, // alpha = 0.2118922 + 15350, 7384, 15352, 39471, // alpha = 0.2267574 + 15348, 7424, 15350, 39519, // alpha = 0.2421265 + 15347, 7465, 15349, 39565, // alpha = 0.2579995 + 15345, 7506, 15347, 39619, // alpha = 0.2743765 + 15343, 7547, 15346, 39684, // alpha = 0.2912573 + 15342, 7587, 15344, 39719, // alpha = 0.308642 + 15340, 7628, 15342, 39783, // alpha = 0.3265306 + 15339, 7669, 15341, 39850, // alpha = 0.3449232 + 15337, 7709, 15339, 39891, // alpha = 0.3638196 + 15335, 7750, 15338, 39942, // alpha = 0.38322 + 15334, 7790, 15336, 39971, // alpha = 0.4031242 + 15332, 7831, 15335, 39996, // alpha = 0.4235324 + 15331, 7871, 15333, 40015, // alpha = 0.4444445 + 15329, 7912, 15331, 40041, // alpha = 0.4658605 + 15327, 7952, 15330, 40082, // alpha = 0.4877803 + 15326, 7993, 15328, 40098, // alpha = 0.5102041 + 15324, 8033, 15327, 40132, // alpha = 0.5331318 + 15323, 8073, 15325, 40153, // alpha = 0.5565634 + 15321, 8114, 15324, 40180, // alpha = 0.5804989 + 15319, 8154, 15322, 40204, // alpha = 0.6049383 + 15318, 8193, 15321, 40247, // alpha = 0.6298816 + 15316, 8213, 15319, 40268, // alpha = 0.6553288 + 15314, 8233, 15317, 40293, // alpha = 0.68128 + 15313, 8253, 15316, 40327, // alpha = 0.7077349 + 15311, 8273, 15314, 40349, // alpha = 0.7346939 + 15310, 8294, 15313, 40373, // alpha = 0.7621567 + 15308, 8314, 15311, 40394, // alpha = 0.7901235 + 15306, 8334, 15310, 40429, // alpha = 0.8185941 + 15305, 8354, 15308, 40475, // alpha = 0.8475687 + 15303, 8374, 15306, 40481, // alpha = 0.8770471 + 15302, 8394, 15305, 40519, // alpha = 0.9070295 + 15300, 8413, 15303, 40531, // alpha = 0.9375157 + 15298, 8433, 15302, 40573, // alpha = 0.9685059 + 15297, 8453, 15300, 40591, // alpha = 1 + + // Cos (theta) = 0.9183673 + 15378, 4005, 15378, 36028, // alpha = 0.001 + 15378, 4005, 15378, 36028, // alpha = 0.001 + 15378, 4005, 15378, 36028, // alpha = 0.001007811 + 15378, 4114, 15378, 36042, // alpha = 0.002267574 + 15377, 4461, 15377, 36613, // alpha = 0.004031243 + 15376, 4807, 15376, 36886, // alpha = 0.006298816 + 15375, 5137, 15375, 37094, // alpha = 0.009070295 + 15374, 5310, 15375, 37400, // alpha = 0.01234568 + 15374, 5483, 15374, 37596, // alpha = 0.01612497 + 15373, 5655, 15373, 37780, // alpha = 0.02040816 + 15372, 5828, 15372, 37936, // alpha = 0.02519527 + 15371, 6001, 15371, 38027, // alpha = 0.03048627 + 15370, 6158, 15371, 38152, // alpha = 0.03628118 + 15370, 6245, 15370, 38252, // alpha = 0.04258 + 15369, 6331, 15369, 38393, // alpha = 0.04938272 + 15368, 6417, 15368, 38474, // alpha = 0.05668934 + 15367, 6502, 15368, 38613, // alpha = 0.06449988 + 15366, 6588, 15367, 38705, // alpha = 0.07281432 + 15366, 6674, 15366, 38826, // alpha = 0.08163266 + 15365, 6760, 15365, 38924, // alpha = 0.09095491 + 15364, 6845, 15364, 38984, // alpha = 0.1007811 + 15363, 6931, 15364, 39060, // alpha = 0.1111111 + 15362, 7017, 15363, 39141, // alpha = 0.1219451 + 15361, 7102, 15362, 39266, // alpha = 0.1332829 + 15360, 7178, 15361, 39419, // alpha = 0.1451247 + 15359, 7220, 15360, 39529, // alpha = 0.1574704 + 15356, 7263, 15359, 39505, // alpha = 0.17032 + 15354, 7306, 15357, 39455, // alpha = 0.1836735 + 15353, 7348, 15355, 39462, // alpha = 0.1975309 + 15351, 7391, 15353, 39496, // alpha = 0.2118922 + 15349, 7433, 15352, 39535, // alpha = 0.2267574 + 15348, 7476, 15350, 39591, // alpha = 0.2421265 + 15346, 7518, 15349, 39646, // alpha = 0.2579995 + 15345, 7560, 15347, 39696, // alpha = 0.2743765 + 15343, 7603, 15345, 39755, // alpha = 0.2912573 + 15342, 7645, 15344, 39803, // alpha = 0.308642 + 15340, 7687, 15342, 39865, // alpha = 0.3265306 + 15338, 7730, 15341, 39913, // alpha = 0.3449232 + 15337, 7772, 15339, 39947, // alpha = 0.3638196 + 15335, 7814, 15338, 39981, // alpha = 0.38322 + 15334, 7856, 15336, 40008, // alpha = 0.4031242 + 15332, 7899, 15335, 40043, // alpha = 0.4235324 + 15330, 7941, 15333, 40064, // alpha = 0.4444445 + 15329, 7983, 15331, 40101, // alpha = 0.4658605 + 15327, 8025, 15330, 40126, // alpha = 0.4877803 + 15325, 8067, 15328, 40148, // alpha = 0.5102041 + 15324, 8109, 15327, 40187, // alpha = 0.5331318 + 15322, 8151, 15325, 40208, // alpha = 0.5565634 + 15321, 8192, 15324, 40246, // alpha = 0.5804989 + 15319, 8213, 15322, 40260, // alpha = 0.6049383 + 15317, 8234, 15320, 40293, // alpha = 0.6298816 + 15316, 8255, 15319, 40317, // alpha = 0.6553288 + 15314, 8276, 15317, 40355, // alpha = 0.68128 + 15313, 8297, 15316, 40372, // alpha = 0.7077349 + 15311, 8318, 15314, 40401, // alpha = 0.7346939 + 15309, 8339, 15313, 40436, // alpha = 0.7621567 + 15307, 8359, 15311, 40477, // alpha = 0.7901235 + 15306, 8380, 15309, 40490, // alpha = 0.8185941 + 15304, 8401, 15308, 40524, // alpha = 0.8475687 + 15303, 8422, 15306, 40545, // alpha = 0.8770471 + 15301, 8443, 15305, 40594, // alpha = 0.9070295 + 15299, 8463, 15303, 40616, // alpha = 0.9375157 + 15298, 8484, 15302, 40631, // alpha = 0.9685059 + 15296, 8505, 15300, 40677, // alpha = 1 + + // Cos (theta) = 0.9090451 + 15378, 4078, 15378, 36102, // alpha = 0.001 + 15378, 4078, 15378, 36102, // alpha = 0.001 + 15378, 4078, 15378, 36102, // alpha = 0.001007811 + 15378, 4153, 15378, 36121, // alpha = 0.002267574 + 15377, 4513, 15377, 36550, // alpha = 0.004031243 + 15376, 4872, 15376, 36952, // alpha = 0.006298816 + 15375, 5176, 15375, 37199, // alpha = 0.009070295 + 15374, 5355, 15375, 37378, // alpha = 0.01234568 + 15374, 5534, 15374, 37589, // alpha = 0.01612497 + 15373, 5714, 15373, 37893, // alpha = 0.02040816 + 15372, 5893, 15372, 38002, // alpha = 0.02519527 + 15371, 6072, 15371, 38108, // alpha = 0.03048627 + 15370, 6197, 15371, 38230, // alpha = 0.03628118 + 15369, 6286, 15370, 38321, // alpha = 0.04258 + 15369, 6376, 15369, 38426, // alpha = 0.04938272 + 15368, 6465, 15368, 38537, // alpha = 0.05668934 + 15367, 6554, 15367, 38665, // alpha = 0.06449988 + 15366, 6643, 15367, 38788, // alpha = 0.07281432 + 15365, 6732, 15366, 38912, // alpha = 0.08163266 + 15365, 6821, 15365, 38965, // alpha = 0.09095491 + 15364, 6910, 15364, 39031, // alpha = 0.1007811 + 15363, 6999, 15364, 39115, // alpha = 0.1111111 + 15362, 7087, 15363, 39197, // alpha = 0.1219451 + 15361, 7172, 15362, 39337, // alpha = 0.1332829 + 15360, 7216, 15361, 39489, // alpha = 0.1451247 + 15358, 7260, 15360, 39582, // alpha = 0.1574704 + 15356, 7305, 15359, 39544, // alpha = 0.17032 + 15354, 7349, 15357, 39512, // alpha = 0.1836735 + 15352, 7393, 15355, 39522, // alpha = 0.1975309 + 15351, 7437, 15353, 39562, // alpha = 0.2118922 + 15349, 7481, 15352, 39607, // alpha = 0.2267574 + 15348, 7525, 15350, 39662, // alpha = 0.2421265 + 15346, 7569, 15348, 39720, // alpha = 0.2579995 + 15345, 7613, 15347, 39772, // alpha = 0.2743765 + 15343, 7657, 15345, 39828, // alpha = 0.2912573 + 15341, 7701, 15344, 39891, // alpha = 0.308642 + 15340, 7745, 15342, 39937, // alpha = 0.3265306 + 15338, 7789, 15341, 39965, // alpha = 0.3449232 + 15336, 7833, 15339, 39998, // alpha = 0.3638196 + 15335, 7876, 15338, 40032, // alpha = 0.38322 + 15333, 7920, 15336, 40058, // alpha = 0.4031242 + 15332, 7964, 15335, 40088, // alpha = 0.4235324 + 15330, 8008, 15333, 40113, // alpha = 0.4444445 + 15328, 8051, 15331, 40149, // alpha = 0.4658605 + 15327, 8095, 15330, 40176, // alpha = 0.4877803 + 15325, 8138, 15328, 40209, // alpha = 0.5102041 + 15323, 8182, 15326, 40234, // alpha = 0.5331318 + 15322, 8209, 15325, 40261, // alpha = 0.5565634 + 15320, 8231, 15324, 40297, // alpha = 0.5804989 + 15319, 8252, 15322, 40318, // alpha = 0.6049383 + 15317, 8274, 15320, 40341, // alpha = 0.6298816 + 15315, 8296, 15319, 40387, // alpha = 0.6553288 + 15314, 8317, 15317, 40419, // alpha = 0.68128 + 15312, 8339, 15316, 40432, // alpha = 0.7077349 + 15310, 8361, 15314, 40475, // alpha = 0.7346939 + 15309, 8382, 15312, 40495, // alpha = 0.7621567 + 15307, 8404, 15311, 40524, // alpha = 0.7901235 + 15305, 8425, 15309, 40555, // alpha = 0.8185941 + 15304, 8447, 15308, 40595, // alpha = 0.8475687 + 15302, 8469, 15306, 40607, // alpha = 0.8770471 + 15301, 8490, 15305, 40645, // alpha = 0.9070295 + 15299, 8512, 15303, 40685, // alpha = 0.9375157 + 15297, 8533, 15301, 40697, // alpha = 0.9685059 + 15296, 8555, 15300, 40731, // alpha = 1 + + // Cos (theta) = 0.8992189 + 15378, 4121, 15378, 36172, // alpha = 0.001 + 15378, 4121, 15378, 36172, // alpha = 0.001 + 15378, 4121, 15378, 36172, // alpha = 0.001007811 + 15378, 4189, 15378, 36195, // alpha = 0.002267574 + 15377, 4561, 15377, 36648, // alpha = 0.004031243 + 15376, 4932, 15376, 36974, // alpha = 0.006298816 + 15375, 5212, 15375, 37234, // alpha = 0.009070295 + 15374, 5397, 15375, 37457, // alpha = 0.01234568 + 15374, 5583, 15374, 37658, // alpha = 0.01612497 + 15373, 5768, 15373, 37913, // alpha = 0.02040816 + 15372, 5953, 15372, 37994, // alpha = 0.02519527 + 15371, 6138, 15371, 38123, // alpha = 0.03048627 + 15370, 6233, 15371, 38259, // alpha = 0.03628118 + 15369, 6325, 15370, 38400, // alpha = 0.04258 + 15369, 6418, 15369, 38498, // alpha = 0.04938272 + 15368, 6510, 15368, 38602, // alpha = 0.05668934 + 15367, 6602, 15367, 38716, // alpha = 0.06449988 + 15366, 6694, 15367, 38865, // alpha = 0.07281432 + 15365, 6786, 15366, 38943, // alpha = 0.08163266 + 15365, 6878, 15365, 39012, // alpha = 0.09095491 + 15364, 6970, 15364, 39082, // alpha = 0.1007811 + 15363, 7061, 15364, 39151, // alpha = 0.1111111 + 15362, 7153, 15363, 39258, // alpha = 0.1219451 + 15361, 7206, 15362, 39399, // alpha = 0.1332829 + 15360, 7252, 15361, 39546, // alpha = 0.1451247 + 15358, 7298, 15360, 39629, // alpha = 0.1574704 + 15356, 7344, 15359, 39576, // alpha = 0.17032 + 15354, 7389, 15357, 39559, // alpha = 0.1836735 + 15352, 7435, 15355, 39577, // alpha = 0.1975309 + 15350, 7480, 15353, 39618, // alpha = 0.2118922 + 15349, 7526, 15351, 39665, // alpha = 0.2267574 + 15347, 7571, 15350, 39723, // alpha = 0.2421265 + 15346, 7617, 15348, 39784, // alpha = 0.2579995 + 15344, 7662, 15347, 39841, // alpha = 0.2743765 + 15343, 7708, 15345, 39901, // alpha = 0.2912573 + 15341, 7753, 15344, 39949, // alpha = 0.308642 + 15339, 7799, 15342, 39977, // alpha = 0.3265306 + 15338, 7844, 15341, 40001, // alpha = 0.3449232 + 15336, 7889, 15339, 40040, // alpha = 0.3638196 + 15335, 7934, 15338, 40071, // alpha = 0.38322 + 15333, 7980, 15336, 40092, // alpha = 0.4031242 + 15331, 8025, 15334, 40133, // alpha = 0.4235324 + 15330, 8070, 15333, 40158, // alpha = 0.4444445 + 15328, 8115, 15331, 40184, // alpha = 0.4658605 + 15326, 8160, 15330, 40217, // alpha = 0.4877803 + 15325, 8199, 15328, 40252, // alpha = 0.5102041 + 15323, 8221, 15327, 40291, // alpha = 0.5331318 + 15321, 8244, 15325, 40303, // alpha = 0.5565634 + 15320, 8266, 15323, 40341, // alpha = 0.5804989 + 15318, 8288, 15322, 40370, // alpha = 0.6049383 + 15317, 8311, 15320, 40395, // alpha = 0.6298816 + 15315, 8333, 15319, 40429, // alpha = 0.6553288 + 15313, 8356, 15317, 40468, // alpha = 0.68128 + 15312, 8378, 15316, 40496, // alpha = 0.7077349 + 15310, 8400, 15314, 40530, // alpha = 0.7346939 + 15308, 8423, 15312, 40550, // alpha = 0.7621567 + 15307, 8445, 15311, 40596, // alpha = 0.7901235 + 15305, 8467, 15309, 40624, // alpha = 0.8185941 + 15303, 8490, 15308, 40645, // alpha = 0.8475687 + 15302, 8512, 15306, 40689, // alpha = 0.8770471 + 15300, 8534, 15305, 40717, // alpha = 0.9070295 + 15298, 8557, 15303, 40746, // alpha = 0.9375157 + 15297, 8579, 15301, 40782, // alpha = 0.9685059 + 15295, 8601, 15300, 40801, // alpha = 1 + + // Cos (theta) = 0.8888889 + 15378, 4154, 15378, 36103, // alpha = 0.001 + 15378, 4154, 15378, 36103, // alpha = 0.001 + 15378, 4154, 15378, 36103, // alpha = 0.001007811 + 15378, 4224, 15378, 36266, // alpha = 0.002267574 + 15377, 4608, 15377, 36743, // alpha = 0.004031243 + 15376, 4991, 15376, 37034, // alpha = 0.006298816 + 15375, 5247, 15375, 37306, // alpha = 0.009070295 + 15374, 5438, 15375, 37461, // alpha = 0.01234568 + 15374, 5629, 15374, 37752, // alpha = 0.01612497 + 15373, 5820, 15373, 37951, // alpha = 0.02040816 + 15372, 6011, 15372, 38053, // alpha = 0.02519527 + 15371, 6173, 15371, 38171, // alpha = 0.03048627 + 15370, 6268, 15371, 38312, // alpha = 0.03628118 + 15369, 6363, 15370, 38427, // alpha = 0.04258 + 15369, 6459, 15369, 38573, // alpha = 0.04938272 + 15368, 6554, 15368, 38682, // alpha = 0.05668934 + 15367, 6649, 15367, 38801, // alpha = 0.06449988 + 15366, 6743, 15367, 38925, // alpha = 0.07281432 + 15365, 6838, 15366, 38978, // alpha = 0.08163266 + 15365, 6933, 15365, 39052, // alpha = 0.09095491 + 15364, 7028, 15364, 39113, // alpha = 0.1007811 + 15363, 7122, 15364, 39201, // alpha = 0.1111111 + 15362, 7192, 15363, 39307, // alpha = 0.1219451 + 15361, 7240, 15362, 39456, // alpha = 0.1332829 + 15360, 7287, 15361, 39598, // alpha = 0.1451247 + 15358, 7334, 15360, 39670, // alpha = 0.1574704 + 15355, 7381, 15359, 39615, // alpha = 0.17032 + 15353, 7428, 15357, 39608, // alpha = 0.1836735 + 15352, 7475, 15355, 39631, // alpha = 0.1975309 + 15350, 7522, 15353, 39676, // alpha = 0.2118922 + 15349, 7569, 15351, 39725, // alpha = 0.2267574 + 15347, 7616, 15350, 39786, // alpha = 0.2421265 + 15346, 7663, 15348, 39849, // alpha = 0.2579995 + 15344, 7710, 15347, 39903, // alpha = 0.2743765 + 15342, 7757, 15345, 39953, // alpha = 0.2912573 + 15341, 7804, 15344, 39985, // alpha = 0.308642 + 15339, 7851, 15342, 40014, // alpha = 0.3265306 + 15338, 7897, 15341, 40047, // alpha = 0.3449232 + 15336, 7944, 15339, 40081, // alpha = 0.3638196 + 15334, 7991, 15337, 40105, // alpha = 0.38322 + 15333, 8037, 15336, 40142, // alpha = 0.4031242 + 15331, 8084, 15334, 40168, // alpha = 0.4235324 + 15329, 8130, 15333, 40199, // alpha = 0.4444445 + 15328, 8177, 15331, 40231, // alpha = 0.4658605 + 15326, 8208, 15330, 40260, // alpha = 0.4877803 + 15324, 8231, 15328, 40292, // alpha = 0.5102041 + 15323, 8254, 15326, 40321, // alpha = 0.5331318 + 15321, 8277, 15325, 40358, // alpha = 0.5565634 + 15319, 8301, 15323, 40393, // alpha = 0.5804989 + 15318, 8324, 15322, 40418, // alpha = 0.6049383 + 15316, 8347, 15320, 40442, // alpha = 0.6298816 + 15315, 8370, 15319, 40487, // alpha = 0.6553288 + 15313, 8393, 15317, 40502, // alpha = 0.68128 + 15311, 8416, 15316, 40556, // alpha = 0.7077349 + 15310, 8439, 15314, 40576, // alpha = 0.7346939 + 15308, 8462, 15312, 40607, // alpha = 0.7621567 + 15306, 8485, 15311, 40638, // alpha = 0.7901235 + 15304, 8508, 15309, 40673, // alpha = 0.8185941 + 15303, 8531, 15308, 40713, // alpha = 0.8475687 + 15301, 8554, 15306, 40730, // alpha = 0.8770471 + 15300, 8577, 15305, 40777, // alpha = 0.9070295 + 15298, 8600, 15303, 40830, // alpha = 0.9375157 + 15296, 8623, 15301, 40836, // alpha = 0.9685059 + 15295, 8646, 15300, 40878, // alpha = 1 + + // Cos (theta) = 0.8780549 + 15378, 4186, 15378, 36167, // alpha = 0.001 + 15378, 4186, 15378, 36167, // alpha = 0.001 + 15378, 4186, 15378, 36167, // alpha = 0.001007811 + 15378, 4258, 15378, 36335, // alpha = 0.002267574 + 15377, 4653, 15377, 36834, // alpha = 0.004031243 + 15376, 5047, 15376, 37091, // alpha = 0.006298816 + 15375, 5280, 15375, 37317, // alpha = 0.009070295 + 15374, 5477, 15375, 37541, // alpha = 0.01234568 + 15374, 5674, 15374, 37843, // alpha = 0.01612497 + 15373, 5871, 15373, 38003, // alpha = 0.02040816 + 15372, 6067, 15372, 38109, // alpha = 0.02519527 + 15371, 6204, 15371, 38233, // alpha = 0.03048627 + 15370, 6302, 15371, 38348, // alpha = 0.03628118 + 15369, 6400, 15370, 38459, // alpha = 0.04258 + 15369, 6498, 15369, 38591, // alpha = 0.04938272 + 15368, 6595, 15368, 38735, // alpha = 0.05668934 + 15367, 6693, 15367, 38844, // alpha = 0.06449988 + 15366, 6791, 15367, 38957, // alpha = 0.07281432 + 15365, 6889, 15366, 39016, // alpha = 0.08163266 + 15365, 6986, 15365, 39082, // alpha = 0.09095491 + 15364, 7084, 15364, 39159, // alpha = 0.1007811 + 15363, 7174, 15364, 39249, // alpha = 0.1111111 + 15362, 7223, 15363, 39356, // alpha = 0.1219451 + 15361, 7272, 15362, 39514, // alpha = 0.1332829 + 15360, 7320, 15361, 39655, // alpha = 0.1451247 + 15357, 7369, 15360, 39701, // alpha = 0.1574704 + 15355, 7417, 15358, 39651, // alpha = 0.17032 + 15353, 7466, 15357, 39656, // alpha = 0.1836735 + 15352, 7514, 15355, 39689, // alpha = 0.1975309 + 15350, 7563, 15353, 39734, // alpha = 0.2118922 + 15348, 7611, 15351, 39786, // alpha = 0.2267574 + 15347, 7659, 15350, 39844, // alpha = 0.2421265 + 15345, 7708, 15348, 39914, // alpha = 0.2579995 + 15344, 7756, 15347, 39951, // alpha = 0.2743765 + 15342, 7804, 15345, 39981, // alpha = 0.2912573 + 15340, 7852, 15344, 40014, // alpha = 0.308642 + 15339, 7900, 15342, 40052, // alpha = 0.3265306 + 15337, 7949, 15340, 40085, // alpha = 0.3449232 + 15336, 7997, 15339, 40118, // alpha = 0.3638196 + 15334, 8045, 15337, 40152, // alpha = 0.38322 + 15332, 8093, 15336, 40180, // alpha = 0.4031242 + 15331, 8141, 15334, 40214, // alpha = 0.4235324 + 15329, 8189, 15333, 40240, // alpha = 0.4444445 + 15327, 8214, 15331, 40274, // alpha = 0.4658605 + 15326, 8238, 15329, 40309, // alpha = 0.4877803 + 15324, 8262, 15328, 40340, // alpha = 0.5102041 + 15322, 8286, 15326, 40375, // alpha = 0.5331318 + 15321, 8310, 15325, 40404, // alpha = 0.5565634 + 15319, 8334, 15323, 40446, // alpha = 0.5804989 + 15318, 8357, 15322, 40475, // alpha = 0.6049383 + 15316, 8381, 15320, 40517, // alpha = 0.6298816 + 15314, 8405, 15318, 40527, // alpha = 0.6553288 + 15312, 8429, 15317, 40570, // alpha = 0.68128 + 15311, 8453, 15315, 40604, // alpha = 0.7077349 + 15309, 8476, 15314, 40636, // alpha = 0.7346939 + 15307, 8500, 15312, 40666, // alpha = 0.7621567 + 15306, 8524, 15311, 40698, // alpha = 0.7901235 + 15304, 8548, 15309, 40737, // alpha = 0.8185941 + 15303, 8571, 15308, 40764, // alpha = 0.8475687 + 15301, 8595, 15306, 40803, // alpha = 0.8770471 + 15299, 8618, 15304, 40846, // alpha = 0.9070295 + 15298, 8642, 15303, 40877, // alpha = 0.9375157 + 15296, 8666, 15301, 40909, // alpha = 0.9685059 + 15294, 8689, 15300, 40946, // alpha = 1 + + // Cos (theta) = 0.866717 + 15378, 4216, 15378, 36229, // alpha = 0.001 + 15378, 4216, 15378, 36229, // alpha = 0.001 + 15378, 4216, 15378, 36229, // alpha = 0.001007811 + 15378, 4290, 15378, 36335, // alpha = 0.002267574 + 15377, 4696, 15377, 36893, // alpha = 0.004031243 + 15376, 5101, 15376, 37146, // alpha = 0.006298816 + 15375, 5313, 15375, 37383, // alpha = 0.009070295 + 15374, 5515, 15375, 37618, // alpha = 0.01234568 + 15374, 5717, 15374, 37876, // alpha = 0.01612497 + 15373, 5919, 15373, 38025, // alpha = 0.02040816 + 15372, 6121, 15372, 38150, // alpha = 0.02519527 + 15371, 6233, 15371, 38287, // alpha = 0.03048627 + 15370, 6334, 15371, 38401, // alpha = 0.03628118 + 15369, 6435, 15370, 38513, // alpha = 0.04258 + 15369, 6535, 15369, 38635, // alpha = 0.04938272 + 15368, 6636, 15368, 38780, // alpha = 0.05668934 + 15367, 6736, 15367, 38918, // alpha = 0.06449988 + 15366, 6837, 15367, 38987, // alpha = 0.07281432 + 15365, 6937, 15366, 39045, // alpha = 0.08163266 + 15364, 7037, 15365, 39120, // alpha = 0.09095491 + 15364, 7137, 15364, 39197, // alpha = 0.1007811 + 15363, 7203, 15364, 39289, // alpha = 0.1111111 + 15362, 7253, 15363, 39415, // alpha = 0.1219451 + 15361, 7303, 15362, 39570, // alpha = 0.1332829 + 15360, 7353, 15361, 39700, // alpha = 0.1451247 + 15357, 7403, 15360, 39729, // alpha = 0.1574704 + 15355, 7452, 15358, 39690, // alpha = 0.17032 + 15353, 7502, 15356, 39696, // alpha = 0.1836735 + 15351, 7552, 15355, 39738, // alpha = 0.1975309 + 15350, 7602, 15353, 39785, // alpha = 0.2118922 + 15348, 7651, 15351, 39845, // alpha = 0.2267574 + 15347, 7701, 15350, 39906, // alpha = 0.2421265 + 15345, 7751, 15348, 39954, // alpha = 0.2579995 + 15343, 7800, 15347, 39984, // alpha = 0.2743765 + 15342, 7850, 15345, 40019, // alpha = 0.2912573 + 15340, 7899, 15344, 40054, // alpha = 0.308642 + 15339, 7949, 15342, 40084, // alpha = 0.3265306 + 15337, 7998, 15340, 40115, // alpha = 0.3449232 + 15335, 8048, 15339, 40145, // alpha = 0.3638196 + 15334, 8097, 15337, 40178, // alpha = 0.38322 + 15332, 8146, 15336, 40220, // alpha = 0.4031242 + 15330, 8194, 15334, 40247, // alpha = 0.4235324 + 15329, 8218, 15333, 40285, // alpha = 0.4444445 + 15327, 8243, 15331, 40316, // alpha = 0.4658605 + 15325, 8268, 15329, 40349, // alpha = 0.4877803 + 15324, 8292, 15328, 40379, // alpha = 0.5102041 + 15322, 8317, 15326, 40419, // alpha = 0.5331318 + 15320, 8341, 15325, 40453, // alpha = 0.5565634 + 15319, 8366, 15323, 40485, // alpha = 0.5804989 + 15317, 8390, 15322, 40517, // alpha = 0.6049383 + 15315, 8415, 15320, 40550, // alpha = 0.6298816 + 15314, 8439, 15318, 40580, // alpha = 0.6553288 + 15312, 8464, 15317, 40615, // alpha = 0.68128 + 15310, 8488, 15315, 40654, // alpha = 0.7077349 + 15309, 8512, 15314, 40681, // alpha = 0.7346939 + 15307, 8537, 15312, 40735, // alpha = 0.7621567 + 15306, 8561, 15311, 40766, // alpha = 0.7901235 + 15304, 8585, 15309, 40783, // alpha = 0.8185941 + 15302, 8610, 15307, 40822, // alpha = 0.8475687 + 15300, 8634, 15306, 40851, // alpha = 0.8770471 + 15299, 8658, 15304, 40882, // alpha = 0.9070295 + 15297, 8683, 15303, 40935, // alpha = 0.9375157 + 15295, 8707, 15301, 40950, // alpha = 0.9685059 + 15294, 8731, 15300, 40980, // alpha = 1 + + // Cos (theta) = 0.8548753 + 15378, 4246, 15378, 36289, // alpha = 0.001 + 15378, 4246, 15378, 36289, // alpha = 0.001 + 15378, 4246, 15378, 36289, // alpha = 0.001007811 + 15378, 4322, 15378, 36293, // alpha = 0.002267574 + 15377, 4738, 15377, 36915, // alpha = 0.004031243 + 15376, 5137, 15376, 37124, // alpha = 0.006298816 + 15375, 5344, 15375, 37446, // alpha = 0.009070295 + 15374, 5552, 15375, 37692, // alpha = 0.01234568 + 15373, 5759, 15374, 37911, // alpha = 0.01612497 + 15373, 5966, 15373, 38037, // alpha = 0.02040816 + 15372, 6159, 15372, 38169, // alpha = 0.02519527 + 15371, 6262, 15371, 38297, // alpha = 0.03048627 + 15370, 6366, 15371, 38439, // alpha = 0.03628118 + 15369, 6469, 15370, 38569, // alpha = 0.04258 + 15368, 6572, 15369, 38705, // alpha = 0.04938272 + 15368, 6675, 15368, 38827, // alpha = 0.05668934 + 15367, 6778, 15367, 38941, // alpha = 0.06449988 + 15366, 6881, 15367, 38999, // alpha = 0.07281432 + 15365, 6984, 15366, 39081, // alpha = 0.08163266 + 15364, 7087, 15365, 39154, // alpha = 0.09095491 + 15364, 7179, 15364, 39230, // alpha = 0.1007811 + 15363, 7230, 15364, 39329, // alpha = 0.1111111 + 15362, 7281, 15363, 39465, // alpha = 0.1219451 + 15361, 7333, 15362, 39623, // alpha = 0.1332829 + 15359, 7384, 15361, 39745, // alpha = 0.1451247 + 15357, 7435, 15360, 39752, // alpha = 0.1574704 + 15354, 7486, 15358, 39722, // alpha = 0.17032 + 15353, 7537, 15356, 39745, // alpha = 0.1836735 + 15351, 7588, 15355, 39790, // alpha = 0.1975309 + 15349, 7639, 15353, 39835, // alpha = 0.2118922 + 15348, 7690, 15351, 39899, // alpha = 0.2267574 + 15346, 7741, 15350, 39952, // alpha = 0.2421265 + 15345, 7792, 15348, 39981, // alpha = 0.2579995 + 15343, 7843, 15347, 40018, // alpha = 0.2743765 + 15342, 7894, 15345, 40049, // alpha = 0.2912573 + 15340, 7945, 15343, 40080, // alpha = 0.308642 + 15338, 7995, 15342, 40118, // alpha = 0.3265306 + 15337, 8046, 15340, 40148, // alpha = 0.3449232 + 15335, 8097, 15339, 40184, // alpha = 0.3638196 + 15333, 8147, 15337, 40218, // alpha = 0.38322 + 15332, 8195, 15336, 40254, // alpha = 0.4031242 + 15330, 8220, 15334, 40284, // alpha = 0.4235324 + 15328, 8245, 15332, 40325, // alpha = 0.4444445 + 15327, 8271, 15331, 40355, // alpha = 0.4658605 + 15325, 8296, 15329, 40383, // alpha = 0.4877803 + 15323, 8321, 15328, 40427, // alpha = 0.5102041 + 15322, 8346, 15326, 40457, // alpha = 0.5331318 + 15320, 8371, 15325, 40484, // alpha = 0.5565634 + 15318, 8397, 15323, 40522, // alpha = 0.5804989 + 15317, 8422, 15321, 40564, // alpha = 0.6049383 + 15315, 8447, 15320, 40603, // alpha = 0.6298816 + 15313, 8472, 15318, 40634, // alpha = 0.6553288 + 15312, 8497, 15317, 40673, // alpha = 0.68128 + 15310, 8522, 15315, 40712, // alpha = 0.7077349 + 15308, 8547, 15314, 40731, // alpha = 0.7346939 + 15307, 8572, 15312, 40773, // alpha = 0.7621567 + 15305, 8597, 15310, 40811, // alpha = 0.7901235 + 15303, 8622, 15309, 40838, // alpha = 0.8185941 + 15302, 8647, 15307, 40886, // alpha = 0.8475687 + 15300, 8672, 15306, 40915, // alpha = 0.8770471 + 15298, 8697, 15304, 40961, // alpha = 0.9070295 + 15297, 8722, 15303, 40967, // alpha = 0.9375157 + 15295, 8747, 15301, 40990, // alpha = 0.9685059 + 15293, 8771, 15299, 41008, // alpha = 1 + + // Cos (theta) = 0.8425296 + 15378, 4274, 15378, 36348, // alpha = 0.001 + 15378, 4274, 15378, 36348, // alpha = 0.001 + 15378, 4274, 15378, 36348, // alpha = 0.001007811 + 15378, 4352, 15378, 36507, // alpha = 0.002267574 + 15377, 4778, 15377, 36956, // alpha = 0.004031243 + 15376, 5162, 15376, 37234, // alpha = 0.006298816 + 15375, 5375, 15375, 37423, // alpha = 0.009070295 + 15374, 5587, 15375, 37764, // alpha = 0.01234568 + 15373, 5800, 15374, 37930, // alpha = 0.01612497 + 15373, 6012, 15373, 38083, // alpha = 0.02040816 + 15372, 6184, 15372, 38220, // alpha = 0.02519527 + 15371, 6290, 15371, 38376, // alpha = 0.03048627 + 15370, 6396, 15371, 38462, // alpha = 0.03628118 + 15369, 6502, 15370, 38635, // alpha = 0.04258 + 15368, 6607, 15369, 38763, // alpha = 0.04938272 + 15368, 6713, 15368, 38898, // alpha = 0.05668934 + 15367, 6819, 15367, 38978, // alpha = 0.06449988 + 15366, 6924, 15367, 39041, // alpha = 0.07281432 + 15365, 7029, 15366, 39108, // alpha = 0.08163266 + 15364, 7135, 15365, 39193, // alpha = 0.09095491 + 15364, 7204, 15364, 39275, // alpha = 0.1007811 + 15363, 7257, 15364, 39372, // alpha = 0.1111111 + 15362, 7309, 15363, 39512, // alpha = 0.1219451 + 15361, 7362, 15362, 39672, // alpha = 0.1332829 + 15359, 7414, 15361, 39787, // alpha = 0.1451247 + 15356, 7466, 15360, 39772, // alpha = 0.1574704 + 15354, 7519, 15358, 39756, // alpha = 0.17032 + 15352, 7571, 15356, 39786, // alpha = 0.1836735 + 15351, 7623, 15355, 39833, // alpha = 0.1975309 + 15349, 7676, 15353, 39885, // alpha = 0.2118922 + 15348, 7728, 15351, 39943, // alpha = 0.2267574 + 15346, 7780, 15350, 39977, // alpha = 0.2421265 + 15344, 7832, 15348, 40007, // alpha = 0.2579995 + 15343, 7884, 15346, 40042, // alpha = 0.2743765 + 15341, 7936, 15345, 40083, // alpha = 0.2912573 + 15340, 7988, 15343, 40114, // alpha = 0.308642 + 15338, 8040, 15342, 40149, // alpha = 0.3265306 + 15336, 8092, 15340, 40184, // alpha = 0.3449232 + 15335, 8144, 15339, 40219, // alpha = 0.3638196 + 15333, 8194, 15337, 40250, // alpha = 0.38322 + 15331, 8220, 15336, 40290, // alpha = 0.4031242 + 15330, 8246, 15334, 40326, // alpha = 0.4235324 + 15328, 8272, 15332, 40366, // alpha = 0.4444445 + 15326, 8298, 15331, 40390, // alpha = 0.4658605 + 15325, 8323, 15329, 40429, // alpha = 0.4877803 + 15323, 8349, 15328, 40472, // alpha = 0.5102041 + 15321, 8375, 15326, 40502, // alpha = 0.5331318 + 15320, 8401, 15324, 40529, // alpha = 0.5565634 + 15318, 8426, 15323, 40571, // alpha = 0.5804989 + 15316, 8452, 15321, 40608, // alpha = 0.6049383 + 15315, 8478, 15320, 40644, // alpha = 0.6298816 + 15313, 8504, 15318, 40685, // alpha = 0.6553288 + 15311, 8529, 15317, 40720, // alpha = 0.68128 + 15310, 8555, 15315, 40747, // alpha = 0.7077349 + 15308, 8581, 15313, 40779, // alpha = 0.7346939 + 15306, 8606, 15312, 40819, // alpha = 0.7621567 + 15304, 8632, 15310, 40853, // alpha = 0.7901235 + 15303, 8657, 15309, 40898, // alpha = 0.8185941 + 15301, 8683, 15307, 40921, // alpha = 0.8475687 + 15299, 8708, 15306, 40958, // alpha = 0.8770471 + 15298, 8734, 15304, 40983, // alpha = 0.9070295 + 15296, 8759, 15302, 40999, // alpha = 0.9375157 + 15294, 8785, 15301, 41023, // alpha = 0.9685059 + 15293, 8810, 15299, 41040, // alpha = 1 + + // Cos (theta) = 0.82968 + 15378, 4302, 15378, 36404, // alpha = 0.001 + 15378, 4302, 15378, 36404, // alpha = 0.001 + 15378, 4302, 15378, 36404, // alpha = 0.001007811 + 15378, 4382, 15378, 36398, // alpha = 0.002267574 + 15377, 4818, 15377, 36996, // alpha = 0.004031243 + 15376, 5187, 15376, 37147, // alpha = 0.006298816 + 15375, 5404, 15375, 37483, // alpha = 0.009070295 + 15374, 5622, 15375, 37778, // alpha = 0.01234568 + 15373, 5839, 15374, 37951, // alpha = 0.01612497 + 15373, 6056, 15373, 38127, // alpha = 0.02040816 + 15372, 6208, 15372, 38222, // alpha = 0.02519527 + 15371, 6317, 15371, 38371, // alpha = 0.03048627 + 15370, 6425, 15371, 38521, // alpha = 0.03628118 + 15369, 6533, 15370, 38673, // alpha = 0.04258 + 15368, 6641, 15369, 38812, // alpha = 0.04938272 + 15368, 6750, 15368, 38927, // alpha = 0.05668934 + 15367, 6857, 15367, 39004, // alpha = 0.06449988 + 15366, 6965, 15367, 39073, // alpha = 0.07281432 + 15365, 7073, 15366, 39149, // alpha = 0.08163266 + 15364, 7174, 15365, 39220, // alpha = 0.09095491 + 15364, 7228, 15364, 39313, // alpha = 0.1007811 + 15363, 7282, 15364, 39416, // alpha = 0.1111111 + 15362, 7336, 15363, 39565, // alpha = 0.1219451 + 15361, 7389, 15362, 39727, // alpha = 0.1332829 + 15359, 7443, 15361, 39821, // alpha = 0.1451247 + 15356, 7497, 15360, 39802, // alpha = 0.1574704 + 15354, 7550, 15358, 39791, // alpha = 0.17032 + 15352, 7604, 15356, 39824, // alpha = 0.1836735 + 15351, 7657, 15354, 39880, // alpha = 0.1975309 + 15349, 7711, 15353, 39936, // alpha = 0.2118922 + 15347, 7764, 15351, 39971, // alpha = 0.2267574 + 15346, 7818, 15350, 40001, // alpha = 0.2421265 + 15344, 7871, 15348, 40037, // alpha = 0.2579995 + 15343, 7924, 15346, 40075, // alpha = 0.2743765 + 15341, 7977, 15345, 40110, // alpha = 0.2912573 + 15339, 8031, 15343, 40146, // alpha = 0.308642 + 15338, 8084, 15342, 40182, // alpha = 0.3265306 + 15336, 8137, 15340, 40217, // alpha = 0.3449232 + 15334, 8190, 15339, 40251, // alpha = 0.3638196 + 15333, 8218, 15337, 40286, // alpha = 0.38322 + 15331, 8244, 15335, 40326, // alpha = 0.4031242 + 15329, 8271, 15334, 40362, // alpha = 0.4235324 + 15328, 8297, 15332, 40391, // alpha = 0.4444445 + 15326, 8323, 15331, 40428, // alpha = 0.4658605 + 15324, 8350, 15329, 40470, // alpha = 0.4877803 + 15323, 8376, 15328, 40513, // alpha = 0.5102041 + 15321, 8403, 15326, 40538, // alpha = 0.5331318 + 15319, 8429, 15324, 40573, // alpha = 0.5565634 + 15318, 8455, 15323, 40606, // alpha = 0.5804989 + 15316, 8482, 15321, 40644, // alpha = 0.6049383 + 15314, 8508, 15320, 40686, // alpha = 0.6298816 + 15313, 8534, 15318, 40726, // alpha = 0.6553288 + 15311, 8561, 15317, 40764, // alpha = 0.68128 + 15309, 8587, 15315, 40791, // alpha = 0.7077349 + 15307, 8613, 15313, 40839, // alpha = 0.7346939 + 15306, 8639, 15312, 40877, // alpha = 0.7621567 + 15304, 8665, 15310, 40899, // alpha = 0.7901235 + 15302, 8692, 15309, 40947, // alpha = 0.8185941 + 15301, 8718, 15307, 40964, // alpha = 0.8475687 + 15299, 8744, 15305, 40989, // alpha = 0.8770471 + 15298, 8770, 15304, 41010, // alpha = 0.9070295 + 15296, 8796, 15302, 41026, // alpha = 0.9375157 + 15294, 8822, 15301, 41040, // alpha = 0.9685059 + 15292, 8848, 15299, 41056, // alpha = 1 + + // Cos (theta) = 0.8163265 + 15378, 4329, 15378, 36459, // alpha = 0.001 + 15378, 4329, 15378, 36459, // alpha = 0.001 + 15378, 4329, 15378, 36459, // alpha = 0.001007811 + 15378, 4411, 15378, 36457, // alpha = 0.002267574 + 15377, 4856, 15377, 37035, // alpha = 0.004031243 + 15376, 5211, 15376, 37274, // alpha = 0.006298816 + 15375, 5433, 15375, 37472, // alpha = 0.009070295 + 15374, 5655, 15375, 37791, // alpha = 0.01234568 + 15373, 5877, 15374, 37990, // alpha = 0.01612497 + 15373, 6099, 15373, 38152, // alpha = 0.02040816 + 15372, 6232, 15372, 38292, // alpha = 0.02519527 + 15371, 6343, 15371, 38425, // alpha = 0.03048627 + 15370, 6454, 15371, 38573, // alpha = 0.03628118 + 15369, 6564, 15370, 38695, // alpha = 0.04258 + 15368, 6675, 15369, 38828, // alpha = 0.04938272 + 15368, 6785, 15368, 38956, // alpha = 0.05668934 + 15367, 6896, 15367, 39026, // alpha = 0.06449988 + 15366, 7006, 15367, 39103, // alpha = 0.07281432 + 15365, 7116, 15366, 39176, // alpha = 0.08163266 + 15364, 7197, 15365, 39256, // alpha = 0.09095491 + 15363, 7252, 15364, 39351, // alpha = 0.1007811 + 15363, 7307, 15364, 39462, // alpha = 0.1111111 + 15362, 7362, 15363, 39611, // alpha = 0.1219451 + 15361, 7417, 15362, 39768, // alpha = 0.1332829 + 15359, 7472, 15361, 39854, // alpha = 0.1451247 + 15356, 7527, 15360, 39827, // alpha = 0.1574704 + 15354, 7581, 15358, 39827, // alpha = 0.17032 + 15352, 7636, 15356, 39871, // alpha = 0.1836735 + 15350, 7691, 15354, 39926, // alpha = 0.1975309 + 15349, 7745, 15353, 39961, // alpha = 0.2118922 + 15347, 7800, 15351, 39996, // alpha = 0.2267574 + 15346, 7854, 15350, 40031, // alpha = 0.2421265 + 15344, 7909, 15348, 40067, // alpha = 0.2579995 + 15342, 7963, 15346, 40100, // alpha = 0.2743765 + 15341, 8018, 15345, 40140, // alpha = 0.2912573 + 15339, 8072, 15343, 40168, // alpha = 0.308642 + 15337, 8127, 15342, 40210, // alpha = 0.3265306 + 15336, 8181, 15340, 40249, // alpha = 0.3449232 + 15334, 8214, 15339, 40284, // alpha = 0.3638196 + 15332, 8241, 15337, 40322, // alpha = 0.38322 + 15331, 8268, 15335, 40360, // alpha = 0.4031242 + 15329, 8295, 15334, 40397, // alpha = 0.4235324 + 15327, 8322, 15332, 40436, // alpha = 0.4444445 + 15326, 8349, 15331, 40465, // alpha = 0.4658605 + 15324, 8376, 15329, 40503, // alpha = 0.4877803 + 15322, 8403, 15327, 40542, // alpha = 0.5102041 + 15320, 8430, 15326, 40579, // alpha = 0.5331318 + 15319, 8457, 15324, 40615, // alpha = 0.5565634 + 15317, 8484, 15323, 40654, // alpha = 0.5804989 + 15316, 8511, 15321, 40693, // alpha = 0.6049383 + 15314, 8538, 15320, 40721, // alpha = 0.6298816 + 15312, 8564, 15318, 40768, // alpha = 0.6553288 + 15310, 8591, 15317, 40793, // alpha = 0.68128 + 15309, 8618, 15315, 40841, // alpha = 0.7077349 + 15307, 8645, 15313, 40881, // alpha = 0.7346939 + 15305, 8672, 15312, 40913, // alpha = 0.7621567 + 15304, 8698, 15310, 40958, // alpha = 0.7901235 + 15302, 8725, 15309, 40978, // alpha = 0.8185941 + 15300, 8752, 15307, 41001, // alpha = 0.8475687 + 15299, 8779, 15305, 41016, // alpha = 0.8770471 + 15297, 8805, 15304, 41025, // alpha = 0.9070295 + 15295, 8832, 15302, 41048, // alpha = 0.9375157 + 15294, 8859, 15301, 41065, // alpha = 0.9685059 + 15292, 8885, 15299, 41090, // alpha = 1 + + // Cos (theta) = 0.8024691 + 15378, 4356, 15378, 36563, // alpha = 0.001 + 15378, 4356, 15378, 36563, // alpha = 0.001 + 15378, 4356, 15378, 36563, // alpha = 0.001007811 + 15378, 4439, 15378, 36514, // alpha = 0.002267574 + 15377, 4894, 15377, 37073, // alpha = 0.004031243 + 15376, 5234, 15376, 37257, // alpha = 0.006298816 + 15375, 5461, 15375, 37529, // alpha = 0.009070295 + 15374, 5688, 15375, 37858, // alpha = 0.01234568 + 15373, 5915, 15374, 38028, // alpha = 0.01612497 + 15372, 6142, 15373, 38157, // alpha = 0.02040816 + 15372, 6256, 15372, 38317, // alpha = 0.02519527 + 15371, 6369, 15371, 38458, // alpha = 0.03048627 + 15370, 6482, 15371, 38609, // alpha = 0.03628118 + 15369, 6595, 15370, 38765, // alpha = 0.04258 + 15368, 6708, 15369, 38896, // alpha = 0.04938272 + 15367, 6821, 15368, 38988, // alpha = 0.05668934 + 15367, 6933, 15367, 39056, // alpha = 0.06449988 + 15366, 7046, 15367, 39123, // alpha = 0.07281432 + 15365, 7159, 15366, 39208, // alpha = 0.08163266 + 15364, 7219, 15365, 39300, // alpha = 0.09095491 + 15363, 7276, 15364, 39387, // alpha = 0.1007811 + 15363, 7332, 15364, 39497, // alpha = 0.1111111 + 15362, 7388, 15363, 39662, // alpha = 0.1219451 + 15360, 7444, 15362, 39815, // alpha = 0.1332829 + 15358, 7500, 15361, 39879, // alpha = 0.1451247 + 15355, 7556, 15360, 39852, // alpha = 0.1574704 + 15353, 7612, 15358, 39868, // alpha = 0.17032 + 15352, 7668, 15356, 39911, // alpha = 0.1836735 + 15350, 7724, 15354, 39953, // alpha = 0.1975309 + 15349, 7779, 15353, 39983, // alpha = 0.2118922 + 15347, 7835, 15351, 40022, // alpha = 0.2267574 + 15345, 7891, 15349, 40054, // alpha = 0.2421265 + 15344, 7946, 15348, 40091, // alpha = 0.2579995 + 15342, 8002, 15346, 40128, // alpha = 0.2743765 + 15340, 8058, 15345, 40169, // alpha = 0.2912573 + 15339, 8113, 15343, 40206, // alpha = 0.308642 + 15337, 8169, 15342, 40242, // alpha = 0.3265306 + 15335, 8208, 15340, 40276, // alpha = 0.3449232 + 15334, 8236, 15339, 40317, // alpha = 0.3638196 + 15332, 8263, 15337, 40345, // alpha = 0.38322 + 15330, 8291, 15335, 40394, // alpha = 0.4031242 + 15329, 8319, 15334, 40434, // alpha = 0.4235324 + 15327, 8346, 15332, 40468, // alpha = 0.4444445 + 15325, 8374, 15331, 40506, // alpha = 0.4658605 + 15324, 8402, 15329, 40540, // alpha = 0.4877803 + 15322, 8429, 15327, 40585, // alpha = 0.5102041 + 15320, 8457, 15326, 40616, // alpha = 0.5331318 + 15319, 8484, 15324, 40656, // alpha = 0.5565634 + 15317, 8512, 15323, 40688, // alpha = 0.5804989 + 15315, 8539, 15321, 40725, // alpha = 0.6049383 + 15314, 8567, 15320, 40769, // alpha = 0.6298816 + 15312, 8594, 15318, 40814, // alpha = 0.6553288 + 15310, 8622, 15317, 40848, // alpha = 0.68128 + 15308, 8649, 15315, 40891, // alpha = 0.7077349 + 15307, 8676, 15313, 40934, // alpha = 0.7346939 + 15305, 8704, 15312, 40956, // alpha = 0.7621567 + 15303, 8731, 15310, 40980, // alpha = 0.7901235 + 15302, 8758, 15309, 41003, // alpha = 0.8185941 + 15300, 8786, 15307, 41015, // alpha = 0.8475687 + 15298, 8813, 15305, 41045, // alpha = 0.8770471 + 15296, 8840, 15304, 41059, // alpha = 0.9070295 + 15295, 8867, 15302, 41080, // alpha = 0.9375157 + 15293, 8895, 15301, 41096, // alpha = 0.9685059 + 15291, 8922, 15299, 41109, // alpha = 1 + + // Cos (theta) = 0.7881078 + 15378, 4382, 15378, 36401, // alpha = 0.001 + 15378, 4382, 15378, 36401, // alpha = 0.001 + 15378, 4382, 15378, 36401, // alpha = 0.001007811 + 15378, 4467, 15378, 36571, // alpha = 0.002267574 + 15377, 4931, 15377, 36971, // alpha = 0.004031243 + 15376, 5257, 15376, 37304, // alpha = 0.006298816 + 15375, 5489, 15375, 37586, // alpha = 0.009070295 + 15374, 5721, 15375, 37906, // alpha = 0.01234568 + 15373, 5952, 15374, 38051, // alpha = 0.01612497 + 15372, 6164, 15373, 38200, // alpha = 0.02040816 + 15372, 6279, 15372, 38363, // alpha = 0.02519527 + 15371, 6395, 15371, 38509, // alpha = 0.03048627 + 15370, 6510, 15371, 38618, // alpha = 0.03628118 + 15369, 6625, 15370, 38804, // alpha = 0.04258 + 15368, 6740, 15369, 38926, // alpha = 0.04938272 + 15367, 6855, 15368, 39005, // alpha = 0.05668934 + 15367, 6970, 15367, 39083, // alpha = 0.06449988 + 15366, 7085, 15367, 39159, // alpha = 0.07281432 + 15365, 7184, 15366, 39246, // alpha = 0.08163266 + 15364, 7241, 15365, 39328, // alpha = 0.09095491 + 15363, 7299, 15364, 39422, // alpha = 0.1007811 + 15362, 7356, 15364, 39543, // alpha = 0.1111111 + 15361, 7413, 15363, 39709, // alpha = 0.1219451 + 15360, 7471, 15362, 39856, // alpha = 0.1332829 + 15358, 7528, 15361, 39918, // alpha = 0.1451247 + 15355, 7585, 15360, 39879, // alpha = 0.1574704 + 15353, 7642, 15358, 39904, // alpha = 0.17032 + 15351, 7699, 15356, 39944, // alpha = 0.1836735 + 15350, 7756, 15354, 39980, // alpha = 0.1975309 + 15348, 7813, 15353, 40009, // alpha = 0.2118922 + 15347, 7870, 15351, 40043, // alpha = 0.2267574 + 15345, 7927, 15349, 40080, // alpha = 0.2421265 + 15343, 7983, 15348, 40122, // alpha = 0.2579995 + 15342, 8040, 15346, 40159, // alpha = 0.2743765 + 15340, 8097, 15345, 40193, // alpha = 0.2912573 + 15338, 8154, 15343, 40234, // alpha = 0.308642 + 15337, 8201, 15342, 40274, // alpha = 0.3265306 + 15335, 8229, 15340, 40314, // alpha = 0.3449232 + 15333, 8258, 15339, 40343, // alpha = 0.3638196 + 15332, 8286, 15337, 40386, // alpha = 0.38322 + 15330, 8314, 15335, 40424, // alpha = 0.4031242 + 15328, 8342, 15334, 40458, // alpha = 0.4235324 + 15327, 8371, 15332, 40499, // alpha = 0.4444445 + 15325, 8399, 15331, 40558, // alpha = 0.4658605 + 15323, 8427, 15329, 40575, // alpha = 0.4877803 + 15322, 8455, 15327, 40622, // alpha = 0.5102041 + 15320, 8483, 15326, 40660, // alpha = 0.5331318 + 15318, 8511, 15324, 40703, // alpha = 0.5565634 + 15316, 8539, 15323, 40735, // alpha = 0.5804989 + 15315, 8567, 15321, 40763, // alpha = 0.6049383 + 15313, 8595, 15320, 40821, // alpha = 0.6298816 + 15311, 8623, 15318, 40848, // alpha = 0.6553288 + 15310, 8651, 15316, 40892, // alpha = 0.68128 + 15308, 8679, 15315, 40942, // alpha = 0.7077349 + 15306, 8707, 15313, 40971, // alpha = 0.7346939 + 15305, 8735, 15312, 40986, // alpha = 0.7621567 + 15303, 8763, 15310, 41000, // alpha = 0.7901235 + 15301, 8791, 15309, 41030, // alpha = 0.8185941 + 15300, 8819, 15307, 41042, // alpha = 0.8475687 + 15298, 8847, 15305, 41068, // alpha = 0.8770471 + 15296, 8874, 15304, 41089, // alpha = 0.9070295 + 15294, 8902, 15302, 41105, // alpha = 0.9375157 + 15293, 8930, 15301, 41128, // alpha = 0.9685059 + 15291, 8958, 15299, 41143, // alpha = 1 + + // Cos (theta) = 0.7732427 + 15378, 4408, 15378, 36384, // alpha = 0.001 + 15378, 4408, 15378, 36384, // alpha = 0.001 + 15378, 4408, 15378, 36384, // alpha = 0.001007811 + 15378, 4495, 15378, 36628, // alpha = 0.002267574 + 15377, 4968, 15377, 37008, // alpha = 0.004031243 + 15376, 5281, 15376, 37351, // alpha = 0.006298816 + 15375, 5517, 15375, 37674, // alpha = 0.009070295 + 15374, 5753, 15375, 37915, // alpha = 0.01234568 + 15373, 5989, 15374, 38088, // alpha = 0.01612497 + 15372, 6185, 15373, 38242, // alpha = 0.02040816 + 15372, 6302, 15372, 38359, // alpha = 0.02519527 + 15371, 6420, 15371, 38541, // alpha = 0.03048627 + 15370, 6538, 15371, 38674, // alpha = 0.03628118 + 15369, 6655, 15370, 38859, // alpha = 0.04258 + 15368, 6773, 15369, 38950, // alpha = 0.04938272 + 15367, 6890, 15368, 39009, // alpha = 0.05668934 + 15367, 7007, 15367, 39104, // alpha = 0.06449988 + 15366, 7125, 15367, 39182, // alpha = 0.07281432 + 15365, 7205, 15366, 39270, // alpha = 0.08163266 + 15364, 7263, 15365, 39357, // alpha = 0.09095491 + 15363, 7322, 15364, 39460, // alpha = 0.1007811 + 15362, 7380, 15364, 39589, // alpha = 0.1111111 + 15361, 7439, 15363, 39756, // alpha = 0.1219451 + 15360, 7497, 15362, 39902, // alpha = 0.1332829 + 15358, 7555, 15361, 39940, // alpha = 0.1451247 + 15355, 7614, 15360, 39918, // alpha = 0.1574704 + 15353, 7672, 15358, 39942, // alpha = 0.17032 + 15351, 7730, 15356, 39970, // alpha = 0.1836735 + 15350, 7788, 15354, 39998, // alpha = 0.1975309 + 15348, 7846, 15353, 40034, // alpha = 0.2118922 + 15346, 7904, 15351, 40072, // alpha = 0.2267574 + 15345, 7962, 15349, 40111, // alpha = 0.2421265 + 15343, 8020, 15348, 40150, // alpha = 0.2579995 + 15342, 8078, 15346, 40187, // alpha = 0.2743765 + 15340, 8136, 15345, 40222, // alpha = 0.2912573 + 15338, 8193, 15343, 40267, // alpha = 0.308642 + 15337, 8222, 15342, 40308, // alpha = 0.3265306 + 15335, 8251, 15340, 40339, // alpha = 0.3449232 + 15333, 8280, 15338, 40377, // alpha = 0.3638196 + 15331, 8308, 15337, 40422, // alpha = 0.38322 + 15330, 8337, 15335, 40464, // alpha = 0.4031242 + 15328, 8366, 15334, 40501, // alpha = 0.4235324 + 15326, 8395, 15332, 40534, // alpha = 0.4444445 + 15325, 8423, 15331, 40586, // alpha = 0.4658605 + 15323, 8452, 15329, 40624, // alpha = 0.4877803 + 15321, 8481, 15327, 40659, // alpha = 0.5102041 + 15319, 8510, 15326, 40695, // alpha = 0.5331318 + 15318, 8538, 15324, 40739, // alpha = 0.5565634 + 15316, 8567, 15323, 40775, // alpha = 0.5804989 + 15314, 8595, 15321, 40826, // alpha = 0.6049383 + 15313, 8624, 15319, 40861, // alpha = 0.6298816 + 15311, 8653, 15318, 40898, // alpha = 0.6553288 + 15309, 8681, 15316, 40942, // alpha = 0.68128 + 15308, 8710, 15315, 40972, // alpha = 0.7077349 + 15306, 8738, 15313, 40990, // alpha = 0.7346939 + 15304, 8767, 15312, 41011, // alpha = 0.7621567 + 15303, 8795, 15310, 41031, // alpha = 0.7901235 + 15301, 8824, 15308, 41053, // alpha = 0.8185941 + 15299, 8852, 15307, 41061, // alpha = 0.8475687 + 15297, 8880, 15305, 41088, // alpha = 0.8770471 + 15295, 8909, 15304, 41113, // alpha = 0.9070295 + 15294, 8937, 15302, 41134, // alpha = 0.9375157 + 15292, 8965, 15301, 41157, // alpha = 0.9685059 + 15290, 8994, 15299, 41168, // alpha = 1 + + // Cos (theta) = 0.7578735 + 15378, 4435, 15378, 36438, // alpha = 0.001 + 15378, 4435, 15378, 36438, // alpha = 0.001 + 15378, 4435, 15378, 36438, // alpha = 0.001007811 + 15378, 4523, 15378, 36585, // alpha = 0.002267574 + 15377, 5006, 15377, 37047, // alpha = 0.004031243 + 15376, 5304, 15376, 37410, // alpha = 0.006298816 + 15375, 5545, 15375, 37732, // alpha = 0.009070295 + 15374, 5786, 15375, 37954, // alpha = 0.01234568 + 15373, 6027, 15374, 38093, // alpha = 0.01612497 + 15372, 6206, 15373, 38270, // alpha = 0.02040816 + 15372, 6326, 15372, 38429, // alpha = 0.02519527 + 15371, 6446, 15371, 38572, // alpha = 0.03048627 + 15370, 6566, 15371, 38703, // alpha = 0.03628118 + 15369, 6686, 15370, 38868, // alpha = 0.04258 + 15368, 6806, 15369, 38983, // alpha = 0.04938272 + 15367, 6926, 15368, 39059, // alpha = 0.05668934 + 15367, 7045, 15368, 39146, // alpha = 0.06449988 + 15366, 7165, 15367, 39217, // alpha = 0.07281432 + 15365, 7226, 15366, 39297, // alpha = 0.08163266 + 15364, 7286, 15365, 39392, // alpha = 0.09095491 + 15363, 7345, 15365, 39499, // alpha = 0.1007811 + 15362, 7405, 15364, 39635, // alpha = 0.1111111 + 15361, 7465, 15363, 39807, // alpha = 0.1219451 + 15360, 7524, 15362, 39942, // alpha = 0.1332829 + 15357, 7584, 15361, 39953, // alpha = 0.1451247 + 15355, 7643, 15360, 39943, // alpha = 0.1574704 + 15353, 7702, 15358, 39963, // alpha = 0.17032 + 15351, 7762, 15356, 39988, // alpha = 0.1836735 + 15349, 7821, 15354, 40024, // alpha = 0.1975309 + 15348, 7880, 15353, 40058, // alpha = 0.2118922 + 15346, 7940, 15351, 40099, // alpha = 0.2267574 + 15345, 7999, 15349, 40134, // alpha = 0.2421265 + 15343, 8058, 15348, 40177, // alpha = 0.2579995 + 15341, 8117, 15346, 40219, // alpha = 0.2743765 + 15340, 8176, 15345, 40257, // alpha = 0.2912573 + 15338, 8213, 15343, 40296, // alpha = 0.308642 + 15336, 8243, 15342, 40340, // alpha = 0.3265306 + 15335, 8272, 15340, 40374, // alpha = 0.3449232 + 15333, 8302, 15338, 40415, // alpha = 0.3638196 + 15331, 8331, 15337, 40455, // alpha = 0.38322 + 15329, 8361, 15335, 40502, // alpha = 0.4031242 + 15328, 8390, 15334, 40536, // alpha = 0.4235324 + 15326, 8419, 15332, 40581, // alpha = 0.4444445 + 15324, 8449, 15331, 40622, // alpha = 0.4658605 + 15323, 8478, 15329, 40654, // alpha = 0.4877803 + 15321, 8507, 15327, 40694, // alpha = 0.5102041 + 15319, 8536, 15326, 40747, // alpha = 0.5331318 + 15318, 8566, 15324, 40772, // alpha = 0.5565634 + 15316, 8595, 15323, 40812, // alpha = 0.5804989 + 15314, 8624, 15321, 40860, // alpha = 0.6049383 + 15312, 8653, 15320, 40903, // alpha = 0.6298816 + 15311, 8682, 15318, 40945, // alpha = 0.6553288 + 15309, 8712, 15316, 40975, // alpha = 0.68128 + 15307, 8741, 15315, 40999, // alpha = 0.7077349 + 15306, 8770, 15313, 41013, // alpha = 0.7346939 + 15304, 8799, 15312, 41038, // alpha = 0.7621567 + 15302, 8828, 15310, 41053, // alpha = 0.7901235 + 15300, 8857, 15308, 41079, // alpha = 0.8185941 + 15299, 8886, 15307, 41096, // alpha = 0.8475687 + 15297, 8915, 15305, 41123, // alpha = 0.8770471 + 15295, 8944, 15304, 41146, // alpha = 0.9070295 + 15294, 8973, 15302, 41161, // alpha = 0.9375157 + 15292, 9002, 15300, 41180, // alpha = 0.9685059 + 15290, 9031, 15299, 41206, // alpha = 1 + + // Cos (theta) = 0.7420005 + 15378, 4462, 15378, 36657, // alpha = 0.001 + 15378, 4462, 15378, 36657, // alpha = 0.001 + 15378, 4462, 15378, 36657, // alpha = 0.001007811 + 15378, 4552, 15378, 36644, // alpha = 0.002267574 + 15377, 5045, 15377, 37086, // alpha = 0.004031243 + 15376, 5328, 15376, 37389, // alpha = 0.006298816 + 15375, 5574, 15375, 37703, // alpha = 0.009070295 + 15374, 5820, 15375, 37988, // alpha = 0.01234568 + 15373, 6066, 15374, 38133, // alpha = 0.01612497 + 15372, 6228, 15373, 38306, // alpha = 0.02040816 + 15372, 6350, 15372, 38478, // alpha = 0.02519527 + 15371, 6473, 15371, 38617, // alpha = 0.03048627 + 15370, 6595, 15371, 38785, // alpha = 0.03628118 + 15369, 6717, 15370, 38922, // alpha = 0.04258 + 15368, 6840, 15369, 39001, // alpha = 0.04938272 + 15367, 6962, 15368, 39089, // alpha = 0.05668934 + 15367, 7084, 15368, 39176, // alpha = 0.06449988 + 15366, 7187, 15367, 39258, // alpha = 0.07281432 + 15365, 7248, 15366, 39334, // alpha = 0.08163266 + 15364, 7309, 15365, 39429, // alpha = 0.09095491 + 15363, 7370, 15365, 39543, // alpha = 0.1007811 + 15362, 7430, 15364, 39684, // alpha = 0.1111111 + 15361, 7491, 15363, 39861, // alpha = 0.1219451 + 15360, 7552, 15362, 39968, // alpha = 0.1332829 + 15357, 7613, 15361, 39971, // alpha = 0.1451247 + 15355, 7673, 15360, 39964, // alpha = 0.1574704 + 15353, 7734, 15358, 39984, // alpha = 0.17032 + 15351, 7794, 15356, 40020, // alpha = 0.1836735 + 15349, 7855, 15354, 40048, // alpha = 0.1975309 + 15348, 7915, 15353, 40092, // alpha = 0.2118922 + 15346, 7976, 15351, 40134, // alpha = 0.2267574 + 15344, 8036, 15349, 40169, // alpha = 0.2421265 + 15343, 8097, 15348, 40209, // alpha = 0.2579995 + 15341, 8157, 15346, 40252, // alpha = 0.2743765 + 15339, 8205, 15345, 40290, // alpha = 0.2912573 + 15338, 8235, 15343, 40333, // alpha = 0.308642 + 15336, 8265, 15342, 40377, // alpha = 0.3265306 + 15334, 8295, 15340, 40417, // alpha = 0.3449232 + 15333, 8325, 15338, 40462, // alpha = 0.3638196 + 15331, 8355, 15337, 40500, // alpha = 0.38322 + 15329, 8385, 15335, 40538, // alpha = 0.4031242 + 15327, 8415, 15334, 40579, // alpha = 0.4235324 + 15326, 8445, 15332, 40626, // alpha = 0.4444445 + 15324, 8475, 15331, 40664, // alpha = 0.4658605 + 15322, 8505, 15329, 40704, // alpha = 0.4877803 + 15321, 8534, 15327, 40748, // alpha = 0.5102041 + 15319, 8564, 15326, 40788, // alpha = 0.5331318 + 15317, 8594, 15324, 40836, // alpha = 0.5565634 + 15315, 8624, 15323, 40875, // alpha = 0.5804989 + 15314, 8654, 15321, 40904, // alpha = 0.6049383 + 15312, 8683, 15319, 40956, // alpha = 0.6298816 + 15310, 8713, 15318, 40980, // alpha = 0.6553288 + 15309, 8743, 15316, 40999, // alpha = 0.68128 + 15307, 8773, 15315, 41018, // alpha = 0.7077349 + 15305, 8802, 15313, 41046, // alpha = 0.7346939 + 15303, 8832, 15312, 41068, // alpha = 0.7621567 + 15302, 8862, 15310, 41087, // alpha = 0.7901235 + 15300, 8891, 15308, 41108, // alpha = 0.8185941 + 15298, 8921, 15307, 41127, // alpha = 0.8475687 + 15296, 8950, 15305, 41154, // alpha = 0.8770471 + 15295, 8980, 15304, 41175, // alpha = 0.9070295 + 15293, 9010, 15302, 41188, // alpha = 0.9375157 + 15291, 9039, 15301, 41209, // alpha = 0.9685059 + 15290, 9069, 15299, 41232, // alpha = 1 + + // Cos (theta) = 0.7256235 + 15378, 4491, 15378, 36715, // alpha = 0.001 + 15378, 4491, 15378, 36715, // alpha = 0.001 + 15378, 4491, 15378, 36715, // alpha = 0.001007811 + 15378, 4583, 15378, 36707, // alpha = 0.002267574 + 15377, 5085, 15377, 37179, // alpha = 0.004031243 + 15376, 5354, 15376, 37441, // alpha = 0.006298816 + 15375, 5605, 15375, 37765, // alpha = 0.009070295 + 15374, 5856, 15375, 38020, // alpha = 0.01234568 + 15373, 6107, 15374, 38171, // alpha = 0.01612497 + 15372, 6251, 15373, 38352, // alpha = 0.02040816 + 15372, 6376, 15372, 38530, // alpha = 0.02519527 + 15371, 6501, 15371, 38674, // alpha = 0.03048627 + 15370, 6626, 15371, 38844, // alpha = 0.03628118 + 15369, 6751, 15370, 38956, // alpha = 0.04258 + 15368, 6875, 15369, 39032, // alpha = 0.04938272 + 15367, 7000, 15368, 39115, // alpha = 0.05668934 + 15366, 7125, 15368, 39200, // alpha = 0.06449988 + 15366, 7209, 15367, 39296, // alpha = 0.07281432 + 15365, 7271, 15366, 39380, // alpha = 0.08163266 + 15364, 7333, 15365, 39481, // alpha = 0.09095491 + 15363, 7395, 15365, 39592, // alpha = 0.1007811 + 15362, 7457, 15364, 39744, // alpha = 0.1111111 + 15361, 7519, 15363, 39919, // alpha = 0.1219451 + 15360, 7581, 15362, 39989, // alpha = 0.1332829 + 15357, 7643, 15361, 39988, // alpha = 0.1451247 + 15354, 7705, 15360, 39991, // alpha = 0.1574704 + 15352, 7767, 15358, 40013, // alpha = 0.17032 + 15351, 7829, 15356, 40044, // alpha = 0.1836735 + 15349, 7891, 15354, 40081, // alpha = 0.1975309 + 15347, 7952, 15353, 40125, // alpha = 0.2118922 + 15346, 8014, 15351, 40161, // alpha = 0.2267574 + 15344, 8076, 15349, 40204, // alpha = 0.2421265 + 15343, 8137, 15348, 40243, // alpha = 0.2579995 + 15341, 8195, 15346, 40287, // alpha = 0.2743765 + 15339, 8226, 15345, 40333, // alpha = 0.2912573 + 15338, 8257, 15343, 40377, // alpha = 0.308642 + 15336, 8288, 15342, 40413, // alpha = 0.3265306 + 15334, 8318, 15340, 40456, // alpha = 0.3449232 + 15332, 8349, 15338, 40497, // alpha = 0.3638196 + 15331, 8380, 15337, 40544, // alpha = 0.38322 + 15329, 8410, 15335, 40583, // alpha = 0.4031242 + 15327, 8441, 15334, 40625, // alpha = 0.4235324 + 15325, 8471, 15332, 40671, // alpha = 0.4444445 + 15324, 8502, 15331, 40708, // alpha = 0.4658605 + 15322, 8533, 15329, 40756, // alpha = 0.4877803 + 15320, 8563, 15327, 40798, // alpha = 0.5102041 + 15319, 8594, 15326, 40842, // alpha = 0.5331318 + 15317, 8624, 15324, 40885, // alpha = 0.5565634 + 15315, 8655, 15323, 40931, // alpha = 0.5804989 + 15313, 8685, 15321, 40964, // alpha = 0.6049383 + 15312, 8715, 15320, 40991, // alpha = 0.6298816 + 15310, 8746, 15318, 41010, // alpha = 0.6553288 + 15308, 8776, 15317, 41030, // alpha = 0.68128 + 15307, 8806, 15315, 41052, // alpha = 0.7077349 + 15305, 8837, 15313, 41078, // alpha = 0.7346939 + 15303, 8867, 15312, 41087, // alpha = 0.7621567 + 15301, 8897, 15310, 41120, // alpha = 0.7901235 + 15300, 8928, 15309, 41142, // alpha = 0.8185941 + 15298, 8958, 15307, 41161, // alpha = 0.8475687 + 15296, 8988, 15305, 41190, // alpha = 0.8770471 + 15295, 9018, 15304, 41208, // alpha = 0.9070295 + 15293, 9048, 15302, 41226, // alpha = 0.9375157 + 15291, 9079, 15300, 41249, // alpha = 0.9685059 + 15289, 9109, 15299, 41278, // alpha = 1 + + // Cos (theta) = 0.7087427 + 15378, 4522, 15378, 36755, // alpha = 0.001 + 15378, 4522, 15378, 36755, // alpha = 0.001 + 15378, 4522, 15378, 36755, // alpha = 0.001007811 + 15378, 4615, 15378, 36773, // alpha = 0.002267574 + 15377, 5125, 15377, 37223, // alpha = 0.004031243 + 15376, 5381, 15376, 37497, // alpha = 0.006298816 + 15375, 5638, 15375, 37832, // alpha = 0.009070295 + 15374, 5894, 15375, 38059, // alpha = 0.01234568 + 15373, 6147, 15374, 38215, // alpha = 0.01612497 + 15372, 6275, 15373, 38397, // alpha = 0.02040816 + 15372, 6403, 15372, 38563, // alpha = 0.02519527 + 15371, 6531, 15371, 38711, // alpha = 0.03048627 + 15370, 6659, 15371, 38883, // alpha = 0.03628118 + 15369, 6786, 15370, 38989, // alpha = 0.04258 + 15368, 6914, 15369, 39080, // alpha = 0.04938272 + 15367, 7041, 15368, 39176, // alpha = 0.05668934 + 15366, 7168, 15368, 39249, // alpha = 0.06449988 + 15366, 7232, 15367, 39329, // alpha = 0.07281432 + 15365, 7295, 15366, 39427, // alpha = 0.08163266 + 15364, 7359, 15365, 39531, // alpha = 0.09095491 + 15363, 7423, 15365, 39641, // alpha = 0.1007811 + 15362, 7486, 15364, 39809, // alpha = 0.1111111 + 15361, 7549, 15363, 39958, // alpha = 0.1219451 + 15360, 7613, 15362, 40016, // alpha = 0.1332829 + 15357, 7676, 15361, 40012, // alpha = 0.1451247 + 15354, 7739, 15360, 40016, // alpha = 0.1574704 + 15352, 7803, 15358, 40045, // alpha = 0.17032 + 15350, 7866, 15356, 40081, // alpha = 0.1836735 + 15349, 7929, 15354, 40120, // alpha = 0.1975309 + 15347, 7992, 15353, 40161, // alpha = 0.2118922 + 15346, 8055, 15351, 40199, // alpha = 0.2267574 + 15344, 8118, 15349, 40245, // alpha = 0.2421265 + 15342, 8181, 15348, 40290, // alpha = 0.2579995 + 15341, 8218, 15346, 40332, // alpha = 0.2743765 + 15339, 8249, 15345, 40375, // alpha = 0.2912573 + 15337, 8281, 15343, 40417, // alpha = 0.308642 + 15336, 8312, 15342, 40462, // alpha = 0.3265306 + 15334, 8344, 15340, 40505, // alpha = 0.3449232 + 15332, 8375, 15338, 40546, // alpha = 0.3638196 + 15330, 8406, 15337, 40593, // alpha = 0.38322 + 15329, 8438, 15335, 40637, // alpha = 0.4031242 + 15327, 8469, 15334, 40674, // alpha = 0.4235324 + 15325, 8500, 15332, 40728, // alpha = 0.4444445 + 15324, 8531, 15331, 40771, // alpha = 0.4658605 + 15322, 8563, 15329, 40816, // alpha = 0.4877803 + 15320, 8594, 15327, 40855, // alpha = 0.5102041 + 15318, 8625, 15326, 40903, // alpha = 0.5331318 + 15317, 8656, 15324, 40946, // alpha = 0.5565634 + 15315, 8687, 15323, 40977, // alpha = 0.5804989 + 15313, 8718, 15321, 40997, // alpha = 0.6049383 + 15312, 8750, 15320, 41022, // alpha = 0.6298816 + 15310, 8781, 15318, 41040, // alpha = 0.6553288 + 15308, 8812, 15316, 41064, // alpha = 0.68128 + 15306, 8843, 15315, 41086, // alpha = 0.7077349 + 15304, 8874, 15313, 41111, // alpha = 0.7346939 + 15303, 8905, 15312, 41133, // alpha = 0.7621567 + 15301, 8936, 15310, 41156, // alpha = 0.7901235 + 15299, 8967, 15308, 41178, // alpha = 0.8185941 + 15298, 8998, 15307, 41201, // alpha = 0.8475687 + 15296, 9028, 15305, 41228, // alpha = 0.8770471 + 15294, 9059, 15304, 41237, // alpha = 0.9070295 + 15292, 9090, 15302, 41268, // alpha = 0.9375157 + 15291, 9121, 15301, 41289, // alpha = 0.9685059 + 15289, 9152, 15299, 41313, // alpha = 1 + + // Cos (theta) = 0.691358 + 15378, 4555, 15378, 36743, // alpha = 0.001 + 15378, 4555, 15378, 36743, // alpha = 0.001 + 15378, 4555, 15378, 36743, // alpha = 0.001007811 + 15378, 4651, 15378, 36846, // alpha = 0.002267574 + 15377, 5148, 15377, 37239, // alpha = 0.004031243 + 15376, 5411, 15376, 37557, // alpha = 0.006298816 + 15375, 5673, 15375, 37924, // alpha = 0.009070295 + 15374, 5936, 15375, 38101, // alpha = 0.01234568 + 15373, 6171, 15374, 38259, // alpha = 0.01612497 + 15372, 6302, 15373, 38425, // alpha = 0.02040816 + 15372, 6433, 15372, 38623, // alpha = 0.02519527 + 15371, 6564, 15371, 38777, // alpha = 0.03048627 + 15370, 6694, 15371, 38934, // alpha = 0.03628118 + 15369, 6825, 15370, 39024, // alpha = 0.04258 + 15368, 6955, 15369, 39126, // alpha = 0.04938272 + 15367, 7086, 15368, 39205, // alpha = 0.05668934 + 15366, 7192, 15368, 39290, // alpha = 0.06449988 + 15366, 7257, 15367, 39380, // alpha = 0.07281432 + 15365, 7322, 15366, 39482, // alpha = 0.08163266 + 15364, 7387, 15365, 39591, // alpha = 0.09095491 + 15363, 7452, 15365, 39720, // alpha = 0.1007811 + 15362, 7517, 15364, 39872, // alpha = 0.1111111 + 15361, 7582, 15363, 39996, // alpha = 0.1219451 + 15359, 7647, 15362, 40047, // alpha = 0.1332829 + 15356, 7712, 15361, 40044, // alpha = 0.1451247 + 15354, 7777, 15360, 40053, // alpha = 0.1574704 + 15352, 7841, 15358, 40080, // alpha = 0.17032 + 15350, 7906, 15356, 40117, // alpha = 0.1836735 + 15349, 7971, 15354, 40162, // alpha = 0.1975309 + 15347, 8035, 15353, 40200, // alpha = 0.2118922 + 15345, 8100, 15351, 40246, // alpha = 0.2267574 + 15344, 8164, 15349, 40288, // alpha = 0.2421265 + 15342, 8210, 15348, 40333, // alpha = 0.2579995 + 15341, 8243, 15346, 40380, // alpha = 0.2743765 + 15339, 8275, 15345, 40422, // alpha = 0.2912573 + 15337, 8307, 15343, 40473, // alpha = 0.308642 + 15335, 8339, 15342, 40514, // alpha = 0.3265306 + 15334, 8371, 15340, 40561, // alpha = 0.3449232 + 15332, 8403, 15339, 40608, // alpha = 0.3638196 + 15330, 8435, 15337, 40647, // alpha = 0.38322 + 15328, 8468, 15335, 40695, // alpha = 0.4031242 + 15327, 8500, 15334, 40732, // alpha = 0.4235324 + 15325, 8532, 15332, 40793, // alpha = 0.4444445 + 15323, 8564, 15331, 40840, // alpha = 0.4658605 + 15322, 8596, 15329, 40879, // alpha = 0.4877803 + 15320, 8628, 15328, 40928, // alpha = 0.5102041 + 15318, 8660, 15326, 40967, // alpha = 0.5331318 + 15316, 8691, 15324, 40988, // alpha = 0.5565634 + 15315, 8723, 15323, 41011, // alpha = 0.5804989 + 15313, 8755, 15321, 41034, // alpha = 0.6049383 + 15311, 8787, 15320, 41057, // alpha = 0.6298816 + 15309, 8819, 15318, 41091, // alpha = 0.6553288 + 15308, 8851, 15317, 41107, // alpha = 0.68128 + 15306, 8882, 15315, 41126, // alpha = 0.7077349 + 15304, 8914, 15313, 41156, // alpha = 0.7346939 + 15303, 8946, 15312, 41173, // alpha = 0.7621567 + 15301, 8978, 15310, 41198, // alpha = 0.7901235 + 15299, 9009, 15309, 41220, // alpha = 0.8185941 + 15297, 9041, 15307, 41245, // alpha = 0.8475687 + 15296, 9073, 15305, 41270, // alpha = 0.8770471 + 15294, 9104, 15304, 41285, // alpha = 0.9070295 + 15292, 9136, 15302, 41312, // alpha = 0.9375157 + 15290, 9168, 15301, 41338, // alpha = 0.9685059 + 15289, 9199, 15299, 41360, // alpha = 1 + + // Cos (theta) = 0.6734694 + 15378, 4592, 15378, 36819, // alpha = 0.001 + 15378, 4592, 15378, 36819, // alpha = 0.001 + 15378, 4592, 15378, 36819, // alpha = 0.001007811 + 15378, 4691, 15378, 36946, // alpha = 0.002267574 + 15377, 5175, 15377, 37293, // alpha = 0.004031243 + 15376, 5444, 15376, 37624, // alpha = 0.006298816 + 15375, 5713, 15375, 37964, // alpha = 0.009070295 + 15374, 5982, 15375, 38148, // alpha = 0.01234568 + 15373, 6197, 15374, 38313, // alpha = 0.01612497 + 15372, 6332, 15373, 38485, // alpha = 0.02040816 + 15371, 6466, 15372, 38686, // alpha = 0.02519527 + 15371, 6600, 15371, 38885, // alpha = 0.03048627 + 15370, 6734, 15371, 38977, // alpha = 0.03628118 + 15369, 6868, 15370, 39068, // alpha = 0.04258 + 15368, 7002, 15369, 39169, // alpha = 0.04938272 + 15367, 7136, 15368, 39264, // alpha = 0.05668934 + 15366, 7219, 15368, 39348, // alpha = 0.06449988 + 15366, 7285, 15367, 39442, // alpha = 0.07281432 + 15365, 7352, 15366, 39544, // alpha = 0.08163266 + 15364, 7419, 15365, 39654, // alpha = 0.09095491 + 15363, 7486, 15365, 39789, // alpha = 0.1007811 + 15362, 7552, 15364, 39949, // alpha = 0.1111111 + 15361, 7619, 15363, 40038, // alpha = 0.1219451 + 15359, 7685, 15362, 40087, // alpha = 0.1332829 + 15356, 7752, 15361, 40081, // alpha = 0.1451247 + 15354, 7818, 15360, 40094, // alpha = 0.1574704 + 15352, 7885, 15358, 40124, // alpha = 0.17032 + 15350, 7951, 15356, 40167, // alpha = 0.1836735 + 15349, 8017, 15355, 40212, // alpha = 0.1975309 + 15347, 8084, 15353, 40257, // alpha = 0.2118922 + 15345, 8150, 15351, 40301, // alpha = 0.2267574 + 15344, 8204, 15350, 40348, // alpha = 0.2421265 + 15342, 8237, 15348, 40390, // alpha = 0.2579995 + 15340, 8270, 15347, 40441, // alpha = 0.2743765 + 15339, 8303, 15345, 40487, // alpha = 0.2912573 + 15337, 8336, 15343, 40535, // alpha = 0.308642 + 15335, 8369, 15342, 40581, // alpha = 0.3265306 + 15334, 8402, 15340, 40633, // alpha = 0.3449232 + 15332, 8435, 15339, 40669, // alpha = 0.3638196 + 15330, 8468, 15337, 40728, // alpha = 0.38322 + 15328, 8501, 15336, 40768, // alpha = 0.4031242 + 15327, 8534, 15334, 40811, // alpha = 0.4235324 + 15325, 8567, 15332, 40857, // alpha = 0.4444445 + 15323, 8600, 15331, 40911, // alpha = 0.4658605 + 15321, 8632, 15329, 40955, // alpha = 0.4877803 + 15320, 8665, 15328, 40984, // alpha = 0.5102041 + 15318, 8698, 15326, 41009, // alpha = 0.5331318 + 15316, 8731, 15324, 41030, // alpha = 0.5565634 + 15314, 8764, 15323, 41053, // alpha = 0.5804989 + 15313, 8796, 15321, 41076, // alpha = 0.6049383 + 15311, 8829, 15320, 41099, // alpha = 0.6298816 + 15309, 8862, 15318, 41129, // alpha = 0.6553288 + 15307, 8894, 15317, 41148, // alpha = 0.68128 + 15306, 8927, 15315, 41177, // alpha = 0.7077349 + 15304, 8960, 15313, 41200, // alpha = 0.7346939 + 15302, 8992, 15312, 41219, // alpha = 0.7621567 + 15300, 9025, 15310, 41245, // alpha = 0.7901235 + 15299, 9057, 15309, 41272, // alpha = 0.8185941 + 15297, 9090, 15307, 41298, // alpha = 0.8475687 + 15295, 9122, 15305, 41323, // alpha = 0.8770471 + 15293, 9155, 15304, 41351, // alpha = 0.9070295 + 15292, 9187, 15302, 41374, // alpha = 0.9375157 + 15290, 9218, 15301, 41390, // alpha = 0.9685059 + 15288, 9234, 15299, 41415, // alpha = 1 + + // Cos (theta) = 0.6550768 + 15378, 4635, 15378, 36885, // alpha = 0.001 + 15378, 4635, 15378, 36885, // alpha = 0.001 + 15378, 4635, 15378, 36885, // alpha = 0.001007811 + 15378, 4736, 15378, 36992, // alpha = 0.002267574 + 15377, 5205, 15377, 37354, // alpha = 0.004031243 + 15376, 5482, 15376, 37752, // alpha = 0.006298816 + 15375, 5758, 15375, 38010, // alpha = 0.009070295 + 15374, 6035, 15375, 38180, // alpha = 0.01234568 + 15373, 6228, 15374, 38374, // alpha = 0.01612497 + 15372, 6366, 15373, 38606, // alpha = 0.02040816 + 15371, 6504, 15372, 38743, // alpha = 0.02519527 + 15371, 6642, 15371, 38940, // alpha = 0.03048627 + 15370, 6779, 15371, 39027, // alpha = 0.03628118 + 15369, 6917, 15370, 39121, // alpha = 0.04258 + 15368, 7055, 15369, 39230, // alpha = 0.04938272 + 15367, 7180, 15368, 39321, // alpha = 0.05668934 + 15366, 7249, 15368, 39415, // alpha = 0.06449988 + 15366, 7318, 15367, 39515, // alpha = 0.07281432 + 15365, 7386, 15366, 39611, // alpha = 0.08163266 + 15364, 7455, 15365, 39732, // alpha = 0.09095491 + 15363, 7523, 15365, 39876, // alpha = 0.1007811 + 15362, 7592, 15364, 39996, // alpha = 0.1111111 + 15361, 7660, 15363, 40087, // alpha = 0.1219451 + 15359, 7729, 15362, 40129, // alpha = 0.1332829 + 15356, 7797, 15361, 40126, // alpha = 0.1451247 + 15354, 7866, 15360, 40142, // alpha = 0.1574704 + 15352, 7934, 15359, 40178, // alpha = 0.17032 + 15350, 8002, 15357, 40221, // alpha = 0.1836735 + 15348, 8071, 15355, 40266, // alpha = 0.1975309 + 15347, 8139, 15353, 40317, // alpha = 0.2118922 + 15345, 8199, 15351, 40364, // alpha = 0.2267574 + 15344, 8234, 15350, 40412, // alpha = 0.2421265 + 15342, 8268, 15348, 40463, // alpha = 0.2579995 + 15340, 8302, 15347, 40515, // alpha = 0.2743765 + 15339, 8336, 15345, 40560, // alpha = 0.2912573 + 15337, 8370, 15343, 40612, // alpha = 0.308642 + 15335, 8403, 15342, 40651, // alpha = 0.3265306 + 15333, 8437, 15340, 40706, // alpha = 0.3449232 + 15332, 8471, 15339, 40752, // alpha = 0.3638196 + 15330, 8505, 15337, 40808, // alpha = 0.38322 + 15328, 8539, 15336, 40856, // alpha = 0.4031242 + 15326, 8573, 15334, 40905, // alpha = 0.4235324 + 15325, 8607, 15333, 40952, // alpha = 0.4444445 + 15323, 8641, 15331, 40984, // alpha = 0.4658605 + 15321, 8674, 15329, 41004, // alpha = 0.4877803 + 15319, 8708, 15328, 41037, // alpha = 0.5102041 + 15318, 8742, 15326, 41059, // alpha = 0.5331318 + 15316, 8776, 15325, 41080, // alpha = 0.5565634 + 15314, 8809, 15323, 41104, // alpha = 0.5804989 + 15313, 8843, 15322, 41132, // alpha = 0.6049383 + 15311, 8877, 15320, 41158, // alpha = 0.6298816 + 15309, 8910, 15318, 41183, // alpha = 0.6553288 + 15307, 8944, 15317, 41210, // alpha = 0.68128 + 15305, 8978, 15315, 41230, // alpha = 0.7077349 + 15304, 9011, 15314, 41262, // alpha = 0.7346939 + 15302, 9045, 15312, 41281, // alpha = 0.7621567 + 15300, 9078, 15310, 41306, // alpha = 0.7901235 + 15298, 9112, 15309, 41337, // alpha = 0.8185941 + 15297, 9145, 15308, 41363, // alpha = 0.8475687 + 15295, 9179, 15306, 41390, // alpha = 0.8770471 + 15293, 9212, 15304, 41408, // alpha = 0.9070295 + 15291, 9231, 15303, 41441, // alpha = 0.9375157 + 15290, 9248, 15301, 41464, // alpha = 0.9685059 + 15288, 9264, 15300, 41487, // alpha = 1 + + // Cos (theta) = 0.6361803 + 15378, 4684, 15378, 36934, // alpha = 0.001 + 15378, 4684, 15378, 36934, // alpha = 0.001 + 15378, 4684, 15378, 36934, // alpha = 0.001007811 + 15378, 4788, 15378, 37045, // alpha = 0.002267574 + 15377, 5240, 15377, 37395, // alpha = 0.004031243 + 15376, 5525, 15376, 37840, // alpha = 0.006298816 + 15375, 5811, 15375, 38063, // alpha = 0.009070295 + 15374, 6096, 15375, 38296, // alpha = 0.01234568 + 15373, 6262, 15374, 38454, // alpha = 0.01612497 + 15372, 6405, 15373, 38674, // alpha = 0.02040816 + 15371, 6547, 15372, 38898, // alpha = 0.02519527 + 15371, 6689, 15372, 39001, // alpha = 0.03048627 + 15370, 6832, 15371, 39099, // alpha = 0.03628118 + 15369, 6974, 15370, 39192, // alpha = 0.04258 + 15368, 7116, 15369, 39302, // alpha = 0.04938272 + 15367, 7213, 15368, 39397, // alpha = 0.05668934 + 15366, 7284, 15368, 39514, // alpha = 0.06449988 + 15365, 7355, 15367, 39613, // alpha = 0.07281432 + 15365, 7426, 15366, 39713, // alpha = 0.08163266 + 15364, 7496, 15365, 39845, // alpha = 0.09095491 + 15363, 7567, 15365, 39957, // alpha = 0.1007811 + 15362, 7638, 15364, 40053, // alpha = 0.1111111 + 15361, 7709, 15363, 40139, // alpha = 0.1219451 + 15359, 7779, 15362, 40187, // alpha = 0.1332829 + 15356, 7850, 15361, 40183, // alpha = 0.1451247 + 15354, 7920, 15360, 40206, // alpha = 0.1574704 + 15352, 7991, 15359, 40246, // alpha = 0.17032 + 15350, 8061, 15357, 40292, // alpha = 0.1836735 + 15348, 8132, 15355, 40340, // alpha = 0.1975309 + 15347, 8197, 15353, 40390, // alpha = 0.2118922 + 15345, 8232, 15351, 40443, // alpha = 0.2267574 + 15343, 8268, 15350, 40493, // alpha = 0.2421265 + 15342, 8303, 15348, 40546, // alpha = 0.2579995 + 15340, 8338, 15347, 40595, // alpha = 0.2743765 + 15338, 8373, 15345, 40649, // alpha = 0.2912573 + 15337, 8408, 15344, 40703, // alpha = 0.308642 + 15335, 8443, 15342, 40751, // alpha = 0.3265306 + 15333, 8478, 15340, 40804, // alpha = 0.3449232 + 15331, 8513, 15339, 40853, // alpha = 0.3638196 + 15330, 8548, 15337, 40912, // alpha = 0.38322 + 15328, 8583, 15336, 40961, // alpha = 0.4031242 + 15326, 8618, 15334, 40985, // alpha = 0.4235324 + 15324, 8653, 15333, 41012, // alpha = 0.4444445 + 15323, 8688, 15331, 41042, // alpha = 0.4658605 + 15321, 8723, 15330, 41065, // alpha = 0.4877803 + 15319, 8758, 15328, 41094, // alpha = 0.5102041 + 15317, 8793, 15326, 41117, // alpha = 0.5331318 + 15316, 8828, 15325, 41142, // alpha = 0.5565634 + 15314, 8862, 15323, 41168, // alpha = 0.5804989 + 15312, 8897, 15322, 41195, // alpha = 0.6049383 + 15311, 8932, 15320, 41222, // alpha = 0.6298816 + 15309, 8967, 15319, 41245, // alpha = 0.6553288 + 15307, 9002, 15317, 41276, // alpha = 0.68128 + 15305, 9036, 15315, 41306, // alpha = 0.7077349 + 15303, 9071, 15314, 41328, // alpha = 0.7346939 + 15302, 9106, 15312, 41353, // alpha = 0.7621567 + 15300, 9140, 15311, 41385, // alpha = 0.7901235 + 15298, 9175, 15309, 41413, // alpha = 0.8185941 + 15297, 9210, 15308, 41431, // alpha = 0.8475687 + 15295, 9230, 15306, 41465, // alpha = 0.8770471 + 15293, 9247, 15304, 41495, // alpha = 0.9070295 + 15291, 9265, 15303, 41516, // alpha = 0.9375157 + 15289, 9282, 15301, 41539, // alpha = 0.9685059 + 15288, 9299, 15300, 41567, // alpha = 1 + + // Cos (theta) = 0.61678 + 15378, 4741, 15378, 37092, // alpha = 0.001 + 15378, 4741, 15378, 37092, // alpha = 0.001 + 15378, 4741, 15378, 37092, // alpha = 0.001007811 + 15378, 4849, 15378, 37107, // alpha = 0.002267574 + 15377, 5280, 15377, 37589, // alpha = 0.004031243 + 15376, 5576, 15376, 37916, // alpha = 0.006298816 + 15375, 5872, 15375, 38147, // alpha = 0.009070295 + 15374, 6155, 15375, 38368, // alpha = 0.01234568 + 15373, 6303, 15374, 38570, // alpha = 0.01612497 + 15372, 6451, 15373, 38801, // alpha = 0.02040816 + 15371, 6598, 15372, 38957, // alpha = 0.02519527 + 15371, 6746, 15372, 39058, // alpha = 0.03048627 + 15370, 6893, 15371, 39167, // alpha = 0.03628118 + 15369, 7040, 15370, 39267, // alpha = 0.04258 + 15368, 7178, 15369, 39387, // alpha = 0.04938272 + 15367, 7251, 15368, 39496, // alpha = 0.05668934 + 15366, 7325, 15368, 39603, // alpha = 0.06449988 + 15365, 7398, 15367, 39722, // alpha = 0.07281432 + 15365, 7472, 15366, 39832, // alpha = 0.08163266 + 15364, 7545, 15366, 39949, // alpha = 0.09095491 + 15363, 7618, 15365, 40023, // alpha = 0.1007811 + 15362, 7692, 15364, 40120, // alpha = 0.1111111 + 15361, 7765, 15363, 40211, // alpha = 0.1219451 + 15359, 7838, 15363, 40256, // alpha = 0.1332829 + 15356, 7911, 15361, 40254, // alpha = 0.1451247 + 15354, 7985, 15360, 40284, // alpha = 0.1574704 + 15352, 8058, 15359, 40325, // alpha = 0.17032 + 15350, 8131, 15357, 40378, // alpha = 0.1836735 + 15348, 8198, 15355, 40431, // alpha = 0.1975309 + 15347, 8234, 15353, 40487, // alpha = 0.2118922 + 15345, 8271, 15352, 40541, // alpha = 0.2267574 + 15343, 8307, 15350, 40591, // alpha = 0.2421265 + 15342, 8344, 15348, 40649, // alpha = 0.2579995 + 15340, 8380, 15347, 40702, // alpha = 0.2743765 + 15338, 8417, 15345, 40761, // alpha = 0.2912573 + 15337, 8453, 15344, 40817, // alpha = 0.308642 + 15335, 8489, 15342, 40868, // alpha = 0.3265306 + 15333, 8526, 15341, 40925, // alpha = 0.3449232 + 15331, 8562, 15339, 40971, // alpha = 0.3638196 + 15330, 8598, 15338, 40999, // alpha = 0.38322 + 15328, 8635, 15336, 41025, // alpha = 0.4031242 + 15326, 8671, 15335, 41053, // alpha = 0.4235324 + 15324, 8707, 15333, 41080, // alpha = 0.4444445 + 15323, 8744, 15331, 41109, // alpha = 0.4658605 + 15321, 8780, 15330, 41137, // alpha = 0.4877803 + 15319, 8816, 15328, 41163, // alpha = 0.5102041 + 15317, 8852, 15327, 41190, // alpha = 0.5331318 + 15316, 8888, 15325, 41224, // alpha = 0.5565634 + 15314, 8925, 15324, 41247, // alpha = 0.5804989 + 15312, 8961, 15322, 41278, // alpha = 0.6049383 + 15310, 8997, 15321, 41301, // alpha = 0.6298816 + 15309, 9033, 15319, 41327, // alpha = 0.6553288 + 15307, 9069, 15317, 41357, // alpha = 0.68128 + 15305, 9105, 15316, 41389, // alpha = 0.7077349 + 15303, 9141, 15314, 41412, // alpha = 0.7346939 + 15302, 9177, 15313, 41445, // alpha = 0.7621567 + 15300, 9213, 15311, 41476, // alpha = 0.7901235 + 15298, 9233, 15310, 41497, // alpha = 0.8185941 + 15296, 9251, 15308, 41526, // alpha = 0.8475687 + 15294, 9269, 15307, 41555, // alpha = 0.8770471 + 15293, 9286, 15305, 41580, // alpha = 0.9070295 + 15291, 9304, 15303, 41607, // alpha = 0.9375157 + 15289, 9322, 15302, 41640, // alpha = 0.9685059 + 15287, 9340, 15300, 41674, // alpha = 1 + + // Cos (theta) = 0.5968758 + 15378, 4809, 15378, 37160, // alpha = 0.001 + 15378, 4809, 15378, 37160, // alpha = 0.001 + 15378, 4809, 15378, 37160, // alpha = 0.001007811 + 15378, 4921, 15378, 37181, // alpha = 0.002267574 + 15377, 5328, 15377, 37686, // alpha = 0.004031243 + 15376, 5636, 15376, 38032, // alpha = 0.006298816 + 15375, 5944, 15376, 38271, // alpha = 0.009070295 + 15374, 6198, 15375, 38454, // alpha = 0.01234568 + 15373, 6351, 15374, 38737, // alpha = 0.01612497 + 15372, 6505, 15373, 38918, // alpha = 0.02040816 + 15371, 6658, 15372, 39034, // alpha = 0.02519527 + 15370, 6812, 15372, 39160, // alpha = 0.03048627 + 15370, 6965, 15371, 39267, // alpha = 0.03628118 + 15369, 7118, 15370, 39396, // alpha = 0.04258 + 15368, 7220, 15369, 39504, // alpha = 0.04938272 + 15367, 7296, 15369, 39607, // alpha = 0.05668934 + 15366, 7373, 15368, 39730, // alpha = 0.06449988 + 15365, 7449, 15367, 39858, // alpha = 0.07281432 + 15365, 7526, 15366, 39956, // alpha = 0.08163266 + 15364, 7602, 15366, 40024, // alpha = 0.09095491 + 15363, 7679, 15365, 40104, // alpha = 0.1007811 + 15362, 7755, 15364, 40204, // alpha = 0.1111111 + 15361, 7831, 15364, 40299, // alpha = 0.1219451 + 15359, 7908, 15363, 40339, // alpha = 0.1332829 + 15356, 7984, 15362, 40346, // alpha = 0.1451247 + 15353, 8060, 15361, 40379, // alpha = 0.1574704 + 15352, 8136, 15359, 40428, // alpha = 0.17032 + 15350, 8202, 15357, 40483, // alpha = 0.1836735 + 15348, 8240, 15355, 40541, // alpha = 0.1975309 + 15347, 8278, 15353, 40596, // alpha = 0.2118922 + 15345, 8316, 15352, 40659, // alpha = 0.2267574 + 15343, 8354, 15350, 40712, // alpha = 0.2421265 + 15342, 8392, 15349, 40773, // alpha = 0.2579995 + 15340, 8430, 15347, 40834, // alpha = 0.2743765 + 15338, 8468, 15346, 40890, // alpha = 0.2912573 + 15336, 8506, 15344, 40949, // alpha = 0.308642 + 15335, 8544, 15343, 40983, // alpha = 0.3265306 + 15333, 8582, 15341, 41012, // alpha = 0.3449232 + 15331, 8620, 15340, 41042, // alpha = 0.3638196 + 15329, 8658, 15338, 41071, // alpha = 0.38322 + 15328, 8696, 15336, 41105, // alpha = 0.4031242 + 15326, 8734, 15335, 41136, // alpha = 0.4235324 + 15324, 8771, 15333, 41165, // alpha = 0.4444445 + 15322, 8809, 15332, 41196, // alpha = 0.4658605 + 15321, 8847, 15330, 41226, // alpha = 0.4877803 + 15319, 8885, 15329, 41245, // alpha = 0.5102041 + 15317, 8922, 15327, 41278, // alpha = 0.5331318 + 15315, 8960, 15325, 41309, // alpha = 0.5565634 + 15314, 8998, 15324, 41334, // alpha = 0.5804989 + 15312, 9036, 15323, 41372, // alpha = 0.6049383 + 15310, 9073, 15321, 41398, // alpha = 0.6298816 + 15308, 9111, 15319, 41424, // alpha = 0.6553288 + 15306, 9149, 15318, 41459, // alpha = 0.68128 + 15305, 9186, 15316, 41493, // alpha = 0.7077349 + 15303, 9220, 15315, 41519, // alpha = 0.7346939 + 15301, 9239, 15313, 41549, // alpha = 0.7621567 + 15300, 9258, 15311, 41583, // alpha = 0.7901235 + 15298, 9276, 15310, 41609, // alpha = 0.8185941 + 15296, 9295, 15308, 41637, // alpha = 0.8475687 + 15294, 9314, 15307, 41671, // alpha = 0.8770471 + 15293, 9333, 15305, 41703, // alpha = 0.9070295 + 15291, 9351, 15304, 41731, // alpha = 0.9375157 + 15289, 9370, 15302, 41759, // alpha = 0.9685059 + 15287, 9389, 15301, 41794, // alpha = 1 + + // Cos (theta) = 0.5764676 + 15378, 4889, 15378, 37242, // alpha = 0.001 + 15378, 4889, 15378, 37242, // alpha = 0.001 + 15378, 4889, 15378, 37242, // alpha = 0.001007811 + 15378, 5007, 15378, 37378, // alpha = 0.002267574 + 15377, 5386, 15377, 37836, // alpha = 0.004031243 + 15376, 5708, 15376, 38104, // alpha = 0.006298816 + 15375, 6030, 15376, 38358, // alpha = 0.009070295 + 15374, 6248, 15375, 38624, // alpha = 0.01234568 + 15373, 6409, 15374, 38853, // alpha = 0.01612497 + 15372, 6569, 15373, 39007, // alpha = 0.02040816 + 15371, 6730, 15372, 39132, // alpha = 0.02519527 + 15370, 6891, 15372, 39261, // alpha = 0.03048627 + 15370, 7051, 15371, 39391, // alpha = 0.03628118 + 15369, 7190, 15370, 39503, // alpha = 0.04258 + 15368, 7270, 15369, 39642, // alpha = 0.04938272 + 15367, 7350, 15369, 39768, // alpha = 0.05668934 + 15366, 7430, 15368, 39882, // alpha = 0.06449988 + 15365, 7511, 15367, 39975, // alpha = 0.07281432 + 15365, 7591, 15366, 40041, // alpha = 0.08163266 + 15364, 7671, 15366, 40118, // alpha = 0.09095491 + 15363, 7751, 15365, 40199, // alpha = 0.1007811 + 15362, 7831, 15364, 40310, // alpha = 0.1111111 + 15361, 7911, 15364, 40402, // alpha = 0.1219451 + 15358, 7991, 15363, 40447, // alpha = 0.1332829 + 15356, 8071, 15362, 40457, // alpha = 0.1451247 + 15353, 8150, 15361, 40494, // alpha = 0.1574704 + 15352, 8211, 15359, 40551, // alpha = 0.17032 + 15350, 8251, 15357, 40611, // alpha = 0.1836735 + 15348, 8291, 15355, 40676, // alpha = 0.1975309 + 15347, 8331, 15354, 40742, // alpha = 0.2118922 + 15345, 8371, 15352, 40797, // alpha = 0.2267574 + 15343, 8410, 15350, 40863, // alpha = 0.2421265 + 15342, 8450, 15349, 40922, // alpha = 0.2579995 + 15340, 8490, 15347, 40976, // alpha = 0.2743765 + 15338, 8530, 15346, 41008, // alpha = 0.2912573 + 15336, 8570, 15344, 41039, // alpha = 0.308642 + 15335, 8609, 15343, 41073, // alpha = 0.3265306 + 15333, 8649, 15341, 41103, // alpha = 0.3449232 + 15331, 8689, 15340, 41136, // alpha = 0.3638196 + 15329, 8729, 15338, 41167, // alpha = 0.38322 + 15328, 8768, 15337, 41198, // alpha = 0.4031242 + 15326, 8808, 15335, 41232, // alpha = 0.4235324 + 15324, 8848, 15334, 41261, // alpha = 0.4444445 + 15322, 8887, 15332, 41297, // alpha = 0.4658605 + 15321, 8927, 15330, 41325, // alpha = 0.4877803 + 15319, 8967, 15329, 41356, // alpha = 0.5102041 + 15317, 9006, 15327, 41392, // alpha = 0.5331318 + 15315, 9046, 15326, 41423, // alpha = 0.5565634 + 15314, 9085, 15324, 41456, // alpha = 0.5804989 + 15312, 9125, 15323, 41482, // alpha = 0.6049383 + 15310, 9164, 15321, 41512, // alpha = 0.6298816 + 15308, 9204, 15320, 41553, // alpha = 0.6553288 + 15307, 9230, 15318, 41586, // alpha = 0.68128 + 15305, 9249, 15317, 41615, // alpha = 0.7077349 + 15303, 9269, 15315, 41644, // alpha = 0.7346939 + 15301, 9289, 15314, 41678, // alpha = 0.7621567 + 15299, 9309, 15312, 41722, // alpha = 0.7901235 + 15298, 9328, 15311, 41753, // alpha = 0.8185941 + 15296, 9348, 15309, 41782, // alpha = 0.8475687 + 15294, 9368, 15307, 41815, // alpha = 0.8770471 + 15292, 9387, 15306, 41842, // alpha = 0.9070295 + 15291, 9407, 15304, 41872, // alpha = 0.9375157 + 15289, 9427, 15303, 41907, // alpha = 0.9685059 + 15287, 9446, 15301, 41935, // alpha = 1 + + // Cos (theta) = 0.5555555 + 15378, 4986, 15378, 37340, // alpha = 0.001 + 15378, 4986, 15378, 37340, // alpha = 0.001 + 15378, 4986, 15378, 37340, // alpha = 0.001007811 + 15378, 5109, 15378, 37483, // alpha = 0.002267574 + 15377, 5454, 15377, 37932, // alpha = 0.004031243 + 15376, 5793, 15376, 38203, // alpha = 0.006298816 + 15375, 6132, 15376, 38473, // alpha = 0.009070295 + 15374, 6308, 15375, 38746, // alpha = 0.01234568 + 15373, 6477, 15374, 38975, // alpha = 0.01612497 + 15372, 6647, 15373, 39103, // alpha = 0.02040816 + 15371, 6816, 15372, 39252, // alpha = 0.02519527 + 15370, 6985, 15372, 39376, // alpha = 0.03048627 + 15370, 7154, 15371, 39539, // alpha = 0.03628118 + 15369, 7246, 15370, 39663, // alpha = 0.04258 + 15368, 7330, 15369, 39805, // alpha = 0.04938272 + 15367, 7415, 15369, 39933, // alpha = 0.05668934 + 15366, 7499, 15368, 40007, // alpha = 0.06449988 + 15365, 7584, 15367, 40077, // alpha = 0.07281432 + 15364, 7668, 15366, 40143, // alpha = 0.08163266 + 15364, 7753, 15366, 40228, // alpha = 0.09095491 + 15363, 7837, 15365, 40319, // alpha = 0.1007811 + 15362, 7921, 15364, 40432, // alpha = 0.1111111 + 15361, 8006, 15364, 40528, // alpha = 0.1219451 + 15358, 8090, 15363, 40577, // alpha = 0.1332829 + 15355, 8174, 15362, 40593, // alpha = 0.1451247 + 15353, 8225, 15361, 40639, // alpha = 0.1574704 + 15352, 8267, 15359, 40701, // alpha = 0.17032 + 15350, 8309, 15357, 40769, // alpha = 0.1836735 + 15348, 8351, 15356, 40836, // alpha = 0.1975309 + 15347, 8393, 15354, 40908, // alpha = 0.2118922 + 15345, 8435, 15352, 40969, // alpha = 0.2267574 + 15343, 8477, 15351, 41003, // alpha = 0.2421265 + 15342, 8519, 15349, 41037, // alpha = 0.2579995 + 15340, 8561, 15348, 41070, // alpha = 0.2743765 + 15338, 8603, 15346, 41107, // alpha = 0.2912573 + 15336, 8645, 15345, 41141, // alpha = 0.308642 + 15335, 8687, 15343, 41173, // alpha = 0.3265306 + 15333, 8729, 15342, 41211, // alpha = 0.3449232 + 15331, 8771, 15340, 41247, // alpha = 0.3638196 + 15329, 8813, 15339, 41277, // alpha = 0.38322 + 15328, 8855, 15337, 41316, // alpha = 0.4031242 + 15326, 8897, 15336, 41347, // alpha = 0.4235324 + 15324, 8939, 15334, 41380, // alpha = 0.4444445 + 15322, 8981, 15332, 41416, // alpha = 0.4658605 + 15320, 9022, 15331, 41456, // alpha = 0.4877803 + 15319, 9064, 15329, 41483, // alpha = 0.5102041 + 15317, 9106, 15328, 41525, // alpha = 0.5331318 + 15315, 9148, 15326, 41559, // alpha = 0.5565634 + 15313, 9190, 15325, 41596, // alpha = 0.5804989 + 15312, 9224, 15323, 41623, // alpha = 0.6049383 + 15310, 9245, 15322, 41662, // alpha = 0.6298816 + 15308, 9265, 15320, 41702, // alpha = 0.6553288 + 15306, 9286, 15319, 41732, // alpha = 0.68128 + 15305, 9307, 15317, 41764, // alpha = 0.7077349 + 15303, 9328, 15316, 41805, // alpha = 0.7346939 + 15301, 9349, 15314, 41835, // alpha = 0.7621567 + 15299, 9370, 15313, 41872, // alpha = 0.7901235 + 15297, 9390, 15311, 41911, // alpha = 0.8185941 + 15296, 9411, 15309, 41941, // alpha = 0.8475687 + 15294, 9432, 15308, 41980, // alpha = 0.8770471 + 15292, 9453, 15306, 41997, // alpha = 0.9070295 + 15290, 9474, 15305, 42014, // alpha = 0.9375157 + 15288, 9494, 15303, 42035, // alpha = 0.9685059 + 15287, 9515, 15302, 42051, // alpha = 1 + + // Cos (theta) = 0.5341396 + 15378, 5102, 15378, 37605, // alpha = 0.001 + 15378, 5102, 15378, 37605, // alpha = 0.001 + 15378, 5102, 15378, 37605, // alpha = 0.001007811 + 15378, 5177, 15378, 37708, // alpha = 0.002267574 + 15377, 5536, 15377, 38083, // alpha = 0.004031243 + 15376, 5896, 15376, 38343, // alpha = 0.006298816 + 15375, 6200, 15376, 38699, // alpha = 0.009070295 + 15374, 6380, 15375, 38945, // alpha = 0.01234568 + 15373, 6560, 15374, 39108, // alpha = 0.01612497 + 15372, 6739, 15373, 39251, // alpha = 0.02040816 + 15371, 6919, 15372, 39399, // alpha = 0.02519527 + 15370, 7099, 15372, 39543, // alpha = 0.03048627 + 15370, 7223, 15371, 39705, // alpha = 0.03628118 + 15369, 7313, 15370, 39851, // alpha = 0.04258 + 15368, 7403, 15370, 39976, // alpha = 0.04938272 + 15367, 7492, 15369, 40047, // alpha = 0.05668934 + 15366, 7582, 15368, 40121, // alpha = 0.06449988 + 15365, 7671, 15367, 40201, // alpha = 0.07281432 + 15364, 7761, 15367, 40283, // alpha = 0.08163266 + 15364, 7851, 15366, 40363, // alpha = 0.09095491 + 15363, 7940, 15365, 40464, // alpha = 0.1007811 + 15362, 8030, 15365, 40587, // alpha = 0.1111111 + 15360, 8119, 15364, 40686, // alpha = 0.1219451 + 15358, 8200, 15363, 40740, // alpha = 0.1332829 + 15355, 8245, 15362, 40763, // alpha = 0.1451247 + 15353, 8290, 15361, 40814, // alpha = 0.1574704 + 15352, 8335, 15360, 40886, // alpha = 0.17032 + 15350, 8379, 15358, 40960, // alpha = 0.1836735 + 15348, 8424, 15356, 40998, // alpha = 0.1975309 + 15347, 8469, 15354, 41036, // alpha = 0.2118922 + 15345, 8513, 15353, 41075, // alpha = 0.2267574 + 15343, 8558, 15351, 41114, // alpha = 0.2421265 + 15341, 8602, 15350, 41150, // alpha = 0.2579995 + 15340, 8647, 15348, 41189, // alpha = 0.2743765 + 15338, 8692, 15347, 41228, // alpha = 0.2912573 + 15336, 8736, 15345, 41263, // alpha = 0.308642 + 15334, 8781, 15344, 41300, // alpha = 0.3265306 + 15333, 8825, 15342, 41340, // alpha = 0.3449232 + 15331, 8870, 15341, 41382, // alpha = 0.3638196 + 15329, 8914, 15339, 41418, // alpha = 0.38322 + 15327, 8959, 15338, 41454, // alpha = 0.4031242 + 15326, 9003, 15336, 41490, // alpha = 0.4235324 + 15324, 9048, 15335, 41532, // alpha = 0.4444445 + 15322, 9092, 15333, 41565, // alpha = 0.4658605 + 15320, 9137, 15332, 41606, // alpha = 0.4877803 + 15319, 9181, 15330, 41644, // alpha = 0.5102041 + 15317, 9221, 15328, 41685, // alpha = 0.5331318 + 15315, 9243, 15327, 41719, // alpha = 0.5565634 + 15313, 9265, 15325, 41758, // alpha = 0.5804989 + 15311, 9287, 15324, 41802, // alpha = 0.6049383 + 15310, 9310, 15322, 41832, // alpha = 0.6298816 + 15308, 9332, 15321, 41871, // alpha = 0.6553288 + 15306, 9354, 15319, 41916, // alpha = 0.68128 + 15304, 9376, 15318, 41953, // alpha = 0.7077349 + 15302, 9398, 15316, 41988, // alpha = 0.7346939 + 15301, 9420, 15315, 42004, // alpha = 0.7621567 + 15299, 9442, 15313, 42023, // alpha = 0.7901235 + 15297, 9465, 15312, 42040, // alpha = 0.8185941 + 15295, 9487, 15310, 42062, // alpha = 0.8475687 + 15294, 9509, 15309, 42081, // alpha = 0.8770471 + 15292, 9531, 15307, 42100, // alpha = 0.9070295 + 15290, 9553, 15305, 42121, // alpha = 0.9375157 + 15288, 9575, 15304, 42136, // alpha = 0.9685059 + 15287, 9597, 15303, 42159, // alpha = 1 + + // Cos (theta) = 0.5122197 + 15378, 5181, 15378, 37748, // alpha = 0.001 + 15378, 5181, 15378, 37748, // alpha = 0.001 + 15378, 5181, 15378, 37748, // alpha = 0.001007811 + 15378, 5251, 15378, 37859, // alpha = 0.002267574 + 15377, 5636, 15377, 38248, // alpha = 0.004031243 + 15376, 6020, 15376, 38576, // alpha = 0.006298816 + 15375, 6274, 15376, 38888, // alpha = 0.009070295 + 15374, 6467, 15375, 39056, // alpha = 0.01234568 + 15373, 6659, 15374, 39235, // alpha = 0.01612497 + 15372, 6851, 15373, 39403, // alpha = 0.02040816 + 15371, 7043, 15373, 39576, // alpha = 0.02519527 + 15370, 7201, 15372, 39736, // alpha = 0.03048627 + 15369, 7297, 15371, 39907, // alpha = 0.03628118 + 15369, 7393, 15370, 40006, // alpha = 0.04258 + 15368, 7489, 15370, 40092, // alpha = 0.04938272 + 15367, 7585, 15369, 40178, // alpha = 0.05668934 + 15366, 7681, 15368, 40265, // alpha = 0.06449988 + 15365, 7777, 15367, 40351, // alpha = 0.07281432 + 15364, 7873, 15367, 40434, // alpha = 0.08163266 + 15363, 7969, 15366, 40531, // alpha = 0.09095491 + 15362, 8064, 15365, 40643, // alpha = 0.1007811 + 15361, 8160, 15365, 40771, // alpha = 0.1111111 + 15360, 8224, 15364, 40879, // alpha = 0.1219451 + 15358, 8272, 15363, 40938, // alpha = 0.1332829 + 15355, 8320, 15362, 40966, // alpha = 0.1451247 + 15353, 8367, 15361, 40997, // alpha = 0.1574704 + 15351, 8415, 15360, 41036, // alpha = 0.17032 + 15350, 8463, 15358, 41078, // alpha = 0.1836735 + 15348, 8511, 15356, 41121, // alpha = 0.1975309 + 15347, 8559, 15355, 41164, // alpha = 0.2118922 + 15345, 8606, 15353, 41202, // alpha = 0.2267574 + 15343, 8654, 15352, 41245, // alpha = 0.2421265 + 15341, 8702, 15350, 41288, // alpha = 0.2579995 + 15340, 8749, 15349, 41328, // alpha = 0.2743765 + 15338, 8797, 15347, 41372, // alpha = 0.2912573 + 15336, 8845, 15346, 41413, // alpha = 0.308642 + 15334, 8892, 15344, 41457, // alpha = 0.3265306 + 15332, 8940, 15343, 41499, // alpha = 0.3449232 + 15331, 8988, 15341, 41542, // alpha = 0.3638196 + 15329, 9035, 15340, 41584, // alpha = 0.38322 + 15327, 9083, 15338, 41624, // alpha = 0.4031242 + 15325, 9131, 15337, 41666, // alpha = 0.4235324 + 15324, 9178, 15335, 41712, // alpha = 0.4444445 + 15322, 9221, 15334, 41753, // alpha = 0.4658605 + 15320, 9245, 15332, 41796, // alpha = 0.4877803 + 15318, 9268, 15331, 41833, // alpha = 0.5102041 + 15316, 9292, 15329, 41881, // alpha = 0.5331318 + 15315, 9316, 15328, 41924, // alpha = 0.5565634 + 15313, 9340, 15326, 41960, // alpha = 0.5804989 + 15311, 9363, 15325, 41994, // alpha = 0.6049383 + 15309, 9387, 15323, 42013, // alpha = 0.6298816 + 15308, 9411, 15322, 42038, // alpha = 0.6553288 + 15306, 9435, 15320, 42057, // alpha = 0.68128 + 15304, 9458, 15319, 42081, // alpha = 0.7077349 + 15302, 9482, 15317, 42104, // alpha = 0.7346939 + 15300, 9506, 15316, 42121, // alpha = 0.7621567 + 15299, 9529, 15314, 42144, // alpha = 0.7901235 + 15297, 9553, 15312, 42161, // alpha = 0.8185941 + 15295, 9577, 15311, 42186, // alpha = 0.8475687 + 15293, 9600, 15310, 42207, // alpha = 0.8770471 + 15291, 9624, 15308, 42227, // alpha = 0.9070295 + 15290, 9648, 15306, 42248, // alpha = 0.9375157 + 15288, 9671, 15305, 42268, // alpha = 0.9685059 + 15286, 9695, 15304, 42289, // alpha = 1 + + // Cos (theta) = 0.4897959 + 15378, 5265, 15378, 37955, // alpha = 0.001 + 15378, 5265, 15378, 37955, // alpha = 0.001 + 15378, 5265, 15378, 37955, // alpha = 0.001007811 + 15377, 5340, 15378, 37996, // alpha = 0.002267574 + 15377, 5755, 15377, 38355, // alpha = 0.004031243 + 15376, 6157, 15376, 38780, // alpha = 0.006298816 + 15375, 6364, 15376, 39020, // alpha = 0.009070295 + 15374, 6571, 15375, 39215, // alpha = 0.01234568 + 15373, 6778, 15374, 39405, // alpha = 0.01612497 + 15372, 6985, 15373, 39622, // alpha = 0.02040816 + 15371, 7180, 15373, 39782, // alpha = 0.02519527 + 15370, 7284, 15372, 39954, // alpha = 0.03048627 + 15369, 7387, 15371, 40049, // alpha = 0.03628118 + 15368, 7490, 15370, 40149, // alpha = 0.04258 + 15368, 7594, 15370, 40244, // alpha = 0.04938272 + 15367, 7697, 15369, 40333, // alpha = 0.05668934 + 15366, 7800, 15368, 40432, // alpha = 0.06449988 + 15365, 7904, 15368, 40526, // alpha = 0.07281432 + 15364, 8007, 15367, 40629, // alpha = 0.08163266 + 15363, 8110, 15366, 40736, // alpha = 0.09095491 + 15362, 8203, 15365, 40856, // alpha = 0.1007811 + 15361, 8254, 15365, 40979, // alpha = 0.1111111 + 15360, 8306, 15364, 41036, // alpha = 0.1219451 + 15358, 8357, 15363, 41073, // alpha = 0.1332829 + 15355, 8409, 15362, 41096, // alpha = 0.1451247 + 15353, 8460, 15361, 41132, // alpha = 0.1574704 + 15351, 8512, 15360, 41174, // alpha = 0.17032 + 15350, 8563, 15359, 41221, // alpha = 0.1836735 + 15348, 8615, 15357, 41267, // alpha = 0.1975309 + 15346, 8666, 15355, 41315, // alpha = 0.2118922 + 15345, 8718, 15354, 41362, // alpha = 0.2267574 + 15343, 8769, 15352, 41408, // alpha = 0.2421265 + 15341, 8821, 15351, 41457, // alpha = 0.2579995 + 15339, 8872, 15349, 41502, // alpha = 0.2743765 + 15338, 8923, 15348, 41549, // alpha = 0.2912573 + 15336, 8975, 15346, 41594, // alpha = 0.308642 + 15334, 9026, 15345, 41640, // alpha = 0.3265306 + 15332, 9078, 15343, 41689, // alpha = 0.3449232 + 15330, 9129, 15342, 41737, // alpha = 0.3638196 + 15329, 9180, 15340, 41784, // alpha = 0.38322 + 15327, 9224, 15339, 41831, // alpha = 0.4031242 + 15325, 9249, 15337, 41875, // alpha = 0.4235324 + 15323, 9275, 15336, 41924, // alpha = 0.4444445 + 15322, 9301, 15334, 41971, // alpha = 0.4658605 + 15320, 9326, 15333, 42005, // alpha = 0.4877803 + 15318, 9352, 15331, 42026, // alpha = 0.5102041 + 15316, 9377, 15330, 42048, // alpha = 0.5331318 + 15314, 9403, 15328, 42073, // alpha = 0.5565634 + 15313, 9429, 15327, 42097, // alpha = 0.5804989 + 15311, 9454, 15325, 42120, // alpha = 0.6049383 + 15309, 9480, 15324, 42143, // alpha = 0.6298816 + 15307, 9505, 15322, 42164, // alpha = 0.6553288 + 15305, 9531, 15321, 42184, // alpha = 0.68128 + 15304, 9556, 15319, 42215, // alpha = 0.7077349 + 15302, 9582, 15318, 42236, // alpha = 0.7346939 + 15300, 9608, 15317, 42258, // alpha = 0.7621567 + 15298, 9633, 15315, 42281, // alpha = 0.7901235 + 15296, 9659, 15314, 42306, // alpha = 0.8185941 + 15295, 9684, 15312, 42332, // alpha = 0.8475687 + 15293, 9710, 15310, 42355, // alpha = 0.8770471 + 15291, 9735, 15309, 42378, // alpha = 0.9070295 + 15289, 9761, 15307, 42402, // alpha = 0.9375157 + 15287, 9786, 15306, 42423, // alpha = 0.9685059 + 15286, 9811, 15305, 42452, // alpha = 1 + + // Cos (theta) = 0.4668682 + 15378, 5366, 15378, 38079, // alpha = 0.001 + 15378, 5366, 15378, 38079, // alpha = 0.001 + 15378, 5366, 15378, 38079, // alpha = 0.001007811 + 15377, 5448, 15378, 38139, // alpha = 0.002267574 + 15377, 5899, 15377, 38618, // alpha = 0.004031243 + 15376, 6247, 15377, 38972, // alpha = 0.006298816 + 15375, 6472, 15376, 39209, // alpha = 0.009070295 + 15374, 6697, 15375, 39407, // alpha = 0.01234568 + 15373, 6922, 15374, 39609, // alpha = 0.01612497 + 15372, 7147, 15373, 39829, // alpha = 0.02040816 + 15371, 7270, 15373, 39987, // alpha = 0.02519527 + 15370, 7382, 15372, 40096, // alpha = 0.03048627 + 15369, 7494, 15371, 40203, // alpha = 0.03628118 + 15368, 7607, 15371, 40318, // alpha = 0.04258 + 15367, 7719, 15370, 40421, // alpha = 0.04938272 + 15367, 7831, 15369, 40528, // alpha = 0.05668934 + 15366, 7943, 15368, 40637, // alpha = 0.06449988 + 15365, 8055, 15368, 40746, // alpha = 0.07281432 + 15364, 8168, 15367, 40865, // alpha = 0.08163266 + 15363, 8236, 15366, 40971, // alpha = 0.09095491 + 15362, 8292, 15366, 41039, // alpha = 0.1007811 + 15361, 8348, 15365, 41115, // alpha = 0.1111111 + 15360, 8404, 15364, 41178, // alpha = 0.1219451 + 15358, 8460, 15363, 41223, // alpha = 0.1332829 + 15355, 8516, 15362, 41255, // alpha = 0.1451247 + 15353, 8572, 15361, 41295, // alpha = 0.1574704 + 15351, 8628, 15360, 41343, // alpha = 0.17032 + 15350, 8683, 15359, 41395, // alpha = 0.1836735 + 15348, 8739, 15357, 41447, // alpha = 0.1975309 + 15346, 8795, 15356, 41498, // alpha = 0.2118922 + 15344, 8851, 15354, 41550, // alpha = 0.2267574 + 15343, 8907, 15353, 41605, // alpha = 0.2421265 + 15341, 8963, 15351, 41658, // alpha = 0.2579995 + 15339, 9018, 15350, 41708, // alpha = 0.2743765 + 15337, 9074, 15348, 41763, // alpha = 0.2912573 + 15336, 9130, 15347, 41814, // alpha = 0.308642 + 15334, 9186, 15345, 41867, // alpha = 0.3265306 + 15332, 9229, 15344, 41919, // alpha = 0.3449232 + 15330, 9257, 15343, 41972, // alpha = 0.3638196 + 15328, 9284, 15341, 42005, // alpha = 0.38322 + 15327, 9312, 15340, 42029, // alpha = 0.4031242 + 15325, 9340, 15338, 42058, // alpha = 0.4235324 + 15323, 9368, 15337, 42084, // alpha = 0.4444445 + 15321, 9396, 15335, 42106, // alpha = 0.4658605 + 15319, 9423, 15334, 42135, // alpha = 0.4877803 + 15317, 9451, 15332, 42163, // alpha = 0.5102041 + 15316, 9479, 15331, 42190, // alpha = 0.5331318 + 15314, 9507, 15329, 42216, // alpha = 0.5565634 + 15312, 9534, 15328, 42242, // alpha = 0.5804989 + 15310, 9562, 15326, 42266, // alpha = 0.6049383 + 15308, 9590, 15325, 42292, // alpha = 0.6298816 + 15307, 9618, 15323, 42322, // alpha = 0.6553288 + 15305, 9645, 15322, 42345, // alpha = 0.68128 + 15303, 9673, 15320, 42370, // alpha = 0.7077349 + 15301, 9701, 15319, 42398, // alpha = 0.7346939 + 15299, 9728, 15317, 42426, // alpha = 0.7621567 + 15298, 9756, 15316, 42449, // alpha = 0.7901235 + 15296, 9784, 15315, 42481, // alpha = 0.8185941 + 15294, 9811, 15313, 42503, // alpha = 0.8475687 + 15292, 9839, 15312, 42528, // alpha = 0.8770471 + 15290, 9866, 15310, 42556, // alpha = 0.9070295 + 15288, 9894, 15309, 42587, // alpha = 0.9375157 + 15287, 9922, 15307, 42612, // alpha = 0.9685059 + 15285, 9949, 15306, 42637, // alpha = 1 + + // Cos (theta) = 0.4434366 + 15378, 5488, 15378, 38271, // alpha = 0.001 + 15378, 5488, 15378, 38271, // alpha = 0.001 + 15378, 5488, 15378, 38271, // alpha = 0.001007811 + 15377, 5578, 15378, 38327, // alpha = 0.002267574 + 15376, 6072, 15377, 38865, // alpha = 0.004031243 + 15376, 6354, 15377, 39170, // alpha = 0.006298816 + 15375, 6601, 15376, 39361, // alpha = 0.009070295 + 15374, 6848, 15375, 39643, // alpha = 0.01234568 + 15373, 7094, 15374, 39867, // alpha = 0.01612497 + 15372, 7254, 15374, 40020, // alpha = 0.02040816 + 15371, 7377, 15373, 40147, // alpha = 0.02519527 + 15370, 7500, 15372, 40266, // alpha = 0.03048627 + 15369, 7623, 15371, 40397, // alpha = 0.03628118 + 15368, 7746, 15371, 40512, // alpha = 0.04258 + 15367, 7869, 15370, 40640, // alpha = 0.04938272 + 15366, 7992, 15369, 40764, // alpha = 0.05668934 + 15365, 8114, 15368, 40888, // alpha = 0.06449988 + 15365, 8215, 15368, 40985, // alpha = 0.07281432 + 15364, 8276, 15367, 41051, // alpha = 0.08163266 + 15363, 8337, 15366, 41121, // alpha = 0.09095491 + 15362, 8398, 15366, 41198, // alpha = 0.1007811 + 15361, 8460, 15365, 41277, // alpha = 0.1111111 + 15359, 8521, 15364, 41348, // alpha = 0.1219451 + 15357, 8582, 15363, 41400, // alpha = 0.1332829 + 15355, 8643, 15363, 41447, // alpha = 0.1451247 + 15353, 8704, 15362, 41494, // alpha = 0.1574704 + 15351, 8766, 15361, 41546, // alpha = 0.17032 + 15350, 8827, 15360, 41604, // alpha = 0.1836735 + 15348, 8888, 15358, 41661, // alpha = 0.1975309 + 15346, 8949, 15356, 41720, // alpha = 0.2118922 + 15344, 9010, 15355, 41779, // alpha = 0.2267574 + 15342, 9071, 15353, 41838, // alpha = 0.2421265 + 15341, 9132, 15352, 41896, // alpha = 0.2579995 + 15339, 9193, 15351, 41955, // alpha = 0.2743765 + 15337, 9235, 15349, 41999, // alpha = 0.2912573 + 15335, 9265, 15348, 42030, // alpha = 0.308642 + 15333, 9296, 15346, 42059, // alpha = 0.3265306 + 15331, 9326, 15345, 42089, // alpha = 0.3449232 + 15330, 9356, 15343, 42119, // alpha = 0.3638196 + 15328, 9387, 15342, 42146, // alpha = 0.38322 + 15326, 9417, 15341, 42176, // alpha = 0.4031242 + 15324, 9447, 15339, 42209, // alpha = 0.4235324 + 15322, 9478, 15338, 42236, // alpha = 0.4444445 + 15320, 9508, 15336, 42266, // alpha = 0.4658605 + 15319, 9538, 15335, 42295, // alpha = 0.4877803 + 15317, 9569, 15333, 42326, // alpha = 0.5102041 + 15315, 9599, 15332, 42354, // alpha = 0.5331318 + 15313, 9629, 15330, 42384, // alpha = 0.5565634 + 15311, 9659, 15329, 42413, // alpha = 0.5804989 + 15310, 9690, 15328, 42444, // alpha = 0.6049383 + 15308, 9720, 15326, 42471, // alpha = 0.6298816 + 15306, 9750, 15325, 42500, // alpha = 0.6553288 + 15304, 9780, 15323, 42531, // alpha = 0.68128 + 15302, 9810, 15322, 42563, // alpha = 0.7077349 + 15300, 9841, 15320, 42593, // alpha = 0.7346939 + 15298, 9871, 15319, 42621, // alpha = 0.7621567 + 15297, 9901, 15317, 42648, // alpha = 0.7901235 + 15295, 9931, 15316, 42677, // alpha = 0.8185941 + 15293, 9961, 15314, 42706, // alpha = 0.8475687 + 15291, 9991, 15313, 42736, // alpha = 0.8770471 + 15289, 10021, 15311, 42768, // alpha = 0.9070295 + 15288, 10051, 15310, 42799, // alpha = 0.9375157 + 15286, 10081, 15309, 42828, // alpha = 0.9685059 + 15284, 10111, 15307, 42854, // alpha = 1 + + // Cos (theta) = 0.4195011 + 15378, 5634, 15378, 38506, // alpha = 0.001 + 15378, 5634, 15378, 38506, // alpha = 0.001 + 15378, 5634, 15378, 38506, // alpha = 0.001007811 + 15377, 5734, 15378, 38565, // alpha = 0.002267574 + 15376, 6211, 15377, 39016, // alpha = 0.004031243 + 15376, 6484, 15377, 39307, // alpha = 0.006298816 + 15375, 6756, 15376, 39602, // alpha = 0.009070295 + 15374, 7028, 15375, 39882, // alpha = 0.01234568 + 15373, 7234, 15374, 40048, // alpha = 0.01612497 + 15372, 7370, 15374, 40189, // alpha = 0.02040816 + 15371, 7506, 15373, 40335, // alpha = 0.02519527 + 15370, 7642, 15372, 40476, // alpha = 0.03048627 + 15369, 7777, 15372, 40616, // alpha = 0.03628118 + 15368, 7913, 15371, 40755, // alpha = 0.04258 + 15367, 8048, 15370, 40901, // alpha = 0.04938272 + 15366, 8184, 15369, 41007, // alpha = 0.05668934 + 15365, 8255, 15369, 41069, // alpha = 0.06449988 + 15364, 8323, 15368, 41147, // alpha = 0.07281432 + 15363, 8391, 15367, 41223, // alpha = 0.08163266 + 15362, 8458, 15367, 41301, // alpha = 0.09095491 + 15361, 8526, 15366, 41388, // alpha = 0.1007811 + 15360, 8593, 15365, 41477, // alpha = 0.1111111 + 15359, 8660, 15365, 41551, // alpha = 0.1219451 + 15357, 8728, 15364, 41617, // alpha = 0.1332829 + 15355, 8795, 15363, 41675, // alpha = 0.1451247 + 15353, 8862, 15362, 41731, // alpha = 0.1574704 + 15351, 8929, 15361, 41791, // alpha = 0.17032 + 15349, 8997, 15360, 41853, // alpha = 0.1836735 + 15347, 9064, 15359, 41918, // alpha = 0.1975309 + 15346, 9131, 15357, 41984, // alpha = 0.2118922 + 15344, 9198, 15356, 42016, // alpha = 0.2267574 + 15342, 9240, 15354, 42049, // alpha = 0.2421265 + 15340, 9274, 15353, 42084, // alpha = 0.2579995 + 15338, 9307, 15351, 42116, // alpha = 0.2743765 + 15336, 9341, 15350, 42151, // alpha = 0.2912573 + 15334, 9374, 15349, 42184, // alpha = 0.308642 + 15333, 9408, 15347, 42216, // alpha = 0.3265306 + 15331, 9441, 15346, 42250, // alpha = 0.3449232 + 15329, 9474, 15344, 42285, // alpha = 0.3638196 + 15327, 9508, 15343, 42318, // alpha = 0.38322 + 15325, 9541, 15341, 42351, // alpha = 0.4031242 + 15323, 9574, 15340, 42384, // alpha = 0.4235324 + 15322, 9608, 15339, 42418, // alpha = 0.4444445 + 15320, 9641, 15337, 42450, // alpha = 0.4658605 + 15318, 9674, 15336, 42483, // alpha = 0.4877803 + 15316, 9707, 15334, 42520, // alpha = 0.5102041 + 15314, 9740, 15333, 42550, // alpha = 0.5331318 + 15312, 9774, 15331, 42585, // alpha = 0.5565634 + 15310, 9807, 15330, 42617, // alpha = 0.5804989 + 15308, 9840, 15329, 42653, // alpha = 0.6049383 + 15307, 9873, 15327, 42682, // alpha = 0.6298816 + 15305, 9906, 15326, 42718, // alpha = 0.6553288 + 15303, 9939, 15324, 42751, // alpha = 0.68128 + 15301, 9972, 15323, 42783, // alpha = 0.7077349 + 15299, 10005, 15321, 42818, // alpha = 0.7346939 + 15297, 10038, 15320, 42849, // alpha = 0.7621567 + 15296, 10071, 15319, 42886, // alpha = 0.7901235 + 15294, 10104, 15317, 42918, // alpha = 0.8185941 + 15292, 10137, 15316, 42947, // alpha = 0.8475687 + 15290, 10170, 15314, 42985, // alpha = 0.8770471 + 15288, 10203, 15313, 43011, // alpha = 0.9070295 + 15286, 10236, 15311, 43029, // alpha = 0.9375157 + 15285, 10254, 15310, 43044, // alpha = 0.9685059 + 15283, 10271, 15309, 43060, // alpha = 1 + + // Cos (theta) = 0.3950617 + 15378, 5810, 15378, 38727, // alpha = 0.001 + 15378, 5810, 15378, 38727, // alpha = 0.001 + 15378, 5810, 15378, 38727, // alpha = 0.001007811 + 15377, 5921, 15378, 38863, // alpha = 0.002267574 + 15376, 6336, 15377, 39222, // alpha = 0.004031243 + 15375, 6639, 15377, 39542, // alpha = 0.006298816 + 15374, 6942, 15376, 39864, // alpha = 0.009070295 + 15373, 7206, 15375, 40065, // alpha = 0.01234568 + 15373, 7357, 15374, 40233, // alpha = 0.01612497 + 15372, 7509, 15374, 40392, // alpha = 0.02040816 + 15371, 7659, 15373, 40552, // alpha = 0.02519527 + 15370, 7810, 15372, 40729, // alpha = 0.03048627 + 15369, 7961, 15372, 40887, // alpha = 0.03628118 + 15368, 8111, 15371, 41003, // alpha = 0.04258 + 15367, 8227, 15370, 41086, // alpha = 0.04938272 + 15366, 8302, 15369, 41169, // alpha = 0.05668934 + 15365, 8377, 15369, 41254, // alpha = 0.06449988 + 15364, 8452, 15368, 41338, // alpha = 0.07281432 + 15363, 8527, 15367, 41424, // alpha = 0.08163266 + 15362, 8602, 15367, 41518, // alpha = 0.09095491 + 15361, 8676, 15366, 41616, // alpha = 0.1007811 + 15360, 8751, 15365, 41710, // alpha = 0.1111111 + 15358, 8826, 15365, 41795, // alpha = 0.1219451 + 15356, 8900, 15364, 41872, // alpha = 0.1332829 + 15354, 8975, 15363, 41943, // alpha = 0.1451247 + 15352, 9049, 15362, 41997, // alpha = 0.1574704 + 15351, 9124, 15361, 42032, // alpha = 0.17032 + 15349, 9198, 15360, 42067, // alpha = 0.1836735 + 15347, 9244, 15359, 42103, // alpha = 0.1975309 + 15345, 9281, 15358, 42140, // alpha = 0.2118922 + 15343, 9318, 15356, 42176, // alpha = 0.2267574 + 15341, 9355, 15355, 42214, // alpha = 0.2421265 + 15339, 9392, 15354, 42252, // alpha = 0.2579995 + 15337, 9429, 15352, 42289, // alpha = 0.2743765 + 15335, 9466, 15351, 42329, // alpha = 0.2912573 + 15333, 9503, 15349, 42366, // alpha = 0.308642 + 15332, 9540, 15348, 42403, // alpha = 0.3265306 + 15330, 9577, 15347, 42441, // alpha = 0.3449232 + 15328, 9613, 15345, 42481, // alpha = 0.3638196 + 15326, 9650, 15344, 42519, // alpha = 0.38322 + 15324, 9687, 15342, 42556, // alpha = 0.4031242 + 15322, 9723, 15341, 42593, // alpha = 0.4235324 + 15320, 9760, 15340, 42632, // alpha = 0.4444445 + 15318, 9797, 15338, 42668, // alpha = 0.4658605 + 15317, 9833, 15337, 42709, // alpha = 0.4877803 + 15315, 9870, 15335, 42744, // alpha = 0.5102041 + 15313, 9906, 15334, 42784, // alpha = 0.5331318 + 15311, 9943, 15332, 42823, // alpha = 0.5565634 + 15309, 9979, 15331, 42856, // alpha = 0.5804989 + 15307, 10016, 15330, 42894, // alpha = 0.6049383 + 15305, 10052, 15328, 42932, // alpha = 0.6298816 + 15303, 10088, 15327, 42967, // alpha = 0.6553288 + 15302, 10125, 15326, 43009, // alpha = 0.68128 + 15300, 10161, 15324, 43026, // alpha = 0.7077349 + 15298, 10197, 15323, 43046, // alpha = 0.7346939 + 15296, 10233, 15321, 43065, // alpha = 0.7621567 + 15294, 10255, 15320, 43082, // alpha = 0.7901235 + 15292, 10273, 15319, 43099, // alpha = 0.8185941 + 15290, 10291, 15317, 43118, // alpha = 0.8475687 + 15289, 10309, 15316, 43138, // alpha = 0.8770471 + 15287, 10327, 15314, 43157, // alpha = 0.9070295 + 15285, 10345, 15313, 43172, // alpha = 0.9375157 + 15283, 10363, 15312, 43191, // alpha = 0.9685059 + 15281, 10381, 15310, 43210, // alpha = 1 + + // Cos (theta) = 0.3701184 + 15377, 6020, 15378, 38965, // alpha = 0.001 + 15377, 6020, 15378, 38965, // alpha = 0.001 + 15377, 6020, 15378, 38965, // alpha = 0.001007811 + 15377, 6144, 15378, 39032, // alpha = 0.002267574 + 15376, 6484, 15377, 39420, // alpha = 0.004031243 + 15375, 6824, 15377, 39817, // alpha = 0.006298816 + 15374, 7164, 15376, 40061, // alpha = 0.009070295 + 15373, 7335, 15375, 40262, // alpha = 0.01234568 + 15372, 7505, 15375, 40448, // alpha = 0.01612497 + 15371, 7674, 15374, 40645, // alpha = 0.02040816 + 15370, 7843, 15373, 40822, // alpha = 0.02519527 + 15369, 8011, 15372, 40992, // alpha = 0.03048627 + 15368, 8180, 15372, 41084, // alpha = 0.03628118 + 15367, 8270, 15371, 41178, // alpha = 0.04258 + 15366, 8354, 15370, 41274, // alpha = 0.04938272 + 15365, 8438, 15370, 41369, // alpha = 0.05668934 + 15364, 8521, 15369, 41463, // alpha = 0.06449988 + 15363, 8605, 15368, 41566, // alpha = 0.07281432 + 15362, 8688, 15368, 41666, // alpha = 0.08163266 + 15361, 8772, 15367, 41776, // alpha = 0.09095491 + 15360, 8855, 15366, 41885, // alpha = 0.1007811 + 15358, 8938, 15366, 41987, // alpha = 0.1111111 + 15357, 9021, 15365, 42034, // alpha = 0.1219451 + 15355, 9104, 15364, 42079, // alpha = 0.1332829 + 15353, 9187, 15363, 42120, // alpha = 0.1451247 + 15351, 9243, 15362, 42161, // alpha = 0.1574704 + 15350, 9284, 15361, 42201, // alpha = 0.17032 + 15348, 9325, 15361, 42241, // alpha = 0.1836735 + 15346, 9367, 15360, 42282, // alpha = 0.1975309 + 15344, 9408, 15359, 42324, // alpha = 0.2118922 + 15342, 9449, 15357, 42366, // alpha = 0.2267574 + 15340, 9490, 15356, 42408, // alpha = 0.2421265 + 15338, 9531, 15354, 42450, // alpha = 0.2579995 + 15336, 9572, 15353, 42494, // alpha = 0.2743765 + 15334, 9613, 15352, 42536, // alpha = 0.2912573 + 15332, 9654, 15350, 42580, // alpha = 0.308642 + 15330, 9694, 15349, 42622, // alpha = 0.3265306 + 15328, 9735, 15348, 42665, // alpha = 0.3449232 + 15326, 9776, 15346, 42709, // alpha = 0.3638196 + 15324, 9816, 15345, 42750, // alpha = 0.38322 + 15322, 9857, 15344, 42795, // alpha = 0.4031242 + 15321, 9898, 15342, 42837, // alpha = 0.4235324 + 15319, 9938, 15341, 42879, // alpha = 0.4444445 + 15317, 9978, 15339, 42923, // alpha = 0.4658605 + 15315, 10019, 15338, 42967, // alpha = 0.4877803 + 15313, 10059, 15337, 43009, // alpha = 0.5102041 + 15311, 10099, 15335, 43029, // alpha = 0.5331318 + 15309, 10140, 15334, 43051, // alpha = 0.5565634 + 15307, 10180, 15333, 43072, // alpha = 0.5804989 + 15305, 10220, 15331, 43092, // alpha = 0.6049383 + 15304, 10250, 15330, 43114, // alpha = 0.6298816 + 15302, 10270, 15329, 43135, // alpha = 0.6553288 + 15300, 10290, 15327, 43156, // alpha = 0.68128 + 15298, 10310, 15326, 43176, // alpha = 0.7077349 + 15296, 10330, 15324, 43197, // alpha = 0.7346939 + 15294, 10350, 15323, 43217, // alpha = 0.7621567 + 15292, 10370, 15322, 43239, // alpha = 0.7901235 + 15290, 10389, 15320, 43260, // alpha = 0.8185941 + 15288, 10409, 15319, 43281, // alpha = 0.8475687 + 15286, 10429, 15318, 43303, // alpha = 0.8770471 + 15285, 10449, 15316, 43322, // alpha = 0.9070295 + 15283, 10469, 15315, 43342, // alpha = 0.9375157 + 15281, 10488, 15313, 43363, // alpha = 0.9685059 + 15279, 10508, 15312, 43384, // alpha = 1 + + // Cos (theta) = 0.3446712 + 15377, 6208, 15378, 39152, // alpha = 0.001 + 15377, 6208, 15378, 39152, // alpha = 0.001 + 15377, 6208, 15378, 39152, // alpha = 0.001007811 + 15377, 6278, 15378, 39234, // alpha = 0.002267574 + 15376, 6662, 15377, 39703, // alpha = 0.004031243 + 15375, 7046, 15377, 40028, // alpha = 0.006298816 + 15374, 7298, 15376, 40263, // alpha = 0.009070295 + 15373, 7489, 15375, 40479, // alpha = 0.01234568 + 15372, 7680, 15375, 40705, // alpha = 0.01612497 + 15371, 7870, 15374, 40929, // alpha = 0.02040816 + 15370, 8060, 15373, 41052, // alpha = 0.02519527 + 15369, 8221, 15373, 41164, // alpha = 0.03048627 + 15368, 8315, 15372, 41272, // alpha = 0.03628118 + 15367, 8410, 15371, 41381, // alpha = 0.04258 + 15366, 8504, 15371, 41494, // alpha = 0.04938272 + 15365, 8598, 15370, 41605, // alpha = 0.05668934 + 15364, 8692, 15369, 41720, // alpha = 0.06449988 + 15363, 8786, 15368, 41831, // alpha = 0.07281432 + 15361, 8879, 15368, 41952, // alpha = 0.08163266 + 15360, 8973, 15367, 42030, // alpha = 0.09095491 + 15359, 9066, 15366, 42091, // alpha = 0.1007811 + 15357, 9159, 15366, 42150, // alpha = 0.1111111 + 15355, 9234, 15365, 42205, // alpha = 0.1219451 + 15353, 9280, 15364, 42256, // alpha = 0.1332829 + 15352, 9326, 15363, 42304, // alpha = 0.1451247 + 15350, 9372, 15363, 42350, // alpha = 0.1574704 + 15348, 9419, 15362, 42397, // alpha = 0.17032 + 15346, 9464, 15361, 42444, // alpha = 0.1836735 + 15344, 9510, 15360, 42491, // alpha = 0.1975309 + 15342, 9556, 15359, 42538, // alpha = 0.2118922 + 15340, 9602, 15358, 42585, // alpha = 0.2267574 + 15338, 9648, 15357, 42634, // alpha = 0.2421265 + 15336, 9693, 15355, 42683, // alpha = 0.2579995 + 15334, 9739, 15354, 42731, // alpha = 0.2743765 + 15332, 9784, 15353, 42780, // alpha = 0.2912573 + 15330, 9829, 15351, 42827, // alpha = 0.308642 + 15328, 9875, 15350, 42877, // alpha = 0.3265306 + 15326, 9920, 15349, 42927, // alpha = 0.3449232 + 15324, 9965, 15348, 42974, // alpha = 0.3638196 + 15322, 10010, 15346, 43016, // alpha = 0.38322 + 15320, 10055, 15345, 43040, // alpha = 0.4031242 + 15319, 10100, 15343, 43064, // alpha = 0.4235324 + 15317, 10144, 15342, 43088, // alpha = 0.4444445 + 15315, 10189, 15341, 43113, // alpha = 0.4658605 + 15313, 10234, 15339, 43137, // alpha = 0.4877803 + 15311, 10259, 15338, 43160, // alpha = 0.5102041 + 15309, 10281, 15337, 43183, // alpha = 0.5331318 + 15307, 10303, 15335, 43208, // alpha = 0.5565634 + 15305, 10326, 15334, 43232, // alpha = 0.5804989 + 15303, 10348, 15333, 43255, // alpha = 0.6049383 + 15301, 10370, 15331, 43278, // alpha = 0.6298816 + 15299, 10392, 15330, 43303, // alpha = 0.6553288 + 15297, 10414, 15329, 43325, // alpha = 0.68128 + 15295, 10436, 15327, 43348, // alpha = 0.7077349 + 15294, 10458, 15326, 43372, // alpha = 0.7346939 + 15292, 10480, 15325, 43395, // alpha = 0.7621567 + 15289, 10501, 15323, 43422, // alpha = 0.7901235 + 15288, 10523, 15322, 43441, // alpha = 0.8185941 + 15286, 10545, 15321, 43468, // alpha = 0.8475687 + 15284, 10567, 15319, 43490, // alpha = 0.8770471 + 15282, 10588, 15318, 43514, // alpha = 0.9070295 + 15280, 10610, 15317, 43537, // alpha = 0.9375157 + 15278, 10632, 15316, 43558, // alpha = 0.9685059 + 15276, 10653, 15314, 43582, // alpha = 1 + + // Cos (theta) = 0.3187201 + 15377, 6358, 15378, 39380, // alpha = 0.001 + 15377, 6358, 15378, 39380, // alpha = 0.001 + 15377, 6358, 15378, 39380, // alpha = 0.001007811 + 15377, 6438, 15378, 39482, // alpha = 0.002267574 + 15376, 6874, 15377, 39979, // alpha = 0.004031243 + 15375, 7239, 15377, 40228, // alpha = 0.006298816 + 15374, 7456, 15376, 40497, // alpha = 0.009070295 + 15373, 7673, 15375, 40747, // alpha = 0.01234568 + 15372, 7889, 15375, 40983, // alpha = 0.01612497 + 15370, 8104, 15374, 41115, // alpha = 0.02040816 + 15369, 8255, 15373, 41243, // alpha = 0.02519527 + 15368, 8362, 15373, 41368, // alpha = 0.03048627 + 15367, 8469, 15372, 41497, // alpha = 0.03628118 + 15366, 8576, 15371, 41627, // alpha = 0.04258 + 15365, 8682, 15371, 41755, // alpha = 0.04938272 + 15364, 8788, 15370, 41884, // alpha = 0.05668934 + 15363, 8893, 15369, 42000, // alpha = 0.06449988 + 15362, 8999, 15369, 42068, // alpha = 0.07281432 + 15361, 9104, 15368, 42135, // alpha = 0.08163266 + 15359, 9209, 15367, 42204, // alpha = 0.09095491 + 15357, 9265, 15367, 42274, // alpha = 0.1007811 + 15355, 9317, 15366, 42341, // alpha = 0.1111111 + 15353, 9369, 15365, 42404, // alpha = 0.1219451 + 15351, 9421, 15364, 42463, // alpha = 0.1332829 + 15349, 9472, 15364, 42518, // alpha = 0.1451247 + 15348, 9524, 15363, 42573, // alpha = 0.1574704 + 15346, 9575, 15362, 42627, // alpha = 0.17032 + 15344, 9627, 15361, 42679, // alpha = 0.1836735 + 15342, 9678, 15361, 42732, // alpha = 0.1975309 + 15340, 9729, 15360, 42787, // alpha = 0.2118922 + 15338, 9780, 15359, 42841, // alpha = 0.2267574 + 15336, 9831, 15358, 42896, // alpha = 0.2421265 + 15334, 9882, 15356, 42950, // alpha = 0.2579995 + 15332, 9932, 15355, 43005, // alpha = 0.2743765 + 15330, 9983, 15354, 43034, // alpha = 0.2912573 + 15328, 10033, 15353, 43063, // alpha = 0.308642 + 15326, 10083, 15351, 43089, // alpha = 0.3265306 + 15324, 10133, 15350, 43117, // alpha = 0.3449232 + 15322, 10183, 15349, 43144, // alpha = 0.3638196 + 15320, 10233, 15348, 43172, // alpha = 0.38322 + 15318, 10261, 15346, 43199, // alpha = 0.4031242 + 15316, 10286, 15345, 43226, // alpha = 0.4235324 + 15314, 10311, 15344, 43254, // alpha = 0.4444445 + 15312, 10336, 15342, 43280, // alpha = 0.4658605 + 15310, 10360, 15341, 43308, // alpha = 0.4877803 + 15308, 10385, 15340, 43335, // alpha = 0.5102041 + 15306, 10409, 15338, 43361, // alpha = 0.5331318 + 15304, 10434, 15337, 43388, // alpha = 0.5565634 + 15302, 10458, 15336, 43415, // alpha = 0.5804989 + 15300, 10483, 15334, 43441, // alpha = 0.6049383 + 15298, 10507, 15333, 43468, // alpha = 0.6298816 + 15296, 10531, 15332, 43493, // alpha = 0.6553288 + 15294, 10555, 15330, 43521, // alpha = 0.68128 + 15292, 10579, 15329, 43546, // alpha = 0.7077349 + 15290, 10604, 15328, 43573, // alpha = 0.7346939 + 15288, 10628, 15327, 43598, // alpha = 0.7621567 + 15286, 10652, 15325, 43624, // alpha = 0.7901235 + 15285, 10675, 15324, 43649, // alpha = 0.8185941 + 15282, 10699, 15323, 43676, // alpha = 0.8475687 + 15281, 10723, 15322, 43701, // alpha = 0.8770471 + 15279, 10747, 15320, 43726, // alpha = 0.9070295 + 15277, 10771, 15319, 43753, // alpha = 0.9375157 + 15275, 10794, 15318, 43777, // alpha = 0.9685059 + 15273, 10818, 15316, 43804, // alpha = 1 + + // Cos (theta) = 0.292265 + 15377, 6538, 15378, 39659, // alpha = 0.001 + 15377, 6538, 15378, 39659, // alpha = 0.001 + 15377, 6538, 15378, 39659, // alpha = 0.001007811 + 15377, 6629, 15378, 39760, // alpha = 0.002267574 + 15376, 7128, 15378, 40163, // alpha = 0.004031243 + 15374, 7396, 15377, 40464, // alpha = 0.006298816 + 15373, 7644, 15376, 40765, // alpha = 0.009070295 + 15372, 7891, 15376, 41017, // alpha = 0.01234568 + 15371, 8136, 15375, 41168, // alpha = 0.01612497 + 15370, 8287, 15374, 41312, // alpha = 0.02040816 + 15369, 8408, 15373, 41467, // alpha = 0.02519527 + 15368, 8530, 15373, 41615, // alpha = 0.03048627 + 15367, 8651, 15372, 41761, // alpha = 0.03628118 + 15365, 8771, 15371, 41913, // alpha = 0.04258 + 15364, 8892, 15371, 42023, // alpha = 0.04938272 + 15363, 9011, 15370, 42098, // alpha = 0.05668934 + 15362, 9130, 15369, 42174, // alpha = 0.06449988 + 15361, 9233, 15369, 42253, // alpha = 0.07281432 + 15359, 9292, 15368, 42329, // alpha = 0.08163266 + 15357, 9351, 15367, 42408, // alpha = 0.09095491 + 15355, 9410, 15367, 42486, // alpha = 0.1007811 + 15353, 9468, 15366, 42562, // alpha = 0.1111111 + 15351, 9527, 15365, 42634, // alpha = 0.1219451 + 15349, 9585, 15365, 42702, // alpha = 0.1332829 + 15347, 9643, 15364, 42767, // alpha = 0.1451247 + 15345, 9700, 15363, 42829, // alpha = 0.1574704 + 15343, 9758, 15362, 42890, // alpha = 0.17032 + 15341, 9815, 15362, 42953, // alpha = 0.1836735 + 15339, 9873, 15361, 43010, // alpha = 0.1975309 + 15337, 9930, 15361, 43041, // alpha = 0.2118922 + 15335, 9986, 15360, 43072, // alpha = 0.2267574 + 15332, 10043, 15359, 43102, // alpha = 0.2421265 + 15330, 10099, 15357, 43133, // alpha = 0.2579995 + 15328, 10156, 15356, 43164, // alpha = 0.2743765 + 15326, 10212, 15355, 43195, // alpha = 0.2912573 + 15324, 10254, 15354, 43226, // alpha = 0.308642 + 15322, 10282, 15353, 43257, // alpha = 0.3265306 + 15320, 10309, 15351, 43288, // alpha = 0.3449232 + 15318, 10337, 15350, 43319, // alpha = 0.3638196 + 15316, 10365, 15349, 43351, // alpha = 0.38322 + 15314, 10392, 15348, 43382, // alpha = 0.4031242 + 15312, 10420, 15346, 43411, // alpha = 0.4235324 + 15310, 10447, 15345, 43441, // alpha = 0.4444445 + 15308, 10474, 15344, 43471, // alpha = 0.4658605 + 15306, 10501, 15343, 43502, // alpha = 0.4877803 + 15304, 10528, 15341, 43533, // alpha = 0.5102041 + 15302, 10555, 15340, 43562, // alpha = 0.5331318 + 15300, 10582, 15339, 43593, // alpha = 0.5565634 + 15298, 10609, 15337, 43623, // alpha = 0.5804989 + 15296, 10636, 15336, 43652, // alpha = 0.6049383 + 15294, 10662, 15335, 43682, // alpha = 0.6298816 + 15292, 10689, 15334, 43709, // alpha = 0.6553288 + 15290, 10716, 15332, 43738, // alpha = 0.68128 + 15288, 10742, 15331, 43769, // alpha = 0.7077349 + 15286, 10768, 15330, 43797, // alpha = 0.7346939 + 15284, 10795, 15329, 43826, // alpha = 0.7621567 + 15282, 10821, 15327, 43855, // alpha = 0.7901235 + 15280, 10847, 15326, 43885, // alpha = 0.8185941 + 15278, 10873, 15325, 43912, // alpha = 0.8475687 + 15276, 10899, 15324, 43941, // alpha = 0.8770471 + 15275, 10925, 15322, 43970, // alpha = 0.9070295 + 15272, 10951, 15321, 43998, // alpha = 0.9375157 + 15271, 10977, 15320, 44024, // alpha = 0.9685059 + 15269, 11002, 15319, 44042, // alpha = 1 + + // Cos (theta) = 0.2653061 + 15377, 6753, 15378, 39947, // alpha = 0.001 + 15377, 6753, 15378, 39947, // alpha = 0.001 + 15377, 6753, 15378, 39947, // alpha = 0.001007811 + 15377, 6858, 15378, 40020, // alpha = 0.002267574 + 15375, 7299, 15378, 40388, // alpha = 0.004031243 + 15374, 7584, 15377, 40742, // alpha = 0.006298816 + 15373, 7868, 15376, 41028, // alpha = 0.009070295 + 15372, 8150, 15376, 41209, // alpha = 0.01234568 + 15370, 8311, 15375, 41382, // alpha = 0.01612497 + 15369, 8451, 15374, 41554, // alpha = 0.02040816 + 15368, 8590, 15374, 41732, // alpha = 0.02519527 + 15367, 8728, 15373, 41908, // alpha = 0.03048627 + 15366, 8865, 15372, 42032, // alpha = 0.03628118 + 15365, 9002, 15372, 42117, // alpha = 0.04258 + 15363, 9138, 15371, 42205, // alpha = 0.04938272 + 15362, 9245, 15370, 42291, // alpha = 0.05668934 + 15361, 9312, 15370, 42379, // alpha = 0.06449988 + 15360, 9379, 15369, 42469, // alpha = 0.07281432 + 15357, 9446, 15368, 42555, // alpha = 0.08163266 + 15355, 9513, 15368, 42645, // alpha = 0.09095491 + 15353, 9579, 15367, 42733, // alpha = 0.1007811 + 15350, 9645, 15366, 42819, // alpha = 0.1111111 + 15348, 9710, 15366, 42900, // alpha = 0.1219451 + 15346, 9775, 15365, 42978, // alpha = 0.1332829 + 15344, 9840, 15364, 43031, // alpha = 0.1451247 + 15341, 9905, 15364, 43067, // alpha = 0.1574704 + 15339, 9969, 15363, 43102, // alpha = 0.17032 + 15337, 10033, 15362, 43137, // alpha = 0.1836735 + 15335, 10097, 15362, 43171, // alpha = 0.1975309 + 15333, 10161, 15361, 43205, // alpha = 0.2118922 + 15330, 10224, 15360, 43240, // alpha = 0.2267574 + 15328, 10263, 15360, 43275, // alpha = 0.2421265 + 15326, 10295, 15359, 43310, // alpha = 0.2579995 + 15324, 10326, 15357, 43345, // alpha = 0.2743765 + 15322, 10357, 15356, 43379, // alpha = 0.2912573 + 15320, 10388, 15355, 43414, // alpha = 0.308642 + 15318, 10419, 15354, 43449, // alpha = 0.3265306 + 15316, 10449, 15353, 43484, // alpha = 0.3449232 + 15314, 10480, 15351, 43518, // alpha = 0.3638196 + 15312, 10510, 15350, 43553, // alpha = 0.38322 + 15310, 10541, 15349, 43589, // alpha = 0.4031242 + 15308, 10571, 15348, 43621, // alpha = 0.4235324 + 15306, 10601, 15347, 43654, // alpha = 0.4444445 + 15304, 10631, 15345, 43689, // alpha = 0.4658605 + 15301, 10661, 15344, 43722, // alpha = 0.4877803 + 15299, 10691, 15343, 43755, // alpha = 0.5102041 + 15297, 10720, 15342, 43788, // alpha = 0.5331318 + 15295, 10750, 15341, 43821, // alpha = 0.5565634 + 15293, 10779, 15339, 43854, // alpha = 0.5804989 + 15291, 10808, 15338, 43887, // alpha = 0.6049383 + 15289, 10837, 15337, 43921, // alpha = 0.6298816 + 15287, 10866, 15336, 43953, // alpha = 0.6553288 + 15285, 10895, 15334, 43985, // alpha = 0.68128 + 15283, 10924, 15333, 44017, // alpha = 0.7077349 + 15281, 10953, 15332, 44039, // alpha = 0.7346939 + 15280, 10982, 15331, 44055, // alpha = 0.7621567 + 15277, 11010, 15330, 44072, // alpha = 0.7901235 + 15275, 11038, 15328, 44087, // alpha = 0.8185941 + 15273, 11067, 15327, 44102, // alpha = 0.8475687 + 15271, 11095, 15326, 44117, // alpha = 0.8770471 + 15269, 11123, 15325, 44134, // alpha = 0.9070295 + 15267, 11151, 15323, 44150, // alpha = 0.9375157 + 15265, 11179, 15322, 44165, // alpha = 0.9685059 + 15263, 11207, 15321, 44180, // alpha = 1 + + // Cos (theta) = 0.2378433 + 15376, 7011, 15378, 40145, // alpha = 0.001 + 15376, 7011, 15378, 40145, // alpha = 0.001 + 15376, 7011, 15378, 40145, // alpha = 0.001007811 + 15376, 7132, 15378, 40213, // alpha = 0.002267574 + 15375, 7481, 15378, 40638, // alpha = 0.004031243 + 15374, 7809, 15377, 41007, // alpha = 0.006298816 + 15372, 8135, 15376, 41220, // alpha = 0.009070295 + 15371, 8325, 15376, 41430, // alpha = 0.01234568 + 15370, 8486, 15375, 41636, // alpha = 0.01612497 + 15368, 8646, 15374, 41842, // alpha = 0.02040816 + 15367, 8804, 15374, 42014, // alpha = 0.02519527 + 15366, 8962, 15373, 42115, // alpha = 0.03048627 + 15365, 9118, 15372, 42215, // alpha = 0.03628118 + 15363, 9245, 15372, 42316, // alpha = 0.04258 + 15362, 9322, 15371, 42417, // alpha = 0.04938272 + 15361, 9399, 15370, 42516, // alpha = 0.05668934 + 15360, 9475, 15370, 42618, // alpha = 0.06449988 + 15357, 9551, 15369, 42717, // alpha = 0.07281432 + 15355, 9626, 15368, 42819, // alpha = 0.08163266 + 15352, 9701, 15368, 42919, // alpha = 0.09095491 + 15350, 9776, 15367, 43012, // alpha = 0.1007811 + 15347, 9850, 15366, 43060, // alpha = 0.1111111 + 15345, 9923, 15366, 43107, // alpha = 0.1219451 + 15342, 9996, 15365, 43152, // alpha = 0.1332829 + 15340, 10069, 15365, 43196, // alpha = 0.1451247 + 15337, 10141, 15364, 43237, // alpha = 0.1574704 + 15335, 10213, 15363, 43277, // alpha = 0.17032 + 15333, 10262, 15363, 43316, // alpha = 0.1836735 + 15330, 10298, 15362, 43354, // alpha = 0.1975309 + 15328, 10333, 15362, 43393, // alpha = 0.2118922 + 15326, 10368, 15361, 43433, // alpha = 0.2267574 + 15323, 10403, 15360, 43472, // alpha = 0.2421265 + 15321, 10438, 15360, 43510, // alpha = 0.2579995 + 15319, 10472, 15359, 43550, // alpha = 0.2743765 + 15317, 10506, 15358, 43589, // alpha = 0.2912573 + 15315, 10541, 15356, 43626, // alpha = 0.308642 + 15312, 10575, 15355, 43667, // alpha = 0.3265306 + 15310, 10608, 15354, 43705, // alpha = 0.3449232 + 15308, 10642, 15353, 43743, // alpha = 0.3638196 + 15306, 10675, 15352, 43781, // alpha = 0.38322 + 15304, 10709, 15351, 43818, // alpha = 0.4031242 + 15302, 10742, 15350, 43857, // alpha = 0.4235324 + 15300, 10775, 15348, 43894, // alpha = 0.4444445 + 15298, 10807, 15347, 43930, // alpha = 0.4658605 + 15296, 10840, 15346, 43968, // alpha = 0.4877803 + 15294, 10872, 15345, 44003, // alpha = 0.5102041 + 15292, 10905, 15344, 44036, // alpha = 0.5331318 + 15290, 10937, 15342, 44054, // alpha = 0.5565634 + 15287, 10969, 15341, 44074, // alpha = 0.5804989 + 15285, 11001, 15340, 44090, // alpha = 0.6049383 + 15283, 11032, 15338, 44110, // alpha = 0.6298816 + 15281, 11064, 15338, 44126, // alpha = 0.6553288 + 15279, 11095, 15336, 44143, // alpha = 0.68128 + 15277, 11126, 15335, 44161, // alpha = 0.7077349 + 15275, 11157, 15334, 44179, // alpha = 0.7346939 + 15273, 11188, 15333, 44195, // alpha = 0.7621567 + 15271, 11219, 15332, 44213, // alpha = 0.7901235 + 15269, 11250, 15330, 44231, // alpha = 0.8185941 + 15267, 11272, 15329, 44246, // alpha = 0.8475687 + 15265, 11287, 15328, 44263, // alpha = 0.8770471 + 15263, 11303, 15327, 44280, // alpha = 0.9070295 + 15261, 11318, 15326, 44298, // alpha = 0.9375157 + 15259, 11333, 15325, 44313, // alpha = 0.9685059 + 15257, 11348, 15324, 44331, // alpha = 1 + + // Cos (theta) = 0.2098765 + 15376, 7245, 15378, 40361, // alpha = 0.001 + 15376, 7245, 15378, 40361, // alpha = 0.001 + 15376, 7245, 15378, 40361, // alpha = 0.001007811 + 15376, 7315, 15378, 40454, // alpha = 0.002267574 + 15374, 7698, 15378, 40960, // alpha = 0.004031243 + 15373, 8078, 15377, 41207, // alpha = 0.006298816 + 15372, 8323, 15376, 41454, // alpha = 0.009070295 + 15370, 8509, 15376, 41698, // alpha = 0.01234568 + 15369, 8694, 15375, 41938, // alpha = 0.01612497 + 15367, 8877, 15374, 42080, // alpha = 0.02040816 + 15366, 9059, 15374, 42198, // alpha = 0.02519527 + 15365, 9227, 15373, 42314, // alpha = 0.03048627 + 15363, 9316, 15372, 42432, // alpha = 0.03628118 + 15362, 9405, 15372, 42548, // alpha = 0.04258 + 15361, 9493, 15371, 42665, // alpha = 0.04938272 + 15359, 9580, 15371, 42778, // alpha = 0.05668934 + 15357, 9666, 15370, 42893, // alpha = 0.06449988 + 15354, 9751, 15369, 43006, // alpha = 0.07281432 + 15351, 9836, 15369, 43065, // alpha = 0.08163266 + 15349, 9921, 15368, 43120, // alpha = 0.09095491 + 15346, 10004, 15367, 43176, // alpha = 0.1007811 + 15343, 10087, 15367, 43231, // alpha = 0.1111111 + 15341, 10169, 15366, 43283, // alpha = 0.1219451 + 15338, 10245, 15365, 43334, // alpha = 0.1332829 + 15336, 10286, 15365, 43383, // alpha = 0.1451247 + 15333, 10326, 15364, 43430, // alpha = 0.1574704 + 15330, 10366, 15364, 43476, // alpha = 0.17032 + 15328, 10406, 15363, 43520, // alpha = 0.1836735 + 15325, 10445, 15363, 43564, // alpha = 0.1975309 + 15323, 10484, 15362, 43607, // alpha = 0.2118922 + 15320, 10523, 15362, 43650, // alpha = 0.2267574 + 15318, 10561, 15361, 43692, // alpha = 0.2421265 + 15315, 10600, 15361, 43737, // alpha = 0.2579995 + 15313, 10638, 15360, 43781, // alpha = 0.2743765 + 15311, 10675, 15359, 43822, // alpha = 0.2912573 + 15309, 10713, 15358, 43866, // alpha = 0.308642 + 15306, 10750, 15357, 43910, // alpha = 0.3265306 + 15304, 10787, 15356, 43951, // alpha = 0.3449232 + 15302, 10824, 15355, 43992, // alpha = 0.3638196 + 15300, 10860, 15353, 44034, // alpha = 0.38322 + 15298, 10897, 15352, 44054, // alpha = 0.4031242 + 15295, 10933, 15351, 44074, // alpha = 0.4235324 + 15293, 10968, 15350, 44096, // alpha = 0.4444445 + 15291, 11004, 15349, 44116, // alpha = 0.4658605 + 15289, 11039, 15348, 44136, // alpha = 0.4877803 + 15287, 11075, 15347, 44155, // alpha = 0.5102041 + 15285, 11110, 15345, 44176, // alpha = 0.5331318 + 15283, 11144, 15344, 44195, // alpha = 0.5565634 + 15280, 11179, 15343, 44216, // alpha = 0.5804989 + 15278, 11213, 15342, 44234, // alpha = 0.6049383 + 15276, 11247, 15341, 44253, // alpha = 0.6298816 + 15274, 11273, 15340, 44273, // alpha = 0.6553288 + 15272, 11289, 15339, 44292, // alpha = 0.68128 + 15270, 11306, 15338, 44311, // alpha = 0.7077349 + 15268, 11323, 15337, 44328, // alpha = 0.7346939 + 15266, 11340, 15335, 44347, // alpha = 0.7621567 + 15264, 11356, 15334, 44365, // alpha = 0.7901235 + 15262, 11372, 15333, 44384, // alpha = 0.8185941 + 15260, 11389, 15332, 44403, // alpha = 0.8475687 + 15258, 11405, 15331, 44421, // alpha = 0.8770471 + 15256, 11421, 15329, 44440, // alpha = 0.9070295 + 15254, 11437, 15328, 44456, // alpha = 0.9375157 + 15252, 11453, 15327, 44474, // alpha = 0.9685059 + 15250, 11469, 15326, 44491, // alpha = 1 + + // Cos (theta) = 0.1814059 + 15376, 7433, 15378, 40629, // alpha = 0.001 + 15376, 7433, 15378, 40629, // alpha = 0.001 + 15376, 7433, 15378, 40629, // alpha = 0.001007811 + 15375, 7515, 15378, 40751, // alpha = 0.002267574 + 15374, 7961, 15378, 41151, // alpha = 0.004031243 + 15372, 8297, 15377, 41443, // alpha = 0.006298816 + 15371, 8515, 15376, 41729, // alpha = 0.009070295 + 15369, 8730, 15376, 41997, // alpha = 0.01234568 + 15368, 8942, 15375, 42136, // alpha = 0.01612497 + 15366, 9153, 15375, 42279, // alpha = 0.02040816 + 15365, 9288, 15374, 42415, // alpha = 0.02519527 + 15363, 9391, 15373, 42555, // alpha = 0.03048627 + 15362, 9493, 15373, 42686, // alpha = 0.03628118 + 15361, 9593, 15372, 42819, // alpha = 0.04258 + 15359, 9693, 15371, 42953, // alpha = 0.04938272 + 15356, 9791, 15371, 43046, // alpha = 0.05668934 + 15353, 9889, 15370, 43112, // alpha = 0.06449988 + 15350, 9985, 15369, 43175, // alpha = 0.07281432 + 15348, 10080, 15369, 43240, // alpha = 0.08163266 + 15345, 10175, 15368, 43302, // alpha = 0.09095491 + 15342, 10254, 15367, 43364, // alpha = 0.1007811 + 15339, 10301, 15367, 43425, // alpha = 0.1111111 + 15336, 10346, 15366, 43483, // alpha = 0.1219451 + 15333, 10392, 15366, 43541, // alpha = 0.1332829 + 15331, 10437, 15365, 43597, // alpha = 0.1451247 + 15328, 10481, 15365, 43650, // alpha = 0.1574704 + 15325, 10526, 15364, 43702, // alpha = 0.17032 + 15322, 10569, 15364, 43751, // alpha = 0.1836735 + 15319, 10613, 15363, 43798, // alpha = 0.1975309 + 15317, 10656, 15363, 43849, // alpha = 0.2118922 + 15314, 10698, 15362, 43895, // alpha = 0.2267574 + 15311, 10741, 15362, 43944, // alpha = 0.2421265 + 15309, 10783, 15361, 43990, // alpha = 0.2579995 + 15306, 10824, 15361, 44035, // alpha = 0.2743765 + 15304, 10865, 15360, 44058, // alpha = 0.2912573 + 15302, 10906, 15359, 44081, // alpha = 0.308642 + 15299, 10947, 15358, 44105, // alpha = 0.3265306 + 15297, 10987, 15357, 44128, // alpha = 0.3449232 + 15295, 11027, 15356, 44152, // alpha = 0.3638196 + 15292, 11066, 15355, 44174, // alpha = 0.38322 + 15290, 11105, 15354, 44197, // alpha = 0.4031242 + 15288, 11144, 15353, 44219, // alpha = 0.4235324 + 15286, 11183, 15352, 44241, // alpha = 0.4444445 + 15283, 11221, 15351, 44263, // alpha = 0.4658605 + 15282, 11259, 15350, 44284, // alpha = 0.4877803 + 15279, 11281, 15349, 44306, // alpha = 0.5102041 + 15277, 11299, 15348, 44327, // alpha = 0.5331318 + 15275, 11318, 15347, 44349, // alpha = 0.5565634 + 15273, 11336, 15345, 44369, // alpha = 0.5804989 + 15271, 11355, 15345, 44389, // alpha = 0.6049383 + 15269, 11373, 15343, 44411, // alpha = 0.6298816 + 15267, 11391, 15342, 44431, // alpha = 0.6553288 + 15265, 11409, 15341, 44452, // alpha = 0.68128 + 15263, 11427, 15340, 44472, // alpha = 0.7077349 + 15261, 11444, 15339, 44491, // alpha = 0.7346939 + 15259, 11462, 15338, 44511, // alpha = 0.7621567 + 15257, 11480, 15337, 44531, // alpha = 0.7901235 + 15255, 11497, 15336, 44551, // alpha = 0.8185941 + 15253, 11514, 15335, 44568, // alpha = 0.8475687 + 15251, 11531, 15334, 44590, // alpha = 0.8770471 + 15249, 11548, 15333, 44607, // alpha = 0.9070295 + 15247, 11565, 15331, 44627, // alpha = 0.9375157 + 15246, 11582, 15330, 44646, // alpha = 0.9685059 + 15243, 11599, 15329, 44665, // alpha = 1 + + // Cos (theta) = 0.1524313 + 15375, 7663, 15379, 40965, // alpha = 0.001 + 15375, 7663, 15379, 40965, // alpha = 0.001 + 15375, 7663, 15379, 40965, // alpha = 0.001007811 + 15375, 7759, 15378, 41029, // alpha = 0.002267574 + 15373, 8236, 15378, 41381, // alpha = 0.004031243 + 15371, 8493, 15377, 41726, // alpha = 0.006298816 + 15369, 8746, 15376, 42025, // alpha = 0.009070295 + 15368, 8995, 15376, 42188, // alpha = 0.01234568 + 15366, 9228, 15375, 42355, // alpha = 0.01612497 + 15365, 9349, 15375, 42516, // alpha = 0.02040816 + 15363, 9468, 15374, 42673, // alpha = 0.02519527 + 15362, 9585, 15373, 42833, // alpha = 0.03048627 + 15360, 9701, 15373, 42988, // alpha = 0.03628118 + 15358, 9816, 15372, 43074, // alpha = 0.04258 + 15355, 9928, 15371, 43150, // alpha = 0.04938272 + 15352, 10039, 15371, 43224, // alpha = 0.05668934 + 15349, 10149, 15370, 43297, // alpha = 0.06449988 + 15346, 10249, 15369, 43369, // alpha = 0.07281432 + 15343, 10302, 15369, 43441, // alpha = 0.08163266 + 15340, 10355, 15368, 43511, // alpha = 0.09095491 + 15337, 10407, 15368, 43581, // alpha = 0.1007811 + 15334, 10459, 15367, 43648, // alpha = 0.1111111 + 15331, 10509, 15367, 43713, // alpha = 0.1219451 + 15328, 10560, 15366, 43777, // alpha = 0.1332829 + 15325, 10609, 15365, 43839, // alpha = 0.1451247 + 15322, 10659, 15365, 43898, // alpha = 0.1574704 + 15319, 10707, 15364, 43957, // alpha = 0.17032 + 15316, 10755, 15364, 44012, // alpha = 0.1836735 + 15313, 10803, 15364, 44049, // alpha = 0.1975309 + 15310, 10850, 15363, 44075, // alpha = 0.2118922 + 15307, 10896, 15363, 44102, // alpha = 0.2267574 + 15305, 10942, 15362, 44127, // alpha = 0.2421265 + 15302, 10987, 15362, 44153, // alpha = 0.2579995 + 15299, 11032, 15361, 44179, // alpha = 0.2743765 + 15297, 11077, 15361, 44205, // alpha = 0.2912573 + 15294, 11121, 15360, 44229, // alpha = 0.308642 + 15292, 11165, 15360, 44254, // alpha = 0.3265306 + 15289, 11208, 15359, 44279, // alpha = 0.3449232 + 15287, 11251, 15358, 44303, // alpha = 0.3638196 + 15284, 11279, 15357, 44329, // alpha = 0.38322 + 15282, 11300, 15356, 44353, // alpha = 0.4031242 + 15280, 11320, 15355, 44376, // alpha = 0.4235324 + 15278, 11341, 15354, 44399, // alpha = 0.4444445 + 15275, 11361, 15353, 44424, // alpha = 0.4658605 + 15273, 11382, 15352, 44447, // alpha = 0.4877803 + 15271, 11402, 15351, 44469, // alpha = 0.5102041 + 15269, 11422, 15350, 44493, // alpha = 0.5331318 + 15267, 11441, 15349, 44514, // alpha = 0.5565634 + 15265, 11461, 15348, 44536, // alpha = 0.5804989 + 15263, 11480, 15347, 44560, // alpha = 0.6049383 + 15261, 11499, 15346, 44581, // alpha = 0.6298816 + 15259, 11518, 15345, 44604, // alpha = 0.6553288 + 15257, 11537, 15344, 44625, // alpha = 0.68128 + 15255, 11556, 15343, 44645, // alpha = 0.7077349 + 15253, 11575, 15342, 44666, // alpha = 0.7346939 + 15251, 11593, 15341, 44686, // alpha = 0.7621567 + 15249, 11611, 15339, 44707, // alpha = 0.7901235 + 15247, 11630, 15338, 44727, // alpha = 0.8185941 + 15246, 11648, 15338, 44749, // alpha = 0.8475687 + 15244, 11666, 15337, 44768, // alpha = 0.8770471 + 15242, 11683, 15336, 44789, // alpha = 0.9070295 + 15241, 11701, 15335, 44807, // alpha = 0.9375157 + 15239, 11718, 15334, 44828, // alpha = 0.9685059 + 15237, 11736, 15333, 44847, // alpha = 1 + + // Cos (theta) = 0.1229529 + 15374, 7947, 15378, 41164, // alpha = 0.001 + 15374, 7947, 15378, 41164, // alpha = 0.001 + 15374, 7947, 15378, 41164, // alpha = 0.001007811 + 15374, 8061, 15378, 41244, // alpha = 0.002267574 + 15372, 8433, 15378, 41658, // alpha = 0.004031243 + 15370, 8733, 15377, 42024, // alpha = 0.006298816 + 15368, 9028, 15376, 42226, // alpha = 0.009070295 + 15366, 9266, 15376, 42416, // alpha = 0.01234568 + 15364, 9408, 15375, 42609, // alpha = 0.01612497 + 15363, 9547, 15375, 42798, // alpha = 0.02040816 + 15361, 9683, 15374, 42982, // alpha = 0.02519527 + 15359, 9818, 15373, 43087, // alpha = 0.03048627 + 15356, 9949, 15373, 43176, // alpha = 0.03628118 + 15353, 10079, 15372, 43262, // alpha = 0.04258 + 15350, 10206, 15371, 43347, // alpha = 0.04938272 + 15347, 10286, 15371, 43432, // alpha = 0.05668934 + 15344, 10347, 15370, 43513, // alpha = 0.06449988 + 15340, 10408, 15370, 43595, // alpha = 0.07281432 + 15337, 10467, 15369, 43674, // alpha = 0.08163266 + 15334, 10526, 15368, 43753, // alpha = 0.09095491 + 15331, 10584, 15368, 43829, // alpha = 0.1007811 + 15327, 10641, 15367, 43903, // alpha = 0.1111111 + 15324, 10697, 15367, 43976, // alpha = 0.1219451 + 15321, 10752, 15366, 44039, // alpha = 0.1332829 + 15318, 10806, 15366, 44073, // alpha = 0.1451247 + 15315, 10860, 15365, 44106, // alpha = 0.1574704 + 15312, 10913, 15365, 44138, // alpha = 0.17032 + 15309, 10965, 15364, 44170, // alpha = 0.1836735 + 15306, 11016, 15364, 44199, // alpha = 0.1975309 + 15303, 11067, 15364, 44228, // alpha = 0.2118922 + 15300, 11117, 15363, 44256, // alpha = 0.2267574 + 15297, 11167, 15363, 44284, // alpha = 0.2421265 + 15294, 11216, 15362, 44311, // alpha = 0.2579995 + 15292, 11264, 15362, 44339, // alpha = 0.2743765 + 15289, 11288, 15362, 44365, // alpha = 0.2912573 + 15286, 11311, 15361, 44392, // alpha = 0.308642 + 15284, 11335, 15361, 44420, // alpha = 0.3265306 + 15281, 11358, 15360, 44446, // alpha = 0.3449232 + 15279, 11380, 15360, 44472, // alpha = 0.3638196 + 15276, 11403, 15359, 44497, // alpha = 0.38322 + 15274, 11425, 15358, 44523, // alpha = 0.4031242 + 15271, 11447, 15357, 44548, // alpha = 0.4235324 + 15269, 11469, 15356, 44573, // alpha = 0.4444445 + 15267, 11490, 15355, 44598, // alpha = 0.4658605 + 15265, 11511, 15354, 44622, // alpha = 0.4877803 + 15262, 11532, 15353, 44646, // alpha = 0.5102041 + 15261, 11553, 15352, 44671, // alpha = 0.5331318 + 15259, 11574, 15351, 44694, // alpha = 0.5565634 + 15257, 11594, 15350, 44716, // alpha = 0.5804989 + 15255, 11614, 15349, 44740, // alpha = 0.6049383 + 15253, 11634, 15349, 44762, // alpha = 0.6298816 + 15251, 11654, 15348, 44786, // alpha = 0.6553288 + 15249, 11674, 15347, 44807, // alpha = 0.68128 + 15247, 11693, 15345, 44830, // alpha = 0.7077349 + 15246, 11713, 15345, 44851, // alpha = 0.7346939 + 15244, 11732, 15344, 44873, // alpha = 0.7621567 + 15242, 11751, 15343, 44895, // alpha = 0.7901235 + 15240, 11769, 15342, 44914, // alpha = 0.8185941 + 15239, 11788, 15341, 44936, // alpha = 0.8475687 + 15237, 11806, 15340, 44957, // alpha = 0.8770471 + 15236, 11825, 15339, 44979, // alpha = 0.9070295 + 15234, 11843, 15338, 44997, // alpha = 0.9375157 + 15233, 11861, 15337, 45020, // alpha = 0.9685059 + 15232, 11878, 15336, 45040, // alpha = 1 + + // Cos (theta) = 0.09297051 + 15373, 8248, 15378, 41427, // alpha = 0.001 + 15373, 8248, 15378, 41427, // alpha = 0.001 + 15373, 8248, 15378, 41427, // alpha = 0.001007811 + 15373, 8315, 15378, 41513, // alpha = 0.002267574 + 15370, 8677, 15378, 41997, // alpha = 0.004031243 + 15368, 9030, 15377, 42235, // alpha = 0.006298816 + 15366, 9295, 15376, 42473, // alpha = 0.009070295 + 15364, 9463, 15376, 42699, // alpha = 0.01234568 + 15362, 9627, 15375, 42925, // alpha = 0.01612497 + 15360, 9787, 15375, 43074, // alpha = 0.02040816 + 15357, 9943, 15374, 43180, // alpha = 0.02519527 + 15354, 10096, 15373, 43285, // alpha = 0.03048627 + 15351, 10243, 15373, 43385, // alpha = 0.03628118 + 15347, 10316, 15372, 43483, // alpha = 0.04258 + 15344, 10387, 15371, 43580, // alpha = 0.04938272 + 15341, 10457, 15371, 43674, // alpha = 0.05668934 + 15337, 10526, 15370, 43767, // alpha = 0.06449988 + 15334, 10593, 15370, 43856, // alpha = 0.07281432 + 15330, 10659, 15369, 43945, // alpha = 0.08163266 + 15327, 10724, 15369, 44030, // alpha = 0.09095491 + 15324, 10787, 15368, 44072, // alpha = 0.1007811 + 15320, 10850, 15367, 44113, // alpha = 0.1111111 + 15317, 10911, 15367, 44152, // alpha = 0.1219451 + 15314, 10971, 15366, 44191, // alpha = 0.1332829 + 15311, 11030, 15366, 44228, // alpha = 0.1451247 + 15307, 11088, 15366, 44265, // alpha = 0.1574704 + 15304, 11145, 15365, 44300, // alpha = 0.17032 + 15301, 11201, 15365, 44334, // alpha = 0.1836735 + 15298, 11256, 15364, 44365, // alpha = 0.1975309 + 15295, 11287, 15364, 44397, // alpha = 0.2118922 + 15292, 11314, 15364, 44428, // alpha = 0.2267574 + 15289, 11340, 15363, 44457, // alpha = 0.2421265 + 15286, 11366, 15363, 44486, // alpha = 0.2579995 + 15283, 11392, 15363, 44516, // alpha = 0.2743765 + 15281, 11417, 15362, 44543, // alpha = 0.2912573 + 15278, 11441, 15362, 44572, // alpha = 0.308642 + 15275, 11466, 15361, 44598, // alpha = 0.3265306 + 15273, 11490, 15361, 44626, // alpha = 0.3449232 + 15271, 11514, 15361, 44655, // alpha = 0.3638196 + 15268, 11537, 15360, 44682, // alpha = 0.38322 + 15266, 11560, 15360, 44706, // alpha = 0.4031242 + 15263, 11583, 15359, 44734, // alpha = 0.4235324 + 15261, 11606, 15358, 44759, // alpha = 0.4444445 + 15259, 11628, 15357, 44785, // alpha = 0.4658605 + 15257, 11650, 15356, 44810, // alpha = 0.4877803 + 15255, 11672, 15355, 44836, // alpha = 0.5102041 + 15253, 11693, 15355, 44859, // alpha = 0.5331318 + 15251, 11714, 15354, 44882, // alpha = 0.5565634 + 15249, 11735, 15353, 44906, // alpha = 0.5804989 + 15247, 11756, 15352, 44931, // alpha = 0.6049383 + 15245, 11776, 15351, 44953, // alpha = 0.6298816 + 15244, 11797, 15350, 44979, // alpha = 0.6553288 + 15242, 11817, 15350, 45000, // alpha = 0.68128 + 15241, 11837, 15349, 45023, // alpha = 0.7077349 + 15239, 11856, 15347, 45047, // alpha = 0.7346939 + 15238, 11876, 15346, 45062, // alpha = 0.7621567 + 15237, 11895, 15346, 45074, // alpha = 0.7901235 + 15235, 11914, 15345, 45084, // alpha = 0.8185941 + 15234, 11933, 15344, 45094, // alpha = 0.8475687 + 15233, 11951, 15343, 45106, // alpha = 0.8770471 + 15232, 11970, 15342, 45117, // alpha = 0.9070295 + 15231, 11988, 15342, 45129, // alpha = 0.9375157 + 15230, 12006, 15341, 45138, // alpha = 0.9685059 + 15229, 12024, 15340, 45150, // alpha = 1 + + // Cos (theta) = 0.06248425 + 15372, 8476, 15378, 41737, // alpha = 0.001 + 15372, 8476, 15378, 41737, // alpha = 0.001 + 15372, 8476, 15378, 41737, // alpha = 0.001007811 + 15371, 8557, 15378, 41855, // alpha = 0.002267574 + 15369, 8988, 15378, 42213, // alpha = 0.004031243 + 15366, 9310, 15377, 42502, // alpha = 0.006298816 + 15364, 9512, 15376, 42779, // alpha = 0.009070295 + 15362, 9708, 15376, 43027, // alpha = 0.01234568 + 15359, 9897, 15375, 43156, // alpha = 0.01612497 + 15355, 10081, 15375, 43284, // alpha = 0.02040816 + 15352, 10250, 15374, 43404, // alpha = 0.02519527 + 15348, 10337, 15373, 43522, // alpha = 0.03048627 + 15344, 10421, 15373, 43637, // alpha = 0.03628118 + 15341, 10503, 15372, 43749, // alpha = 0.04258 + 15337, 10583, 15371, 43856, // alpha = 0.04938272 + 15333, 10661, 15371, 43960, // alpha = 0.05668934 + 15330, 10737, 15370, 44047, // alpha = 0.06449988 + 15326, 10811, 15370, 44096, // alpha = 0.07281432 + 15323, 10883, 15369, 44144, // alpha = 0.08163266 + 15319, 10954, 15369, 44190, // alpha = 0.09095491 + 15316, 11022, 15368, 44235, // alpha = 0.1007811 + 15312, 11090, 15368, 44280, // alpha = 0.1111111 + 15309, 11156, 15367, 44322, // alpha = 0.1219451 + 15305, 11220, 15367, 44363, // alpha = 0.1332829 + 15302, 11274, 15366, 44404, // alpha = 0.1451247 + 15299, 11304, 15366, 44442, // alpha = 0.1574704 + 15296, 11335, 15365, 44480, // alpha = 0.17032 + 15293, 11364, 15365, 44516, // alpha = 0.1836735 + 15290, 11393, 15365, 44552, // alpha = 0.1975309 + 15287, 11422, 15364, 44585, // alpha = 0.2118922 + 15284, 11450, 15364, 44617, // alpha = 0.2267574 + 15281, 11478, 15364, 44651, // alpha = 0.2421265 + 15278, 11505, 15363, 44680, // alpha = 0.2579995 + 15275, 11531, 15363, 44710, // alpha = 0.2743765 + 15273, 11557, 15363, 44740, // alpha = 0.2912573 + 15270, 11583, 15362, 44769, // alpha = 0.308642 + 15267, 11608, 15362, 44797, // alpha = 0.3265306 + 15265, 11633, 15362, 44825, // alpha = 0.3449232 + 15263, 11657, 15361, 44853, // alpha = 0.3638196 + 15260, 11681, 15361, 44881, // alpha = 0.38322 + 15258, 11705, 15361, 44908, // alpha = 0.4031242 + 15256, 11728, 15360, 44935, // alpha = 0.4235324 + 15254, 11751, 15360, 44959, // alpha = 0.4444445 + 15252, 11774, 15359, 44986, // alpha = 0.4658605 + 15250, 11796, 15358, 45007, // alpha = 0.4877803 + 15248, 11818, 15357, 45036, // alpha = 0.5102041 + 15246, 11840, 15356, 45058, // alpha = 0.5331318 + 15245, 11861, 15356, 45071, // alpha = 0.5565634 + 15244, 11882, 15355, 45083, // alpha = 0.5804989 + 15242, 11903, 15354, 45094, // alpha = 0.6049383 + 15240, 11924, 15353, 45107, // alpha = 0.6298816 + 15239, 11944, 15353, 45118, // alpha = 0.6553288 + 15237, 11964, 15352, 45131, // alpha = 0.68128 + 15236, 11984, 15351, 45144, // alpha = 0.7077349 + 15235, 12004, 15350, 45155, // alpha = 0.7346939 + 15235, 12023, 15350, 45166, // alpha = 0.7621567 + 15234, 12042, 15349, 45177, // alpha = 0.7901235 + 15233, 12061, 15348, 45187, // alpha = 0.8185941 + 15232, 12080, 15347, 45201, // alpha = 0.8475687 + 15232, 12099, 15346, 45211, // alpha = 0.8770471 + 15232, 12117, 15346, 45224, // alpha = 0.9070295 + 15231, 12135, 15345, 45233, // alpha = 0.9375157 + 15231, 12153, 15345, 45244, // alpha = 0.9685059 + 15231, 12171, 15344, 45257, // alpha = 1 + + // Cos (theta) = 0.03149408 + 15370, 8777, 15378, 42073, // alpha = 0.001 + 15370, 8777, 15378, 42073, // alpha = 0.001 + 15370, 8777, 15378, 42073, // alpha = 0.001007811 + 15369, 8874, 15378, 42142, // alpha = 0.002267574 + 15366, 9304, 15378, 42497, // alpha = 0.004031243 + 15363, 9552, 15377, 42844, // alpha = 0.006298816 + 15361, 9790, 15376, 43088, // alpha = 0.009070295 + 15357, 10018, 15376, 43246, // alpha = 0.01234568 + 15353, 10238, 15375, 43395, // alpha = 0.01612497 + 15348, 10344, 15374, 43541, // alpha = 0.02040816 + 15344, 10446, 15374, 43680, // alpha = 0.02519527 + 15340, 10544, 15373, 43814, // alpha = 0.03048627 + 15336, 10638, 15373, 43942, // alpha = 0.03628118 + 15332, 10730, 15372, 44048, // alpha = 0.04258 + 15328, 10818, 15371, 44107, // alpha = 0.04938272 + 15324, 10904, 15371, 44166, // alpha = 0.05668934 + 15321, 10987, 15370, 44221, // alpha = 0.06449988 + 15317, 11067, 15370, 44274, // alpha = 0.07281432 + 15313, 11145, 15369, 44325, // alpha = 0.08163266 + 15310, 11221, 15369, 44375, // alpha = 0.09095491 + 15306, 11279, 15368, 44423, // alpha = 0.1007811 + 15303, 11315, 15368, 44470, // alpha = 0.1111111 + 15299, 11350, 15367, 44515, // alpha = 0.1219451 + 15296, 11384, 15367, 44559, // alpha = 0.1332829 + 15293, 11417, 15366, 44602, // alpha = 0.1451247 + 15290, 11449, 15366, 44641, // alpha = 0.1574704 + 15287, 11481, 15366, 44681, // alpha = 0.17032 + 15284, 11512, 15365, 44719, // alpha = 0.1836735 + 15281, 11542, 15365, 44755, // alpha = 0.1975309 + 15278, 11571, 15365, 44791, // alpha = 0.2118922 + 15275, 11600, 15364, 44827, // alpha = 0.2267574 + 15273, 11628, 15364, 44861, // alpha = 0.2421265 + 15270, 11655, 15364, 44893, // alpha = 0.2579995 + 15267, 11682, 15363, 44924, // alpha = 0.2743765 + 15265, 11709, 15363, 44953, // alpha = 0.2912573 + 15262, 11735, 15363, 44985, // alpha = 0.308642 + 15260, 11760, 15362, 45013, // alpha = 0.3265306 + 15258, 11785, 15362, 45039, // alpha = 0.3449232 + 15256, 11810, 15362, 45061, // alpha = 0.3638196 + 15253, 11834, 15361, 45075, // alpha = 0.38322 + 15251, 11858, 15361, 45089, // alpha = 0.4031242 + 15250, 11881, 15361, 45102, // alpha = 0.4235324 + 15248, 11904, 15361, 45114, // alpha = 0.4444445 + 15246, 11926, 15360, 45128, // alpha = 0.4658605 + 15245, 11948, 15360, 45141, // alpha = 0.4877803 + 15243, 11970, 15359, 45153, // alpha = 0.5102041 + 15242, 11992, 15358, 45167, // alpha = 0.5331318 + 15240, 12013, 15358, 45178, // alpha = 0.5565634 + 15239, 12034, 15357, 45190, // alpha = 0.5804989 + 15238, 12054, 15357, 45204, // alpha = 0.6049383 + 15237, 12074, 15355, 45215, // alpha = 0.6298816 + 15237, 12094, 15355, 45228, // alpha = 0.6553288 + 15236, 12114, 15354, 45240, // alpha = 0.68128 + 15236, 12134, 15353, 45253, // alpha = 0.7077349 + 15235, 12153, 15353, 45262, // alpha = 0.7346939 + 15235, 12172, 15352, 45276, // alpha = 0.7621567 + 15225, 12190, 15350, 45276, // alpha = 0.7901235 + 15224, 12209, 15349, 45287, // alpha = 0.8185941 + 15223, 12227, 15348, 45302, // alpha = 0.8475687 + 15222, 12245, 15347, 45310, // alpha = 0.8770471 + 15212, 12263, 15346, 45311, // alpha = 0.9070295 + 15211, 12281, 15344, 45320, // alpha = 0.9375157 + 15210, 12293, 15343, 45330, // alpha = 0.9685059 + 15208, 12302, 15343, 45340, // alpha = 1 + + // Cos (theta) = 0.0003754022 + 15368, 9186, 15378, 42359, // alpha = 0.001 + 15368, 9186, 15378, 42359, // alpha = 0.001 + 15368, 9186, 15378, 42359, // alpha = 0.001007811 + 15367, 9260, 15378, 42441, // alpha = 0.002267574 + 15363, 9574, 15377, 42877, // alpha = 0.004031243 + 15360, 9871, 15377, 43148, // alpha = 0.006298816 + 15355, 10152, 15376, 43342, // alpha = 0.009070295 + 15350, 10329, 15376, 43524, // alpha = 0.01234568 + 15344, 10455, 15375, 43700, // alpha = 0.01612497 + 15340, 10575, 15374, 43865, // alpha = 0.02040816 + 15335, 10690, 15374, 44021, // alpha = 0.02519527 + 15331, 10799, 15373, 44100, // alpha = 0.03048627 + 15326, 10904, 15373, 44172, // alpha = 0.03628118 + 15322, 11004, 15372, 44239, // alpha = 0.04258 + 15318, 11100, 15371, 44303, // alpha = 0.04938272 + 15314, 11193, 15371, 44366, // alpha = 0.05668934 + 15310, 11273, 15370, 44424, // alpha = 0.06449988 + 15307, 11315, 15370, 44481, // alpha = 0.07281432 + 15303, 11357, 15369, 44536, // alpha = 0.08163266 + 15300, 11397, 15369, 44586, // alpha = 0.09095491 + 15296, 11435, 15369, 44637, // alpha = 0.1007811 + 15293, 11472, 15368, 44685, // alpha = 0.1111111 + 15289, 11508, 15368, 44731, // alpha = 0.1219451 + 15286, 11543, 15367, 44776, // alpha = 0.1332829 + 15283, 11577, 15367, 44820, // alpha = 0.1451247 + 15280, 11610, 15367, 44863, // alpha = 0.1574704 + 15277, 11642, 15366, 44900, // alpha = 0.17032 + 15275, 11673, 15366, 44941, // alpha = 0.1836735 + 15272, 11703, 15365, 44978, // alpha = 0.1975309 + 15269, 11733, 15365, 45015, // alpha = 0.2118922 + 15267, 11761, 15365, 45050, // alpha = 0.2267574 + 15264, 11789, 15364, 45069, // alpha = 0.2421265 + 15262, 11817, 15364, 45086, // alpha = 0.2579995 + 15260, 11844, 15364, 45102, // alpha = 0.2743765 + 15258, 11870, 15363, 45117, // alpha = 0.2912573 + 15256, 11895, 15363, 45134, // alpha = 0.308642 + 15254, 11920, 15363, 45146, // alpha = 0.3265306 + 15252, 11945, 15362, 45161, // alpha = 0.3449232 + 15250, 11969, 15362, 45175, // alpha = 0.3638196 + 15248, 11992, 15362, 45190, // alpha = 0.38322 + 15247, 12015, 15361, 45203, // alpha = 0.4031242 + 15245, 12038, 15361, 45218, // alpha = 0.4235324 + 15244, 12060, 15361, 45227, // alpha = 0.4444445 + 15243, 12082, 15361, 45242, // alpha = 0.4658605 + 15242, 12103, 15360, 45256, // alpha = 0.4877803 + 15241, 12124, 15360, 45268, // alpha = 0.5102041 + 15241, 12145, 15359, 45280, // alpha = 0.5331318 + 15240, 12165, 15359, 45292, // alpha = 0.5565634 + 15239, 12185, 15359, 45304, // alpha = 0.5804989 + 15229, 12205, 15357, 45304, // alpha = 0.6049383 + 15228, 12224, 15356, 45317, // alpha = 0.6298816 + 15227, 12243, 15355, 45329, // alpha = 0.6553288 + 15217, 12262, 15354, 45330, // alpha = 0.68128 + 15215, 12281, 15353, 45339, // alpha = 0.7077349 + 15214, 12294, 15352, 45349, // alpha = 0.7346939 + 15213, 12303, 15351, 45359, // alpha = 0.7621567 + 15212, 12312, 15350, 45373, // alpha = 0.7901235 + 15210, 12320, 15351, 45380, // alpha = 0.8185941 + 15209, 12329, 15350, 45389, // alpha = 0.8475687 + 15208, 12338, 15349, 45398, // alpha = 0.8770471 + 15198, 12346, 15346, 45400, // alpha = 0.9070295 + 15196, 12354, 15346, 45407, // alpha = 0.9375157 + 15195, 12363, 15345, 45417, // alpha = 0.9685059 + 15193, 12371, 15345, 45424, // alpha = 1 + }; + + // NOTE: Formerly, we needed to also export and create a table for the BRDF's amplitude factor + fresnel coefficient + // but it turns out these 2 factors are actually already precomputed and available in the FGD table corresponding + // to the BRDF_Disney BRDF, therefore they are no longer exported... + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Disney.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Disney.cs.meta new file mode 100644 index 00000000..96aefda5 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Disney.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: eb7356e92da7a6f45945e956f9059704 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Disney.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_GGX.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_GGX.cs new file mode 100644 index 00000000..acf6f862 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_GGX.cs @@ -0,0 +1,4248 @@ +using UnityEngine; +using System; + +namespace BadDog.Rendering.AreaLight +{ + public partial class LTCAreaLight + { + // [GENERATED CONTENT 31 10月 2025 11:27:51] + // Table contains 3x3 matrix coefficients of M^-1 for the fitting of the BRDF_GGX BRDF using the LTC technique + // Only the 0,2,4,6 of the 3x3 coefficients are emitted, and they are encoded into FP16 + // From "Real-Time Polygonal-Light Shading with Linearly Transformed Cosines" 2016 (https://eheitzresearch.wordpress.com/415-2/) + // + // The table is accessed via LTCAreaLight.s_LtcMatrixData_BRDF_GGX[ + 64 * ] // Theta values are along the Y axis, Roughness values are along the X axis + // • roughness = ( / 63 )^2 (the table is indexed by perceptual roughness) + // • cosTheta = 1 - ( / 63 )^2 + // + public static ushort[] s_LtcMatrixData_BRDF_GGX = new ushort[64 * 64 * 4] + { + // Cos (theta) = 1 + 24528, 0, 24528, 0, // alpha = 0.001 + 24528, 0, 24528, 0, // alpha = 0.001 + 24512, 0, 24512, 0, // alpha = 0.001007811 + 23268, 0, 23268, 0, // alpha = 0.002267574 + 22464, 0, 22464, 0, // alpha = 0.004031243 + 21750, 0, 21750, 0, // alpha = 0.006298816 + 21220, 0, 21220, 0, // alpha = 0.009070295 + 20752, 0, 20752, 0, // alpha = 0.01234568 + 20416, 0, 20416, 0, // alpha = 0.01612497 + 20000, 0, 20000, 0, // alpha = 0.02040816 + 19702, 0, 19702, 0, // alpha = 0.02519527 + 19481, 0, 19481, 0, // alpha = 0.03048627 + 19171, 0, 19171, 0, // alpha = 0.03628118 + 18910, 0, 18910, 0, // alpha = 0.04258 + 18703, 0, 18703, 0, // alpha = 0.04938272 + 18536, 0, 18536, 0, // alpha = 0.05668934 + 18366, 0, 18366, 0, // alpha = 0.06449988 + 18139, 0, 18139, 0, // alpha = 0.07281432 + 17949, 0, 17949, 0, // alpha = 0.08163266 + 17789, 0, 17789, 0, // alpha = 0.09095491 + 17652, 0, 17652, 0, // alpha = 0.1007811 + 17536, 0, 17536, 0, // alpha = 0.1111111 + 17442, 0, 17442, 0, // alpha = 0.1219451 + 17312, 0, 17312, 0, // alpha = 0.1332829 + 17152, 0, 17152, 0, // alpha = 0.1451247 + 17011, 0, 17011, 0, // alpha = 0.1574704 + 16886, 0, 16886, 0, // alpha = 0.17032 + 16777, 0, 16777, 0, // alpha = 0.1836735 + 16682, 0, 16682, 0, // alpha = 0.1975309 + 16600, 0, 16600, 0, // alpha = 0.2118922 + 16528, 0, 16528, 0, // alpha = 0.2267574 + 16456, 0, 16456, 0, // alpha = 0.2421265 + 16393, 0, 16393, 0, // alpha = 0.2579995 + 16292, 0, 16292, 0, // alpha = 0.2743765 + 16198, 0, 16198, 0, // alpha = 0.2912573 + 16102, 0, 16102, 0, // alpha = 0.308642 + 16018, 0, 16018, 0, // alpha = 0.3265306 + 15946, 0, 15946, 0, // alpha = 0.3449232 + 15876, 0, 15876, 0, // alpha = 0.3638196 + 15813, 0, 15813, 0, // alpha = 0.38322 + 15759, 0, 15759, 0, // alpha = 0.4031242 + 15706, 0, 15706, 0, // alpha = 0.4235324 + 15659, 0, 15659, 0, // alpha = 0.4444445 + 15616, 0, 15616, 0, // alpha = 0.4658605 + 15577, 0, 15577, 0, // alpha = 0.4877803 + 15542, 0, 15542, 0, // alpha = 0.5102041 + 15509, 0, 15509, 0, // alpha = 0.5331318 + 15480, 0, 15480, 0, // alpha = 0.5565634 + 15452, 0, 15452, 0, // alpha = 0.5804989 + 15428, 0, 15428, 0, // alpha = 0.6049383 + 15405, 0, 15405, 0, // alpha = 0.6298816 + 15385, 0, 15385, 0, // alpha = 0.6553288 + 15366, 0, 15366, 0, // alpha = 0.68128 + 15337, 0, 15337, 0, // alpha = 0.7077349 + 15306, 0, 15306, 0, // alpha = 0.7346939 + 15278, 0, 15278, 0, // alpha = 0.7621567 + 15252, 0, 15252, 0, // alpha = 0.7901235 + 15228, 0, 15228, 0, // alpha = 0.8185941 + 15207, 0, 15207, 0, // alpha = 0.8475687 + 15188, 0, 15188, 0, // alpha = 0.8770471 + 15171, 0, 15171, 0, // alpha = 0.9070295 + 15154, 0, 15154, 0, // alpha = 0.9375157 + 15141, 0, 15141, 0, // alpha = 0.9685059 + 15127, 0, 15127, 0, // alpha = 1 + + // Cos (theta) = 0.9997481 + 24528, 42431, 24529, 18845, // alpha = 0.001 + 24528, 42431, 24529, 18845, // alpha = 0.001 + 24512, 42431, 24513, 18834, // alpha = 0.001007811 + 23268, 42431, 23269, 17651, // alpha = 0.002267574 + 22464, 42431, 22465, 16786, // alpha = 0.004031243 + 21750, 42431, 21751, 16161, // alpha = 0.006298816 + 21220, 42431, 21221, 15603, // alpha = 0.009070295 + 20752, 42431, 20753, 15174, // alpha = 0.01234568 + 20416, 42431, 20417, 14738, // alpha = 0.01612497 + 20000, 42431, 20001, 14438, // alpha = 0.02040816 + 19702, 42431, 19702, 14113, // alpha = 0.02519527 + 19481, 42431, 19482, 13796, // alpha = 0.03048627 + 19171, 42431, 19172, 13555, // alpha = 0.03628118 + 18910, 42431, 18911, 13367, // alpha = 0.04258 + 18703, 42431, 18704, 13125, // alpha = 0.04938272 + 18536, 42431, 18536, 12885, // alpha = 0.05668934 + 18366, 42431, 18367, 12688, // alpha = 0.06449988 + 18139, 42431, 18140, 12525, // alpha = 0.07281432 + 17949, 42430, 17950, 12389, // alpha = 0.08163266 + 17789, 42428, 17789, 12258, // alpha = 0.09095491 + 17652, 42421, 17652, 12061, // alpha = 0.1007811 + 17536, 42387, 17536, 11893, // alpha = 0.1111111 + 17443, 42188, 17443, 11753, // alpha = 0.1219451 + 17312, 42428, 17313, 11642, // alpha = 0.1332829 + 17152, 42426, 17153, 11527, // alpha = 0.1451247 + 17011, 42421, 17012, 11425, // alpha = 0.1574704 + 16886, 42410, 16887, 11335, // alpha = 0.17032 + 16777, 42387, 16778, 11246, // alpha = 0.1836735 + 16682, 42334, 16682, 11102, // alpha = 0.1975309 + 16601, 42231, 16601, 10972, // alpha = 0.2118922 + 16528, 42386, 16529, 10884, // alpha = 0.2267574 + 16457, 42352, 16457, 10776, // alpha = 0.2421265 + 16393, 42295, 16394, 10676, // alpha = 0.2579995 + 16292, 42209, 16293, 10581, // alpha = 0.2743765 + 16196, 42211, 16197, 10509, // alpha = 0.2912573 + 16102, 42251, 16103, 10444, // alpha = 0.308642 + 16018, 42164, 16019, 10365, // alpha = 0.3265306 + 15946, 42070, 15946, 10293, // alpha = 0.3449232 + 15876, 42160, 15877, 10253, // alpha = 0.3638196 + 15813, 42057, 15814, 10124, // alpha = 0.38322 + 15758, 42013, 15759, 10013, // alpha = 0.4031242 + 15706, 42022, 15706, 9925, // alpha = 0.4235324 + 15659, 41812, 15660, 9789, // alpha = 0.4444445 + 15616, 41942, 15617, 9736, // alpha = 0.4658605 + 15577, 41689, 15577, 9607, // alpha = 0.4877803 + 15542, 41710, 15542, 9535, // alpha = 0.5102041 + 15509, 41526, 15509, 9429, // alpha = 0.5331318 + 15479, 41487, 15480, 9349, // alpha = 0.5565634 + 15452, 41336, 15452, 9251, // alpha = 0.5804989 + 15427, 41287, 15428, 9135, // alpha = 0.6049383 + 15405, 41125, 15405, 8940, // alpha = 0.6298816 + 15384, 41099, 15385, 8808, // alpha = 0.6553288 + 15365, 40841, 15366, 8608, // alpha = 0.68128 + 15337, 40872, 15337, 8502, // alpha = 0.7077349 + 15306, 40402, 15306, 8295, // alpha = 0.7346939 + 15278, 40501, 15278, 8215, // alpha = 0.7621567 + 15252, 40031, 15252, 7823, // alpha = 0.7901235 + 15228, 40104, 15229, 7667, // alpha = 0.8185941 + 15207, 39450, 15207, 7302, // alpha = 0.8475687 + 15188, 39415, 15188, 7048, // alpha = 0.8770471 + 15170, 38703, 15170, 6468, // alpha = 0.9070295 + 15154, 38313, 15155, 5970, // alpha = 0.9375157 + 15140, 37006, 15140, 4620, // alpha = 0.9685059 + 15127, 1, 15127, 32871, // alpha = 1 + + // Cos (theta) = 0.9989922 + 24528, 43456, 24532, 19870, // alpha = 0.001 + 24528, 43456, 24532, 19870, // alpha = 0.001 + 24513, 43456, 24517, 19859, // alpha = 0.001007811 + 23268, 43456, 23272, 18676, // alpha = 0.002267574 + 22464, 43456, 22468, 17811, // alpha = 0.004031243 + 21750, 43456, 21753, 17186, // alpha = 0.006298816 + 21220, 43456, 21224, 16628, // alpha = 0.009070295 + 20752, 43456, 20755, 16199, // alpha = 0.01234568 + 20416, 43456, 20420, 15762, // alpha = 0.01612497 + 20000, 43456, 20003, 15463, // alpha = 0.02040816 + 19702, 43456, 19704, 15138, // alpha = 0.02519527 + 19481, 43456, 19483, 14821, // alpha = 0.03048627 + 19171, 43456, 19175, 14580, // alpha = 0.03628118 + 18910, 43456, 18913, 14392, // alpha = 0.04258 + 18703, 43456, 18706, 14150, // alpha = 0.04938272 + 18536, 43456, 18538, 13910, // alpha = 0.05668934 + 18366, 43456, 18370, 13713, // alpha = 0.06449988 + 18139, 43456, 18143, 13550, // alpha = 0.07281432 + 17949, 43455, 17952, 13413, // alpha = 0.08163266 + 17789, 43453, 17791, 13283, // alpha = 0.09095491 + 17652, 43446, 17654, 13086, // alpha = 0.1007811 + 17536, 43409, 17538, 12918, // alpha = 0.1111111 + 17443, 43237, 17445, 12779, // alpha = 0.1219451 + 17312, 43453, 17316, 12667, // alpha = 0.1332829 + 17152, 43450, 17155, 12551, // alpha = 0.1451247 + 17011, 43445, 17014, 12450, // alpha = 0.1574704 + 16887, 43435, 16889, 12360, // alpha = 0.17032 + 16777, 43411, 16780, 12271, // alpha = 0.1836735 + 16682, 43357, 16684, 12127, // alpha = 0.1975309 + 16601, 43253, 16603, 11998, // alpha = 0.2118922 + 16528, 43361, 16530, 11903, // alpha = 0.2267574 + 16457, 43376, 16459, 11801, // alpha = 0.2421265 + 16393, 43319, 16395, 11701, // alpha = 0.2579995 + 16293, 43231, 16296, 11606, // alpha = 0.2743765 + 16195, 43239, 16198, 11533, // alpha = 0.2912573 + 16103, 43275, 16106, 11469, // alpha = 0.308642 + 16019, 43187, 16021, 11390, // alpha = 0.3265306 + 15945, 43134, 15947, 11323, // alpha = 0.3449232 + 15877, 43175, 15879, 11275, // alpha = 0.3638196 + 15814, 43080, 15816, 11147, // alpha = 0.38322 + 15757, 43048, 15759, 11041, // alpha = 0.4031242 + 15706, 43045, 15708, 10949, // alpha = 0.4235324 + 15659, 42899, 15661, 10827, // alpha = 0.4444445 + 15616, 42889, 15618, 10743, // alpha = 0.4658605 + 15577, 42734, 15578, 10634, // alpha = 0.4877803 + 15541, 42683, 15542, 10549, // alpha = 0.5102041 + 15508, 42563, 15510, 10452, // alpha = 0.5331318 + 15479, 42482, 15480, 10367, // alpha = 0.5565634 + 15452, 42378, 15453, 10278, // alpha = 0.5804989 + 15427, 42282, 15428, 10146, // alpha = 0.6049383 + 15404, 42184, 15406, 9981, // alpha = 0.6298816 + 15384, 42080, 15385, 9819, // alpha = 0.6553288 + 15365, 41985, 15366, 9659, // alpha = 0.68128 + 15336, 41768, 15338, 9500, // alpha = 0.7077349 + 15305, 41587, 15306, 9352, // alpha = 0.7346939 + 15277, 41360, 15278, 9181, // alpha = 0.7621567 + 15251, 41193, 15252, 8910, // alpha = 0.7901235 + 15228, 40963, 15229, 8615, // alpha = 0.8185941 + 15207, 40663, 15207, 8371, // alpha = 0.8475687 + 15188, 40242, 15188, 7995, // alpha = 0.8770471 + 15170, 39919, 15170, 7532, // alpha = 0.9070295 + 15154, 39179, 15155, 6870, // alpha = 0.9375157 + 15140, 38143, 15140, 5846, // alpha = 0.9685059 + 15128, 603, 15127, 33278, // alpha = 1 + + // Cos (theta) = 0.9977324 + 24528, 44113, 24537, 20535, // alpha = 0.001 + 24528, 44113, 24537, 20535, // alpha = 0.001 + 24512, 44113, 24522, 20527, // alpha = 0.001007811 + 23268, 44113, 23276, 19312, // alpha = 0.002267574 + 22464, 44113, 22474, 18479, // alpha = 0.004031243 + 21750, 44113, 21756, 17755, // alpha = 0.006298816 + 21220, 44113, 21228, 17264, // alpha = 0.009070295 + 20752, 44113, 20758, 16759, // alpha = 0.01234568 + 20416, 44113, 20425, 16431, // alpha = 0.01612497 + 20000, 44113, 20007, 16028, // alpha = 0.02040816 + 19702, 44113, 19708, 15707, // alpha = 0.02519527 + 19481, 44113, 19486, 15469, // alpha = 0.03048627 + 19171, 44113, 19179, 15215, // alpha = 0.03628118 + 18910, 44113, 18917, 14933, // alpha = 0.04258 + 18703, 44113, 18709, 14710, // alpha = 0.04938272 + 18536, 44113, 18541, 14529, // alpha = 0.05668934 + 18366, 44113, 18375, 14382, // alpha = 0.06449988 + 18139, 44113, 18147, 14183, // alpha = 0.07281432 + 17949, 44112, 17956, 13977, // alpha = 0.08163266 + 17789, 44111, 17795, 13804, // alpha = 0.09095491 + 17652, 44105, 17657, 13656, // alpha = 0.1007811 + 17536, 44074, 17541, 13530, // alpha = 0.1111111 + 17442, 43937, 17447, 13426, // alpha = 0.1219451 + 17311, 44099, 17320, 13340, // alpha = 0.1332829 + 17152, 44109, 17160, 13197, // alpha = 0.1451247 + 17011, 44105, 17018, 13044, // alpha = 0.1574704 + 16887, 44097, 16893, 12909, // alpha = 0.17032 + 16777, 44078, 16784, 12788, // alpha = 0.1836735 + 16682, 44036, 16688, 12681, // alpha = 0.1975309 + 16601, 43926, 16606, 12585, // alpha = 0.2118922 + 16526, 44022, 16531, 12509, // alpha = 0.2267574 + 16457, 44051, 16461, 12436, // alpha = 0.2421265 + 16394, 43984, 16398, 12360, // alpha = 0.2579995 + 16293, 43860, 16301, 12290, // alpha = 0.2743765 + 16194, 43872, 16201, 12181, // alpha = 0.2912573 + 16103, 43908, 16110, 12083, // alpha = 0.308642 + 16019, 43786, 16025, 11967, // alpha = 0.3265306 + 15944, 43734, 15950, 11869, // alpha = 0.3449232 + 15876, 43730, 15882, 11786, // alpha = 0.3638196 + 15814, 43640, 15819, 11693, // alpha = 0.38322 + 15757, 43588, 15761, 11610, // alpha = 0.4031242 + 15705, 43542, 15710, 11534, // alpha = 0.4235324 + 15658, 43467, 15662, 11455, // alpha = 0.4444445 + 15615, 43403, 15619, 11380, // alpha = 0.4658605 + 15576, 43348, 15580, 11310, // alpha = 0.4877803 + 15540, 43263, 15544, 11211, // alpha = 0.5102041 + 15508, 43205, 15511, 11080, // alpha = 0.5331318 + 15478, 43118, 15481, 10939, // alpha = 0.5565634 + 15451, 43055, 15454, 10812, // alpha = 0.5804989 + 15426, 42928, 15429, 10678, // alpha = 0.6049383 + 15403, 42800, 15406, 10560, // alpha = 0.6298816 + 15383, 42620, 15385, 10429, // alpha = 0.6553288 + 15364, 42500, 15366, 10316, // alpha = 0.68128 + 15335, 42321, 15338, 10149, // alpha = 0.7077349 + 15304, 42200, 15307, 9936, // alpha = 0.7346939 + 15276, 42028, 15278, 9703, // alpha = 0.7621567 + 15250, 41827, 15252, 9497, // alpha = 0.7901235 + 15227, 41500, 15229, 9284, // alpha = 0.8185941 + 15206, 41249, 15207, 8959, // alpha = 0.8475687 + 15187, 40943, 15188, 8565, // alpha = 0.8770471 + 15170, 40433, 15170, 8196, // alpha = 0.9070295 + 15154, 39843, 15154, 7478, // alpha = 0.9375157 + 15140, 38805, 15140, 6416, // alpha = 0.9685059 + 15127, 1311, 15127, 33591, // alpha = 1 + + // Cos (theta) = 0.9959688 + 24528, 44484, 24544, 20897, // alpha = 0.001 + 24528, 44484, 24544, 20897, // alpha = 0.001 + 24512, 44484, 24529, 20886, // alpha = 0.001007811 + 23268, 44484, 23282, 19703, // alpha = 0.002267574 + 22464, 44484, 22481, 18838, // alpha = 0.004031243 + 21750, 44484, 21760, 18214, // alpha = 0.006298816 + 21220, 44484, 21234, 17655, // alpha = 0.009070295 + 20752, 44484, 20762, 17227, // alpha = 0.01234568 + 20416, 44484, 20432, 16790, // alpha = 0.01612497 + 20000, 44484, 20013, 16490, // alpha = 0.02040816 + 19702, 44484, 19712, 16166, // alpha = 0.02519527 + 19481, 44484, 19490, 15848, // alpha = 0.03048627 + 19171, 44484, 19186, 15606, // alpha = 0.03628118 + 18910, 44483, 18922, 15418, // alpha = 0.04258 + 18703, 44483, 18714, 15178, // alpha = 0.04938272 + 18536, 44483, 18545, 14937, // alpha = 0.05668934 + 18366, 44483, 18382, 14740, // alpha = 0.06449988 + 18139, 44483, 18154, 14577, // alpha = 0.07281432 + 17949, 44482, 17962, 14440, // alpha = 0.08163266 + 17789, 44480, 17800, 14312, // alpha = 0.09095491 + 17652, 44471, 17662, 14115, // alpha = 0.1007811 + 17537, 44424, 17546, 13947, // alpha = 0.1111111 + 17442, 44342, 17450, 13807, // alpha = 0.1219451 + 17308, 44436, 17324, 13690, // alpha = 0.1332829 + 17152, 44477, 17166, 13578, // alpha = 0.1451247 + 17011, 44472, 17024, 13476, // alpha = 0.1574704 + 16887, 44460, 16899, 13386, // alpha = 0.17032 + 16778, 44434, 16789, 13300, // alpha = 0.1836735 + 16683, 44376, 16693, 13156, // alpha = 0.1975309 + 16600, 44326, 16609, 13029, // alpha = 0.2118922 + 16525, 44361, 16534, 12923, // alpha = 0.2267574 + 16457, 44398, 16465, 12828, // alpha = 0.2421265 + 16394, 44339, 16402, 12727, // alpha = 0.2579995 + 16293, 44277, 16307, 12636, // alpha = 0.2743765 + 16193, 44270, 16205, 12559, // alpha = 0.2912573 + 16102, 44270, 16114, 12490, // alpha = 0.308642 + 16020, 44218, 16031, 12418, // alpha = 0.3265306 + 15943, 44184, 15954, 12352, // alpha = 0.3449232 + 15875, 44156, 15885, 12292, // alpha = 0.3638196 + 15813, 44128, 15823, 12184, // alpha = 0.38322 + 15756, 44080, 15765, 12068, // alpha = 0.4031242 + 15705, 44037, 15713, 11961, // alpha = 0.4235324 + 15657, 43982, 15665, 11863, // alpha = 0.4444445 + 15614, 43863, 15621, 11758, // alpha = 0.4658605 + 15575, 43800, 15582, 11667, // alpha = 0.4877803 + 15539, 43685, 15546, 11568, // alpha = 0.5102041 + 15506, 43603, 15512, 11480, // alpha = 0.5331318 + 15477, 43501, 15482, 11389, // alpha = 0.5565634 + 15450, 43403, 15455, 11303, // alpha = 0.5804989 + 15425, 43309, 15430, 11171, // alpha = 0.6049383 + 15402, 43201, 15407, 11001, // alpha = 0.6298816 + 15382, 43110, 15386, 10841, // alpha = 0.6553288 + 15363, 42984, 15367, 10677, // alpha = 0.68128 + 15333, 42812, 15339, 10528, // alpha = 0.7077349 + 15302, 42578, 15307, 10368, // alpha = 0.7346939 + 15274, 42418, 15279, 10222, // alpha = 0.7621567 + 15249, 42190, 15252, 9921, // alpha = 0.7901235 + 15226, 42029, 15229, 9660, // alpha = 0.8185941 + 15205, 41650, 15207, 9378, // alpha = 0.8475687 + 15186, 41324, 15188, 9039, // alpha = 0.8770471 + 15169, 40907, 15170, 8535, // alpha = 0.9070295 + 15154, 40248, 15154, 7932, // alpha = 0.9375157 + 15140, 39150, 15140, 6828, // alpha = 0.9685059 + 15127, 945, 15127, 397, // alpha = 1 + + // Cos (theta) = 0.9937012 + 24528, 44856, 24553, 21260, // alpha = 0.001 + 24528, 44856, 24553, 21260, // alpha = 0.001 + 24513, 44856, 24538, 21246, // alpha = 0.001007811 + 23268, 44856, 23290, 20023, // alpha = 0.002267574 + 22464, 44856, 22490, 19198, // alpha = 0.004031243 + 21750, 44856, 21766, 18554, // alpha = 0.006298816 + 21220, 44856, 21242, 17975, // alpha = 0.009070295 + 20752, 44856, 20768, 17553, // alpha = 0.01234568 + 20416, 44856, 20442, 17150, // alpha = 0.01612497 + 20000, 44856, 20020, 16774, // alpha = 0.02040816 + 19702, 44856, 19718, 16506, // alpha = 0.02519527 + 19481, 44856, 19495, 16229, // alpha = 0.03048627 + 19171, 44856, 19194, 15927, // alpha = 0.03628118 + 18910, 44855, 18929, 15691, // alpha = 0.04258 + 18703, 44855, 18720, 15504, // alpha = 0.04938272 + 18536, 44855, 18550, 15347, // alpha = 0.05668934 + 18366, 44855, 18391, 15100, // alpha = 0.06449988 + 18139, 44854, 18162, 14896, // alpha = 0.07281432 + 17949, 44853, 17969, 14724, // alpha = 0.08163266 + 17789, 44850, 17806, 14579, // alpha = 0.09095491 + 17652, 44838, 17668, 14456, // alpha = 0.1007811 + 17538, 44767, 17552, 14351, // alpha = 0.1111111 + 17441, 44704, 17454, 14190, // alpha = 0.1219451 + 17305, 44777, 17330, 14040, // alpha = 0.1332829 + 17152, 44847, 17174, 13904, // alpha = 0.1451247 + 17011, 44840, 17032, 13776, // alpha = 0.1574704 + 16887, 44824, 16906, 13663, // alpha = 0.17032 + 16778, 44789, 16795, 13563, // alpha = 0.1836735 + 16684, 44713, 16699, 13473, // alpha = 0.1975309 + 16600, 44678, 16614, 13394, // alpha = 0.2118922 + 16524, 44697, 16538, 13326, // alpha = 0.2267574 + 16457, 44726, 16470, 13219, // alpha = 0.2421265 + 16395, 44668, 16406, 13096, // alpha = 0.2579995 + 16293, 44612, 16315, 12984, // alpha = 0.2743765 + 16192, 44590, 16212, 12885, // alpha = 0.2912573 + 16102, 44566, 16121, 12795, // alpha = 0.308642 + 16020, 44536, 16037, 12710, // alpha = 0.3265306 + 15943, 44485, 15959, 12626, // alpha = 0.3449232 + 15875, 44433, 15890, 12549, // alpha = 0.3638196 + 15813, 44407, 15827, 12479, // alpha = 0.38322 + 15756, 44349, 15769, 12408, // alpha = 0.4031242 + 15704, 44295, 15716, 12340, // alpha = 0.4235324 + 15657, 44253, 15668, 12269, // alpha = 0.4444445 + 15614, 44189, 15624, 12140, // alpha = 0.4658605 + 15574, 44135, 15584, 12022, // alpha = 0.4877803 + 15538, 44081, 15548, 11905, // alpha = 0.5102041 + 15506, 43997, 15514, 11786, // alpha = 0.5331318 + 15476, 43889, 15484, 11676, // alpha = 0.5565634 + 15449, 43749, 15456, 11565, // alpha = 0.5804989 + 15424, 43637, 15431, 11460, // alpha = 0.6049383 + 15401, 43500, 15408, 11354, // alpha = 0.6298816 + 15381, 43385, 15387, 11243, // alpha = 0.6553288 + 15362, 43252, 15367, 11043, // alpha = 0.68128 + 15331, 43131, 15340, 10851, // alpha = 0.7077349 + 15300, 43002, 15308, 10660, // alpha = 0.7346939 + 15273, 42752, 15279, 10476, // alpha = 0.7621567 + 15247, 42518, 15253, 10300, // alpha = 0.7901235 + 15225, 42269, 15229, 10009, // alpha = 0.8185941 + 15204, 42043, 15207, 9680, // alpha = 0.8475687 + 15186, 41630, 15188, 9358, // alpha = 0.8770471 + 15169, 41195, 15170, 8886, // alpha = 0.9070295 + 15153, 40547, 15154, 8277, // alpha = 0.9375157 + 15139, 39480, 15140, 7236, // alpha = 0.9685059 + 15127, 1641, 15127, 33869, // alpha = 1 + + // Cos (theta) = 0.9909297 + 24528, 45143, 24565, 21565, // alpha = 0.001 + 24528, 45143, 24565, 21565, // alpha = 0.001 + 24513, 45143, 24549, 21556, // alpha = 0.001007811 + 23268, 45143, 23300, 20346, // alpha = 0.002267574 + 22464, 45143, 22501, 19508, // alpha = 0.004031243 + 21750, 45143, 21773, 18786, // alpha = 0.006298816 + 21220, 45143, 21252, 18298, // alpha = 0.009070295 + 20752, 45143, 20776, 17790, // alpha = 0.01234568 + 20416, 45143, 20453, 17460, // alpha = 0.01612497 + 20000, 45143, 20029, 17061, // alpha = 0.02040816 + 19702, 45143, 19725, 16738, // alpha = 0.02519527 + 19481, 45143, 19501, 16498, // alpha = 0.03048627 + 19171, 45143, 19204, 16249, // alpha = 0.03628118 + 18910, 45143, 18938, 15966, // alpha = 0.04258 + 18703, 45143, 18727, 15741, // alpha = 0.04938272 + 18536, 45143, 18557, 15560, // alpha = 0.05668934 + 18366, 45142, 18403, 15411, // alpha = 0.06449988 + 18139, 45142, 18172, 15216, // alpha = 0.07281432 + 17949, 45141, 17978, 15010, // alpha = 0.08163266 + 17789, 45139, 17814, 14836, // alpha = 0.09095491 + 17652, 45131, 17675, 14687, // alpha = 0.1007811 + 17539, 45082, 17559, 14562, // alpha = 0.1111111 + 17441, 45063, 17459, 14455, // alpha = 0.1219451 + 17303, 45091, 17338, 14364, // alpha = 0.1332829 + 17153, 45137, 17184, 14231, // alpha = 0.1451247 + 17012, 45133, 17041, 14078, // alpha = 0.1574704 + 16888, 45123, 16914, 13942, // alpha = 0.17032 + 16779, 45100, 16804, 13821, // alpha = 0.1836735 + 16684, 45058, 16707, 13713, // alpha = 0.1975309 + 16599, 45032, 16620, 13618, // alpha = 0.2118922 + 16524, 45037, 16543, 13535, // alpha = 0.2267574 + 16456, 45048, 16475, 13461, // alpha = 0.2421265 + 16395, 45002, 16412, 13390, // alpha = 0.2579995 + 16293, 44950, 16324, 13323, // alpha = 0.2743765 + 16191, 44910, 16220, 13212, // alpha = 0.2912573 + 16101, 44864, 16128, 13102, // alpha = 0.308642 + 16019, 44845, 16044, 13002, // alpha = 0.3265306 + 15943, 44785, 15966, 12902, // alpha = 0.3449232 + 15874, 44720, 15896, 12806, // alpha = 0.3638196 + 15812, 44681, 15832, 12722, // alpha = 0.38322 + 15756, 44621, 15774, 12639, // alpha = 0.4031242 + 15703, 44555, 15721, 12557, // alpha = 0.4235324 + 15657, 44492, 15673, 12479, // alpha = 0.4444445 + 15613, 44434, 15628, 12406, // alpha = 0.4658605 + 15574, 44354, 15588, 12331, // alpha = 0.4877803 + 15538, 44295, 15551, 12235, // alpha = 0.5102041 + 15505, 44215, 15517, 12094, // alpha = 0.5331318 + 15475, 44146, 15486, 11960, // alpha = 0.5565634 + 15448, 44073, 15458, 11830, // alpha = 0.5804989 + 15423, 43958, 15432, 11701, // alpha = 0.6049383 + 15401, 43818, 15409, 11576, // alpha = 0.6298816 + 15380, 43651, 15388, 11452, // alpha = 0.6553288 + 15361, 43516, 15368, 11336, // alpha = 0.68128 + 15329, 43352, 15341, 11167, // alpha = 0.7077349 + 15298, 43214, 15309, 10949, // alpha = 0.7346939 + 15271, 43057, 15280, 10725, // alpha = 0.7621567 + 15246, 42830, 15253, 10516, // alpha = 0.7901235 + 15223, 42531, 15229, 10307, // alpha = 0.8185941 + 15203, 42257, 15207, 9975, // alpha = 0.8475687 + 15185, 41972, 15188, 9592, // alpha = 0.8770471 + 15168, 41443, 15170, 9217, // alpha = 0.9070295 + 15153, 40874, 15154, 8499, // alpha = 0.9375157 + 15139, 39809, 15139, 7438, // alpha = 0.9685059 + 15126, 2156, 15126, 34406, // alpha = 1 + + // Cos (theta) = 0.9876543 + 24528, 45331, 24577, 21749, // alpha = 0.001 + 24528, 45331, 24577, 21749, // alpha = 0.001 + 24513, 45331, 24562, 21739, // alpha = 0.001007811 + 23268, 45331, 23312, 20575, // alpha = 0.002267574 + 22464, 45331, 22514, 19691, // alpha = 0.004031243 + 21750, 45331, 21782, 19020, // alpha = 0.006298816 + 21220, 45331, 21264, 18527, // alpha = 0.009070295 + 20752, 45331, 20785, 18028, // alpha = 0.01234568 + 20416, 45331, 20466, 17643, // alpha = 0.01612497 + 20000, 45331, 20039, 17349, // alpha = 0.02040816 + 19702, 45331, 19734, 16971, // alpha = 0.02519527 + 19481, 45331, 19508, 16692, // alpha = 0.03048627 + 19171, 45331, 19216, 16479, // alpha = 0.03628118 + 18910, 45331, 18948, 16242, // alpha = 0.04258 + 18703, 45331, 18736, 15979, // alpha = 0.04938272 + 18536, 45331, 18564, 15767, // alpha = 0.05668934 + 18366, 45331, 18416, 15594, // alpha = 0.06449988 + 18140, 45330, 18183, 15450, // alpha = 0.07281432 + 17950, 45329, 17989, 15298, // alpha = 0.08163266 + 17789, 45327, 17824, 15094, // alpha = 0.09095491 + 17653, 45314, 17684, 14921, // alpha = 0.1007811 + 17539, 45262, 17567, 14775, // alpha = 0.1111111 + 17440, 45248, 17466, 14649, // alpha = 0.1219451 + 17301, 45268, 17348, 14540, // alpha = 0.1332829 + 17152, 45317, 17195, 14447, // alpha = 0.1451247 + 17012, 45318, 17052, 14359, // alpha = 0.1574704 + 16888, 45305, 16925, 14222, // alpha = 0.17032 + 16780, 45276, 16813, 14081, // alpha = 0.1836735 + 16685, 45237, 16716, 13955, // alpha = 0.1975309 + 16599, 45222, 16628, 13844, // alpha = 0.2118922 + 16523, 45217, 16550, 13745, // alpha = 0.2267574 + 16456, 45212, 16481, 13658, // alpha = 0.2421265 + 16396, 45200, 16419, 13577, // alpha = 0.2579995 + 16293, 45172, 16336, 13498, // alpha = 0.2743765 + 16191, 45143, 16231, 13427, // alpha = 0.2912573 + 16101, 45115, 16137, 13362, // alpha = 0.308642 + 16018, 45100, 16053, 13293, // alpha = 0.3265306 + 15943, 45070, 15975, 13179, // alpha = 0.3449232 + 15874, 45013, 15903, 13068, // alpha = 0.3638196 + 15812, 44952, 15839, 12966, // alpha = 0.38322 + 15756, 44894, 15780, 12871, // alpha = 0.4031242 + 15703, 44815, 15726, 12774, // alpha = 0.4235324 + 15656, 44738, 15677, 12682, // alpha = 0.4444445 + 15613, 44671, 15632, 12596, // alpha = 0.4658605 + 15574, 44583, 15591, 12509, // alpha = 0.4877803 + 15538, 44502, 15554, 12426, // alpha = 0.5102041 + 15505, 44424, 15520, 12346, // alpha = 0.5331318 + 15475, 44330, 15488, 12242, // alpha = 0.5565634 + 15447, 44252, 15460, 12092, // alpha = 0.5804989 + 15423, 44157, 15434, 11939, // alpha = 0.6049383 + 15400, 44073, 15411, 11793, // alpha = 0.6298816 + 15380, 43936, 15389, 11651, // alpha = 0.6553288 + 15361, 43758, 15369, 11512, // alpha = 0.68128 + 15327, 43588, 15343, 11380, // alpha = 0.7077349 + 15297, 43406, 15310, 11230, // alpha = 0.7346939 + 15269, 43244, 15281, 10981, // alpha = 0.7621567 + 15244, 43065, 15254, 10728, // alpha = 0.7901235 + 15222, 42807, 15230, 10491, // alpha = 0.8185941 + 15202, 42466, 15207, 10254, // alpha = 0.8475687 + 15184, 42156, 15188, 9827, // alpha = 0.8770471 + 15167, 41689, 15170, 9387, // alpha = 0.9070295 + 15152, 41091, 15154, 8726, // alpha = 0.9375157 + 15138, 40021, 15139, 7655, // alpha = 0.9685059 + 15126, 1343, 15126, 34348, // alpha = 1 + + // Cos (theta) = 0.983875 + 24528, 45521, 24585, 21934, // alpha = 0.001 + 24528, 45521, 24585, 21934, // alpha = 0.001 + 24513, 45521, 24577, 21923, // alpha = 0.001007811 + 23268, 45521, 23326, 20739, // alpha = 0.002267574 + 22464, 45521, 22529, 19875, // alpha = 0.004031243 + 21750, 45521, 21792, 19255, // alpha = 0.006298816 + 21220, 45521, 21278, 18691, // alpha = 0.009070295 + 20752, 45521, 20795, 18269, // alpha = 0.01234568 + 20416, 45521, 20481, 17827, // alpha = 0.01612497 + 20000, 45521, 20052, 17524, // alpha = 0.02040816 + 19702, 45521, 19744, 17207, // alpha = 0.02519527 + 19481, 45521, 19516, 16886, // alpha = 0.03048627 + 19171, 45521, 19230, 16642, // alpha = 0.03628118 + 18910, 45521, 18960, 16452, // alpha = 0.04258 + 18703, 45521, 18746, 16220, // alpha = 0.04938272 + 18536, 45520, 18573, 15976, // alpha = 0.05668934 + 18366, 45520, 18431, 15777, // alpha = 0.06449988 + 18140, 45520, 18197, 15612, // alpha = 0.07281432 + 17950, 45518, 18001, 15474, // alpha = 0.08163266 + 17789, 45515, 17835, 15355, // alpha = 0.09095491 + 17653, 45497, 17694, 15157, // alpha = 0.1007811 + 17539, 45447, 17576, 14989, // alpha = 0.1111111 + 17439, 45435, 17473, 14843, // alpha = 0.1219451 + 17299, 45449, 17361, 14718, // alpha = 0.1332829 + 17150, 45492, 17207, 14611, // alpha = 0.1451247 + 17012, 45505, 17065, 14512, // alpha = 0.1574704 + 16889, 45488, 16937, 14421, // alpha = 0.17032 + 16781, 45451, 16825, 14340, // alpha = 0.1836735 + 16685, 45418, 16725, 14199, // alpha = 0.1975309 + 16599, 45402, 16636, 14071, // alpha = 0.2118922 + 16523, 45389, 16558, 13957, // alpha = 0.2267574 + 16456, 45373, 16488, 13856, // alpha = 0.2421265 + 16395, 45366, 16425, 13764, // alpha = 0.2579995 + 16293, 45342, 16349, 13676, // alpha = 0.2743765 + 16191, 45302, 16243, 13592, // alpha = 0.2912573 + 16100, 45273, 16148, 13517, // alpha = 0.308642 + 16018, 45250, 16062, 13449, // alpha = 0.3265306 + 15944, 45221, 15984, 13385, // alpha = 0.3449232 + 15874, 45182, 15912, 13321, // alpha = 0.3638196 + 15812, 45140, 15846, 13211, // alpha = 0.38322 + 15755, 45108, 15787, 13101, // alpha = 0.4031242 + 15704, 45066, 15733, 12992, // alpha = 0.4235324 + 15656, 44986, 15682, 12886, // alpha = 0.4444445 + 15614, 44900, 15637, 12786, // alpha = 0.4658605 + 15574, 44814, 15596, 12689, // alpha = 0.4877803 + 15538, 44711, 15558, 12591, // alpha = 0.5102041 + 15505, 44624, 15523, 12500, // alpha = 0.5331318 + 15475, 44521, 15491, 12409, // alpha = 0.5565634 + 15448, 44422, 15462, 12319, // alpha = 0.5804989 + 15423, 44328, 15436, 12182, // alpha = 0.6049383 + 15400, 44219, 15412, 12011, // alpha = 0.6298816 + 15379, 44126, 15390, 11851, // alpha = 0.6553288 + 15360, 44006, 15370, 11693, // alpha = 0.68128 + 15326, 43815, 15345, 11538, // alpha = 0.7077349 + 15295, 43610, 15311, 11388, // alpha = 0.7346939 + 15268, 43415, 15282, 11222, // alpha = 0.7621567 + 15242, 43222, 15255, 10941, // alpha = 0.7901235 + 15220, 43032, 15230, 10667, // alpha = 0.8185941 + 15200, 42685, 15208, 10404, // alpha = 0.8475687 + 15182, 42319, 15188, 10054, // alpha = 0.8770471 + 15166, 41942, 15170, 9559, // alpha = 0.9070295 + 15151, 41247, 15153, 8946, // alpha = 0.9375157 + 15138, 40183, 15138, 7874, // alpha = 0.9685059 + 15125, 2239, 15125, 34851, // alpha = 1 + + // Cos (theta) = 0.9795918 + 24528, 45713, 24594, 22121, // alpha = 0.001 + 24528, 45713, 24594, 22121, // alpha = 0.001 + 24512, 45713, 24586, 22109, // alpha = 0.001007811 + 23268, 45713, 23342, 20904, // alpha = 0.002267574 + 22464, 45713, 22538, 20061, // alpha = 0.004031243 + 21750, 45713, 21804, 19474, // alpha = 0.006298816 + 21220, 45713, 21294, 18856, // alpha = 0.009070295 + 20752, 45713, 20806, 18472, // alpha = 0.01234568 + 20416, 45713, 20490, 18013, // alpha = 0.01612497 + 20000, 45713, 20066, 17671, // alpha = 0.02040816 + 19702, 45713, 19755, 17426, // alpha = 0.02519527 + 19481, 45713, 19526, 17083, // alpha = 0.03048627 + 19171, 45712, 19245, 16807, // alpha = 0.03628118 + 18910, 45712, 18973, 16593, // alpha = 0.04258 + 18703, 45712, 18758, 16423, // alpha = 0.04938272 + 18536, 45712, 18583, 16188, // alpha = 0.05668934 + 18366, 45711, 18441, 15963, // alpha = 0.06449988 + 18140, 45711, 18213, 15777, // alpha = 0.07281432 + 17950, 45709, 18015, 15621, // alpha = 0.08163266 + 17789, 45705, 17848, 15489, // alpha = 0.09095491 + 17654, 45678, 17706, 15377, // alpha = 0.1007811 + 17539, 45634, 17587, 15205, // alpha = 0.1111111 + 17439, 45623, 17482, 15040, // alpha = 0.1219451 + 17297, 45633, 17376, 14898, // alpha = 0.1332829 + 17147, 45667, 17220, 14776, // alpha = 0.1451247 + 17013, 45692, 17080, 14666, // alpha = 0.1574704 + 16889, 45672, 16951, 14564, // alpha = 0.17032 + 16781, 45629, 16838, 14472, // alpha = 0.1836735 + 16685, 45602, 16737, 14391, // alpha = 0.1975309 + 16599, 45582, 16647, 14300, // alpha = 0.2118922 + 16522, 45562, 16567, 14171, // alpha = 0.2267574 + 16455, 45538, 16496, 14055, // alpha = 0.2421265 + 16394, 45531, 16433, 13951, // alpha = 0.2579995 + 16294, 45511, 16365, 13854, // alpha = 0.2743765 + 16192, 45465, 16257, 13760, // alpha = 0.2912573 + 16100, 45431, 16160, 13674, // alpha = 0.308642 + 16018, 45399, 16073, 13596, // alpha = 0.3265306 + 15943, 45369, 15995, 13524, // alpha = 0.3449232 + 15875, 45329, 15922, 13453, // alpha = 0.3638196 + 15812, 45281, 15855, 13385, // alpha = 0.38322 + 15756, 45240, 15794, 13322, // alpha = 0.4031242 + 15705, 45198, 15740, 13212, // alpha = 0.4235324 + 15657, 45145, 15689, 13092, // alpha = 0.4444445 + 15614, 45095, 15642, 12976, // alpha = 0.4658605 + 15575, 45038, 15601, 12867, // alpha = 0.4877803 + 15539, 44927, 15562, 12758, // alpha = 0.5102041 + 15506, 44818, 15527, 12652, // alpha = 0.5331318 + 15476, 44715, 15495, 12550, // alpha = 0.5565634 + 15448, 44595, 15465, 12449, // alpha = 0.5804989 + 15423, 44489, 15439, 12353, // alpha = 0.6049383 + 15400, 44373, 15414, 12229, // alpha = 0.6298816 + 15379, 44257, 15392, 12044, // alpha = 0.6553288 + 15360, 44148, 15372, 11869, // alpha = 0.68128 + 15325, 44031, 15347, 11694, // alpha = 0.7077349 + 15294, 43819, 15313, 11530, // alpha = 0.7346939 + 15266, 43590, 15283, 11365, // alpha = 0.7621567 + 15241, 43379, 15255, 11152, // alpha = 0.7901235 + 15218, 43161, 15231, 10846, // alpha = 0.8185941 + 15199, 42899, 15208, 10550, // alpha = 0.8475687 + 15181, 42485, 15188, 10260, // alpha = 0.8770471 + 15165, 42087, 15170, 9728, // alpha = 0.9070295 + 15150, 41402, 15153, 9158, // alpha = 0.9375157 + 15137, 40347, 15138, 8093, // alpha = 0.9685059 + 15125, 2643, 15125, 34696, // alpha = 1 + + // Cos (theta) = 0.9748048 + 24528, 45907, 24604, 22311, // alpha = 0.001 + 24528, 45907, 24604, 22311, // alpha = 0.001 + 24513, 45907, 24596, 22296, // alpha = 0.001007811 + 23268, 45907, 23360, 21071, // alpha = 0.002267574 + 22464, 45907, 22548, 20248, // alpha = 0.004031243 + 21750, 45907, 21817, 19594, // alpha = 0.006298816 + 21220, 45906, 21312, 19023, // alpha = 0.009070295 + 20752, 45906, 20820, 18594, // alpha = 0.01234568 + 20416, 45906, 20500, 18200, // alpha = 0.01612497 + 20000, 45906, 20082, 17819, // alpha = 0.02040816 + 19702, 45906, 19768, 17546, // alpha = 0.02519527 + 19481, 45906, 19536, 17281, // alpha = 0.03048627 + 19171, 45906, 19264, 16974, // alpha = 0.03628118 + 18910, 45906, 18989, 16735, // alpha = 0.04258 + 18703, 45905, 18771, 16545, // alpha = 0.04938272 + 18536, 45905, 18595, 16392, // alpha = 0.05668934 + 18367, 45905, 18451, 16150, // alpha = 0.06449988 + 18140, 45904, 18231, 15943, // alpha = 0.07281432 + 17950, 45902, 18031, 15769, // alpha = 0.08163266 + 17789, 45895, 17862, 15622, // alpha = 0.09095491 + 17655, 45857, 17720, 15498, // alpha = 0.1007811 + 17539, 45824, 17598, 15391, // alpha = 0.1111111 + 17439, 45813, 17493, 15238, // alpha = 0.1219451 + 17295, 45819, 17394, 15079, // alpha = 0.1332829 + 17145, 45846, 17235, 14942, // alpha = 0.1451247 + 17013, 45880, 17096, 14822, // alpha = 0.1574704 + 16890, 45855, 16966, 14708, // alpha = 0.17032 + 16782, 45813, 16852, 14606, // alpha = 0.1836735 + 16685, 45787, 16749, 14515, // alpha = 0.1975309 + 16598, 45763, 16658, 14434, // alpha = 0.2118922 + 16522, 45734, 16578, 14361, // alpha = 0.2267574 + 16455, 45707, 16506, 14257, // alpha = 0.2421265 + 16394, 45696, 16441, 14140, // alpha = 0.2579995 + 16294, 45677, 16382, 14033, // alpha = 0.2743765 + 16192, 45632, 16273, 13929, // alpha = 0.2912573 + 16100, 45591, 16174, 13833, // alpha = 0.308642 + 16018, 45549, 16086, 13745, // alpha = 0.3265306 + 15943, 45516, 16006, 13664, // alpha = 0.3449232 + 15876, 45475, 15933, 13586, // alpha = 0.3638196 + 15813, 45422, 15865, 13511, // alpha = 0.38322 + 15757, 45371, 15803, 13439, // alpha = 0.4031242 + 15706, 45325, 15747, 13372, // alpha = 0.4235324 + 15659, 45270, 15696, 13298, // alpha = 0.4444445 + 15615, 45213, 15649, 13168, // alpha = 0.4658605 + 15576, 45157, 15606, 13044, // alpha = 0.4877803 + 15541, 45100, 15567, 12923, // alpha = 0.5102041 + 15507, 45016, 15531, 12805, // alpha = 0.5331318 + 15477, 44899, 15498, 12690, // alpha = 0.5565634 + 15449, 44774, 15468, 12579, // alpha = 0.5804989 + 15424, 44645, 15441, 12471, // alpha = 0.6049383 + 15401, 44526, 15416, 12366, // alpha = 0.6298816 + 15379, 44394, 15394, 12238, // alpha = 0.6553288 + 15360, 44271, 15373, 12045, // alpha = 0.68128 + 15325, 44146, 15349, 11852, // alpha = 0.7077349 + 15293, 44012, 15315, 11667, // alpha = 0.7346939 + 15265, 43768, 15284, 11488, // alpha = 0.7621567 + 15239, 43524, 15256, 11312, // alpha = 0.7901235 + 15217, 43290, 15231, 11023, // alpha = 0.8185941 + 15197, 43056, 15208, 10695, // alpha = 0.8475687 + 15179, 42655, 15188, 10374, // alpha = 0.8770471 + 15164, 42205, 15169, 9891, // alpha = 0.9070295 + 15150, 41577, 15153, 9303, // alpha = 0.9375157 + 15136, 40486, 15137, 8245, // alpha = 0.9685059 + 15124, 2087, 15124, 34773, // alpha = 1 + + // Cos (theta) = 0.9695137 + 24528, 46091, 24616, 22502, // alpha = 0.001 + 24528, 46091, 24616, 22502, // alpha = 0.001 + 24512, 46091, 24608, 22486, // alpha = 0.001007811 + 23268, 46091, 23381, 21239, // alpha = 0.002267574 + 22464, 46091, 22560, 20438, // alpha = 0.004031243 + 21750, 46091, 21831, 19716, // alpha = 0.006298816 + 21220, 46091, 21333, 19191, // alpha = 0.009070295 + 20752, 46091, 20835, 18718, // alpha = 0.01234568 + 20416, 46091, 20512, 18390, // alpha = 0.01612497 + 20000, 46091, 20100, 17969, // alpha = 0.02040816 + 19702, 46091, 19783, 17668, // alpha = 0.02519527 + 19481, 46091, 19548, 17445, // alpha = 0.03048627 + 19171, 46091, 19284, 17143, // alpha = 0.03628118 + 18910, 46091, 19006, 16879, // alpha = 0.04258 + 18703, 46091, 18786, 16669, // alpha = 0.04938272 + 18536, 46090, 18608, 16500, // alpha = 0.05668934 + 18367, 46090, 18462, 16340, // alpha = 0.06449988 + 18140, 46089, 18251, 16111, // alpha = 0.07281432 + 17950, 46088, 18049, 15919, // alpha = 0.08163266 + 17790, 46084, 17878, 15756, // alpha = 0.09095491 + 17655, 46043, 17735, 15620, // alpha = 0.1007811 + 17539, 46016, 17611, 15502, // alpha = 0.1111111 + 17438, 46005, 17504, 15400, // alpha = 0.1219451 + 17294, 46008, 17411, 15262, // alpha = 0.1332829 + 17143, 46027, 17253, 15110, // alpha = 0.1451247 + 17012, 46059, 17113, 14978, // alpha = 0.1574704 + 16891, 46037, 16984, 14854, // alpha = 0.17032 + 16782, 46000, 16868, 14742, // alpha = 0.1836735 + 16685, 45973, 16764, 14641, // alpha = 0.1975309 + 16598, 45945, 16671, 14551, // alpha = 0.2118922 + 16522, 45907, 16589, 14470, // alpha = 0.2267574 + 16454, 45880, 16516, 14398, // alpha = 0.2421265 + 16393, 45861, 16451, 14331, // alpha = 0.2579995 + 16294, 45836, 16392, 14213, // alpha = 0.2743765 + 16193, 45800, 16290, 14100, // alpha = 0.2912573 + 16101, 45751, 16190, 13993, // alpha = 0.308642 + 16019, 45703, 16100, 13896, // alpha = 0.3265306 + 15944, 45662, 16018, 13804, // alpha = 0.3449232 + 15877, 45619, 15944, 13720, // alpha = 0.3638196 + 15815, 45565, 15875, 13637, // alpha = 0.38322 + 15758, 45505, 15812, 13556, // alpha = 0.4031242 + 15707, 45452, 15755, 13481, // alpha = 0.4235324 + 15661, 45396, 15704, 13409, // alpha = 0.4444445 + 15618, 45330, 15656, 13337, // alpha = 0.4658605 + 15579, 45267, 15612, 13222, // alpha = 0.4877803 + 15543, 45205, 15572, 13087, // alpha = 0.5102041 + 15509, 45137, 15535, 12957, // alpha = 0.5331318 + 15479, 45068, 15502, 12830, // alpha = 0.5565634 + 15451, 44950, 15472, 12709, // alpha = 0.5804989 + 15425, 44807, 15444, 12587, // alpha = 0.6049383 + 15401, 44671, 15419, 12471, // alpha = 0.6298816 + 15380, 44533, 15396, 12361, // alpha = 0.6553288 + 15360, 44392, 15375, 12216, // alpha = 0.68128 + 15325, 44260, 15352, 12009, // alpha = 0.7077349 + 15292, 44120, 15317, 11805, // alpha = 0.7346939 + 15263, 43945, 15286, 11608, // alpha = 0.7621567 + 15238, 43677, 15257, 11416, // alpha = 0.7901235 + 15215, 43420, 15232, 11199, // alpha = 0.8185941 + 15195, 43161, 15209, 10839, // alpha = 0.8475687 + 15178, 42819, 15188, 10487, // alpha = 0.8770471 + 15162, 42329, 15169, 10058, // alpha = 0.9070295 + 15149, 41727, 15152, 9409, // alpha = 0.9375157 + 15135, 40651, 15137, 8352, // alpha = 0.9685059 + 15123, 2818, 15123, 34502, // alpha = 1 + + // Cos (theta) = 0.9637188 + 24528, 46190, 24629, 22612, // alpha = 0.001 + 24528, 46190, 24629, 22612, // alpha = 0.001 + 24512, 46190, 24620, 22603, // alpha = 0.001007811 + 23268, 46190, 23403, 21410, // alpha = 0.002267574 + 22464, 46190, 22572, 20555, // alpha = 0.004031243 + 21750, 46190, 21847, 19839, // alpha = 0.006298816 + 21220, 46190, 21355, 19362, // alpha = 0.009070295 + 20752, 46190, 20851, 18844, // alpha = 0.01234568 + 20416, 46190, 20524, 18507, // alpha = 0.01612497 + 20000, 46190, 20120, 18121, // alpha = 0.02040816 + 19702, 46190, 19799, 17791, // alpha = 0.02519527 + 19481, 46190, 19562, 17547, // alpha = 0.03048627 + 19171, 46190, 19306, 17314, // alpha = 0.03628118 + 18910, 46190, 19025, 17024, // alpha = 0.04258 + 18703, 46190, 18802, 16795, // alpha = 0.04938272 + 18536, 46189, 18622, 16610, // alpha = 0.05668934 + 18367, 46189, 18475, 16458, // alpha = 0.06449988 + 18140, 46188, 18273, 16281, // alpha = 0.07281432 + 17950, 46187, 18069, 16070, // alpha = 0.08163266 + 17790, 46180, 17896, 15893, // alpha = 0.09095491 + 17655, 46157, 17751, 15743, // alpha = 0.1007811 + 17539, 46145, 17625, 15613, // alpha = 0.1111111 + 17438, 46140, 17517, 15501, // alpha = 0.1219451 + 17293, 46140, 17422, 15404, // alpha = 0.1332829 + 17141, 46146, 17273, 15280, // alpha = 0.1451247 + 17010, 46158, 17132, 15135, // alpha = 0.1574704 + 16892, 46150, 17003, 15002, // alpha = 0.17032 + 16782, 46135, 16885, 14879, // alpha = 0.1836735 + 16685, 46120, 16780, 14768, // alpha = 0.1975309 + 16598, 46103, 16686, 14670, // alpha = 0.2118922 + 16522, 46082, 16603, 14581, // alpha = 0.2267574 + 16454, 46055, 16528, 14501, // alpha = 0.2421265 + 16393, 46028, 16461, 14430, // alpha = 0.2579995 + 16294, 45999, 16402, 14365, // alpha = 0.2743765 + 16194, 45969, 16310, 14274, // alpha = 0.2912573 + 16102, 45911, 16208, 14155, // alpha = 0.308642 + 16018, 45859, 16115, 14046, // alpha = 0.3265306 + 15944, 45810, 16032, 13947, // alpha = 0.3449232 + 15877, 45762, 15957, 13853, // alpha = 0.3638196 + 15817, 45708, 15887, 13764, // alpha = 0.38322 + 15759, 45642, 15823, 13675, // alpha = 0.4031242 + 15708, 45577, 15765, 13591, // alpha = 0.4235324 + 15662, 45518, 15712, 13511, // alpha = 0.4444445 + 15620, 45449, 15663, 13431, // alpha = 0.4658605 + 15580, 45377, 15618, 13355, // alpha = 0.4877803 + 15544, 45308, 15578, 13251, // alpha = 0.5102041 + 15511, 45237, 15541, 13107, // alpha = 0.5331318 + 15481, 45161, 15507, 12968, // alpha = 0.5565634 + 15453, 45089, 15475, 12832, // alpha = 0.5804989 + 15426, 44970, 15447, 12704, // alpha = 0.6049383 + 15402, 44817, 15421, 12576, // alpha = 0.6298816 + 15381, 44670, 15398, 12455, // alpha = 0.6553288 + 15360, 44517, 15377, 12339, // alpha = 0.68128 + 15325, 44369, 15354, 12160, // alpha = 0.7077349 + 15292, 44219, 15319, 11940, // alpha = 0.7346939 + 15262, 44073, 15287, 11727, // alpha = 0.7621567 + 15237, 43829, 15258, 11520, // alpha = 0.7901235 + 15213, 43542, 15232, 11317, // alpha = 0.8185941 + 15193, 43269, 15209, 10983, // alpha = 0.8475687 + 15176, 42977, 15188, 10599, // alpha = 0.8770471 + 15161, 42458, 15169, 10229, // alpha = 0.9070295 + 15147, 41877, 15152, 9515, // alpha = 0.9375157 + 15134, 40820, 15136, 8468, // alpha = 0.9685059 + 15122, 3135, 15122, 35092, // alpha = 1 + + // Cos (theta) = 0.95742 + 24528, 46291, 24643, 22710, // alpha = 0.001 + 24528, 46291, 24643, 22710, // alpha = 0.001 + 24512, 46291, 24634, 22701, // alpha = 0.001007811 + 23268, 46291, 23428, 21544, // alpha = 0.002267574 + 22464, 46291, 22586, 20653, // alpha = 0.004031243 + 21750, 46291, 21866, 19964, // alpha = 0.006298816 + 21220, 46291, 21380, 19496, // alpha = 0.009070295 + 20752, 46291, 20870, 18971, // alpha = 0.01234568 + 20416, 46291, 20538, 18605, // alpha = 0.01612497 + 20000, 46291, 20142, 18275, // alpha = 0.02040816 + 19702, 46291, 19817, 17916, // alpha = 0.02519527 + 19481, 46291, 19577, 17650, // alpha = 0.03048627 + 19171, 46290, 19331, 17447, // alpha = 0.03628118 + 18910, 46290, 19047, 17172, // alpha = 0.04258 + 18703, 46290, 18821, 16922, // alpha = 0.04938272 + 18536, 46289, 18638, 16721, // alpha = 0.05668934 + 18367, 46289, 18489, 16555, // alpha = 0.06449988 + 18140, 46288, 18298, 16419, // alpha = 0.07281432 + 17950, 46286, 18091, 16224, // alpha = 0.08163266 + 17790, 46277, 17916, 16031, // alpha = 0.09095491 + 17655, 46255, 17769, 15868, // alpha = 0.1007811 + 17538, 46244, 17641, 15726, // alpha = 0.1111111 + 17437, 46238, 17531, 15604, // alpha = 0.1219451 + 17292, 46237, 17435, 15498, // alpha = 0.1332829 + 17140, 46241, 17296, 15406, // alpha = 0.1451247 + 17008, 46247, 17152, 15294, // alpha = 0.1574704 + 16892, 46245, 17025, 15152, // alpha = 0.17032 + 16783, 46230, 16904, 15018, // alpha = 0.1836735 + 16685, 46215, 16797, 14898, // alpha = 0.1975309 + 16599, 46194, 16702, 14790, // alpha = 0.2118922 + 16522, 46173, 16617, 14693, // alpha = 0.2267574 + 16454, 46156, 16541, 14606, // alpha = 0.2421265 + 16393, 46138, 16473, 14527, // alpha = 0.2579995 + 16292, 46122, 16413, 14456, // alpha = 0.2743765 + 16193, 46106, 16331, 14391, // alpha = 0.2912573 + 16102, 46075, 16227, 14319, // alpha = 0.308642 + 16019, 46017, 16133, 14201, // alpha = 0.3265306 + 15944, 45958, 16047, 14090, // alpha = 0.3449232 + 15878, 45905, 15971, 13988, // alpha = 0.3638196 + 15819, 45848, 15900, 13890, // alpha = 0.38322 + 15762, 45779, 15835, 13794, // alpha = 0.4031242 + 15710, 45707, 15775, 13701, // alpha = 0.4235324 + 15665, 45638, 15721, 13614, // alpha = 0.4444445 + 15622, 45570, 15671, 13528, // alpha = 0.4658605 + 15582, 45489, 15625, 13443, // alpha = 0.4877803 + 15547, 45413, 15584, 13362, // alpha = 0.5102041 + 15514, 45336, 15546, 13258, // alpha = 0.5331318 + 15482, 45254, 15511, 13104, // alpha = 0.5565634 + 15454, 45173, 15480, 12958, // alpha = 0.5804989 + 15429, 45094, 15451, 12818, // alpha = 0.6049383 + 15404, 44964, 15424, 12682, // alpha = 0.6298816 + 15381, 44803, 15400, 12549, // alpha = 0.6553288 + 15361, 44640, 15379, 12422, // alpha = 0.68128 + 15325, 44476, 15358, 12300, // alpha = 0.7077349 + 15292, 44320, 15322, 12077, // alpha = 0.7346939 + 15262, 44159, 15289, 11843, // alpha = 0.7621567 + 15235, 43976, 15260, 11621, // alpha = 0.7901235 + 15212, 43669, 15233, 11404, // alpha = 0.8185941 + 15191, 43371, 15209, 11121, // alpha = 0.8475687 + 15175, 43077, 15188, 10712, // alpha = 0.8770471 + 15159, 42574, 15168, 10316, // alpha = 0.9070295 + 15146, 42017, 15151, 9624, // alpha = 0.9375157 + 15133, 40961, 15135, 8564, // alpha = 0.9685059 + 15121, 2955, 15121, 34728, // alpha = 1 + + // Cos (theta) = 0.9506173 + 24528, 46393, 24659, 22810, // alpha = 0.001 + 24528, 46393, 24659, 22810, // alpha = 0.001 + 24512, 46393, 24650, 22800, // alpha = 0.001007811 + 23268, 46393, 23456, 21632, // alpha = 0.002267574 + 22464, 46393, 22602, 20752, // alpha = 0.004031243 + 21750, 46393, 21885, 20091, // alpha = 0.006298816 + 21220, 46393, 21408, 19584, // alpha = 0.009070295 + 20752, 46393, 20890, 19100, // alpha = 0.01234568 + 20416, 46393, 20554, 18704, // alpha = 0.01612497 + 20000, 46393, 20167, 18431, // alpha = 0.02040816 + 19702, 46393, 19837, 18042, // alpha = 0.02519527 + 19481, 46393, 19593, 17754, // alpha = 0.03048627 + 19171, 46392, 19359, 17535, // alpha = 0.03628118 + 18910, 46392, 19070, 17322, // alpha = 0.04258 + 18703, 46392, 18841, 17051, // alpha = 0.04938272 + 18536, 46391, 18656, 16833, // alpha = 0.05668934 + 18367, 46391, 18504, 16654, // alpha = 0.06449988 + 18140, 46389, 18326, 16506, // alpha = 0.07281432 + 17950, 46387, 18115, 16381, // alpha = 0.08163266 + 17791, 46372, 17939, 16172, // alpha = 0.09095491 + 17655, 46354, 17789, 15994, // alpha = 0.1007811 + 17538, 46345, 17659, 15841, // alpha = 0.1111111 + 17437, 46338, 17547, 15708, // alpha = 0.1219451 + 17290, 46335, 17449, 15593, // alpha = 0.1332829 + 17138, 46336, 17321, 15493, // alpha = 0.1451247 + 17007, 46337, 17175, 15407, // alpha = 0.1574704 + 16892, 46339, 17047, 15303, // alpha = 0.17032 + 16783, 46327, 16926, 15159, // alpha = 0.1836735 + 16685, 46310, 16817, 15029, // alpha = 0.1975309 + 16599, 46286, 16720, 14912, // alpha = 0.2118922 + 16522, 46264, 16633, 14807, // alpha = 0.2267574 + 16453, 46245, 16556, 14712, // alpha = 0.2421265 + 16392, 46222, 16487, 14626, // alpha = 0.2579995 + 16291, 46205, 16424, 14549, // alpha = 0.2743765 + 16193, 46186, 16352, 14478, // alpha = 0.2912573 + 16104, 46161, 16248, 14411, // alpha = 0.308642 + 16021, 46127, 16151, 14346, // alpha = 0.3265306 + 15947, 46095, 16065, 14236, // alpha = 0.3449232 + 15879, 46047, 15985, 14123, // alpha = 0.3638196 + 15820, 45986, 15913, 14018, // alpha = 0.38322 + 15765, 45917, 15847, 13914, // alpha = 0.4031242 + 15713, 45837, 15786, 13812, // alpha = 0.4235324 + 15668, 45759, 15731, 13716, // alpha = 0.4444445 + 15625, 45685, 15680, 13625, // alpha = 0.4658605 + 15586, 45602, 15634, 13534, // alpha = 0.4877803 + 15549, 45515, 15592, 13445, // alpha = 0.5102041 + 15516, 45433, 15553, 13360, // alpha = 0.5331318 + 15484, 45349, 15517, 13244, // alpha = 0.5565634 + 15456, 45258, 15484, 13086, // alpha = 0.5804989 + 15431, 45172, 15455, 12933, // alpha = 0.6049383 + 15406, 45084, 15428, 12783, // alpha = 0.6298816 + 15383, 44934, 15403, 12643, // alpha = 0.6553288 + 15362, 44762, 15381, 12506, // alpha = 0.68128 + 15326, 44586, 15361, 12374, // alpha = 0.7077349 + 15291, 44415, 15324, 12206, // alpha = 0.7346939 + 15261, 44248, 15291, 11963, // alpha = 0.7621567 + 15234, 44076, 15261, 11720, // alpha = 0.7901235 + 15210, 43801, 15234, 11491, // alpha = 0.8185941 + 15190, 43469, 15209, 11262, // alpha = 0.8475687 + 15172, 43158, 15188, 10821, // alpha = 0.8770471 + 15158, 42688, 15168, 10397, // alpha = 0.9070295 + 15145, 42085, 15151, 9729, // alpha = 0.9375157 + 15132, 41040, 15135, 8671, // alpha = 0.9685059 + 15120, 3707, 15120, 35620, // alpha = 1 + + // Cos (theta) = 0.9433107 + 24528, 46497, 24676, 22911, // alpha = 0.001 + 24528, 46497, 24676, 22911, // alpha = 0.001 + 24513, 46497, 24667, 22901, // alpha = 0.001007811 + 23268, 46497, 23486, 21721, // alpha = 0.002267574 + 22464, 46497, 22619, 20853, // alpha = 0.004031243 + 21750, 46497, 21907, 20220, // alpha = 0.006298816 + 21220, 46497, 21438, 19673, // alpha = 0.009070295 + 20752, 46497, 20912, 19232, // alpha = 0.01234568 + 20416, 46497, 20571, 18804, // alpha = 0.01612497 + 20000, 46497, 20194, 18511, // alpha = 0.02040816 + 19702, 46497, 19859, 18171, // alpha = 0.02519527 + 19481, 46496, 19611, 17861, // alpha = 0.03048627 + 19171, 46496, 19389, 17625, // alpha = 0.03628118 + 18910, 46496, 19096, 17441, // alpha = 0.04258 + 18703, 46495, 18863, 17183, // alpha = 0.04938272 + 18536, 46495, 18675, 16948, // alpha = 0.05668934 + 18367, 46494, 18521, 16755, // alpha = 0.06449988 + 18140, 46492, 18356, 16595, // alpha = 0.07281432 + 17950, 46489, 18142, 16462, // alpha = 0.08163266 + 17791, 46470, 17963, 16315, // alpha = 0.09095491 + 17655, 46455, 17810, 16123, // alpha = 0.1007811 + 17538, 46446, 17678, 15957, // alpha = 0.1111111 + 17437, 46439, 17564, 15814, // alpha = 0.1219451 + 17289, 46435, 17465, 15690, // alpha = 0.1332829 + 17137, 46433, 17349, 15582, // alpha = 0.1451247 + 17005, 46428, 17200, 15489, // alpha = 0.1574704 + 16890, 46431, 17070, 15407, // alpha = 0.17032 + 16783, 46425, 16949, 15302, // alpha = 0.1836735 + 16686, 46405, 16838, 15162, // alpha = 0.1975309 + 16599, 46380, 16739, 15035, // alpha = 0.2118922 + 16522, 46358, 16651, 14921, // alpha = 0.2267574 + 16453, 46334, 16572, 14819, // alpha = 0.2421265 + 16392, 46309, 16501, 14726, // alpha = 0.2579995 + 16290, 46288, 16437, 14642, // alpha = 0.2743765 + 16194, 46266, 16376, 14566, // alpha = 0.2912573 + 16105, 46243, 16271, 14495, // alpha = 0.308642 + 16023, 46206, 16171, 14425, // alpha = 0.3265306 + 15948, 46171, 16083, 14360, // alpha = 0.3449232 + 15883, 46135, 16001, 14261, // alpha = 0.3638196 + 15823, 46102, 15928, 14147, // alpha = 0.38322 + 15769, 46052, 15861, 14036, // alpha = 0.4031242 + 15717, 45967, 15799, 13927, // alpha = 0.4235324 + 15670, 45881, 15742, 13822, // alpha = 0.4444445 + 15628, 45798, 15690, 13723, // alpha = 0.4658605 + 15588, 45715, 15643, 13625, // alpha = 0.4877803 + 15551, 45621, 15599, 13530, // alpha = 0.5102041 + 15519, 45528, 15560, 13438, // alpha = 0.5331318 + 15487, 45439, 15523, 13350, // alpha = 0.5565634 + 15457, 45344, 15489, 13213, // alpha = 0.5804989 + 15432, 45249, 15459, 13049, // alpha = 0.6049383 + 15407, 45157, 15431, 12886, // alpha = 0.6298816 + 15384, 45062, 15406, 12736, // alpha = 0.6553288 + 15363, 44878, 15383, 12588, // alpha = 0.68128 + 15327, 44700, 15362, 12449, // alpha = 0.7077349 + 15292, 44508, 15327, 12312, // alpha = 0.7346939 + 15260, 44331, 15293, 12075, // alpha = 0.7621567 + 15233, 44150, 15262, 11821, // alpha = 0.7901235 + 15209, 43917, 15235, 11573, // alpha = 0.8185941 + 15188, 43583, 15210, 11334, // alpha = 0.8475687 + 15171, 43232, 15188, 10927, // alpha = 0.8770471 + 15156, 42826, 15168, 10482, // alpha = 0.9070295 + 15143, 42157, 15150, 9834, // alpha = 0.9375157 + 15131, 41130, 15134, 8782, // alpha = 0.9685059 + 15119, 3632, 15119, 35346, // alpha = 1 + + // Cos (theta) = 0.9355001 + 24528, 46603, 24695, 23015, // alpha = 0.001 + 24528, 46603, 24695, 23015, // alpha = 0.001 + 24513, 46603, 24686, 23003, // alpha = 0.001007811 + 23268, 46603, 23520, 21812, // alpha = 0.002267574 + 22464, 46603, 22638, 20955, // alpha = 0.004031243 + 21750, 46603, 21931, 20351, // alpha = 0.006298816 + 21220, 46603, 21472, 19764, // alpha = 0.009070295 + 20752, 46603, 20937, 19366, // alpha = 0.01234568 + 20416, 46603, 20590, 18907, // alpha = 0.01612497 + 20000, 46603, 20223, 18592, // alpha = 0.02040816 + 19702, 46602, 19883, 18302, // alpha = 0.02519527 + 19481, 46602, 19631, 17969, // alpha = 0.03048627 + 19171, 46602, 19422, 17716, // alpha = 0.03628118 + 18910, 46601, 19124, 17519, // alpha = 0.04258 + 18703, 46601, 18887, 17317, // alpha = 0.04938272 + 18536, 46600, 18696, 17064, // alpha = 0.05668934 + 18367, 46599, 18540, 16857, // alpha = 0.06449988 + 18140, 46597, 18388, 16686, // alpha = 0.07281432 + 17950, 46592, 18171, 16543, // alpha = 0.08163266 + 17791, 46571, 17989, 16422, // alpha = 0.09095491 + 17655, 46558, 17833, 16254, // alpha = 0.1007811 + 17538, 46549, 17699, 16076, // alpha = 0.1111111 + 17436, 46542, 17583, 15922, // alpha = 0.1219451 + 17288, 46537, 17482, 15788, // alpha = 0.1332829 + 17136, 46531, 17380, 15672, // alpha = 0.1451247 + 17004, 46521, 17228, 15572, // alpha = 0.1574704 + 16888, 46524, 17094, 15484, // alpha = 0.17032 + 16784, 46524, 16974, 15404, // alpha = 0.1836735 + 16686, 46501, 16861, 15297, // alpha = 0.1975309 + 16599, 46475, 16760, 15161, // alpha = 0.2118922 + 16522, 46451, 16670, 15038, // alpha = 0.2267574 + 16453, 46423, 16589, 14928, // alpha = 0.2421265 + 16392, 46398, 16517, 14828, // alpha = 0.2579995 + 16290, 46372, 16451, 14738, // alpha = 0.2743765 + 16193, 46347, 16392, 14655, // alpha = 0.2912573 + 16107, 46322, 16294, 14579, // alpha = 0.308642 + 16027, 46288, 16194, 14506, // alpha = 0.3265306 + 15953, 46248, 16102, 14435, // alpha = 0.3449232 + 15886, 46208, 16019, 14369, // alpha = 0.3638196 + 15827, 46170, 15944, 14279, // alpha = 0.38322 + 15772, 46132, 15876, 14160, // alpha = 0.4031242 + 15721, 46089, 15812, 14044, // alpha = 0.4235324 + 15674, 46005, 15754, 13931, // alpha = 0.4444445 + 15631, 45913, 15701, 13823, // alpha = 0.4658605 + 15592, 45822, 15653, 13719, // alpha = 0.4877803 + 15555, 45727, 15608, 13616, // alpha = 0.5102041 + 15521, 45626, 15567, 13517, // alpha = 0.5331318 + 15490, 45528, 15530, 13421, // alpha = 0.5565634 + 15460, 45431, 15496, 13328, // alpha = 0.5804989 + 15432, 45328, 15464, 13165, // alpha = 0.6049383 + 15409, 45226, 15435, 12993, // alpha = 0.6298816 + 15386, 45131, 15409, 12830, // alpha = 0.6553288 + 15364, 44996, 15386, 12671, // alpha = 0.68128 + 15329, 44803, 15365, 12521, // alpha = 0.7077349 + 15292, 44609, 15330, 12377, // alpha = 0.7346939 + 15260, 44410, 15295, 12187, // alpha = 0.7621567 + 15232, 44227, 15264, 11919, // alpha = 0.7901235 + 15208, 44032, 15236, 11655, // alpha = 0.8185941 + 15186, 43678, 15210, 11402, // alpha = 0.8475687 + 15169, 43313, 15188, 11041, // alpha = 0.8770471 + 15154, 42929, 15167, 10558, // alpha = 0.9070295 + 15141, 42251, 15149, 9943, // alpha = 0.9375157 + 15129, 41190, 15133, 8879, // alpha = 0.9685059 + 15118, 2874, 15118, 33995, // alpha = 1 + + // Cos (theta) = 0.9271857 + 24528, 46711, 24715, 23120, // alpha = 0.001 + 24528, 46711, 24715, 23120, // alpha = 0.001 + 24513, 46711, 24706, 23108, // alpha = 0.001007811 + 23268, 46711, 23554, 21905, // alpha = 0.002267574 + 22464, 46711, 22658, 21060, // alpha = 0.004031243 + 21750, 46711, 21957, 20482, // alpha = 0.006298816 + 21220, 46711, 21506, 19857, // alpha = 0.009070295 + 20752, 46711, 20963, 19479, // alpha = 0.01234568 + 20416, 46711, 20610, 19011, // alpha = 0.01612497 + 20000, 46710, 20256, 18675, // alpha = 0.02040816 + 19702, 46710, 19909, 18434, // alpha = 0.02519527 + 19481, 46710, 19652, 18080, // alpha = 0.03048627 + 19171, 46709, 19457, 17809, // alpha = 0.03628118 + 18910, 46709, 19155, 17598, // alpha = 0.04258 + 18703, 46708, 18914, 17430, // alpha = 0.04938272 + 18536, 46707, 18719, 17183, // alpha = 0.05668934 + 18367, 46706, 18560, 16962, // alpha = 0.06449988 + 18140, 46704, 18424, 16778, // alpha = 0.07281432 + 17951, 46697, 18203, 16625, // alpha = 0.08163266 + 17791, 46675, 18018, 16496, // alpha = 0.09095491 + 17655, 46663, 17859, 16385, // alpha = 0.1007811 + 17537, 46654, 17722, 16197, // alpha = 0.1111111 + 17436, 46646, 17603, 16032, // alpha = 0.1219451 + 17287, 46639, 17500, 15889, // alpha = 0.1332829 + 17135, 46630, 17411, 15764, // alpha = 0.1451247 + 17002, 46618, 17258, 15656, // alpha = 0.1574704 + 16886, 46619, 17122, 15561, // alpha = 0.17032 + 16783, 46621, 17001, 15478, // alpha = 0.1836735 + 16687, 46597, 16886, 15397, // alpha = 0.1975309 + 16599, 46572, 16783, 15289, // alpha = 0.2118922 + 16522, 46545, 16691, 15158, // alpha = 0.2267574 + 16453, 46515, 16608, 15039, // alpha = 0.2421265 + 16392, 46486, 16534, 14932, // alpha = 0.2579995 + 16291, 46457, 16467, 14835, // alpha = 0.2743765 + 16195, 46429, 16406, 14746, // alpha = 0.2912573 + 16110, 46400, 16318, 14665, // alpha = 0.308642 + 16031, 46369, 16218, 14588, // alpha = 0.3265306 + 15957, 46325, 16124, 14512, // alpha = 0.3449232 + 15890, 46282, 16038, 14441, // alpha = 0.3638196 + 15830, 46240, 15961, 14374, // alpha = 0.38322 + 15776, 46198, 15891, 14288, // alpha = 0.4031242 + 15725, 46155, 15827, 14164, // alpha = 0.4235324 + 15678, 46104, 15767, 14043, // alpha = 0.4444445 + 15635, 46028, 15713, 13926, // alpha = 0.4658605 + 15595, 45929, 15664, 13814, // alpha = 0.4877803 + 15558, 45831, 15618, 13706, // alpha = 0.5102041 + 15523, 45723, 15576, 13596, // alpha = 0.5331318 + 15492, 45618, 15537, 13495, // alpha = 0.5565634 + 15462, 45512, 15502, 13394, // alpha = 0.5804989 + 15435, 45408, 15470, 13284, // alpha = 0.6049383 + 15410, 45297, 15440, 13097, // alpha = 0.6298816 + 15387, 45194, 15413, 12923, // alpha = 0.6553288 + 15365, 45088, 15389, 12752, // alpha = 0.68128 + 15330, 44904, 15367, 12593, // alpha = 0.7077349 + 15293, 44705, 15333, 12441, // alpha = 0.7346939 + 15260, 44494, 15298, 12294, // alpha = 0.7621567 + 15230, 44294, 15265, 12015, // alpha = 0.7901235 + 15206, 44101, 15237, 11741, // alpha = 0.8185941 + 15185, 43770, 15211, 11468, // alpha = 0.8475687 + 15166, 43403, 15188, 11152, // alpha = 0.8770471 + 15152, 43020, 15167, 10637, // alpha = 0.9070295 + 15140, 42326, 15148, 10047, // alpha = 0.9375157 + 15128, 41248, 15132, 8966, // alpha = 0.9685059 + 15116, 3309, 15116, 35186, // alpha = 1 + + // Cos (theta) = 0.9183673 + 24528, 46821, 24738, 23228, // alpha = 0.001 + 24528, 46821, 24738, 23228, // alpha = 0.001 + 24513, 46821, 24728, 23214, // alpha = 0.001007811 + 23268, 46821, 23574, 22000, // alpha = 0.002267574 + 22464, 46821, 22680, 21166, // alpha = 0.004031243 + 21750, 46821, 21986, 20551, // alpha = 0.006298816 + 21220, 46821, 21526, 19952, // alpha = 0.009070295 + 20752, 46821, 20993, 19549, // alpha = 0.01234568 + 20416, 46821, 20632, 19118, // alpha = 0.01612497 + 20000, 46820, 20291, 18759, // alpha = 0.02040816 + 19702, 46820, 19937, 18502, // alpha = 0.02519527 + 19481, 46820, 19676, 18193, // alpha = 0.03048627 + 19171, 46819, 19477, 17904, // alpha = 0.03628118 + 18910, 46818, 19189, 17679, // alpha = 0.04258 + 18703, 46818, 18943, 17500, // alpha = 0.04938272 + 18536, 46816, 18745, 17304, // alpha = 0.05668934 + 18367, 46815, 18582, 17068, // alpha = 0.06449988 + 18140, 46812, 18448, 16873, // alpha = 0.07281432 + 17951, 46801, 18238, 16709, // alpha = 0.08163266 + 17791, 46781, 18049, 16572, // alpha = 0.09095491 + 17655, 46770, 17886, 16453, // alpha = 0.1007811 + 17537, 46760, 17747, 16320, // alpha = 0.1111111 + 17435, 46752, 17626, 16144, // alpha = 0.1219451 + 17286, 46744, 17521, 15991, // alpha = 0.1332829 + 17133, 46729, 17429, 15858, // alpha = 0.1451247 + 17000, 46718, 17291, 15742, // alpha = 0.1574704 + 16883, 46715, 17151, 15640, // alpha = 0.17032 + 16781, 46715, 17028, 15551, // alpha = 0.1836735 + 16687, 46696, 16913, 15468, // alpha = 0.1975309 + 16600, 46670, 16808, 15390, // alpha = 0.2118922 + 16522, 46641, 16713, 15279, // alpha = 0.2267574 + 16454, 46608, 16628, 15153, // alpha = 0.2421265 + 16392, 46577, 16552, 15038, // alpha = 0.2579995 + 16293, 46544, 16483, 14934, // alpha = 0.2743765 + 16197, 46512, 16421, 14839, // alpha = 0.2912573 + 16111, 46480, 16345, 14753, // alpha = 0.308642 + 16034, 46447, 16242, 14671, // alpha = 0.3265306 + 15961, 46404, 16147, 14592, // alpha = 0.3449232 + 15894, 46356, 16060, 14515, // alpha = 0.3638196 + 15833, 46310, 15980, 14443, // alpha = 0.38322 + 15779, 46263, 15908, 14376, // alpha = 0.4031242 + 15728, 46217, 15842, 14285, // alpha = 0.4235324 + 15681, 46167, 15781, 14156, // alpha = 0.4444445 + 15638, 46112, 15725, 14030, // alpha = 0.4658605 + 15599, 46036, 15675, 13911, // alpha = 0.4877803 + 15561, 45932, 15628, 13793, // alpha = 0.5102041 + 15527, 45821, 15585, 13679, // alpha = 0.5331318 + 15495, 45708, 15546, 13569, // alpha = 0.5565634 + 15465, 45594, 15509, 13461, // alpha = 0.5804989 + 15437, 45485, 15476, 13358, // alpha = 0.6049383 + 15411, 45370, 15445, 13206, // alpha = 0.6298816 + 15388, 45256, 15417, 13015, // alpha = 0.6553288 + 15366, 45147, 15392, 12835, // alpha = 0.68128 + 15332, 45012, 15369, 12665, // alpha = 0.7077349 + 15294, 44793, 15337, 12503, // alpha = 0.7346939 + 15260, 44582, 15300, 12350, // alpha = 0.7621567 + 15230, 44363, 15267, 12107, // alpha = 0.7901235 + 15204, 44158, 15238, 11819, // alpha = 0.8185941 + 15183, 43874, 15211, 11535, // alpha = 0.8475687 + 15165, 43471, 15187, 11252, // alpha = 0.8770471 + 15150, 43089, 15167, 10717, // alpha = 0.9070295 + 15138, 42395, 15147, 10146, // alpha = 0.9375157 + 15127, 41349, 15131, 9086, // alpha = 0.9685059 + 15115, 3228, 15115, 34841, // alpha = 1 + + // Cos (theta) = 0.9090451 + 24528, 46934, 24762, 23338, // alpha = 0.001 + 24528, 46934, 24762, 23338, // alpha = 0.001 + 24513, 46934, 24753, 23323, // alpha = 0.001007811 + 23268, 46934, 23595, 22097, // alpha = 0.002267574 + 22464, 46934, 22705, 21275, // alpha = 0.004031243 + 21750, 46933, 22017, 20620, // alpha = 0.006298816 + 21220, 46933, 21547, 20049, // alpha = 0.009070295 + 20752, 46933, 21024, 19620, // alpha = 0.01234568 + 20416, 46933, 20657, 19227, // alpha = 0.01612497 + 20000, 46933, 20329, 18845, // alpha = 0.02040816 + 19702, 46932, 19968, 18572, // alpha = 0.02519527 + 19481, 46932, 19702, 18308, // alpha = 0.03048627 + 19171, 46931, 19499, 18000, // alpha = 0.03628118 + 18910, 46930, 19225, 17761, // alpha = 0.04258 + 18703, 46929, 18974, 17571, // alpha = 0.04938272 + 18536, 46928, 18772, 17418, // alpha = 0.05668934 + 18367, 46926, 18606, 17177, // alpha = 0.06449988 + 18140, 46923, 18469, 16969, // alpha = 0.07281432 + 17951, 46906, 18277, 16795, // alpha = 0.08163266 + 17791, 46891, 18083, 16648, // alpha = 0.09095491 + 17654, 46879, 17917, 16523, // alpha = 0.1007811 + 17537, 46869, 17774, 16415, // alpha = 0.1111111 + 17435, 46860, 17650, 16258, // alpha = 0.1219451 + 17285, 46849, 17543, 16095, // alpha = 0.1332829 + 17133, 46831, 17449, 15954, // alpha = 0.1451247 + 16998, 46820, 17327, 15829, // alpha = 0.1574704 + 16881, 46815, 17183, 15721, // alpha = 0.17032 + 16779, 46809, 17057, 15626, // alpha = 0.1836735 + 16687, 46797, 16943, 15539, // alpha = 0.1975309 + 16600, 46769, 16835, 15456, // alpha = 0.2118922 + 16524, 46736, 16737, 15382, // alpha = 0.2267574 + 16455, 46703, 16650, 15268, // alpha = 0.2421265 + 16394, 46667, 16571, 15146, // alpha = 0.2579995 + 16295, 46632, 16501, 15035, // alpha = 0.2743765 + 16199, 46596, 16436, 14934, // alpha = 0.2912573 + 16113, 46560, 16373, 14842, // alpha = 0.308642 + 16037, 46523, 16268, 14756, // alpha = 0.3265306 + 15965, 46483, 16172, 14674, // alpha = 0.3449232 + 15898, 46431, 16081, 14591, // alpha = 0.3638196 + 15836, 46380, 15999, 14514, // alpha = 0.38322 + 15782, 46330, 15925, 14442, // alpha = 0.4031242 + 15731, 46279, 15857, 14371, // alpha = 0.4235324 + 15685, 46228, 15796, 14272, // alpha = 0.4444445 + 15641, 46171, 15738, 14137, // alpha = 0.4658605 + 15602, 46111, 15686, 14008, // alpha = 0.4877803 + 15564, 46031, 15638, 13882, // alpha = 0.5102041 + 15530, 45917, 15595, 13762, // alpha = 0.5331318 + 15497, 45797, 15554, 13643, // alpha = 0.5565634 + 15467, 45676, 15516, 13529, // alpha = 0.5804989 + 15439, 45559, 15482, 13418, // alpha = 0.6049383 + 15413, 45442, 15450, 13313, // alpha = 0.6298816 + 15389, 45320, 15422, 13109, // alpha = 0.6553288 + 15367, 45203, 15395, 12920, // alpha = 0.68128 + 15332, 45089, 15372, 12737, // alpha = 0.7077349 + 15295, 44884, 15341, 12565, // alpha = 0.7346939 + 15260, 44659, 15303, 12404, // alpha = 0.7621567 + 15230, 44438, 15269, 12204, // alpha = 0.7901235 + 15203, 44214, 15239, 11897, // alpha = 0.8185941 + 15181, 43978, 15212, 11603, // alpha = 0.8475687 + 15163, 43546, 15187, 11311, // alpha = 0.8770471 + 15148, 43140, 15166, 10795, // alpha = 0.9070295 + 15136, 42475, 15147, 10246, // alpha = 0.9375157 + 15125, 41402, 15129, 9168, // alpha = 0.9685059 + 15114, 3070, 15114, 34996, // alpha = 1 + + // Cos (theta) = 0.8992189 + 24528, 47049, 24789, 23450, // alpha = 0.001 + 24528, 47049, 24789, 23450, // alpha = 0.001 + 24513, 47049, 24779, 23435, // alpha = 0.001007811 + 23268, 47049, 23619, 22196, // alpha = 0.002267574 + 22464, 47049, 22731, 21387, // alpha = 0.004031243 + 21750, 47049, 22051, 20692, // alpha = 0.006298816 + 21220, 47049, 21571, 20148, // alpha = 0.009070295 + 20752, 47049, 21059, 19693, // alpha = 0.01234568 + 20416, 47048, 20683, 19339, // alpha = 0.01612497 + 20000, 47048, 20371, 18933, // alpha = 0.02040816 + 19702, 47048, 20002, 18644, // alpha = 0.02519527 + 19481, 47047, 19729, 18426, // alpha = 0.03048627 + 19171, 47046, 19522, 18100, // alpha = 0.03628118 + 18910, 47045, 19265, 17846, // alpha = 0.04258 + 18703, 47044, 19009, 17644, // alpha = 0.04938272 + 18536, 47042, 18802, 17481, // alpha = 0.05668934 + 18366, 47040, 18632, 17288, // alpha = 0.06449988 + 18140, 47036, 18492, 17068, // alpha = 0.07281432 + 17951, 47016, 18318, 16883, // alpha = 0.08163266 + 17791, 47002, 18119, 16727, // alpha = 0.09095491 + 17654, 46990, 17949, 16594, // alpha = 0.1007811 + 17536, 46981, 17803, 16479, // alpha = 0.1111111 + 17434, 46970, 17677, 16375, // alpha = 0.1219451 + 17284, 46956, 17567, 16202, // alpha = 0.1332829 + 17131, 46936, 17471, 16051, // alpha = 0.1451247 + 16997, 46925, 17366, 15919, // alpha = 0.1574704 + 16879, 46915, 17219, 15803, // alpha = 0.17032 + 16777, 46905, 17089, 15701, // alpha = 0.1836735 + 16687, 46898, 16974, 15611, // alpha = 0.1975309 + 16601, 46869, 16864, 15525, // alpha = 0.2118922 + 16524, 46834, 16763, 15445, // alpha = 0.2267574 + 16456, 46799, 16674, 15374, // alpha = 0.2421265 + 16395, 46759, 16593, 15258, // alpha = 0.2579995 + 16297, 46721, 16520, 15139, // alpha = 0.2743765 + 16201, 46681, 16453, 15032, // alpha = 0.2912573 + 16113, 46641, 16394, 14931, // alpha = 0.308642 + 16037, 46601, 16296, 14841, // alpha = 0.3265306 + 15966, 46559, 16197, 14754, // alpha = 0.3449232 + 15897, 46507, 16105, 14666, // alpha = 0.3638196 + 15836, 46451, 16020, 14583, // alpha = 0.38322 + 15783, 46396, 15943, 14507, // alpha = 0.4031242 + 15732, 46342, 15874, 14431, // alpha = 0.4235324 + 15686, 46287, 15811, 14360, // alpha = 0.4444445 + 15643, 46230, 15752, 14243, // alpha = 0.4658605 + 15605, 46166, 15698, 14108, // alpha = 0.4877803 + 15567, 46105, 15648, 13973, // alpha = 0.5102041 + 15532, 46010, 15604, 13844, // alpha = 0.5331318 + 15500, 45888, 15562, 13719, // alpha = 0.5565634 + 15470, 45758, 15524, 13598, // alpha = 0.5804989 + 15441, 45632, 15488, 13479, // alpha = 0.6049383 + 15414, 45510, 15456, 13367, // alpha = 0.6298816 + 15390, 45385, 15427, 13206, // alpha = 0.6553288 + 15368, 45259, 15399, 13004, // alpha = 0.68128 + 15334, 45139, 15374, 12808, // alpha = 0.7077349 + 15297, 44979, 15345, 12625, // alpha = 0.7346939 + 15260, 44737, 15307, 12452, // alpha = 0.7621567 + 15229, 44507, 15271, 12293, // alpha = 0.7901235 + 15201, 44274, 15240, 11977, // alpha = 0.8185941 + 15178, 44048, 15212, 11665, // alpha = 0.8475687 + 15160, 43633, 15188, 11365, // alpha = 0.8770471 + 15145, 43193, 15165, 10871, // alpha = 0.9070295 + 15134, 42556, 15146, 10299, // alpha = 0.9375157 + 15123, 41478, 15128, 9246, // alpha = 0.9685059 + 15112, 3647, 15112, 35175, // alpha = 1 + + // Cos (theta) = 0.8888889 + 24528, 47136, 24818, 23559, // alpha = 0.001 + 24528, 47136, 24818, 23559, // alpha = 0.001 + 24513, 47136, 24808, 23550, // alpha = 0.001007811 + 23268, 47136, 23644, 22298, // alpha = 0.002267574 + 22464, 47135, 22760, 21502, // alpha = 0.004031243 + 21750, 47135, 22087, 20765, // alpha = 0.006298816 + 21220, 47135, 21596, 20250, // alpha = 0.009070295 + 20752, 47135, 21096, 19768, // alpha = 0.01234568 + 20416, 47135, 20712, 19453, // alpha = 0.01612497 + 20000, 47135, 20416, 19024, // alpha = 0.02040816 + 19702, 47135, 20039, 18717, // alpha = 0.02519527 + 19481, 47134, 19760, 18490, // alpha = 0.03048627 + 19171, 47134, 19547, 18201, // alpha = 0.03628118 + 18910, 47133, 19308, 17932, // alpha = 0.04258 + 18703, 47133, 19046, 17719, // alpha = 0.04938272 + 18536, 47132, 18834, 17546, // alpha = 0.05668934 + 18366, 47130, 18661, 17402, // alpha = 0.06449988 + 18140, 47127, 18517, 17169, // alpha = 0.07281432 + 17951, 47117, 18362, 16973, // alpha = 0.08163266 + 17790, 47110, 18159, 16808, // alpha = 0.09095491 + 17653, 47104, 17985, 16666, // alpha = 0.1007811 + 17536, 47094, 17835, 16544, // alpha = 0.1111111 + 17434, 47082, 17705, 16439, // alpha = 0.1219451 + 17283, 47064, 17593, 16311, // alpha = 0.1332829 + 17130, 47045, 17495, 16150, // alpha = 0.1451247 + 16995, 47031, 17408, 16010, // alpha = 0.1574704 + 16877, 47017, 17257, 15887, // alpha = 0.17032 + 16775, 47004, 17124, 15779, // alpha = 0.1836735 + 16685, 46995, 17005, 15684, // alpha = 0.1975309 + 16602, 46970, 16895, 15595, // alpha = 0.2118922 + 16525, 46934, 16792, 15511, // alpha = 0.2267574 + 16457, 46895, 16699, 15435, // alpha = 0.2421265 + 16396, 46853, 16615, 15366, // alpha = 0.2579995 + 16298, 46810, 16540, 15245, // alpha = 0.2743765 + 16201, 46767, 16472, 15130, // alpha = 0.2912573 + 16113, 46722, 16410, 15023, // alpha = 0.308642 + 16036, 46679, 16325, 14926, // alpha = 0.3265306 + 15966, 46634, 16224, 14835, // alpha = 0.3449232 + 15901, 46583, 16131, 14745, // alpha = 0.3638196 + 15839, 46523, 16043, 14656, // alpha = 0.38322 + 15784, 46463, 15963, 14572, // alpha = 0.4031242 + 15733, 46405, 15891, 14493, // alpha = 0.4235324 + 15687, 46346, 15826, 14416, // alpha = 0.4444445 + 15645, 46286, 15766, 14343, // alpha = 0.4658605 + 15606, 46221, 15711, 14206, // alpha = 0.4877803 + 15570, 46155, 15660, 14066, // alpha = 0.5102041 + 15534, 46090, 15614, 13927, // alpha = 0.5331318 + 15502, 45974, 15571, 13794, // alpha = 0.5565634 + 15472, 45841, 15532, 13665, // alpha = 0.5804989 + 15443, 45707, 15495, 13542, // alpha = 0.6049383 + 15417, 45576, 15462, 13422, // alpha = 0.6298816 + 15391, 45449, 15431, 13302, // alpha = 0.6553288 + 15368, 45316, 15403, 13086, // alpha = 0.68128 + 15337, 45188, 15378, 12883, // alpha = 0.7077349 + 15297, 45064, 15349, 12689, // alpha = 0.7346939 + 15260, 44816, 15309, 12509, // alpha = 0.7621567 + 15227, 44571, 15273, 12338, // alpha = 0.7901235 + 15200, 44337, 15241, 12054, // alpha = 0.8185941 + 15177, 44094, 15212, 11730, // alpha = 0.8475687 + 15158, 43701, 15187, 11413, // alpha = 0.8770471 + 15143, 43255, 15165, 10949, // alpha = 0.9070295 + 15132, 42616, 15144, 10346, // alpha = 0.9375157 + 15121, 41564, 15126, 9295, // alpha = 0.9685059 + 15110, 3416, 15110, 34984, // alpha = 1 + + // Cos (theta) = 0.8780549 + 24528, 47196, 24849, 23618, // alpha = 0.001 + 24528, 47196, 24849, 23618, // alpha = 0.001 + 24512, 47196, 24839, 23610, // alpha = 0.001007811 + 23268, 47196, 23672, 22403, // alpha = 0.002267574 + 22464, 47196, 22791, 21562, // alpha = 0.004031243 + 21750, 47196, 22127, 20840, // alpha = 0.006298816 + 21220, 47196, 21624, 20355, // alpha = 0.009070295 + 20752, 47196, 21137, 19845, // alpha = 0.01234568 + 20416, 47196, 20743, 19513, // alpha = 0.01612497 + 20000, 47196, 20465, 19117, // alpha = 0.02040816 + 19702, 47195, 20079, 18792, // alpha = 0.02519527 + 19481, 47195, 19793, 18552, // alpha = 0.03048627 + 19171, 47194, 19575, 18306, // alpha = 0.03628118 + 18910, 47194, 19355, 18021, // alpha = 0.04258 + 18703, 47193, 19086, 17795, // alpha = 0.04938272 + 18536, 47192, 18869, 17613, // alpha = 0.05668934 + 18366, 47190, 18692, 17464, // alpha = 0.06449988 + 18140, 47185, 18544, 17272, // alpha = 0.07281432 + 17950, 47175, 18411, 17066, // alpha = 0.08163266 + 17790, 47168, 18202, 16890, // alpha = 0.09095491 + 17653, 47163, 18023, 16740, // alpha = 0.1007811 + 17535, 47157, 17870, 16612, // alpha = 0.1111111 + 17433, 47150, 17737, 16500, // alpha = 0.1219451 + 17282, 47139, 17621, 16403, // alpha = 0.1332829 + 17128, 47130, 17520, 16252, // alpha = 0.1451247 + 16993, 47121, 17431, 16103, // alpha = 0.1574704 + 16875, 47112, 17298, 15972, // alpha = 0.17032 + 16772, 47104, 17161, 15858, // alpha = 0.1836735 + 16683, 47093, 17039, 15757, // alpha = 0.1975309 + 16603, 47073, 16928, 15667, // alpha = 0.2118922 + 16526, 47035, 16822, 15578, // alpha = 0.2267574 + 16458, 46992, 16726, 15498, // alpha = 0.2421265 + 16396, 46948, 16640, 15424, // alpha = 0.2579995 + 16298, 46900, 16562, 15353, // alpha = 0.2743765 + 16201, 46854, 16492, 15230, // alpha = 0.2912573 + 16115, 46805, 16428, 15118, // alpha = 0.308642 + 16037, 46757, 16357, 15014, // alpha = 0.3265306 + 15965, 46708, 16252, 14915, // alpha = 0.3449232 + 15902, 46656, 16157, 14823, // alpha = 0.3638196 + 15841, 46595, 16067, 14730, // alpha = 0.38322 + 15785, 46532, 15984, 14641, // alpha = 0.4031242 + 15735, 46467, 15910, 14556, // alpha = 0.4235324 + 15690, 46405, 15842, 14475, // alpha = 0.4444445 + 15646, 46341, 15781, 14396, // alpha = 0.4658605 + 15607, 46277, 15724, 14304, // alpha = 0.4877803 + 15570, 46205, 15671, 14153, // alpha = 0.5102041 + 15536, 46136, 15624, 14009, // alpha = 0.5331318 + 15504, 46058, 15580, 13870, // alpha = 0.5565634 + 15474, 45923, 15540, 13735, // alpha = 0.5804989 + 15446, 45781, 15502, 13603, // alpha = 0.6049383 + 15418, 45643, 15468, 13477, // alpha = 0.6298816 + 15393, 45508, 15436, 13355, // alpha = 0.6553288 + 15370, 45375, 15408, 13172, // alpha = 0.68128 + 15336, 45237, 15381, 12952, // alpha = 0.7077349 + 15298, 45105, 15354, 12751, // alpha = 0.7346939 + 15261, 44901, 15313, 12560, // alpha = 0.7621567 + 15227, 44637, 15275, 12380, // alpha = 0.7901235 + 15198, 44389, 15242, 12131, // alpha = 0.8185941 + 15175, 44147, 15213, 11792, // alpha = 0.8475687 + 15156, 43772, 15187, 11463, // alpha = 0.8770471 + 15141, 43310, 15164, 11021, // alpha = 0.9070295 + 15129, 42690, 15143, 10393, // alpha = 0.9375157 + 15119, 41606, 15125, 9340, // alpha = 0.9685059 + 15108, 3237, 15108, 34265, // alpha = 1 + + // Cos (theta) = 0.866717 + 24528, 47259, 24883, 23679, // alpha = 0.001 + 24528, 47259, 24883, 23679, // alpha = 0.001 + 24512, 47259, 24873, 23670, // alpha = 0.001007811 + 23268, 47259, 23702, 22510, // alpha = 0.002267574 + 22464, 47259, 22825, 21622, // alpha = 0.004031243 + 21750, 47259, 22171, 20918, // alpha = 0.006298816 + 21220, 47258, 21654, 20462, // alpha = 0.009070295 + 20752, 47258, 21181, 19924, // alpha = 0.01234568 + 20416, 47258, 20777, 19574, // alpha = 0.01612497 + 20000, 47258, 20499, 19212, // alpha = 0.02040816 + 19702, 47258, 20122, 18869, // alpha = 0.02519527 + 19481, 47257, 19828, 18616, // alpha = 0.03048627 + 19171, 47256, 19605, 18413, // alpha = 0.03628118 + 18910, 47256, 19406, 18112, // alpha = 0.04258 + 18703, 47255, 19130, 17874, // alpha = 0.04938272 + 18536, 47253, 18907, 17681, // alpha = 0.05668934 + 18366, 47251, 18725, 17524, // alpha = 0.06449988 + 18139, 47244, 18574, 17379, // alpha = 0.07281432 + 17950, 47235, 18448, 17160, // alpha = 0.08163266 + 17789, 47229, 18248, 16975, // alpha = 0.09095491 + 17652, 47223, 18065, 16817, // alpha = 0.1007811 + 17534, 47216, 17907, 16681, // alpha = 0.1111111 + 17433, 47208, 17771, 16563, // alpha = 0.1219451 + 17281, 47196, 17652, 16460, // alpha = 0.1332829 + 17126, 47187, 17548, 16357, // alpha = 0.1451247 + 16991, 47177, 17456, 16199, // alpha = 0.1574704 + 16873, 47165, 17343, 16060, // alpha = 0.17032 + 16770, 47156, 17201, 15939, // alpha = 0.1836735 + 16680, 47148, 17076, 15833, // alpha = 0.1975309 + 16602, 47139, 16962, 15739, // alpha = 0.2118922 + 16526, 47121, 16855, 15646, // alpha = 0.2267574 + 16457, 47091, 16756, 15561, // alpha = 0.2421265 + 16396, 47044, 16667, 15483, // alpha = 0.2579995 + 16299, 46993, 16586, 15412, // alpha = 0.2743765 + 16201, 46942, 16513, 15334, // alpha = 0.2912573 + 16114, 46889, 16447, 15214, // alpha = 0.308642 + 16037, 46836, 16387, 15104, // alpha = 0.3265306 + 15967, 46783, 16283, 15000, // alpha = 0.3449232 + 15903, 46729, 16184, 14902, // alpha = 0.3638196 + 15844, 46667, 16093, 14806, // alpha = 0.38322 + 15788, 46600, 16007, 14711, // alpha = 0.4031242 + 15737, 46530, 15929, 14621, // alpha = 0.4235324 + 15690, 46464, 15860, 14533, // alpha = 0.4444445 + 15648, 46395, 15796, 14450, // alpha = 0.4658605 + 15610, 46328, 15738, 14371, // alpha = 0.4877803 + 15572, 46257, 15684, 14245, // alpha = 0.5102041 + 15537, 46182, 15634, 14091, // alpha = 0.5331318 + 15505, 46110, 15589, 13944, // alpha = 0.5565634 + 15475, 46000, 15548, 13803, // alpha = 0.5804989 + 15447, 45858, 15510, 13665, // alpha = 0.6049383 + 15420, 45709, 15474, 13533, // alpha = 0.6298816 + 15394, 45568, 15442, 13404, // alpha = 0.6553288 + 15370, 45428, 15412, 13255, // alpha = 0.68128 + 15336, 45288, 15384, 13024, // alpha = 0.7077349 + 15297, 45148, 15360, 12809, // alpha = 0.7346939 + 15263, 44972, 15316, 12611, // alpha = 0.7621567 + 15227, 44709, 15278, 12425, // alpha = 0.7901235 + 15197, 44441, 15244, 12202, // alpha = 0.8185941 + 15172, 44192, 15214, 11856, // alpha = 0.8475687 + 15153, 43847, 15187, 11512, // alpha = 0.8770471 + 15138, 43358, 15163, 11096, // alpha = 0.9070295 + 15127, 42772, 15142, 10444, // alpha = 0.9375157 + 15117, 41685, 15123, 9391, // alpha = 0.9685059 + 15106, 3681, 15106, 35506, // alpha = 1 + + // Cos (theta) = 0.8548753 + 24528, 47323, 24920, 23742, // alpha = 0.001 + 24528, 47323, 24920, 23742, // alpha = 0.001 + 24512, 47323, 24910, 23732, // alpha = 0.001007811 + 23268, 47323, 23735, 22575, // alpha = 0.002267574 + 22464, 47323, 22862, 21684, // alpha = 0.004031243 + 21750, 47323, 22218, 20998, // alpha = 0.006298816 + 21220, 47323, 21687, 20527, // alpha = 0.009070295 + 20752, 47323, 21229, 20005, // alpha = 0.01234568 + 20416, 47322, 20813, 19636, // alpha = 0.01612497 + 20000, 47322, 20528, 19311, // alpha = 0.02040816 + 19702, 47322, 20169, 18949, // alpha = 0.02519527 + 19481, 47321, 19867, 18681, // alpha = 0.03048627 + 19171, 47320, 19638, 18478, // alpha = 0.03628118 + 18910, 47319, 19459, 18206, // alpha = 0.04258 + 18703, 47318, 19178, 17955, // alpha = 0.04938272 + 18535, 47317, 18949, 17752, // alpha = 0.05668934 + 18365, 47314, 18761, 17586, // alpha = 0.06449988 + 18139, 47305, 18606, 17448, // alpha = 0.07281432 + 17949, 47297, 18476, 17258, // alpha = 0.08163266 + 17788, 47290, 18299, 17062, // alpha = 0.09095491 + 17651, 47284, 18110, 16895, // alpha = 0.1007811 + 17534, 47277, 17948, 16751, // alpha = 0.1111111 + 17432, 47267, 17807, 16627, // alpha = 0.1219451 + 17279, 47255, 17685, 16519, // alpha = 0.1332829 + 17124, 47245, 17577, 16424, // alpha = 0.1451247 + 16989, 47233, 17483, 16297, // alpha = 0.1574704 + 16871, 47220, 17392, 16151, // alpha = 0.17032 + 16768, 47209, 17245, 16023, // alpha = 0.1836735 + 16679, 47198, 17115, 15911, // alpha = 0.1975309 + 16599, 47188, 16999, 15811, // alpha = 0.2118922 + 16526, 47172, 16890, 15716, // alpha = 0.2267574 + 16457, 47148, 16788, 15627, // alpha = 0.2421265 + 16397, 47122, 16695, 15545, // alpha = 0.2579995 + 16299, 47086, 16612, 15469, // alpha = 0.2743765 + 16202, 47030, 16536, 15400, // alpha = 0.2912573 + 16115, 46973, 16467, 15313, // alpha = 0.308642 + 16037, 46916, 16405, 15196, // alpha = 0.3265306 + 15968, 46857, 16314, 15087, // alpha = 0.3449232 + 15904, 46800, 16211, 14982, // alpha = 0.3638196 + 15846, 46737, 16119, 14882, // alpha = 0.38322 + 15790, 46669, 16031, 14782, // alpha = 0.4031242 + 15739, 46594, 15951, 14686, // alpha = 0.4235324 + 15692, 46522, 15877, 14593, // alpha = 0.4444445 + 15649, 46450, 15812, 14504, // alpha = 0.4658605 + 15610, 46379, 15752, 14419, // alpha = 0.4877803 + 15572, 46306, 15697, 14336, // alpha = 0.5102041 + 15539, 46229, 15645, 14177, // alpha = 0.5331318 + 15506, 46152, 15599, 14018, // alpha = 0.5565634 + 15476, 46074, 15556, 13869, // alpha = 0.5804989 + 15448, 45928, 15517, 13726, // alpha = 0.6049383 + 15421, 45777, 15481, 13587, // alpha = 0.6298816 + 15396, 45625, 15448, 13454, // alpha = 0.6553288 + 15371, 45481, 15416, 13325, // alpha = 0.68128 + 15339, 45337, 15388, 13101, // alpha = 0.7077349 + 15295, 45193, 15362, 12871, // alpha = 0.7346939 + 15260, 45045, 15319, 12662, // alpha = 0.7621567 + 15227, 44776, 15280, 12469, // alpha = 0.7901235 + 15196, 44500, 15245, 12275, // alpha = 0.8185941 + 15170, 44233, 15214, 11916, // alpha = 0.8475687 + 15150, 43929, 15186, 11564, // alpha = 0.8770471 + 15136, 43411, 15162, 11165, // alpha = 0.9070295 + 15124, 42828, 15141, 10490, // alpha = 0.9375157 + 15114, 41767, 15122, 9436, // alpha = 0.9685059 + 15104, 3422, 15104, 35036, // alpha = 1 + + // Cos (theta) = 0.8425296 + 24528, 47389, 24961, 23807, // alpha = 0.001 + 24528, 47389, 24961, 23807, // alpha = 0.001 + 24513, 47389, 24950, 23797, // alpha = 0.001007811 + 23268, 47389, 23771, 22632, // alpha = 0.002267574 + 22464, 47389, 22902, 21749, // alpha = 0.004031243 + 21750, 47389, 22269, 21080, // alpha = 0.006298816 + 21220, 47389, 21722, 20584, // alpha = 0.009070295 + 20752, 47389, 21281, 20089, // alpha = 0.01234568 + 20416, 47389, 20854, 19700, // alpha = 0.01612497 + 20000, 47388, 20560, 19412, // alpha = 0.02040816 + 19702, 47388, 20220, 19031, // alpha = 0.02519527 + 19481, 47387, 19910, 18749, // alpha = 0.03048627 + 19171, 47386, 19673, 18535, // alpha = 0.03628118 + 18910, 47385, 19489, 18304, // alpha = 0.04258 + 18702, 47384, 19230, 18039, // alpha = 0.04938272 + 18535, 47382, 18994, 17825, // alpha = 0.05668934 + 18365, 47379, 18801, 17650, // alpha = 0.06449988 + 18139, 47368, 18641, 17505, // alpha = 0.07281432 + 17949, 47360, 18507, 17358, // alpha = 0.08163266 + 17788, 47354, 18354, 17152, // alpha = 0.09095491 + 17651, 47347, 18159, 16976, // alpha = 0.1007811 + 17533, 47339, 17992, 16824, // alpha = 0.1111111 + 17431, 47327, 17847, 16693, // alpha = 0.1219451 + 17277, 47315, 17721, 16579, // alpha = 0.1332829 + 17122, 47304, 17610, 16479, // alpha = 0.1451247 + 16987, 47290, 17512, 16391, // alpha = 0.1574704 + 16869, 47276, 17426, 16244, // alpha = 0.17032 + 16766, 47263, 17292, 16108, // alpha = 0.1836735 + 16677, 47250, 17157, 15990, // alpha = 0.1975309 + 16596, 47238, 17037, 15882, // alpha = 0.2118922 + 16525, 47224, 16927, 15788, // alpha = 0.2267574 + 16457, 47199, 16822, 15693, // alpha = 0.2421265 + 16396, 47172, 16726, 15607, // alpha = 0.2579995 + 16300, 47142, 16639, 15528, // alpha = 0.2743765 + 16203, 47112, 16560, 15455, // alpha = 0.2912573 + 16117, 47058, 16489, 15388, // alpha = 0.308642 + 16038, 46997, 16424, 15291, // alpha = 0.3265306 + 15968, 46933, 16347, 15173, // alpha = 0.3449232 + 15905, 46871, 16241, 15063, // alpha = 0.3638196 + 15846, 46805, 16145, 14957, // alpha = 0.38322 + 15792, 46737, 16056, 14854, // alpha = 0.4031242 + 15742, 46658, 15973, 14752, // alpha = 0.4235324 + 15694, 46581, 15896, 14653, // alpha = 0.4444445 + 15651, 46504, 15828, 14559, // alpha = 0.4658605 + 15610, 46428, 15767, 14469, // alpha = 0.4877803 + 15574, 46353, 15710, 14382, // alpha = 0.5102041 + 15540, 46275, 15657, 14260, // alpha = 0.5331318 + 15507, 46194, 15608, 14096, // alpha = 0.5565634 + 15476, 46115, 15564, 13935, // alpha = 0.5804989 + 15450, 45995, 15524, 13789, // alpha = 0.6049383 + 15422, 45844, 15488, 13640, // alpha = 0.6298816 + 15397, 45686, 15453, 13502, // alpha = 0.6553288 + 15373, 45531, 15421, 13367, // alpha = 0.68128 + 15338, 45383, 15391, 13169, // alpha = 0.7077349 + 15297, 45237, 15365, 12935, // alpha = 0.7346939 + 15258, 45088, 15323, 12712, // alpha = 0.7621567 + 15225, 44832, 15282, 12509, // alpha = 0.7901235 + 15194, 44560, 15246, 12319, // alpha = 0.8185941 + 15169, 44276, 15215, 11974, // alpha = 0.8475687 + 15148, 43990, 15186, 11608, // alpha = 0.8770471 + 15133, 43466, 15161, 11237, // alpha = 0.9070295 + 15121, 42903, 15139, 10539, // alpha = 0.9375157 + 15112, 41804, 15120, 9477, // alpha = 0.9685059 + 15102, 2753, 15102, 35104, // alpha = 1 + + // Cos (theta) = 0.82968 + 24528, 47458, 25005, 23874, // alpha = 0.001 + 24528, 47458, 25005, 23874, // alpha = 0.001 + 24513, 47458, 24993, 23863, // alpha = 0.001007811 + 23268, 47458, 23809, 22691, // alpha = 0.002267574 + 22464, 47458, 22945, 21815, // alpha = 0.004031243 + 21750, 47458, 22325, 21165, // alpha = 0.006298816 + 21220, 47458, 21761, 20643, // alpha = 0.009070295 + 20752, 47458, 21338, 20176, // alpha = 0.01234568 + 20416, 47457, 20897, 19767, // alpha = 0.01612497 + 20000, 47457, 20594, 19487, // alpha = 0.02040816 + 19702, 47456, 20276, 19116, // alpha = 0.02519527 + 19481, 47455, 19955, 18819, // alpha = 0.03048627 + 19171, 47454, 19712, 18594, // alpha = 0.03628118 + 18909, 47453, 19522, 18404, // alpha = 0.04258 + 18702, 47451, 19286, 18125, // alpha = 0.04938272 + 18535, 47449, 19043, 17900, // alpha = 0.05668934 + 18364, 47445, 18844, 17716, // alpha = 0.06449988 + 18138, 47433, 18679, 17563, // alpha = 0.07281432 + 17948, 47426, 18540, 17435, // alpha = 0.08163266 + 17787, 47419, 18413, 17244, // alpha = 0.09095491 + 17650, 47412, 18212, 17059, // alpha = 0.1007811 + 17532, 47403, 18040, 16899, // alpha = 0.1111111 + 17430, 47389, 17890, 16761, // alpha = 0.1219451 + 17275, 47377, 17759, 16641, // alpha = 0.1332829 + 17120, 47364, 17645, 16535, // alpha = 0.1451247 + 16985, 47349, 17544, 16443, // alpha = 0.1574704 + 16866, 47334, 17455, 16339, // alpha = 0.17032 + 16764, 47318, 17343, 16196, // alpha = 0.1836735 + 16672, 47303, 17203, 16068, // alpha = 0.1975309 + 16593, 47289, 17078, 15958, // alpha = 0.2118922 + 16522, 47274, 16966, 15857, // alpha = 0.2267574 + 16457, 47251, 16859, 15763, // alpha = 0.2421265 + 16397, 47221, 16759, 15672, // alpha = 0.2579995 + 16302, 47190, 16668, 15589, // alpha = 0.2743765 + 16204, 47158, 16586, 15511, // alpha = 0.2912573 + 16115, 47125, 16512, 15439, // alpha = 0.308642 + 16036, 47078, 16445, 15372, // alpha = 0.3265306 + 15966, 47010, 16384, 15260, // alpha = 0.3449232 + 15903, 46942, 16274, 15143, // alpha = 0.3638196 + 15845, 46873, 16174, 15031, // alpha = 0.38322 + 15791, 46802, 16082, 14923, // alpha = 0.4031242 + 15741, 46722, 15996, 14818, // alpha = 0.4235324 + 15695, 46641, 15917, 14714, // alpha = 0.4444445 + 15653, 46559, 15846, 14616, // alpha = 0.4658605 + 15612, 46478, 15782, 14520, // alpha = 0.4877803 + 15575, 46400, 15723, 14427, // alpha = 0.5102041 + 15540, 46320, 15669, 14339, // alpha = 0.5331318 + 15508, 46236, 15619, 14171, // alpha = 0.5565634 + 15478, 46153, 15574, 14004, // alpha = 0.5804989 + 15449, 46063, 15531, 13844, // alpha = 0.6049383 + 15424, 45904, 15494, 13695, // alpha = 0.6298816 + 15397, 45747, 15459, 13548, // alpha = 0.6553288 + 15373, 45584, 15426, 13409, // alpha = 0.68128 + 15341, 45427, 15396, 13240, // alpha = 0.7077349 + 15297, 45277, 15368, 12994, // alpha = 0.7346939 + 15259, 45126, 15327, 12764, // alpha = 0.7621567 + 15224, 44895, 15285, 12551, // alpha = 0.7901235 + 15192, 44606, 15247, 12353, // alpha = 0.8185941 + 15166, 44326, 15215, 12034, // alpha = 0.8475687 + 15145, 44043, 15185, 11655, // alpha = 0.8770471 + 15130, 43512, 15160, 11285, // alpha = 0.9070295 + 15119, 42979, 15138, 10584, // alpha = 0.9375157 + 15110, 41875, 15118, 9523, // alpha = 0.9685059 + 15099, 3420, 15099, 35089, // alpha = 1 + + // Cos (theta) = 0.8163265 + 24528, 47529, 25053, 23943, // alpha = 0.001 + 24528, 47529, 25053, 23943, // alpha = 0.001 + 24513, 47529, 25041, 23932, // alpha = 0.001007811 + 23268, 47529, 23852, 22752, // alpha = 0.002267574 + 22464, 47529, 22993, 21884, // alpha = 0.004031243 + 21750, 47529, 22386, 21253, // alpha = 0.006298816 + 21220, 47529, 21803, 20704, // alpha = 0.009070295 + 20752, 47529, 21400, 20266, // alpha = 0.01234568 + 20416, 47528, 20945, 19836, // alpha = 0.01612497 + 20000, 47528, 20632, 19541, // alpha = 0.02040816 + 19701, 47527, 20337, 19204, // alpha = 0.02519527 + 19481, 47526, 20006, 18892, // alpha = 0.03048627 + 19170, 47525, 19754, 18655, // alpha = 0.03628118 + 18909, 47523, 19558, 18470, // alpha = 0.04258 + 18702, 47521, 19348, 18214, // alpha = 0.04938272 + 18535, 47519, 19096, 17977, // alpha = 0.05668934 + 18364, 47512, 18890, 17784, // alpha = 0.06449988 + 18137, 47502, 18720, 17623, // alpha = 0.07281432 + 17947, 47493, 18576, 17488, // alpha = 0.08163266 + 17786, 47486, 18455, 17340, // alpha = 0.09095491 + 17649, 47478, 18270, 17145, // alpha = 0.1007811 + 17531, 47468, 18092, 16977, // alpha = 0.1111111 + 17429, 47453, 17937, 16832, // alpha = 0.1219451 + 17272, 47441, 17802, 16705, // alpha = 0.1332829 + 17117, 47426, 17683, 16594, // alpha = 0.1451247 + 16982, 47409, 17578, 16496, // alpha = 0.1574704 + 16864, 47393, 17486, 16411, // alpha = 0.17032 + 16761, 47374, 17398, 16286, // alpha = 0.1836735 + 16669, 47358, 17253, 16152, // alpha = 0.1975309 + 16590, 47340, 17123, 16034, // alpha = 0.2118922 + 16520, 47324, 17006, 15930, // alpha = 0.2267574 + 16457, 47303, 16897, 15834, // alpha = 0.2421265 + 16397, 47272, 16794, 15738, // alpha = 0.2579995 + 16299, 47239, 16700, 15648, // alpha = 0.2743765 + 16203, 47204, 16614, 15567, // alpha = 0.2912573 + 16113, 47168, 16537, 15490, // alpha = 0.308642 + 16035, 47131, 16467, 15420, // alpha = 0.3265306 + 15965, 47088, 16403, 15348, // alpha = 0.3449232 + 15901, 47013, 16308, 15224, // alpha = 0.3638196 + 15843, 46939, 16204, 15105, // alpha = 0.38322 + 15790, 46866, 16108, 14993, // alpha = 0.4031242 + 15741, 46786, 16021, 14883, // alpha = 0.4235324 + 15696, 46700, 15939, 14775, // alpha = 0.4444445 + 15652, 46614, 15864, 14670, // alpha = 0.4658605 + 15613, 46528, 15798, 14571, // alpha = 0.4877803 + 15576, 46444, 15737, 14473, // alpha = 0.5102041 + 15541, 46362, 15681, 14381, // alpha = 0.5331318 + 15509, 46278, 15630, 14249, // alpha = 0.5565634 + 15479, 46191, 15583, 14074, // alpha = 0.5804989 + 15450, 46105, 15540, 13906, // alpha = 0.6049383 + 15424, 45966, 15501, 13748, // alpha = 0.6298816 + 15398, 45801, 15465, 13597, // alpha = 0.6553288 + 15373, 45640, 15431, 13450, // alpha = 0.68128 + 15341, 45473, 15400, 13311, // alpha = 0.7077349 + 15300, 45315, 15371, 13056, // alpha = 0.7346939 + 15258, 45164, 15331, 12813, // alpha = 0.7621567 + 15223, 44957, 15287, 12592, // alpha = 0.7901235 + 15190, 44658, 15248, 12385, // alpha = 0.8185941 + 15163, 44365, 15215, 12089, // alpha = 0.8475687 + 15142, 44084, 15185, 11702, // alpha = 0.8770471 + 15127, 43563, 15159, 11317, // alpha = 0.9070295 + 15116, 43022, 15136, 10629, // alpha = 0.9375157 + 15107, 41972, 15116, 9577, // alpha = 0.9685059 + 15097, 3403, 15097, 35123, // alpha = 1 + + // Cos (theta) = 0.8024691 + 24528, 47603, 25105, 24015, // alpha = 0.001 + 24528, 47603, 25105, 24015, // alpha = 0.001 + 24512, 47603, 25093, 24004, // alpha = 0.001007811 + 23268, 47603, 23898, 22816, // alpha = 0.002267574 + 22464, 47603, 23045, 21956, // alpha = 0.004031243 + 21750, 47603, 22452, 21345, // alpha = 0.006298816 + 21220, 47603, 21850, 20768, // alpha = 0.009070295 + 20752, 47602, 21468, 20359, // alpha = 0.01234568 + 20416, 47602, 20996, 19907, // alpha = 0.01612497 + 19999, 47601, 20673, 19597, // alpha = 0.02040816 + 19701, 47600, 20403, 19296, // alpha = 0.02519527 + 19481, 47599, 20060, 18968, // alpha = 0.03048627 + 19170, 47598, 19799, 18718, // alpha = 0.03628118 + 18909, 47596, 19596, 18524, // alpha = 0.04258 + 18702, 47594, 19415, 18307, // alpha = 0.04938272 + 18534, 47591, 19154, 18058, // alpha = 0.05668934 + 18363, 47581, 18941, 17854, // alpha = 0.06449988 + 18136, 47571, 18764, 17685, // alpha = 0.07281432 + 17946, 47564, 18616, 17544, // alpha = 0.08163266 + 17785, 47556, 18490, 17423, // alpha = 0.09095491 + 17648, 47547, 18333, 17234, // alpha = 0.1007811 + 17530, 47534, 18148, 17057, // alpha = 0.1111111 + 17428, 47520, 17987, 16904, // alpha = 0.1219451 + 17269, 47506, 17847, 16771, // alpha = 0.1332829 + 17115, 47489, 17724, 16654, // alpha = 0.1451247 + 16980, 47471, 17615, 16552, // alpha = 0.1574704 + 16861, 47453, 17519, 16461, // alpha = 0.17032 + 16757, 47432, 17433, 16377, // alpha = 0.1836735 + 16666, 47414, 17307, 16236, // alpha = 0.1975309 + 16586, 47393, 17171, 16112, // alpha = 0.2118922 + 16517, 47374, 17048, 16003, // alpha = 0.2267574 + 16455, 47353, 16937, 15904, // alpha = 0.2421265 + 16396, 47323, 16832, 15805, // alpha = 0.2579995 + 16297, 47287, 16734, 15710, // alpha = 0.2743765 + 16200, 47250, 16644, 15624, // alpha = 0.2912573 + 16113, 47213, 16563, 15544, // alpha = 0.308642 + 16035, 47173, 16490, 15469, // alpha = 0.3265306 + 15965, 47135, 16424, 15400, // alpha = 0.3449232 + 15901, 47085, 16343, 15308, // alpha = 0.3638196 + 15844, 47006, 16235, 15184, // alpha = 0.38322 + 15791, 46927, 16136, 15064, // alpha = 0.4031242 + 15741, 46846, 16046, 14949, // alpha = 0.4235324 + 15695, 46760, 15962, 14835, // alpha = 0.4444445 + 15651, 46668, 15883, 14725, // alpha = 0.4658605 + 15612, 46577, 15815, 14619, // alpha = 0.4877803 + 15577, 46490, 15751, 14520, // alpha = 0.5102041 + 15542, 46403, 15693, 14421, // alpha = 0.5331318 + 15510, 46316, 15641, 14320, // alpha = 0.5565634 + 15479, 46230, 15593, 14140, // alpha = 0.5804989 + 15451, 46139, 15548, 13968, // alpha = 0.6049383 + 15424, 46023, 15507, 13802, // alpha = 0.6298816 + 15399, 45854, 15470, 13642, // alpha = 0.6553288 + 15373, 45689, 15436, 13491, // alpha = 0.68128 + 15340, 45521, 15404, 13347, // alpha = 0.7077349 + 15297, 45353, 15374, 13110, // alpha = 0.7346939 + 15259, 45195, 15336, 12865, // alpha = 0.7621567 + 15223, 45024, 15289, 12634, // alpha = 0.7901235 + 15189, 44710, 15250, 12420, // alpha = 0.8185941 + 15161, 44404, 15216, 12144, // alpha = 0.8475687 + 15139, 44116, 15185, 11747, // alpha = 0.8770471 + 15123, 43618, 15158, 11352, // alpha = 0.9070295 + 15113, 43053, 15134, 10670, // alpha = 0.9375157 + 15104, 42000, 15113, 9612, // alpha = 0.9685059 + 15094, 2717, 15094, 34626, // alpha = 1 + + // Cos (theta) = 0.7881078 + 24528, 47680, 25162, 24090, // alpha = 0.001 + 24528, 47680, 25162, 24090, // alpha = 0.001 + 24512, 47680, 25150, 24078, // alpha = 0.001007811 + 23268, 47680, 23948, 22882, // alpha = 0.002267574 + 22464, 47679, 23101, 22030, // alpha = 0.004031243 + 21750, 47679, 22525, 21440, // alpha = 0.006298816 + 21220, 47679, 21900, 20834, // alpha = 0.009070295 + 20752, 47679, 21523, 20456, // alpha = 0.01234568 + 20416, 47678, 21053, 19981, // alpha = 0.01612497 + 19999, 47678, 20718, 19656, // alpha = 0.02040816 + 19701, 47677, 20475, 19391, // alpha = 0.02519527 + 19481, 47676, 20120, 19046, // alpha = 0.03048627 + 19170, 47674, 19849, 18784, // alpha = 0.03628118 + 18909, 47672, 19639, 18580, // alpha = 0.04258 + 18701, 47669, 19472, 18403, // alpha = 0.04938272 + 18534, 47665, 19218, 18142, // alpha = 0.05668934 + 18362, 47654, 18996, 17928, // alpha = 0.06449988 + 18135, 47645, 18813, 17750, // alpha = 0.07281432 + 17945, 47637, 18659, 17601, // alpha = 0.08163266 + 17784, 47628, 18528, 17475, // alpha = 0.09095491 + 17646, 47617, 18401, 17326, // alpha = 0.1007811 + 17528, 47603, 18209, 17140, // alpha = 0.1111111 + 17426, 47588, 18042, 16979, // alpha = 0.1219451 + 17267, 47573, 17896, 16839, // alpha = 0.1332829 + 17112, 47554, 17768, 16716, // alpha = 0.1451247 + 16977, 47535, 17655, 16608, // alpha = 0.1574704 + 16857, 47514, 17555, 16512, // alpha = 0.17032 + 16753, 47492, 17466, 16428, // alpha = 0.1836735 + 16663, 47470, 17364, 16324, // alpha = 0.1975309 + 16584, 47447, 17222, 16194, // alpha = 0.2118922 + 16515, 47425, 17094, 16079, // alpha = 0.2267574 + 16452, 47402, 16979, 15973, // alpha = 0.2421265 + 16394, 47375, 16873, 15872, // alpha = 0.2579995 + 16297, 47337, 16770, 15775, // alpha = 0.2743765 + 16201, 47298, 16676, 15684, // alpha = 0.2912573 + 16112, 47257, 16592, 15599, // alpha = 0.308642 + 16034, 47215, 16515, 15520, // alpha = 0.3265306 + 15964, 47173, 16445, 15446, // alpha = 0.3449232 + 15900, 47130, 16381, 15376, // alpha = 0.3638196 + 15842, 47073, 16267, 15260, // alpha = 0.38322 + 15789, 46989, 16164, 15134, // alpha = 0.4031242 + 15742, 46904, 16071, 15016, // alpha = 0.4235324 + 15696, 46817, 15985, 14898, // alpha = 0.4444445 + 15653, 46724, 15905, 14783, // alpha = 0.4658605 + 15612, 46628, 15832, 14669, // alpha = 0.4877803 + 15576, 46534, 15766, 14564, // alpha = 0.5102041 + 15542, 46443, 15706, 14463, // alpha = 0.5331318 + 15510, 46354, 15652, 14365, // alpha = 0.5565634 + 15480, 46265, 15603, 14209, // alpha = 0.5804989 + 15451, 46173, 15557, 14027, // alpha = 0.6049383 + 15424, 46082, 15514, 13851, // alpha = 0.6298816 + 15400, 45906, 15476, 13690, // alpha = 0.6553288 + 15374, 45734, 15441, 13532, // alpha = 0.68128 + 15341, 45567, 15408, 13382, // alpha = 0.7077349 + 15296, 45395, 15377, 13171, // alpha = 0.7346939 + 15256, 45226, 15340, 12909, // alpha = 0.7621567 + 15220, 45067, 15292, 12672, // alpha = 0.7901235 + 15189, 44763, 15251, 12450, // alpha = 0.8185941 + 15158, 44448, 15215, 12200, // alpha = 0.8475687 + 15136, 44140, 15184, 11786, // alpha = 0.8770471 + 15120, 43672, 15156, 11386, // alpha = 0.9070295 + 15110, 43085, 15132, 10714, // alpha = 0.9375157 + 15101, 42033, 15111, 9653, // alpha = 0.9685059 + 15091, 4033, 15091, 35644, // alpha = 1 + + // Cos (theta) = 0.7732427 + 24528, 47759, 25224, 24168, // alpha = 0.001 + 24528, 47759, 25224, 24168, // alpha = 0.001 + 24512, 47759, 25212, 24155, // alpha = 0.001007811 + 23268, 47759, 24003, 22951, // alpha = 0.002267574 + 22464, 47759, 23163, 22107, // alpha = 0.004031243 + 21750, 47759, 22566, 21521, // alpha = 0.006298816 + 21220, 47759, 21955, 20902, // alpha = 0.009070295 + 20752, 47759, 21564, 20519, // alpha = 0.01234568 + 20416, 47758, 21115, 20059, // alpha = 0.01612497 + 19999, 47757, 20766, 19717, // alpha = 0.02040816 + 19701, 47756, 20517, 19473, // alpha = 0.02519527 + 19481, 47755, 20185, 19128, // alpha = 0.03048627 + 19170, 47753, 19904, 18852, // alpha = 0.03628118 + 18908, 47751, 19685, 18638, // alpha = 0.04258 + 18701, 47748, 19512, 18468, // alpha = 0.04938272 + 18534, 47743, 19287, 18229, // alpha = 0.05668934 + 18361, 47730, 19057, 18004, // alpha = 0.06449988 + 18134, 47721, 18866, 17817, // alpha = 0.07281432 + 17944, 47712, 18705, 17660, // alpha = 0.08163266 + 17782, 47703, 18570, 17528, // alpha = 0.09095491 + 17645, 47690, 18454, 17414, // alpha = 0.1007811 + 17527, 47674, 18275, 17226, // alpha = 0.1111111 + 17424, 47659, 18102, 17056, // alpha = 0.1219451 + 17263, 47642, 17950, 16909, // alpha = 0.1332829 + 17109, 47622, 17816, 16780, // alpha = 0.1451247 + 16973, 47601, 17699, 16666, // alpha = 0.1574704 + 16854, 47577, 17594, 16566, // alpha = 0.17032 + 16750, 47553, 17501, 16477, // alpha = 0.1836735 + 16660, 47528, 17417, 16400, // alpha = 0.1975309 + 16581, 47503, 17277, 16279, // alpha = 0.2118922 + 16510, 47478, 17144, 16155, // alpha = 0.2267574 + 16448, 47452, 17024, 16042, // alpha = 0.2421265 + 16393, 47425, 16914, 15941, // alpha = 0.2579995 + 16295, 47386, 16809, 15840, // alpha = 0.2743765 + 16200, 47345, 16710, 15745, // alpha = 0.2912573 + 16113, 47301, 16621, 15656, // alpha = 0.308642 + 16035, 47257, 16541, 15572, // alpha = 0.3265306 + 15964, 47213, 16468, 15494, // alpha = 0.3449232 + 15900, 47167, 16402, 15420, // alpha = 0.3638196 + 15842, 47122, 16301, 15340, // alpha = 0.38322 + 15788, 47051, 16194, 15207, // alpha = 0.4031242 + 15739, 46961, 16097, 15079, // alpha = 0.4235324 + 15695, 46870, 16009, 14957, // alpha = 0.4444445 + 15654, 46778, 15926, 14840, // alpha = 0.4658605 + 15613, 46678, 15850, 14722, // alpha = 0.4877803 + 15575, 46579, 15781, 14608, // alpha = 0.5102041 + 15541, 46484, 15719, 14503, // alpha = 0.5331318 + 15510, 46389, 15663, 14402, // alpha = 0.5565634 + 15479, 46298, 15612, 14270, // alpha = 0.5804989 + 15451, 46207, 15565, 14084, // alpha = 0.6049383 + 15424, 46112, 15521, 13906, // alpha = 0.6298816 + 15399, 45959, 15481, 13735, // alpha = 0.6553288 + 15375, 45780, 15446, 13572, // alpha = 0.68128 + 15342, 45606, 15412, 13416, // alpha = 0.7077349 + 15297, 45436, 15380, 13232, // alpha = 0.7346939 + 15255, 45260, 15345, 12957, // alpha = 0.7621567 + 15218, 45093, 15294, 12711, // alpha = 0.7901235 + 15185, 44808, 15252, 12483, // alpha = 0.8185941 + 15156, 44492, 15216, 12254, // alpha = 0.8475687 + 15133, 44173, 15183, 11830, // alpha = 0.8770471 + 15117, 43709, 15155, 11415, // alpha = 0.9070295 + 15106, 43120, 15131, 10758, // alpha = 0.9375157 + 15098, 42075, 15108, 9702, // alpha = 0.9685059 + 15088, 4020, 15088, 34976, // alpha = 1 + + // Cos (theta) = 0.7578735 + 24528, 47843, 25292, 24250, // alpha = 0.001 + 24528, 47843, 25292, 24250, // alpha = 0.001 + 24513, 47843, 25280, 24236, // alpha = 0.001007811 + 23268, 47843, 24064, 23022, // alpha = 0.002267574 + 22464, 47843, 23231, 22188, // alpha = 0.004031243 + 21750, 47843, 22610, 21573, // alpha = 0.006298816 + 21220, 47843, 22015, 20974, // alpha = 0.009070295 + 20752, 47842, 21608, 20571, // alpha = 0.01234568 + 20416, 47841, 21183, 20140, // alpha = 0.01612497 + 19999, 47841, 20820, 19781, // alpha = 0.02040816 + 19701, 47839, 20560, 19524, // alpha = 0.02519527 + 19480, 47838, 20256, 19213, // alpha = 0.03048627 + 19169, 47836, 19964, 18924, // alpha = 0.03628118 + 18908, 47833, 19736, 18699, // alpha = 0.04258 + 18701, 47829, 19555, 18520, // alpha = 0.04938272 + 18533, 47822, 19362, 18319, // alpha = 0.05668934 + 18360, 47809, 19122, 18083, // alpha = 0.06449988 + 18133, 47800, 18923, 17887, // alpha = 0.07281432 + 17942, 47790, 18757, 17722, // alpha = 0.08163266 + 17781, 47780, 18615, 17583, // alpha = 0.09095491 + 17643, 47765, 18494, 17464, // alpha = 0.1007811 + 17525, 47749, 18348, 17315, // alpha = 0.1111111 + 17423, 47732, 18167, 17137, // alpha = 0.1219451 + 17260, 47712, 18008, 16982, // alpha = 0.1332829 + 17105, 47691, 17869, 16846, // alpha = 0.1451247 + 16969, 47668, 17746, 16727, // alpha = 0.1574704 + 16850, 47642, 17636, 16621, // alpha = 0.17032 + 16747, 47616, 17538, 16528, // alpha = 0.1836735 + 16656, 47588, 17451, 16447, // alpha = 0.1975309 + 16577, 47559, 17337, 16364, // alpha = 0.2118922 + 16505, 47531, 17197, 16231, // alpha = 0.2267574 + 16444, 47502, 17070, 16116, // alpha = 0.2421265 + 16390, 47473, 16956, 16009, // alpha = 0.2579995 + 16295, 47437, 16849, 15909, // alpha = 0.2743765 + 16197, 47393, 16747, 15806, // alpha = 0.2912573 + 16110, 47347, 16654, 15712, // alpha = 0.308642 + 16032, 47299, 16569, 15624, // alpha = 0.3265306 + 15961, 47252, 16493, 15541, // alpha = 0.3449232 + 15897, 47204, 16423, 15463, // alpha = 0.3638196 + 15839, 47155, 16338, 15388, // alpha = 0.38322 + 15786, 47108, 16225, 15277, // alpha = 0.4031242 + 15739, 47017, 16123, 15146, // alpha = 0.4235324 + 15694, 46923, 16032, 15018, // alpha = 0.4444445 + 15652, 46828, 15948, 14893, // alpha = 0.4658605 + 15614, 46729, 15870, 14775, // alpha = 0.4877803 + 15576, 46624, 15798, 14655, // alpha = 0.5102041 + 15540, 46525, 15732, 14542, // alpha = 0.5331318 + 15510, 46426, 15675, 14437, // alpha = 0.5565634 + 15480, 46330, 15622, 14335, // alpha = 0.5804989 + 15450, 46236, 15574, 14141, // alpha = 0.6049383 + 15424, 46143, 15530, 13957, // alpha = 0.6298816 + 15398, 46012, 15488, 13780, // alpha = 0.6553288 + 15375, 45826, 15451, 13612, // alpha = 0.68128 + 15343, 45644, 15416, 13452, // alpha = 0.7077349 + 15297, 45470, 15384, 13286, // alpha = 0.7346939 + 15255, 45297, 15350, 13010, // alpha = 0.7621567 + 15215, 45121, 15297, 12749, // alpha = 0.7901235 + 15183, 44851, 15253, 12513, // alpha = 0.8185941 + 15152, 44529, 15216, 12296, // alpha = 0.8475687 + 15129, 44213, 15183, 11872, // alpha = 0.8770471 + 15113, 43750, 15153, 11447, // alpha = 0.9070295 + 15102, 43145, 15128, 10799, // alpha = 0.9375157 + 15095, 42100, 15106, 9742, // alpha = 0.9685059 + 15085, 3007, 15085, 34288, // alpha = 1 + + // Cos (theta) = 0.7420005 + 24529, 47930, 25368, 24336, // alpha = 0.001 + 24529, 47930, 25368, 24336, // alpha = 0.001 + 24513, 47930, 25354, 24321, // alpha = 0.001007811 + 23268, 47930, 24130, 23098, // alpha = 0.002267574 + 22464, 47930, 23306, 22273, // alpha = 0.004031243 + 21750, 47930, 22657, 21627, // alpha = 0.006298816 + 21220, 47930, 22082, 21050, // alpha = 0.009070295 + 20752, 47929, 21657, 20627, // alpha = 0.01234568 + 20416, 47929, 21257, 20224, // alpha = 0.01612497 + 19999, 47928, 20879, 19848, // alpha = 0.02040816 + 19701, 47926, 20608, 19578, // alpha = 0.02519527 + 19480, 47924, 20335, 19302, // alpha = 0.03048627 + 19169, 47922, 20030, 18998, // alpha = 0.03628118 + 18907, 47919, 19792, 18762, // alpha = 0.04258 + 18700, 47914, 19603, 18575, // alpha = 0.04938272 + 18533, 47904, 19445, 18414, // alpha = 0.05668934 + 18359, 47892, 19195, 18166, // alpha = 0.06449988 + 18131, 47882, 18987, 17960, // alpha = 0.07281432 + 17940, 47872, 18813, 17787, // alpha = 0.08163266 + 17779, 47860, 18665, 17640, // alpha = 0.09095491 + 17641, 47842, 18538, 17515, // alpha = 0.1007811 + 17523, 47826, 18427, 17407, // alpha = 0.1111111 + 17421, 47808, 18237, 17220, // alpha = 0.1219451 + 17256, 47785, 18072, 17058, // alpha = 0.1332829 + 17100, 47762, 17926, 16914, // alpha = 0.1451247 + 16964, 47737, 17797, 16789, // alpha = 0.1574704 + 16846, 47708, 17682, 16678, // alpha = 0.17032 + 16743, 47679, 17579, 16582, // alpha = 0.1836735 + 16652, 47649, 17487, 16494, // alpha = 0.1975309 + 16571, 47617, 17402, 16417, // alpha = 0.2118922 + 16502, 47585, 17253, 16314, // alpha = 0.2267574 + 16441, 47553, 17121, 16191, // alpha = 0.2421265 + 16387, 47521, 17000, 16080, // alpha = 0.2579995 + 16289, 47485, 16891, 15973, // alpha = 0.2743765 + 16196, 47441, 16785, 15871, // alpha = 0.2912573 + 16107, 47392, 16688, 15770, // alpha = 0.308642 + 16028, 47342, 16599, 15676, // alpha = 0.3265306 + 15958, 47291, 16518, 15590, // alpha = 0.3449232 + 15894, 47240, 16446, 15506, // alpha = 0.3638196 + 15836, 47189, 16377, 15428, // alpha = 0.38322 + 15785, 47139, 16258, 15351, // alpha = 0.4031242 + 15736, 47073, 16153, 15208, // alpha = 0.4235324 + 15691, 46973, 16056, 15075, // alpha = 0.4444445 + 15652, 46875, 15970, 14948, // alpha = 0.4658605 + 15612, 46777, 15889, 14824, // alpha = 0.4877803 + 15577, 46671, 15814, 14703, // alpha = 0.5102041 + 15541, 46564, 15747, 14584, // alpha = 0.5331318 + 15509, 46462, 15687, 14473, // alpha = 0.5565634 + 15479, 46362, 15632, 14367, // alpha = 0.5804989 + 15450, 46265, 15582, 14199, // alpha = 0.6049383 + 15423, 46170, 15537, 14005, // alpha = 0.6298816 + 15397, 46067, 15495, 13822, // alpha = 0.6553288 + 15375, 45872, 15456, 13649, // alpha = 0.68128 + 15342, 45683, 15421, 13484, // alpha = 0.7077349 + 15297, 45502, 15387, 13328, // alpha = 0.7346939 + 15253, 45327, 15353, 13055, // alpha = 0.7621567 + 15214, 45153, 15300, 12788, // alpha = 0.7901235 + 15181, 44896, 15254, 12543, // alpha = 0.8185941 + 15149, 44562, 15215, 12320, // alpha = 0.8475687 + 15125, 44238, 15182, 11912, // alpha = 0.8770471 + 15109, 43810, 15152, 11481, // alpha = 0.9070295 + 15099, 43173, 15126, 10836, // alpha = 0.9375157 + 15091, 42114, 15103, 9775, // alpha = 0.9685059 + 15082, 3020, 15082, 33262, // alpha = 1 + + // Cos (theta) = 0.7256235 + 24529, 48022, 25451, 24425, // alpha = 0.001 + 24529, 48022, 25451, 24425, // alpha = 0.001 + 24512, 48022, 25436, 24410, // alpha = 0.001007811 + 23268, 48022, 24202, 23177, // alpha = 0.002267574 + 22464, 48022, 23388, 22362, // alpha = 0.004031243 + 21750, 48022, 22710, 21684, // alpha = 0.006298816 + 21220, 48021, 22155, 21128, // alpha = 0.009070295 + 20752, 48021, 21710, 20685, // alpha = 0.01234568 + 20416, 48020, 21339, 20313, // alpha = 0.01612497 + 19999, 48019, 20944, 19918, // alpha = 0.02040816 + 19701, 48017, 20660, 19635, // alpha = 0.02519527 + 19480, 48015, 20421, 19395, // alpha = 0.03048627 + 19168, 48012, 20102, 19077, // alpha = 0.03628118 + 18907, 48008, 19853, 18829, // alpha = 0.04258 + 18699, 48003, 19656, 18632, // alpha = 0.04938272 + 18532, 47990, 19496, 18473, // alpha = 0.05668934 + 18357, 47979, 19274, 18252, // alpha = 0.06449988 + 18129, 47968, 19056, 18036, // alpha = 0.07281432 + 17938, 47956, 18874, 17854, // alpha = 0.08163266 + 17777, 47943, 18719, 17700, // alpha = 0.09095491 + 17639, 47924, 18587, 17569, // alpha = 0.1007811 + 17521, 47906, 18473, 17456, // alpha = 0.1111111 + 17418, 47885, 18315, 17307, // alpha = 0.1219451 + 17250, 47861, 18141, 17136, // alpha = 0.1332829 + 17095, 47835, 17988, 16985, // alpha = 0.1451247 + 16960, 47808, 17852, 16854, // alpha = 0.1574704 + 16843, 47777, 17731, 16739, // alpha = 0.17032 + 16738, 47745, 17623, 16635, // alpha = 0.1836735 + 16647, 47710, 17527, 16543, // alpha = 0.1975309 + 16567, 47676, 17440, 16462, // alpha = 0.2118922 + 16498, 47640, 17314, 16391, // alpha = 0.2267574 + 16436, 47605, 17174, 16266, // alpha = 0.2421265 + 16380, 47568, 17048, 16149, // alpha = 0.2579995 + 16280, 47532, 16934, 16038, // alpha = 0.2743765 + 16191, 47490, 16827, 15934, // alpha = 0.2912573 + 16105, 47437, 16724, 15829, // alpha = 0.308642 + 16028, 47384, 16630, 15731, // alpha = 0.3265306 + 15957, 47331, 16546, 15639, // alpha = 0.3449232 + 15893, 47277, 16469, 15551, // alpha = 0.3638196 + 15834, 47222, 16401, 15469, // alpha = 0.38322 + 15781, 47169, 16294, 15390, // alpha = 0.4031242 + 15733, 47116, 16183, 15273, // alpha = 0.4235324 + 15690, 47024, 16082, 15135, // alpha = 0.4444445 + 15648, 46921, 15991, 14999, // alpha = 0.4658605 + 15612, 46819, 15908, 14873, // alpha = 0.4877803 + 15575, 46715, 15833, 14749, // alpha = 0.5102041 + 15540, 46606, 15762, 14626, // alpha = 0.5331318 + 15507, 46498, 15699, 14508, // alpha = 0.5565634 + 15477, 46394, 15642, 14398, // alpha = 0.5804989 + 15450, 46292, 15591, 14253, // alpha = 0.6049383 + 15423, 46194, 15544, 14054, // alpha = 0.6298816 + 15397, 46098, 15501, 13867, // alpha = 0.6553288 + 15373, 45921, 15461, 13687, // alpha = 0.68128 + 15340, 45724, 15425, 13514, // alpha = 0.7077349 + 15294, 45535, 15391, 13354, // alpha = 0.7346939 + 15252, 45354, 15358, 13099, // alpha = 0.7621567 + 15214, 45179, 15303, 12828, // alpha = 0.7901235 + 15179, 44950, 15255, 12574, // alpha = 0.8185941 + 15147, 44596, 15215, 12344, // alpha = 0.8475687 + 15122, 44261, 15180, 11948, // alpha = 0.8770471 + 15105, 43853, 15150, 11508, // alpha = 0.9070295 + 15095, 43210, 15123, 10879, // alpha = 0.9375157 + 15087, 42156, 15100, 9820, // alpha = 0.9685059 + 15078, 4420, 15078, 36231, // alpha = 1 + + // Cos (theta) = 0.7087427 + 24527, 48119, 25542, 24518, // alpha = 0.001 + 24527, 48119, 25542, 24518, // alpha = 0.001 + 24512, 48119, 25527, 24503, // alpha = 0.001007811 + 23268, 48118, 24284, 23260, // alpha = 0.002267574 + 22464, 48118, 23479, 22455, // alpha = 0.004031243 + 21750, 48118, 22768, 21744, // alpha = 0.006298816 + 21220, 48118, 22235, 21212, // alpha = 0.009070295 + 20752, 48117, 21769, 20746, // alpha = 0.01234568 + 20416, 48116, 21430, 20406, // alpha = 0.01612497 + 19999, 48115, 21015, 19991, // alpha = 0.02040816 + 19701, 48113, 20718, 19694, // alpha = 0.02519527 + 19480, 48110, 20498, 19475, // alpha = 0.03048627 + 19168, 48107, 20182, 19159, // alpha = 0.03628118 + 18906, 48103, 19921, 18899, // alpha = 0.04258 + 18699, 48096, 19714, 18692, // alpha = 0.04938272 + 18531, 48081, 19546, 18525, // alpha = 0.05668934 + 18355, 48070, 19361, 18343, // alpha = 0.06449988 + 18127, 48058, 19133, 18115, // alpha = 0.07281432 + 17936, 48045, 18941, 17925, // alpha = 0.08163266 + 17775, 48029, 18779, 17763, // alpha = 0.09095491 + 17637, 48009, 18640, 17625, // alpha = 0.1007811 + 17518, 47989, 18520, 17506, // alpha = 0.1111111 + 17416, 47965, 18399, 17397, // alpha = 0.1219451 + 17245, 47940, 18216, 17217, // alpha = 0.1332829 + 17090, 47911, 18055, 17059, // alpha = 0.1451247 + 16955, 47881, 17912, 16921, // alpha = 0.1574704 + 16837, 47847, 17785, 16799, // alpha = 0.17032 + 16732, 47812, 17672, 16690, // alpha = 0.1836735 + 16642, 47774, 17569, 16595, // alpha = 0.1975309 + 16563, 47736, 17477, 16510, // alpha = 0.2118922 + 16493, 47697, 17381, 16433, // alpha = 0.2267574 + 16430, 47657, 17232, 16342, // alpha = 0.2421265 + 16369, 47617, 17099, 16219, // alpha = 0.2579995 + 16274, 47577, 16978, 16105, // alpha = 0.2743765 + 16188, 47534, 16867, 15998, // alpha = 0.2912573 + 16105, 47484, 16761, 15892, // alpha = 0.308642 + 16025, 47427, 16664, 15787, // alpha = 0.3265306 + 15955, 47370, 16575, 15690, // alpha = 0.3449232 + 15892, 47313, 16494, 15598, // alpha = 0.3638196 + 15833, 47256, 16422, 15511, // alpha = 0.38322 + 15780, 47200, 16330, 15428, // alpha = 0.4031242 + 15730, 47144, 16213, 15339, // alpha = 0.4235324 + 15687, 47073, 16108, 15192, // alpha = 0.4444445 + 15646, 46965, 16014, 15052, // alpha = 0.4658605 + 15608, 46860, 15928, 14918, // alpha = 0.4877803 + 15574, 46754, 15850, 14791, // alpha = 0.5102041 + 15540, 46647, 15779, 14666, // alpha = 0.5331318 + 15507, 46534, 15713, 14544, // alpha = 0.5565634 + 15477, 46426, 15652, 14430, // alpha = 0.5804989 + 15450, 46319, 15600, 14310, // alpha = 0.6049383 + 15421, 46218, 15551, 14099, // alpha = 0.6298816 + 15397, 46118, 15507, 13907, // alpha = 0.6553288 + 15371, 45964, 15466, 13721, // alpha = 0.68128 + 15339, 45767, 15429, 13549, // alpha = 0.7077349 + 15292, 45569, 15393, 13381, // alpha = 0.7346939 + 15248, 45381, 15361, 13140, // alpha = 0.7621567 + 15209, 45199, 15305, 12859, // alpha = 0.7901235 + 15177, 44994, 15257, 12603, // alpha = 0.8185941 + 15144, 44640, 15215, 12366, // alpha = 0.8475687 + 15119, 44289, 15179, 11986, // alpha = 0.8770471 + 15101, 43879, 15148, 11534, // alpha = 0.9070295 + 15091, 43233, 15121, 10917, // alpha = 0.9375157 + 15083, 42207, 15096, 9868, // alpha = 0.9685059 + 15074, 4168, 15074, 35757, // alpha = 1 + + // Cos (theta) = 0.691358 + 24528, 48174, 25622, 24597, // alpha = 0.001 + 24528, 48174, 25622, 24597, // alpha = 0.001 + 24513, 48174, 25614, 24589, // alpha = 0.001007811 + 23268, 48174, 24373, 23347, // alpha = 0.002267574 + 22464, 48174, 23566, 22541, // alpha = 0.004031243 + 21750, 48174, 22832, 21807, // alpha = 0.006298816 + 21220, 48174, 22325, 21299, // alpha = 0.009070295 + 20752, 48173, 21835, 20810, // alpha = 0.01234568 + 20415, 48173, 21517, 20492, // alpha = 0.01612497 + 19999, 48172, 21094, 20069, // alpha = 0.02040816 + 19700, 48171, 20782, 19757, // alpha = 0.02519527 + 19480, 48169, 20551, 19526, // alpha = 0.03048627 + 19167, 48168, 20270, 19246, // alpha = 0.03628118 + 18906, 48165, 19996, 18972, // alpha = 0.04258 + 18698, 48161, 19778, 18755, // alpha = 0.04938272 + 18530, 48153, 19601, 18579, // alpha = 0.05668934 + 18353, 48147, 19457, 18435, // alpha = 0.06449988 + 18125, 48141, 19217, 18199, // alpha = 0.07281432 + 17934, 48133, 19016, 17998, // alpha = 0.08163266 + 17772, 48118, 18845, 17828, // alpha = 0.09095491 + 17634, 48098, 18698, 17683, // alpha = 0.1007811 + 17515, 48076, 18572, 17558, // alpha = 0.1111111 + 17413, 48049, 18462, 17449, // alpha = 0.1219451 + 17239, 48022, 18299, 17302, // alpha = 0.1332829 + 17085, 47989, 18129, 17137, // alpha = 0.1451247 + 16949, 47956, 17978, 16990, // alpha = 0.1574704 + 16831, 47919, 17844, 16862, // alpha = 0.17032 + 16728, 47881, 17723, 16749, // alpha = 0.1836735 + 16638, 47840, 17614, 16649, // alpha = 0.1975309 + 16558, 47797, 17517, 16558, // alpha = 0.2118922 + 16487, 47755, 17430, 16476, // alpha = 0.2267574 + 16426, 47710, 17293, 16404, // alpha = 0.2421265 + 16361, 47666, 17152, 16293, // alpha = 0.2579995 + 16265, 47623, 17024, 16172, // alpha = 0.2743765 + 16180, 47577, 16909, 16061, // alpha = 0.2912573 + 16098, 47528, 16802, 15950, // alpha = 0.308642 + 16022, 47470, 16699, 15843, // alpha = 0.3265306 + 15951, 47410, 16605, 15740, // alpha = 0.3449232 + 15887, 47350, 16521, 15642, // alpha = 0.3638196 + 15831, 47289, 16445, 15552, // alpha = 0.38322 + 15777, 47230, 16368, 15465, // alpha = 0.4031242 + 15729, 47171, 16245, 15384, // alpha = 0.4235324 + 15684, 47113, 16136, 15251, // alpha = 0.4444445 + 15643, 47010, 16037, 15104, // alpha = 0.4658605 + 15607, 46899, 15947, 14965, // alpha = 0.4877803 + 15572, 46791, 15868, 14832, // alpha = 0.5102041 + 15538, 46683, 15794, 14704, // alpha = 0.5331318 + 15507, 46571, 15726, 14581, // alpha = 0.5565634 + 15475, 46458, 15664, 14460, // alpha = 0.5804989 + 15449, 46348, 15609, 14351, // alpha = 0.6049383 + 15421, 46241, 15558, 14149, // alpha = 0.6298816 + 15395, 46140, 15513, 13946, // alpha = 0.6553288 + 15371, 45997, 15471, 13757, // alpha = 0.68128 + 15339, 45806, 15433, 13582, // alpha = 0.7077349 + 15291, 45607, 15397, 13409, // alpha = 0.7346939 + 15245, 45410, 15363, 13182, // alpha = 0.7621567 + 15205, 45222, 15307, 12895, // alpha = 0.7901235 + 15170, 45023, 15257, 12629, // alpha = 0.8185941 + 15139, 44682, 15215, 12390, // alpha = 0.8475687 + 15114, 44323, 15178, 12026, // alpha = 0.8770471 + 15096, 43921, 15145, 11561, // alpha = 0.9070295 + 15086, 43253, 15117, 10951, // alpha = 0.9375157 + 15079, 42211, 15093, 9894, // alpha = 0.9685059 + 15070, 1752, 15070, 418, // alpha = 1 + + // Cos (theta) = 0.6734694 + 24528, 48228, 25678, 24650, // alpha = 0.001 + 24528, 48228, 25678, 24650, // alpha = 0.001 + 24512, 48228, 25670, 24641, // alpha = 0.001007811 + 23268, 48228, 24473, 23440, // alpha = 0.002267574 + 22464, 48228, 23622, 22593, // alpha = 0.004031243 + 21750, 48228, 22904, 21874, // alpha = 0.006298816 + 21220, 48227, 22424, 21392, // alpha = 0.009070295 + 20752, 48227, 21908, 20878, // alpha = 0.01234568 + 20415, 48226, 21573, 20544, // alpha = 0.01612497 + 19998, 48225, 21182, 20151, // alpha = 0.02040816 + 19700, 48224, 20853, 19824, // alpha = 0.02519527 + 19479, 48223, 20609, 19581, // alpha = 0.03048627 + 19167, 48220, 20368, 19337, // alpha = 0.03628118 + 18905, 48217, 20079, 19050, // alpha = 0.04258 + 18697, 48211, 19849, 18821, // alpha = 0.04938272 + 18529, 48204, 19662, 18637, // alpha = 0.05668934 + 18350, 48197, 19510, 18485, // alpha = 0.06449988 + 18122, 48190, 19311, 18287, // alpha = 0.07281432 + 17931, 48182, 19098, 18076, // alpha = 0.08163266 + 17769, 48170, 18917, 17897, // alpha = 0.09095491 + 17631, 48159, 18762, 17744, // alpha = 0.1007811 + 17512, 48146, 18629, 17613, // alpha = 0.1111111 + 17409, 48132, 18513, 17499, // alpha = 0.1219451 + 17232, 48105, 18389, 17390, // alpha = 0.1332829 + 17079, 48071, 18209, 17217, // alpha = 0.1451247 + 16942, 48034, 18050, 17062, // alpha = 0.1574704 + 16825, 47994, 17908, 16928, // alpha = 0.17032 + 16722, 47951, 17779, 16809, // alpha = 0.1836735 + 16631, 47907, 17664, 16703, // alpha = 0.1975309 + 16552, 47859, 17561, 16607, // alpha = 0.2118922 + 16482, 47813, 17467, 16522, // alpha = 0.2267574 + 16422, 47764, 17359, 16447, // alpha = 0.2421265 + 16353, 47715, 17208, 16369, // alpha = 0.2579995 + 16255, 47668, 17074, 16240, // alpha = 0.2743765 + 16169, 47619, 16952, 16121, // alpha = 0.2912573 + 16090, 47568, 16842, 16007, // alpha = 0.308642 + 16017, 47513, 16737, 15899, // alpha = 0.3265306 + 15947, 47450, 16638, 15790, // alpha = 0.3449232 + 15886, 47386, 16548, 15691, // alpha = 0.3638196 + 15827, 47323, 16468, 15593, // alpha = 0.38322 + 15773, 47260, 16396, 15501, // alpha = 0.4031242 + 15726, 47199, 16279, 15416, // alpha = 0.4235324 + 15682, 47138, 16164, 15310, // alpha = 0.4444445 + 15640, 47053, 16060, 15154, // alpha = 0.4658605 + 15602, 46937, 15968, 15008, // alpha = 0.4877803 + 15568, 46824, 15885, 14870, // alpha = 0.5102041 + 15537, 46714, 15809, 14741, // alpha = 0.5331318 + 15505, 46604, 15740, 14613, // alpha = 0.5565634 + 15474, 46490, 15677, 14490, // alpha = 0.5804989 + 15446, 46376, 15618, 14375, // alpha = 0.6049383 + 15420, 46266, 15566, 14195, // alpha = 0.6298816 + 15394, 46159, 15519, 13987, // alpha = 0.6553288 + 15370, 46035, 15476, 13792, // alpha = 0.68128 + 15337, 45833, 15437, 13610, // alpha = 0.7077349 + 15289, 45641, 15401, 13434, // alpha = 0.7346939 + 15244, 45442, 15366, 13229, // alpha = 0.7621567 + 15202, 45246, 15311, 12928, // alpha = 0.7901235 + 15166, 45059, 15257, 12654, // alpha = 0.8185941 + 15135, 44700, 15213, 12409, // alpha = 0.8475687 + 15109, 44355, 15177, 12061, // alpha = 0.8770471 + 15091, 43977, 15143, 11592, // alpha = 0.9070295 + 15082, 43277, 15115, 10986, // alpha = 0.9375157 + 15074, 42222, 15089, 9926, // alpha = 0.9685059 + 15066, 3468, 15066, 34421, // alpha = 1 + + // Cos (theta) = 0.6550768 + 24528, 48285, 25741, 24705, // alpha = 0.001 + 24528, 48285, 25741, 24705, // alpha = 0.001 + 24512, 48285, 25733, 24696, // alpha = 0.001007811 + 23268, 48285, 24580, 23539, // alpha = 0.002267574 + 22464, 48285, 23684, 22648, // alpha = 0.004031243 + 21750, 48285, 22984, 21945, // alpha = 0.006298816 + 21220, 48285, 22531, 21490, // alpha = 0.009070295 + 20751, 48284, 21989, 20950, // alpha = 0.01234568 + 20415, 48283, 21635, 20599, // alpha = 0.01612497 + 19998, 48282, 21280, 20238, // alpha = 0.02040816 + 19700, 48281, 20932, 19894, // alpha = 0.02519527 + 19479, 48279, 20675, 19639, // alpha = 0.03048627 + 19166, 48276, 20477, 19434, // alpha = 0.03628118 + 18904, 48273, 20171, 19132, // alpha = 0.04258 + 18696, 48265, 19927, 18892, // alpha = 0.04938272 + 18528, 48257, 19730, 18697, // alpha = 0.05668934 + 18348, 48250, 19569, 18538, // alpha = 0.06449988 + 18119, 48242, 19414, 18380, // alpha = 0.07281432 + 17928, 48232, 19189, 18158, // alpha = 0.08163266 + 17765, 48219, 18997, 17969, // alpha = 0.09095491 + 17627, 48208, 18833, 17809, // alpha = 0.1007811 + 17508, 48193, 18692, 17670, // alpha = 0.1111111 + 17403, 48178, 18569, 17550, // alpha = 0.1219451 + 17226, 48160, 18460, 17446, // alpha = 0.1332829 + 17071, 48141, 18298, 17300, // alpha = 0.1451247 + 16936, 48113, 18128, 17139, // alpha = 0.1574704 + 16819, 48070, 17976, 16998, // alpha = 0.17032 + 16715, 48024, 17840, 16871, // alpha = 0.1836735 + 16625, 47975, 17718, 16759, // alpha = 0.1975309 + 16547, 47923, 17608, 16660, // alpha = 0.2118922 + 16477, 47872, 17508, 16570, // alpha = 0.2267574 + 16415, 47819, 17419, 16487, // alpha = 0.2421265 + 16339, 47765, 17271, 16414, // alpha = 0.2579995 + 16243, 47714, 17127, 16307, // alpha = 0.2743765 + 16158, 47661, 16998, 16182, // alpha = 0.2912573 + 16083, 47607, 16881, 16067, // alpha = 0.308642 + 16013, 47552, 16773, 15956, // alpha = 0.3265306 + 15945, 47490, 16672, 15844, // alpha = 0.3449232 + 15881, 47422, 16578, 15736, // alpha = 0.3638196 + 15823, 47356, 16493, 15634, // alpha = 0.38322 + 15771, 47290, 16418, 15539, // alpha = 0.4031242 + 15722, 47226, 16316, 15448, // alpha = 0.4235324 + 15679, 47162, 16195, 15364, // alpha = 0.4444445 + 15638, 47096, 16086, 15207, // alpha = 0.4658605 + 15599, 46975, 15989, 15053, // alpha = 0.4877803 + 15564, 46857, 15902, 14909, // alpha = 0.5102041 + 15532, 46744, 15823, 14772, // alpha = 0.5331318 + 15502, 46631, 15753, 14645, // alpha = 0.5565634 + 15474, 46520, 15688, 14522, // alpha = 0.5804989 + 15444, 46405, 15628, 14399, // alpha = 0.6049383 + 15419, 46290, 15574, 14242, // alpha = 0.6298816 + 15393, 46181, 15525, 14027, // alpha = 0.6553288 + 15369, 46067, 15481, 13827, // alpha = 0.68128 + 15333, 45864, 15440, 13638, // alpha = 0.7077349 + 15288, 45664, 15403, 13460, // alpha = 0.7346939 + 15244, 45471, 15369, 13275, // alpha = 0.7621567 + 15201, 45274, 15313, 12962, // alpha = 0.7901235 + 15164, 45078, 15258, 12682, // alpha = 0.8185941 + 15131, 44726, 15213, 12429, // alpha = 0.8475687 + 15104, 44370, 15174, 12091, // alpha = 0.8770471 + 15087, 44015, 15140, 11617, // alpha = 0.9070295 + 15076, 43326, 15111, 11027, // alpha = 0.9375157 + 15070, 42248, 15085, 9958, // alpha = 0.9685059 + 15061, 4209, 15062, 35558, // alpha = 1 + + // Cos (theta) = 0.6361803 + 24527, 48346, 25811, 24764, // alpha = 0.001 + 24527, 48346, 25811, 24764, // alpha = 0.001 + 24513, 48346, 25802, 24755, // alpha = 0.001007811 + 23268, 48346, 24642, 23598, // alpha = 0.002267574 + 22464, 48346, 23754, 22707, // alpha = 0.004031243 + 21750, 48346, 23073, 22020, // alpha = 0.006298816 + 21220, 48345, 22593, 21549, // alpha = 0.009070295 + 20751, 48345, 22080, 21027, // alpha = 0.01234568 + 20415, 48344, 21704, 20658, // alpha = 0.01612497 + 19998, 48343, 21390, 20331, // alpha = 0.02040816 + 19699, 48341, 21021, 19969, // alpha = 0.02519527 + 19479, 48339, 20747, 19701, // alpha = 0.03048627 + 19165, 48335, 20539, 19497, // alpha = 0.03628118 + 18903, 48331, 20274, 19219, // alpha = 0.04258 + 18694, 48322, 20015, 18966, // alpha = 0.04938272 + 18526, 48314, 19806, 18762, // alpha = 0.05668934 + 18344, 48306, 19635, 18594, // alpha = 0.06449988 + 18115, 48297, 19493, 18455, // alpha = 0.07281432 + 17924, 48285, 19289, 18244, // alpha = 0.08163266 + 17761, 48272, 19086, 18045, // alpha = 0.09095491 + 17623, 48259, 18912, 17876, // alpha = 0.1007811 + 17504, 48242, 18761, 17730, // alpha = 0.1111111 + 17395, 48225, 18630, 17604, // alpha = 0.1219451 + 17217, 48206, 18515, 17494, // alpha = 0.1332829 + 17062, 48184, 18395, 17386, // alpha = 0.1451247 + 16928, 48162, 18214, 17217, // alpha = 0.1574704 + 16811, 48138, 18052, 17068, // alpha = 0.17032 + 16708, 48098, 17907, 16936, // alpha = 0.1836735 + 16619, 48043, 17776, 16819, // alpha = 0.1975309 + 16541, 47989, 17658, 16714, // alpha = 0.2118922 + 16471, 47932, 17552, 16617, // alpha = 0.2267574 + 16409, 47874, 17458, 16530, // alpha = 0.2421265 + 16327, 47816, 17337, 16453, // alpha = 0.2579995 + 16234, 47759, 17182, 16380, // alpha = 0.2743765 + 16151, 47703, 17045, 16248, // alpha = 0.2912573 + 16075, 47645, 16921, 16126, // alpha = 0.308642 + 16007, 47587, 16810, 16010, // alpha = 0.3265306 + 15943, 47527, 16706, 15898, // alpha = 0.3449232 + 15880, 47459, 16608, 15786, // alpha = 0.3638196 + 15821, 47389, 16520, 15677, // alpha = 0.38322 + 15766, 47319, 16440, 15576, // alpha = 0.4031242 + 15717, 47252, 16354, 15480, // alpha = 0.4235324 + 15674, 47186, 16225, 15392, // alpha = 0.4444445 + 15634, 47121, 16111, 15258, // alpha = 0.4658605 + 15596, 47013, 16011, 15098, // alpha = 0.4877803 + 15561, 46891, 15919, 14948, // alpha = 0.5102041 + 15529, 46772, 15839, 14806, // alpha = 0.5331318 + 15500, 46657, 15765, 14675, // alpha = 0.5565634 + 15471, 46543, 15699, 14548, // alpha = 0.5804989 + 15442, 46432, 15638, 14426, // alpha = 0.6049383 + 15417, 46316, 15583, 14283, // alpha = 0.6298816 + 15391, 46202, 15532, 14062, // alpha = 0.6553288 + 15365, 46092, 15486, 13853, // alpha = 0.68128 + 15328, 45891, 15444, 13663, // alpha = 0.7077349 + 15287, 45689, 15407, 13485, // alpha = 0.7346939 + 15242, 45490, 15371, 13313, // alpha = 0.7621567 + 15200, 45297, 15315, 12996, // alpha = 0.7901235 + 15161, 45103, 15259, 12710, // alpha = 0.8185941 + 15128, 44760, 15212, 12449, // alpha = 0.8475687 + 15101, 44389, 15172, 12122, // alpha = 0.8770471 + 15082, 44030, 15137, 11637, // alpha = 0.9070295 + 15072, 43347, 15107, 11059, // alpha = 0.9375157 + 15065, 42308, 15081, 10004, // alpha = 0.9685059 + 15056, 3420, 15057, 33585, // alpha = 1 + + // Cos (theta) = 0.61678 + 24528, 48411, 25890, 24828, // alpha = 0.001 + 24528, 48411, 25890, 24828, // alpha = 0.001 + 24513, 48411, 25880, 24818, // alpha = 0.001007811 + 23268, 48411, 24711, 23654, // alpha = 0.002267574 + 22464, 48411, 23832, 22770, // alpha = 0.004031243 + 21750, 48410, 23173, 22101, // alpha = 0.006298816 + 21219, 48410, 22663, 21605, // alpha = 0.009070295 + 20751, 48409, 22182, 21109, // alpha = 0.01234568 + 20415, 48408, 21782, 20721, // alpha = 0.01612497 + 19998, 48407, 21508, 20430, // alpha = 0.02040816 + 19699, 48405, 21120, 20049, // alpha = 0.02519527 + 19478, 48402, 20829, 19766, // alpha = 0.03048627 + 19164, 48399, 20608, 19552, // alpha = 0.03628118 + 18902, 48393, 20390, 19312, // alpha = 0.04258 + 18693, 48383, 20114, 19045, // alpha = 0.04938272 + 18524, 48375, 19891, 18830, // alpha = 0.05668934 + 18340, 48366, 19709, 18653, // alpha = 0.06449988 + 18111, 48355, 19557, 18506, // alpha = 0.07281432 + 17919, 48342, 19402, 18335, // alpha = 0.08163266 + 17757, 48327, 19185, 18126, // alpha = 0.09095491 + 17618, 48311, 18999, 17947, // alpha = 0.1007811 + 17499, 48293, 18838, 17793, // alpha = 0.1111111 + 17386, 48274, 18698, 17660, // alpha = 0.1219451 + 17207, 48253, 18575, 17544, // alpha = 0.1332829 + 17053, 48229, 18466, 17442, // alpha = 0.1451247 + 16919, 48205, 18307, 17299, // alpha = 0.1574704 + 16802, 48178, 18134, 17141, // alpha = 0.17032 + 16701, 48151, 17979, 17004, // alpha = 0.1836735 + 16612, 48114, 17838, 16880, // alpha = 0.1975309 + 16534, 48054, 17712, 16768, // alpha = 0.2118922 + 16464, 47993, 17600, 16667, // alpha = 0.2267574 + 16404, 47930, 17498, 16577, // alpha = 0.2421265 + 16318, 47866, 17405, 16494, // alpha = 0.2579995 + 16224, 47805, 17240, 16419, // alpha = 0.2743765 + 16135, 47743, 17096, 16308, // alpha = 0.2912573 + 16060, 47681, 16965, 16178, // alpha = 0.308642 + 15992, 47620, 16848, 16056, // alpha = 0.3265306 + 15930, 47559, 16739, 15941, // alpha = 0.3449232 + 15871, 47494, 16641, 15830, // alpha = 0.3638196 + 15819, 47421, 16546, 15722, // alpha = 0.38322 + 15764, 47349, 16463, 15615, // alpha = 0.4031242 + 15715, 47279, 16388, 15514, // alpha = 0.4235324 + 15669, 47210, 16259, 15420, // alpha = 0.4444445 + 15630, 47143, 16139, 15307, // alpha = 0.4658605 + 15594, 47049, 16033, 15144, // alpha = 0.4877803 + 15558, 46922, 15939, 14986, // alpha = 0.5102041 + 15525, 46800, 15854, 14839, // alpha = 0.5331318 + 15497, 46680, 15777, 14703, // alpha = 0.5565634 + 15467, 46565, 15710, 14570, // alpha = 0.5804989 + 15440, 46452, 15648, 14448, // alpha = 0.6049383 + 15415, 46339, 15591, 14327, // alpha = 0.6298816 + 15389, 46225, 15539, 14102, // alpha = 0.6553288 + 15364, 46111, 15491, 13886, // alpha = 0.68128 + 15321, 45923, 15447, 13687, // alpha = 0.7077349 + 15278, 45711, 15409, 13501, // alpha = 0.7346939 + 15234, 45509, 15372, 13327, // alpha = 0.7621567 + 15192, 45312, 15317, 13022, // alpha = 0.7901235 + 15156, 45123, 15259, 12734, // alpha = 0.8185941 + 15125, 44803, 15211, 12469, // alpha = 0.8475687 + 15096, 44415, 15170, 12152, // alpha = 0.8770471 + 15077, 44046, 15134, 11659, // alpha = 0.9070295 + 15067, 43346, 15103, 11081, // alpha = 0.9375157 + 15060, 42318, 15076, 10026, // alpha = 0.9685059 + 15051, 33466, 15052, 1127, // alpha = 1 + + // Cos (theta) = 0.5968758 + 24528, 48480, 25979, 24896, // alpha = 0.001 + 24528, 48480, 25979, 24896, // alpha = 0.001 + 24512, 48480, 25968, 24886, // alpha = 0.001007811 + 23268, 48480, 24790, 23714, // alpha = 0.002267574 + 22464, 48480, 23920, 22838, // alpha = 0.004031243 + 21750, 48480, 23286, 22187, // alpha = 0.006298816 + 21219, 48480, 22741, 21665, // alpha = 0.009070295 + 20751, 48479, 22297, 21197, // alpha = 0.01234568 + 20414, 48478, 21870, 20788, // alpha = 0.01612497 + 19997, 48476, 21578, 20508, // alpha = 0.02040816 + 19699, 48474, 21232, 20134, // alpha = 0.02519527 + 19478, 48470, 20921, 19837, // alpha = 0.03048627 + 19162, 48466, 20685, 19610, // alpha = 0.03628118 + 18900, 48458, 20500, 19411, // alpha = 0.04258 + 18691, 48449, 20224, 19130, // alpha = 0.04938272 + 18522, 48439, 19986, 18903, // alpha = 0.05668934 + 18336, 48429, 19791, 18716, // alpha = 0.06449988 + 18107, 48416, 19629, 18561, // alpha = 0.07281432 + 17914, 48401, 19492, 18431, // alpha = 0.08163266 + 17752, 48385, 19296, 18210, // alpha = 0.09095491 + 17613, 48367, 19096, 18022, // alpha = 0.1007811 + 17494, 48347, 18924, 17860, // alpha = 0.1111111 + 17375, 48325, 18774, 17719, // alpha = 0.1219451 + 17197, 48302, 18642, 17597, // alpha = 0.1332829 + 17044, 48276, 18525, 17491, // alpha = 0.1451247 + 16909, 48249, 18410, 17384, // alpha = 0.1574704 + 16794, 48220, 18224, 17220, // alpha = 0.17032 + 16692, 48189, 18057, 17072, // alpha = 0.1836735 + 16602, 48157, 17907, 16940, // alpha = 0.1975309 + 16526, 48122, 17772, 16824, // alpha = 0.2118922 + 16459, 48054, 17649, 16720, // alpha = 0.2267574 + 16395, 47985, 17541, 16620, // alpha = 0.2421265 + 16301, 47917, 17444, 16533, // alpha = 0.2579995 + 16208, 47850, 17305, 16453, // alpha = 0.2743765 + 16121, 47784, 17150, 16369, // alpha = 0.2912573 + 16047, 47717, 17011, 16232, // alpha = 0.308642 + 15979, 47652, 16886, 16105, // alpha = 0.3265306 + 15922, 47589, 16774, 15989, // alpha = 0.3449232 + 15865, 47524, 16671, 15873, // alpha = 0.3638196 + 15810, 47453, 16576, 15761, // alpha = 0.38322 + 15761, 47378, 16487, 15653, // alpha = 0.4031242 + 15712, 47305, 16409, 15547, // alpha = 0.4235324 + 15667, 47233, 16293, 15449, // alpha = 0.4444445 + 15626, 47163, 16167, 15357, // alpha = 0.4658605 + 15590, 47087, 16056, 15186, // alpha = 0.4877803 + 15554, 46954, 15957, 15023, // alpha = 0.5102041 + 15522, 46827, 15870, 14872, // alpha = 0.5331318 + 15492, 46705, 15790, 14729, // alpha = 0.5565634 + 15464, 46584, 15720, 14597, // alpha = 0.5804989 + 15437, 46470, 15656, 14470, // alpha = 0.6049383 + 15412, 46356, 15599, 14350, // alpha = 0.6298816 + 15389, 46245, 15546, 14141, // alpha = 0.6553288 + 15362, 46131, 15497, 13920, // alpha = 0.68128 + 15318, 45957, 15452, 13712, // alpha = 0.7077349 + 15275, 45737, 15412, 13524, // alpha = 0.7346939 + 15229, 45529, 15373, 13343, // alpha = 0.7621567 + 15185, 45327, 15318, 13048, // alpha = 0.7901235 + 15148, 45131, 15259, 12753, // alpha = 0.8185941 + 15119, 44831, 15210, 12486, // alpha = 0.8475687 + 15089, 44456, 15168, 12189, // alpha = 0.8770471 + 15070, 44065, 15131, 11681, // alpha = 0.9070295 + 15060, 43367, 15099, 11112, // alpha = 0.9375157 + 15054, 42306, 15072, 10042, // alpha = 0.9685059 + 15046, 3697, 15046, 34660, // alpha = 1 + + // Cos (theta) = 0.5764676 + 24528, 48555, 26081, 24969, // alpha = 0.001 + 24528, 48555, 26081, 24969, // alpha = 0.001 + 24512, 48555, 26069, 24958, // alpha = 0.001007811 + 23268, 48555, 24879, 23778, // alpha = 0.002267574 + 22464, 48555, 24021, 22910, // alpha = 0.004031243 + 21750, 48555, 23414, 22280, // alpha = 0.006298816 + 21219, 48554, 22830, 21730, // alpha = 0.009070295 + 20751, 48554, 22428, 21291, // alpha = 0.01234568 + 20414, 48552, 21970, 20860, // alpha = 0.01612497 + 19997, 48550, 21656, 20565, // alpha = 0.02040816 + 19698, 48547, 21359, 20226, // alpha = 0.02519527 + 19477, 48544, 21026, 19912, // alpha = 0.03048627 + 19161, 48539, 20772, 19673, // alpha = 0.03628118 + 18898, 48528, 20573, 19487, // alpha = 0.04258 + 18689, 48518, 20349, 19220, // alpha = 0.04938272 + 18520, 48508, 20094, 18980, // alpha = 0.05668934 + 18331, 48497, 19884, 18784, // alpha = 0.06449988 + 18101, 48481, 19710, 18620, // alpha = 0.07281432 + 17909, 48465, 19563, 18483, // alpha = 0.08163266 + 17746, 48447, 19420, 18300, // alpha = 0.09095491 + 17607, 48426, 19205, 18101, // alpha = 0.1007811 + 17488, 48403, 19020, 17929, // alpha = 0.1111111 + 17362, 48379, 18858, 17781, // alpha = 0.1219451 + 17186, 48353, 18716, 17653, // alpha = 0.1332829 + 17033, 48324, 18590, 17540, // alpha = 0.1451247 + 16899, 48293, 18477, 17441, // alpha = 0.1574704 + 16783, 48263, 18323, 17299, // alpha = 0.17032 + 16682, 48228, 18143, 17144, // alpha = 0.1836735 + 16596, 48193, 17980, 17008, // alpha = 0.1975309 + 16520, 48158, 17833, 16886, // alpha = 0.2118922 + 16449, 48116, 17705, 16770, // alpha = 0.2267574 + 16388, 48041, 17588, 16666, // alpha = 0.2421265 + 16286, 47968, 17483, 16573, // alpha = 0.2579995 + 16194, 47895, 17371, 16489, // alpha = 0.2743765 + 16110, 47823, 17205, 16410, // alpha = 0.2912573 + 16036, 47752, 17057, 16291, // alpha = 0.308642 + 15969, 47683, 16926, 16156, // alpha = 0.3265306 + 15909, 47615, 16806, 16031, // alpha = 0.3449232 + 15854, 47549, 16700, 15911, // alpha = 0.3638196 + 15802, 47481, 16604, 15798, // alpha = 0.38322 + 15753, 47406, 16513, 15687, // alpha = 0.4031242 + 15708, 47330, 16430, 15581, // alpha = 0.4235324 + 15663, 47256, 16328, 15479, // alpha = 0.4444445 + 15621, 47184, 16197, 15381, // alpha = 0.4658605 + 15585, 47114, 16080, 15227, // alpha = 0.4877803 + 15551, 46986, 15977, 15061, // alpha = 0.5102041 + 15518, 46854, 15885, 14902, // alpha = 0.5331318 + 15489, 46727, 15803, 14757, // alpha = 0.5565634 + 15461, 46604, 15730, 14620, // alpha = 0.5804989 + 15434, 46485, 15665, 14488, // alpha = 0.6049383 + 15408, 46371, 15606, 14367, // alpha = 0.6298816 + 15386, 46258, 15552, 14172, // alpha = 0.6553288 + 15361, 46148, 15502, 13951, // alpha = 0.68128 + 15316, 45992, 15457, 13744, // alpha = 0.7077349 + 15273, 45768, 15414, 13548, // alpha = 0.7346939 + 15226, 45551, 15375, 13361, // alpha = 0.7621567 + 15181, 45342, 15318, 13073, // alpha = 0.7901235 + 15143, 45143, 15256, 12773, // alpha = 0.8185941 + 15111, 44842, 15207, 12502, // alpha = 0.8475687 + 15083, 44469, 15164, 12211, // alpha = 0.8770471 + 15064, 44099, 15127, 11712, // alpha = 0.9070295 + 15054, 43404, 15094, 11146, // alpha = 0.9375157 + 15048, 42316, 15066, 10065, // alpha = 0.9685059 + 15040, 4095, 15040, 34847, // alpha = 1 + + // Cos (theta) = 0.5555555 + 24528, 48637, 26196, 25049, // alpha = 0.001 + 24528, 48637, 26196, 25049, // alpha = 0.001 + 24512, 48637, 26184, 25037, // alpha = 0.001007811 + 23268, 48637, 24981, 23848, // alpha = 0.002267574 + 22464, 48636, 24135, 22989, // alpha = 0.004031243 + 21750, 48636, 23556, 22380, // alpha = 0.006298816 + 21219, 48635, 22932, 21799, // alpha = 0.009070295 + 20751, 48634, 22553, 21394, // alpha = 0.01234568 + 20414, 48633, 22084, 20939, // alpha = 0.01612497 + 19996, 48630, 21746, 20626, // alpha = 0.02040816 + 19698, 48627, 21504, 20325, // alpha = 0.02519527 + 19476, 48623, 21145, 19994, // alpha = 0.03048627 + 19159, 48617, 20871, 19741, // alpha = 0.03628118 + 18896, 48604, 20656, 19544, // alpha = 0.04258 + 18686, 48594, 20486, 19318, // alpha = 0.04938272 + 18517, 48582, 20216, 19064, // alpha = 0.05668934 + 18325, 48568, 19990, 18856, // alpha = 0.06449988 + 18095, 48551, 19801, 18682, // alpha = 0.07281432 + 17902, 48532, 19642, 18537, // alpha = 0.08163266 + 17739, 48511, 19508, 18395, // alpha = 0.09095491 + 17600, 48489, 19327, 18185, // alpha = 0.1007811 + 17481, 48462, 19127, 18003, // alpha = 0.1111111 + 17349, 48435, 18952, 17847, // alpha = 0.1219451 + 17173, 48406, 18798, 17711, // alpha = 0.1332829 + 17019, 48373, 18661, 17592, // alpha = 0.1451247 + 16889, 48341, 18539, 17489, // alpha = 0.1574704 + 16772, 48306, 18430, 17383, // alpha = 0.17032 + 16674, 48269, 18234, 17223, // alpha = 0.1836735 + 16584, 48230, 18061, 17073, // alpha = 0.1975309 + 16509, 48192, 17903, 16944, // alpha = 0.2118922 + 16441, 48153, 17763, 16823, // alpha = 0.2267574 + 16379, 48097, 17637, 16716, // alpha = 0.2421265 + 16274, 48017, 17524, 16618, // alpha = 0.2579995 + 16182, 47940, 17424, 16527, // alpha = 0.2743765 + 16100, 47863, 17262, 16445, // alpha = 0.2912573 + 16026, 47787, 17105, 16350, // alpha = 0.308642 + 15959, 47713, 16965, 16208, // alpha = 0.3265306 + 15898, 47641, 16840, 16074, // alpha = 0.3449232 + 15844, 47571, 16728, 15951, // alpha = 0.3638196 + 15793, 47502, 16628, 15833, // alpha = 0.38322 + 15746, 47432, 16538, 15720, // alpha = 0.4031242 + 15701, 47356, 16452, 15610, // alpha = 0.4235324 + 15661, 47278, 16366, 15507, // alpha = 0.4444445 + 15618, 47204, 16229, 15407, // alpha = 0.4658605 + 15581, 47132, 16107, 15268, // alpha = 0.4877803 + 15547, 47018, 15998, 15097, // alpha = 0.5102041 + 15514, 46881, 15902, 14933, // alpha = 0.5331318 + 15484, 46749, 15817, 14780, // alpha = 0.5565634 + 15458, 46623, 15741, 14642, // alpha = 0.5804989 + 15431, 46501, 15672, 14508, // alpha = 0.6049383 + 15404, 46383, 15612, 14382, // alpha = 0.6298816 + 15383, 46270, 15557, 14200, // alpha = 0.6553288 + 15358, 46158, 15507, 13977, // alpha = 0.68128 + 15314, 46021, 15462, 13769, // alpha = 0.7077349 + 15269, 45800, 15417, 13570, // alpha = 0.7346939 + 15223, 45577, 15377, 13381, // alpha = 0.7621567 + 15178, 45363, 15320, 13106, // alpha = 0.7901235 + 15139, 45155, 15257, 12793, // alpha = 0.8185941 + 15106, 44857, 15203, 12516, // alpha = 0.8475687 + 15078, 44473, 15161, 12229, // alpha = 0.8770471 + 15058, 44102, 15122, 11724, // alpha = 0.9070295 + 15048, 43445, 15090, 11181, // alpha = 0.9375157 + 15042, 42406, 15061, 10126, // alpha = 0.9685059 + 15034, 4165, 15034, 35162, // alpha = 1 + + // Cos (theta) = 0.5341396 + 24528, 48725, 26328, 25135, // alpha = 0.001 + 24528, 48725, 26328, 25135, // alpha = 0.001 + 24512, 48725, 26315, 25122, // alpha = 0.001007811 + 23268, 48725, 25098, 23924, // alpha = 0.002267574 + 22464, 48724, 24267, 23074, // alpha = 0.004031243 + 21750, 48724, 23641, 22490, // alpha = 0.006298816 + 21219, 48723, 23049, 21875, // alpha = 0.009070295 + 20751, 48722, 22638, 21504, // alpha = 0.01234568 + 20413, 48720, 22215, 21023, // alpha = 0.01612497 + 19996, 48717, 21849, 20693, // alpha = 0.02040816 + 19697, 48713, 21587, 20433, // alpha = 0.02519527 + 19475, 48708, 21281, 20082, // alpha = 0.03048627 + 19157, 48700, 20984, 19815, // alpha = 0.03628118 + 18893, 48687, 20752, 19606, // alpha = 0.04258 + 18684, 48675, 20567, 19423, // alpha = 0.04938272 + 18514, 48662, 20356, 19154, // alpha = 0.05668934 + 18319, 48644, 20110, 18933, // alpha = 0.06449988 + 18088, 48625, 19905, 18749, // alpha = 0.07281432 + 17895, 48603, 19733, 18595, // alpha = 0.08163266 + 17731, 48580, 19586, 18465, // alpha = 0.09095491 + 17592, 48554, 19461, 18274, // alpha = 0.1007811 + 17473, 48524, 19247, 18082, // alpha = 0.1111111 + 17335, 48494, 19056, 17917, // alpha = 0.1219451 + 17158, 48461, 18889, 17772, // alpha = 0.1332829 + 17007, 48424, 18740, 17648, // alpha = 0.1451247 + 16874, 48389, 18608, 17536, // alpha = 0.1574704 + 16763, 48350, 18490, 17441, // alpha = 0.17032 + 16661, 48310, 18336, 17298, // alpha = 0.1836735 + 16574, 48268, 18147, 17143, // alpha = 0.1975309 + 16500, 48226, 17976, 17006, // alpha = 0.2118922 + 16434, 48184, 17824, 16882, // alpha = 0.2267574 + 16362, 48141, 17689, 16764, // alpha = 0.2421265 + 16256, 48066, 17569, 16658, // alpha = 0.2579995 + 16164, 47983, 17462, 16562, // alpha = 0.2743765 + 16081, 47901, 17326, 16474, // alpha = 0.2912573 + 16007, 47820, 17158, 16392, // alpha = 0.308642 + 15941, 47741, 17009, 16249, // alpha = 0.3265306 + 15884, 47665, 16876, 16113, // alpha = 0.3449232 + 15833, 47592, 16757, 15987, // alpha = 0.3638196 + 15783, 47520, 16653, 15863, // alpha = 0.38322 + 15737, 47449, 16559, 15749, // alpha = 0.4031242 + 15693, 47378, 16475, 15638, // alpha = 0.4235324 + 15651, 47301, 16395, 15531, // alpha = 0.4444445 + 15615, 47224, 16261, 15432, // alpha = 0.4658605 + 15575, 47149, 16134, 15307, // alpha = 0.4877803 + 15542, 47049, 16020, 15130, // alpha = 0.5102041 + 15511, 46908, 15921, 14964, // alpha = 0.5331318 + 15480, 46773, 15831, 14806, // alpha = 0.5565634 + 15452, 46642, 15752, 14661, // alpha = 0.5804989 + 15426, 46517, 15681, 14526, // alpha = 0.6049383 + 15401, 46396, 15618, 14398, // alpha = 0.6298816 + 15378, 46279, 15561, 14220, // alpha = 0.6553288 + 15351, 46167, 15510, 13998, // alpha = 0.68128 + 15307, 46031, 15464, 13788, // alpha = 0.7077349 + 15266, 45821, 15420, 13590, // alpha = 0.7346939 + 15221, 45608, 15380, 13401, // alpha = 0.7621567 + 15176, 45386, 15323, 13135, // alpha = 0.7901235 + 15136, 45174, 15257, 12814, // alpha = 0.8185941 + 15102, 44880, 15202, 12529, // alpha = 0.8475687 + 15072, 44483, 15156, 12246, // alpha = 0.8770471 + 15053, 44105, 15118, 11738, // alpha = 0.9070295 + 15042, 43434, 15084, 11192, // alpha = 0.9375157 + 15035, 42451, 15055, 10157, // alpha = 0.9685059 + 15027, 36637, 15028, 2766, // alpha = 1 + + // Cos (theta) = 0.5122197 + 24528, 48821, 26482, 25229, // alpha = 0.001 + 24528, 48821, 26482, 25229, // alpha = 0.001 + 24512, 48821, 26467, 25216, // alpha = 0.001007811 + 23268, 48821, 25233, 24007, // alpha = 0.002267574 + 22464, 48821, 24419, 23168, // alpha = 0.004031243 + 21750, 48820, 23738, 22568, // alpha = 0.006298816 + 21219, 48819, 23183, 21958, // alpha = 0.009070295 + 20750, 48818, 22737, 21565, // alpha = 0.01234568 + 20413, 48815, 22366, 21116, // alpha = 0.01612497 + 19995, 48812, 21968, 20766, // alpha = 0.02040816 + 19696, 48808, 21683, 20515, // alpha = 0.02519527 + 19474, 48801, 21438, 20178, // alpha = 0.03048627 + 19154, 48789, 21114, 19894, // alpha = 0.03628118 + 18890, 48776, 20861, 19672, // alpha = 0.04258 + 18680, 48763, 20660, 19496, // alpha = 0.04938272 + 18511, 48748, 20498, 19251, // alpha = 0.05668934 + 18311, 48726, 20247, 19016, // alpha = 0.06449988 + 18080, 48706, 20024, 18821, // alpha = 0.07281432 + 17886, 48680, 19836, 18657, // alpha = 0.08163266 + 17723, 48653, 19676, 18519, // alpha = 0.09095491 + 17583, 48623, 19538, 18369, // alpha = 0.1007811 + 17465, 48590, 19382, 18166, // alpha = 0.1111111 + 17316, 48556, 19174, 17989, // alpha = 0.1219451 + 17143, 48519, 18991, 17839, // alpha = 0.1332829 + 16992, 48478, 18828, 17705, // alpha = 0.1451247 + 16862, 48438, 18683, 17589, // alpha = 0.1574704 + 16748, 48395, 18555, 17486, // alpha = 0.17032 + 16649, 48351, 18439, 17380, // alpha = 0.1836735 + 16565, 48305, 18239, 17219, // alpha = 0.1975309 + 16489, 48260, 18055, 17069, // alpha = 0.2118922 + 16423, 48214, 17892, 16936, // alpha = 0.2267574 + 16341, 48168, 17746, 16811, // alpha = 0.2421265 + 16237, 48115, 17617, 16700, // alpha = 0.2579995 + 16146, 48026, 17502, 16598, // alpha = 0.2743765 + 16063, 47938, 17391, 16505, // alpha = 0.2912573 + 15990, 47853, 17213, 16418, // alpha = 0.308642 + 15924, 47769, 17053, 16294, // alpha = 0.3265306 + 15868, 47688, 16912, 16151, // alpha = 0.3449232 + 15815, 47611, 16789, 16014, // alpha = 0.3638196 + 15768, 47536, 16678, 15889, // alpha = 0.38322 + 15726, 47463, 16580, 15773, // alpha = 0.4031242 + 15683, 47391, 16492, 15661, // alpha = 0.4235324 + 15646, 47320, 16413, 15557, // alpha = 0.4444445 + 15611, 47243, 16294, 15456, // alpha = 0.4658605 + 15572, 47166, 16161, 15349, // alpha = 0.4877803 + 15538, 47080, 16044, 15163, // alpha = 0.5102041 + 15506, 46936, 15939, 14992, // alpha = 0.5331318 + 15475, 46796, 15847, 14831, // alpha = 0.5565634 + 15448, 46662, 15764, 14681, // alpha = 0.5804989 + 15422, 46532, 15691, 14541, // alpha = 0.6049383 + 15397, 46409, 15625, 14411, // alpha = 0.6298816 + 15373, 46289, 15567, 14242, // alpha = 0.6553288 + 15342, 46173, 15513, 14015, // alpha = 0.68128 + 15297, 46044, 15465, 13801, // alpha = 0.7077349 + 15257, 45828, 15422, 13604, // alpha = 0.7346939 + 15215, 45618, 15380, 13416, // alpha = 0.7621567 + 15172, 45410, 15325, 13167, // alpha = 0.7901235 + 15131, 45196, 15257, 12838, // alpha = 0.8185941 + 15095, 44915, 15200, 12548, // alpha = 0.8475687 + 15065, 44503, 15153, 12275, // alpha = 0.8770471 + 15044, 44112, 15113, 11754, // alpha = 0.9070295 + 15034, 43430, 15078, 11203, // alpha = 0.9375157 + 15028, 42374, 15048, 10140, // alpha = 0.9685059 + 15020, 434, 15020, 33995, // alpha = 1 + + // Cos (theta) = 0.4897959 + 24528, 48927, 26642, 25332, // alpha = 0.001 + 24528, 48927, 26642, 25332, // alpha = 0.001 + 24512, 48927, 26634, 25318, // alpha = 0.001007811 + 23268, 48927, 25390, 24098, // alpha = 0.002267574 + 22464, 48926, 24586, 23270, // alpha = 0.004031243 + 21750, 48926, 23851, 22634, // alpha = 0.006298816 + 21219, 48925, 23341, 22049, // alpha = 0.009070295 + 20750, 48923, 22852, 21632, // alpha = 0.01234568 + 20412, 48920, 22535, 21218, // alpha = 0.01612497 + 19994, 48916, 22106, 20846, // alpha = 0.02040816 + 19695, 48911, 21794, 20579, // alpha = 0.02519527 + 19473, 48903, 21562, 20283, // alpha = 0.03048627 + 19151, 48888, 21266, 19981, // alpha = 0.03628118 + 18887, 48874, 20989, 19745, // alpha = 0.04258 + 18677, 48858, 20768, 19558, // alpha = 0.04938272 + 18506, 48840, 20590, 19356, // alpha = 0.05668934 + 18302, 48816, 20405, 19106, // alpha = 0.06449988 + 18070, 48791, 20160, 18899, // alpha = 0.07281432 + 17876, 48762, 19954, 18724, // alpha = 0.08163266 + 17712, 48731, 19778, 18577, // alpha = 0.09095491 + 17573, 48697, 19627, 18451, // alpha = 0.1007811 + 17455, 48659, 19496, 18254, // alpha = 0.1111111 + 17299, 48620, 19307, 18068, // alpha = 0.1219451 + 17125, 48577, 19104, 17906, // alpha = 0.1332829 + 16975, 48534, 18926, 17766, // alpha = 0.1451247 + 16845, 48488, 18767, 17642, // alpha = 0.1574704 + 16734, 48441, 18625, 17533, // alpha = 0.17032 + 16639, 48393, 18498, 17438, // alpha = 0.1836735 + 16552, 48344, 18341, 17292, // alpha = 0.1975309 + 16476, 48293, 18142, 17133, // alpha = 0.2118922 + 16412, 48244, 17963, 16993, // alpha = 0.2267574 + 16324, 48195, 17805, 16863, // alpha = 0.2421265 + 16223, 48146, 17666, 16745, // alpha = 0.2579995 + 16132, 48067, 17542, 16637, // alpha = 0.2743765 + 16050, 47974, 17433, 16538, // alpha = 0.2912573 + 15977, 47883, 17267, 16447, // alpha = 0.308642 + 15910, 47795, 17099, 16340, // alpha = 0.3265306 + 15851, 47709, 16950, 16185, // alpha = 0.3449232 + 15798, 47628, 16818, 16043, // alpha = 0.3638196 + 15753, 47550, 16703, 15914, // alpha = 0.38322 + 15714, 47475, 16600, 15796, // alpha = 0.4031242 + 15673, 47401, 16509, 15681, // alpha = 0.4235324 + 15634, 47330, 16428, 15573, // alpha = 0.4444445 + 15600, 47258, 16325, 15473, // alpha = 0.4658605 + 15569, 47183, 16191, 15376, // alpha = 0.4877803 + 15533, 47107, 16068, 15197, // alpha = 0.5102041 + 15501, 46963, 15959, 15021, // alpha = 0.5331318 + 15472, 46821, 15863, 14857, // alpha = 0.5565634 + 15444, 46682, 15778, 14702, // alpha = 0.5804989 + 15418, 46550, 15701, 14559, // alpha = 0.6049383 + 15392, 46422, 15633, 14425, // alpha = 0.6298816 + 15369, 46299, 15572, 14264, // alpha = 0.6553288 + 15333, 46182, 15518, 14032, // alpha = 0.68128 + 15286, 46055, 15467, 13810, // alpha = 0.7077349 + 15243, 45834, 15421, 13607, // alpha = 0.7346939 + 15202, 45622, 15380, 13420, // alpha = 0.7621567 + 15158, 45415, 15321, 13172, // alpha = 0.7901235 + 15119, 45213, 15253, 12853, // alpha = 0.8185941 + 15085, 44960, 15196, 12563, // alpha = 0.8475687 + 15057, 44539, 15148, 12294, // alpha = 0.8770471 + 15036, 44131, 15107, 11770, // alpha = 0.9070295 + 15026, 43439, 15071, 11219, // alpha = 0.9375157 + 15020, 42365, 15041, 10153, // alpha = 0.9685059 + 15012, 4477, 15012, 36149, // alpha = 1 + + // Cos (theta) = 0.4668682 + 24528, 49044, 26747, 25446, // alpha = 0.001 + 24528, 49044, 26747, 25446, // alpha = 0.001 + 24513, 49044, 26738, 25432, // alpha = 0.001007811 + 23268, 49043, 25575, 24199, // alpha = 0.002267574 + 22464, 49043, 24690, 23383, // alpha = 0.004031243 + 21750, 49042, 23984, 22706, // alpha = 0.006298816 + 21218, 49041, 23525, 22149, // alpha = 0.009070295 + 20750, 49039, 22987, 21705, // alpha = 0.01234568 + 20411, 49036, 22638, 21330, // alpha = 0.01612497 + 19993, 49031, 22269, 20934, // alpha = 0.02040816 + 19694, 49024, 21925, 20650, // alpha = 0.02519527 + 19472, 49014, 21669, 20399, // alpha = 0.03048627 + 19148, 48998, 21443, 20077, // alpha = 0.03628118 + 18883, 48982, 21138, 19825, // alpha = 0.04258 + 18672, 48963, 20894, 19625, // alpha = 0.04938272 + 18501, 48938, 20697, 19463, // alpha = 0.05668934 + 18291, 48914, 20534, 19204, // alpha = 0.06449988 + 18059, 48883, 20318, 18983, // alpha = 0.07281432 + 17865, 48850, 20090, 18797, // alpha = 0.08163266 + 17701, 48814, 19896, 18639, // alpha = 0.09095491 + 17562, 48774, 19728, 18505, // alpha = 0.1007811 + 17443, 48732, 19583, 18348, // alpha = 0.1111111 + 17277, 48687, 19456, 18150, // alpha = 0.1219451 + 17105, 48640, 19232, 17979, // alpha = 0.1332829 + 16956, 48591, 19035, 17829, // alpha = 0.1451247 + 16829, 48539, 18859, 17699, // alpha = 0.1574704 + 16719, 48487, 18703, 17583, // alpha = 0.17032 + 16623, 48434, 18564, 17481, // alpha = 0.1836735 + 16539, 48381, 18441, 17369, // alpha = 0.1975309 + 16467, 48327, 18231, 17203, // alpha = 0.2118922 + 16400, 48274, 18039, 17049, // alpha = 0.2267574 + 16302, 48221, 17868, 16912, // alpha = 0.2421265 + 16201, 48169, 17717, 16787, // alpha = 0.2579995 + 16110, 48106, 17585, 16671, // alpha = 0.2743765 + 16030, 48007, 17468, 16566, // alpha = 0.2912573 + 15957, 47912, 17324, 16470, // alpha = 0.308642 + 15892, 47819, 17145, 16380, // alpha = 0.3265306 + 15837, 47730, 16987, 16222, // alpha = 0.3449232 + 15784, 47644, 16850, 16072, // alpha = 0.3638196 + 15735, 47562, 16728, 15934, // alpha = 0.38322 + 15698, 47485, 16621, 15813, // alpha = 0.4031242 + 15661, 47408, 16526, 15696, // alpha = 0.4235324 + 15623, 47336, 16442, 15587, // alpha = 0.4444445 + 15591, 47265, 16351, 15485, // alpha = 0.4658605 + 15562, 47194, 16215, 15393, // alpha = 0.4877803 + 15529, 47122, 16093, 15231, // alpha = 0.5102041 + 15497, 46991, 15979, 15050, // alpha = 0.5331318 + 15469, 46845, 15879, 14882, // alpha = 0.5565634 + 15440, 46704, 15791, 14722, // alpha = 0.5804989 + 15415, 46568, 15713, 14578, // alpha = 0.6049383 + 15389, 46438, 15641, 14440, // alpha = 0.6298816 + 15364, 46311, 15578, 14284, // alpha = 0.6553288 + 15325, 46190, 15522, 14050, // alpha = 0.68128 + 15278, 46068, 15469, 13825, // alpha = 0.7077349 + 15234, 45842, 15422, 13617, // alpha = 0.7346939 + 15193, 45623, 15379, 13427, // alpha = 0.7621567 + 15150, 45414, 15319, 13184, // alpha = 0.7901235 + 15110, 45211, 15248, 12860, // alpha = 0.8185941 + 15077, 44966, 15191, 12569, // alpha = 0.8475687 + 15049, 44572, 15143, 12304, // alpha = 0.8770471 + 15028, 44165, 15101, 11794, // alpha = 0.9070295 + 15017, 43496, 15065, 11256, // alpha = 0.9375157 + 15012, 42408, 15033, 10176, // alpha = 0.9685059 + 15004, 5248, 15004, 37025, // alpha = 1 + + // Cos (theta) = 0.4434366 + 24528, 49163, 26871, 25573, // alpha = 0.001 + 24528, 49163, 26871, 25573, // alpha = 0.001 + 24512, 49163, 26861, 25558, // alpha = 0.001007811 + 23268, 49163, 25697, 24311, // alpha = 0.002267574 + 22464, 49163, 24813, 23509, // alpha = 0.004031243 + 21749, 49162, 24142, 22787, // alpha = 0.006298816 + 21218, 49161, 23648, 22261, // alpha = 0.009070295 + 20750, 49160, 23148, 21787, // alpha = 0.01234568 + 20410, 49158, 22760, 21454, // alpha = 0.01612497 + 19992, 49155, 22461, 21032, // alpha = 0.02040816 + 19692, 49150, 22079, 20729, // alpha = 0.02519527 + 19470, 49135, 21795, 20503, // alpha = 0.03048627 + 19143, 49118, 21578, 20182, // alpha = 0.03628118 + 18878, 49099, 21313, 19914, // alpha = 0.04258 + 18667, 49078, 21042, 19700, // alpha = 0.04938272 + 18496, 49049, 20822, 19526, // alpha = 0.05668934 + 18279, 49019, 20642, 19311, // alpha = 0.06449988 + 18046, 48983, 20491, 19074, // alpha = 0.07281432 + 17852, 48945, 20247, 18875, // alpha = 0.08163266 + 17688, 48903, 20031, 18707, // alpha = 0.09095491 + 17549, 48856, 19844, 18563, // alpha = 0.1007811 + 17431, 48808, 19682, 18440, // alpha = 0.1111111 + 17254, 48757, 19540, 18238, // alpha = 0.1219451 + 17082, 48704, 19376, 18055, // alpha = 0.1332829 + 16937, 48648, 19155, 17898, // alpha = 0.1451247 + 16811, 48591, 18960, 17759, // alpha = 0.1574704 + 16700, 48534, 18788, 17634, // alpha = 0.17032 + 16609, 48476, 18634, 17526, // alpha = 0.1836735 + 16525, 48418, 18500, 17427, // alpha = 0.1975309 + 16452, 48360, 18330, 17268, // alpha = 0.2118922 + 16386, 48302, 18121, 17104, // alpha = 0.2267574 + 16276, 48246, 17936, 16959, // alpha = 0.2421265 + 16176, 48190, 17773, 16826, // alpha = 0.2579995 + 16086, 48136, 17631, 16703, // alpha = 0.2743765 + 16007, 48039, 17506, 16594, // alpha = 0.2912573 + 15935, 47939, 17386, 16492, // alpha = 0.308642 + 15876, 47842, 17194, 16402, // alpha = 0.3265306 + 15817, 47748, 17028, 16249, // alpha = 0.3449232 + 15769, 47658, 16882, 16098, // alpha = 0.3638196 + 15721, 47573, 16754, 15956, // alpha = 0.38322 + 15681, 47492, 16641, 15826, // alpha = 0.4031242 + 15645, 47414, 16542, 15707, // alpha = 0.4235324 + 15610, 47340, 16455, 15596, // alpha = 0.4444445 + 15576, 47267, 16372, 15491, // alpha = 0.4658605 + 15547, 47197, 16236, 15396, // alpha = 0.4877803 + 15521, 47128, 16113, 15253, // alpha = 0.5102041 + 15492, 47015, 16000, 15077, // alpha = 0.5331318 + 15465, 46869, 15896, 14906, // alpha = 0.5565634 + 15437, 46726, 15803, 14744, // alpha = 0.5804989 + 15410, 46588, 15722, 14593, // alpha = 0.6049383 + 15385, 46454, 15649, 14455, // alpha = 0.6298816 + 15361, 46325, 15585, 14310, // alpha = 0.6553288 + 15319, 46201, 15526, 14071, // alpha = 0.68128 + 15271, 46081, 15472, 13839, // alpha = 0.7077349 + 15228, 45853, 15424, 13632, // alpha = 0.7346939 + 15186, 45632, 15379, 13436, // alpha = 0.7621567 + 15142, 45414, 15317, 13194, // alpha = 0.7901235 + 15103, 45205, 15245, 12868, // alpha = 0.8185941 + 15070, 44956, 15185, 12575, // alpha = 0.8475687 + 15041, 44563, 15136, 12308, // alpha = 0.8770471 + 15020, 44183, 15094, 11808, // alpha = 0.9070295 + 15009, 43563, 15057, 11280, // alpha = 0.9375157 + 15003, 42518, 15025, 10240, // alpha = 0.9685059 + 14995, 567, 14995, 33965, // alpha = 1 + + // Cos (theta) = 0.4195011 + 24528, 49236, 27021, 25658, // alpha = 0.001 + 24528, 49236, 27021, 25658, // alpha = 0.001 + 24513, 49236, 27009, 25650, // alpha = 0.001007811 + 23268, 49236, 25829, 24436, // alpha = 0.002267574 + 22464, 49236, 24961, 23601, // alpha = 0.004031243 + 21749, 49235, 24331, 22877, // alpha = 0.006298816 + 21218, 49234, 23779, 22386, // alpha = 0.009070295 + 20749, 49232, 23340, 21879, // alpha = 0.01234568 + 20409, 49230, 22907, 21549, // alpha = 0.01612497 + 19991, 49226, 22609, 21141, // alpha = 0.02040816 + 19691, 49221, 22264, 20816, // alpha = 0.02519527 + 19467, 49212, 21945, 20575, // alpha = 0.03048627 + 19138, 49202, 21702, 20300, // alpha = 0.03628118 + 18872, 49191, 21512, 20011, // alpha = 0.04258 + 18660, 49177, 21217, 19781, // alpha = 0.04938272 + 18489, 49161, 20971, 19595, // alpha = 0.05668934 + 18264, 49133, 20768, 19427, // alpha = 0.06449988 + 18031, 49091, 20599, 19172, // alpha = 0.07281432 + 17836, 49047, 20431, 18959, // alpha = 0.08163266 + 17672, 48997, 20188, 18778, // alpha = 0.09095491 + 17535, 48943, 19977, 18626, // alpha = 0.1007811 + 17417, 48888, 19796, 18494, // alpha = 0.1111111 + 17227, 48829, 19636, 18331, // alpha = 0.1219451 + 17060, 48770, 19496, 18139, // alpha = 0.1332829 + 16916, 48708, 19290, 17970, // alpha = 0.1451247 + 16790, 48644, 19072, 17820, // alpha = 0.1574704 + 16683, 48580, 18880, 17688, // alpha = 0.17032 + 16591, 48517, 18711, 17572, // alpha = 0.1836735 + 16508, 48454, 18564, 17466, // alpha = 0.1975309 + 16438, 48391, 18433, 17336, // alpha = 0.2118922 + 16367, 48329, 18205, 17166, // alpha = 0.2267574 + 16249, 48269, 18006, 17005, // alpha = 0.2421265 + 16151, 48211, 17830, 16864, // alpha = 0.2579995 + 16063, 48153, 17678, 16737, // alpha = 0.2743765 + 15989, 48069, 17544, 16623, // alpha = 0.2912573 + 15917, 47963, 17428, 16515, // alpha = 0.308642 + 15854, 47861, 17245, 16418, // alpha = 0.3265306 + 15799, 47764, 17068, 16278, // alpha = 0.3449232 + 15749, 47671, 16915, 16118, // alpha = 0.3638196 + 15706, 47582, 16779, 15974, // alpha = 0.38322 + 15663, 47497, 16662, 15837, // alpha = 0.4031242 + 15628, 47417, 16558, 15715, // alpha = 0.4235324 + 15596, 47341, 16468, 15604, // alpha = 0.4444445 + 15564, 47268, 16388, 15498, // alpha = 0.4658605 + 15535, 47196, 16251, 15400, // alpha = 0.4877803 + 15511, 47129, 16127, 15264, // alpha = 0.5102041 + 15483, 47017, 16014, 15088, // alpha = 0.5331318 + 15459, 46886, 15913, 14926, // alpha = 0.5565634 + 15433, 46749, 15819, 14767, // alpha = 0.5804989 + 15408, 46608, 15735, 14615, // alpha = 0.6049383 + 15383, 46472, 15659, 14471, // alpha = 0.6298816 + 15357, 46341, 15591, 14338, // alpha = 0.6553288 + 15313, 46214, 15531, 14094, // alpha = 0.68128 + 15266, 46092, 15476, 13860, // alpha = 0.7077349 + 15223, 45867, 15426, 13646, // alpha = 0.7346939 + 15180, 45641, 15380, 13448, // alpha = 0.7621567 + 15136, 45420, 15316, 13211, // alpha = 0.7901235 + 15095, 45207, 15241, 12876, // alpha = 0.8185941 + 15061, 44944, 15180, 12579, // alpha = 0.8475687 + 15032, 44548, 15129, 12309, // alpha = 0.8770471 + 15012, 44162, 15087, 11808, // alpha = 0.9070295 + 15001, 43529, 15049, 11277, // alpha = 0.9375157 + 14994, 42585, 15016, 10258, // alpha = 0.9685059 + 14986, 38552, 14986, 4543, // alpha = 1 + + // Cos (theta) = 0.3950617 + 24528, 49319, 27202, 25739, // alpha = 0.001 + 24528, 49319, 27202, 25739, // alpha = 0.001 + 24512, 49319, 27189, 25730, // alpha = 0.001007811 + 23267, 49318, 25989, 24577, // alpha = 0.002267574 + 22464, 49318, 25141, 23681, // alpha = 0.004031243 + 21749, 49317, 24561, 22980, // alpha = 0.006298816 + 21217, 49316, 23938, 22528, // alpha = 0.009070295 + 20749, 49314, 23563, 21982, // alpha = 0.01234568 + 20408, 49311, 23085, 21628, // alpha = 0.01612497 + 19989, 49307, 22749, 21265, // alpha = 0.02040816 + 19688, 49300, 22487, 20915, // alpha = 0.02519527 + 19465, 49289, 22127, 20654, // alpha = 0.03048627 + 19132, 49278, 21852, 20431, // alpha = 0.03628118 + 18865, 49264, 21638, 20120, // alpha = 0.04258 + 18653, 49246, 21427, 19872, // alpha = 0.04938272 + 18481, 49228, 21148, 19671, // alpha = 0.05668934 + 18247, 49205, 20918, 19506, // alpha = 0.06449988 + 18013, 49181, 20726, 19281, // alpha = 0.07281432 + 17819, 49154, 20564, 19051, // alpha = 0.08163266 + 17656, 49098, 20370, 18857, // alpha = 0.09095491 + 17517, 49036, 20133, 18692, // alpha = 0.1007811 + 17394, 48972, 19926, 18552, // alpha = 0.1111111 + 17200, 48905, 19745, 18432, // alpha = 0.1219451 + 17033, 48837, 19587, 18225, // alpha = 0.1332829 + 16892, 48767, 19439, 18045, // alpha = 0.1451247 + 16769, 48696, 19195, 17885, // alpha = 0.1574704 + 16662, 48626, 18982, 17743, // alpha = 0.17032 + 16572, 48557, 18795, 17620, // alpha = 0.1836735 + 16490, 48489, 18632, 17504, // alpha = 0.1975309 + 16421, 48421, 18488, 17402, // alpha = 0.2118922 + 16336, 48355, 18294, 17220, // alpha = 0.2267574 + 16220, 48291, 18081, 17050, // alpha = 0.2421265 + 16124, 48229, 17891, 16901, // alpha = 0.2579995 + 16043, 48169, 17726, 16770, // alpha = 0.2743765 + 15964, 48096, 17583, 16646, // alpha = 0.2912573 + 15894, 47985, 17460, 16534, // alpha = 0.308642 + 15835, 47879, 17297, 16435, // alpha = 0.3265306 + 15779, 47778, 17109, 16300, // alpha = 0.3449232 + 15730, 47682, 16947, 16136, // alpha = 0.3638196 + 15686, 47590, 16807, 15984, // alpha = 0.38322 + 15648, 47502, 16684, 15848, // alpha = 0.4031242 + 15613, 47419, 16574, 15723, // alpha = 0.4235324 + 15582, 47340, 16480, 15609, // alpha = 0.4444445 + 15550, 47266, 16398, 15500, // alpha = 0.4658605 + 15522, 47194, 16268, 15402, // alpha = 0.4877803 + 15499, 47124, 16137, 15263, // alpha = 0.5102041 + 15472, 47011, 16024, 15090, // alpha = 0.5331318 + 15449, 46881, 15921, 14929, // alpha = 0.5565634 + 15428, 46755, 15831, 14779, // alpha = 0.5804989 + 15403, 46628, 15747, 14631, // alpha = 0.6049383 + 15381, 46492, 15668, 14490, // alpha = 0.6298816 + 15352, 46359, 15598, 14353, // alpha = 0.6553288 + 15306, 46230, 15536, 14117, // alpha = 0.68128 + 15261, 46106, 15479, 13881, // alpha = 0.7077349 + 15218, 45889, 15428, 13663, // alpha = 0.7346939 + 15174, 45654, 15381, 13458, // alpha = 0.7621567 + 15129, 45432, 15313, 13229, // alpha = 0.7901235 + 15088, 45214, 15238, 12890, // alpha = 0.8185941 + 15055, 44951, 15174, 12586, // alpha = 0.8475687 + 15025, 44537, 15122, 12310, // alpha = 0.8770471 + 15003, 44139, 15078, 11799, // alpha = 0.9070295 + 14991, 43476, 15040, 11267, // alpha = 0.9375157 + 14984, 42462, 15006, 10233, // alpha = 0.9685059 + 14975, 36564, 14975, 2120, // alpha = 1 + + // Cos (theta) = 0.3701184 + 24527, 49413, 27426, 25830, // alpha = 0.001 + 24527, 49413, 27426, 25830, // alpha = 0.001 + 24511, 49413, 27412, 25820, // alpha = 0.001007811 + 23269, 49413, 26187, 24660, // alpha = 0.002267574 + 22464, 49413, 25362, 23773, // alpha = 0.004031243 + 21749, 49412, 24710, 23096, // alpha = 0.006298816 + 21217, 49410, 24134, 22609, // alpha = 0.009070295 + 20748, 49408, 23706, 22101, // alpha = 0.01234568 + 20406, 49404, 23303, 21718, // alpha = 0.01612497 + 19987, 49398, 22920, 21405, // alpha = 0.02040816 + 19685, 49388, 22644, 21027, // alpha = 0.02519527 + 19461, 49376, 22349, 20745, // alpha = 0.03048627 + 19124, 49362, 22035, 20530, // alpha = 0.03628118 + 18857, 49345, 21790, 20243, // alpha = 0.04258 + 18643, 49324, 21593, 19974, // alpha = 0.04938272 + 18471, 49301, 21362, 19756, // alpha = 0.05668934 + 18227, 49274, 21098, 19577, // alpha = 0.06449988 + 17993, 49245, 20878, 19401, // alpha = 0.07281432 + 17798, 49213, 20692, 19151, // alpha = 0.08163266 + 17636, 49179, 20533, 18942, // alpha = 0.09095491 + 17501, 49133, 20311, 18767, // alpha = 0.1007811 + 17361, 49058, 20075, 18615, // alpha = 0.1111111 + 17168, 48983, 19869, 18486, // alpha = 0.1219451 + 17005, 48905, 19688, 18318, // alpha = 0.1332829 + 16866, 48827, 19530, 18124, // alpha = 0.1451247 + 16744, 48748, 19331, 17951, // alpha = 0.1574704 + 16639, 48670, 19093, 17799, // alpha = 0.17032 + 16552, 48595, 18883, 17667, // alpha = 0.1836735 + 16471, 48522, 18705, 17544, // alpha = 0.1975309 + 16403, 48449, 18548, 17436, // alpha = 0.2118922 + 16301, 48379, 18392, 17272, // alpha = 0.2267574 + 16194, 48311, 18155, 17097, // alpha = 0.2421265 + 16098, 48245, 17952, 16938, // alpha = 0.2579995 + 16013, 48183, 17777, 16796, // alpha = 0.2743765 + 15936, 48119, 17624, 16666, // alpha = 0.2912573 + 15875, 48004, 17492, 16554, // alpha = 0.308642 + 15813, 47895, 17348, 16448, // alpha = 0.3265306 + 15761, 47790, 17152, 16324, // alpha = 0.3449232 + 15710, 47690, 16982, 16149, // alpha = 0.3638196 + 15669, 47596, 16832, 15997, // alpha = 0.38322 + 15632, 47506, 16704, 15857, // alpha = 0.4031242 + 15594, 47420, 16592, 15725, // alpha = 0.4235324 + 15564, 47339, 16493, 15608, // alpha = 0.4444445 + 15535, 47262, 16408, 15500, // alpha = 0.4658605 + 15508, 47189, 16280, 15401, // alpha = 0.4877803 + 15486, 47119, 16147, 15262, // alpha = 0.5102041 + 15460, 46998, 16031, 15086, // alpha = 0.5331318 + 15438, 46868, 15927, 14924, // alpha = 0.5565634 + 15417, 46743, 15835, 14777, // alpha = 0.5804989 + 15395, 46620, 15751, 14633, // alpha = 0.6049383 + 15377, 46502, 15676, 14503, // alpha = 0.6298816 + 15348, 46379, 15606, 14368, // alpha = 0.6553288 + 15302, 46248, 15540, 14145, // alpha = 0.68128 + 15256, 46122, 15482, 13903, // alpha = 0.7077349 + 15212, 45920, 15429, 13681, // alpha = 0.7346939 + 15169, 45681, 15381, 13475, // alpha = 0.7621567 + 15122, 45449, 15311, 13247, // alpha = 0.7901235 + 15075, 45226, 15231, 12898, // alpha = 0.8185941 + 15039, 44965, 15166, 12590, // alpha = 0.8475687 + 15008, 44546, 15113, 12312, // alpha = 0.8770471 + 14989, 44138, 15068, 11801, // alpha = 0.9070295 + 14978, 43452, 15030, 11262, // alpha = 0.9375157 + 14972, 42347, 14995, 10177, // alpha = 0.9685059 + 14964, 5710, 14964, 37540, // alpha = 1 + + // Cos (theta) = 0.3446712 + 24528, 49522, 27676, 25938, // alpha = 0.001 + 24528, 49522, 27676, 25938, // alpha = 0.001 + 24513, 49522, 27668, 25927, // alpha = 0.001007811 + 23268, 49522, 26432, 24753, // alpha = 0.002267574 + 22464, 49522, 25620, 23879, // alpha = 0.004031243 + 21749, 49521, 24887, 23232, // alpha = 0.006298816 + 21216, 49519, 24379, 22702, // alpha = 0.009070295 + 20747, 49516, 23885, 22237, // alpha = 0.01234568 + 20404, 49511, 23564, 21822, // alpha = 0.01612497 + 19984, 49504, 23133, 21536, // alpha = 0.02040816 + 19681, 49490, 22814, 21155, // alpha = 0.02519527 + 19457, 49476, 22577, 20849, // alpha = 0.03048627 + 19115, 49459, 22262, 20614, // alpha = 0.03628118 + 18846, 49436, 21977, 20381, // alpha = 0.04258 + 18632, 49412, 21749, 20088, // alpha = 0.04938272 + 18459, 49383, 21564, 19851, // alpha = 0.05668934 + 18202, 49350, 21316, 19655, // alpha = 0.06449988 + 17968, 49315, 21061, 19493, // alpha = 0.07281432 + 17774, 49277, 20844, 19261, // alpha = 0.08163266 + 17614, 49236, 20659, 19037, // alpha = 0.09095491 + 17478, 49193, 20501, 18844, // alpha = 0.1007811 + 17323, 49149, 20246, 18682, // alpha = 0.1111111 + 17136, 49061, 20008, 18545, // alpha = 0.1219451 + 16970, 48974, 19803, 18411, // alpha = 0.1332829 + 16838, 48886, 19623, 18207, // alpha = 0.1451247 + 16719, 48798, 19468, 18021, // alpha = 0.1574704 + 16615, 48712, 19212, 17855, // alpha = 0.17032 + 16525, 48631, 18982, 17709, // alpha = 0.1836735 + 16450, 48552, 18781, 17583, // alpha = 0.1975309 + 16383, 48475, 18610, 17467, // alpha = 0.2118922 + 16264, 48400, 18461, 17320, // alpha = 0.2267574 + 16160, 48329, 18237, 17135, // alpha = 0.2421265 + 16066, 48260, 18018, 16968, // alpha = 0.2579995 + 15983, 48194, 17828, 16818, // alpha = 0.2743765 + 15914, 48133, 17665, 16689, // alpha = 0.2912573 + 15847, 48019, 17526, 16565, // alpha = 0.308642 + 15787, 47907, 17405, 16456, // alpha = 0.3265306 + 15736, 47800, 17196, 16335, // alpha = 0.3449232 + 15692, 47697, 17016, 16163, // alpha = 0.3638196 + 15647, 47600, 16860, 15999, // alpha = 0.38322 + 15613, 47508, 16726, 15857, // alpha = 0.4031242 + 15578, 47421, 16609, 15727, // alpha = 0.4235324 + 15548, 47337, 16507, 15607, // alpha = 0.4444445 + 15519, 47258, 16419, 15497, // alpha = 0.4658605 + 15491, 47183, 16296, 15395, // alpha = 0.4877803 + 15471, 47111, 16158, 15251, // alpha = 0.5102041 + 15446, 46982, 16039, 15074, // alpha = 0.5331318 + 15425, 46852, 15932, 14915, // alpha = 0.5565634 + 15405, 46724, 15837, 14766, // alpha = 0.5804989 + 15384, 46602, 15753, 14624, // alpha = 0.6049383 + 15366, 46486, 15676, 14494, // alpha = 0.6298816 + 15331, 46370, 15607, 14367, // alpha = 0.6553288 + 15293, 46259, 15544, 14159, // alpha = 0.68128 + 15251, 46142, 15486, 13928, // alpha = 0.7077349 + 15199, 45955, 15430, 13691, // alpha = 0.7346939 + 15152, 45714, 15379, 13479, // alpha = 0.7621567 + 15104, 45479, 15303, 13252, // alpha = 0.7901235 + 15061, 45250, 15223, 12906, // alpha = 0.8185941 + 15025, 44997, 15157, 12594, // alpha = 0.8475687 + 14997, 44572, 15103, 12318, // alpha = 0.8770471 + 14976, 44154, 15057, 11809, // alpha = 0.9070295 + 14966, 43465, 15018, 11266, // alpha = 0.9375157 + 14960, 42346, 14983, 10181, // alpha = 0.9685059 + 14951, 6372, 14951, 38116, // alpha = 1 + + // Cos (theta) = 0.3187201 + 24528, 49651, 27855, 26063, // alpha = 0.001 + 24528, 49651, 27855, 26063, // alpha = 0.001 + 24513, 49651, 27845, 26052, // alpha = 0.001007811 + 23268, 49650, 26685, 24863, // alpha = 0.002267574 + 22463, 49650, 25796, 24003, // alpha = 0.004031243 + 21749, 49648, 25113, 23390, // alpha = 0.006298816 + 21216, 49646, 24634, 22812, // alpha = 0.009070295 + 20746, 49642, 24114, 22397, // alpha = 0.01234568 + 20401, 49635, 23738, 21943, // alpha = 0.01612497 + 19980, 49625, 23404, 21630, // alpha = 0.02040816 + 19677, 49609, 23029, 21304, // alpha = 0.02519527 + 19448, 49591, 22751, 20968, // alpha = 0.03048627 + 19103, 49569, 22538, 20711, // alpha = 0.03628118 + 18833, 49541, 22212, 20510, // alpha = 0.04258 + 18618, 49510, 21943, 20218, // alpha = 0.04938272 + 18444, 49474, 21725, 19957, // alpha = 0.05668934 + 18174, 49434, 21544, 19743, // alpha = 0.06449988 + 17940, 49391, 21282, 19567, // alpha = 0.07281432 + 17748, 49345, 21028, 19384, // alpha = 0.08163266 + 17587, 49296, 20810, 19137, // alpha = 0.09095491 + 17455, 49246, 20623, 18930, // alpha = 0.1007811 + 17279, 49196, 20445, 18754, // alpha = 0.1111111 + 17093, 49141, 20169, 18603, // alpha = 0.1219451 + 16936, 49041, 19930, 18473, // alpha = 0.1332829 + 16801, 48942, 19726, 18286, // alpha = 0.1451247 + 16685, 48845, 19550, 18084, // alpha = 0.1574704 + 16588, 48752, 19341, 17912, // alpha = 0.17032 + 16500, 48663, 19084, 17754, // alpha = 0.1836735 + 16426, 48578, 18864, 17617, // alpha = 0.1975309 + 16338, 48496, 18675, 17494, // alpha = 0.2118922 + 16225, 48418, 18513, 17364, // alpha = 0.2267574 + 16123, 48343, 18319, 17168, // alpha = 0.2421265 + 16030, 48272, 18083, 16992, // alpha = 0.2579995 + 15951, 48204, 17880, 16838, // alpha = 0.2743765 + 15884, 48140, 17708, 16702, // alpha = 0.2912573 + 15819, 48030, 17559, 16576, // alpha = 0.308642 + 15765, 47916, 17433, 16466, // alpha = 0.3265306 + 15718, 47806, 17238, 16351, // alpha = 0.3449232 + 15669, 47702, 17052, 16167, // alpha = 0.3638196 + 15630, 47602, 16888, 16006, // alpha = 0.38322 + 15595, 47508, 16748, 15859, // alpha = 0.4031242 + 15562, 47420, 16625, 15728, // alpha = 0.4235324 + 15532, 47335, 16520, 15605, // alpha = 0.4444445 + 15505, 47254, 16428, 15496, // alpha = 0.4658605 + 15476, 47176, 16312, 15390, // alpha = 0.4877803 + 15456, 47103, 16172, 15238, // alpha = 0.5102041 + 15432, 46964, 16045, 15061, // alpha = 0.5331318 + 15410, 46831, 15936, 14897, // alpha = 0.5565634 + 15390, 46703, 15839, 14750, // alpha = 0.5804989 + 15370, 46581, 15753, 14609, // alpha = 0.6049383 + 15344, 46462, 15676, 14478, // alpha = 0.6298816 + 15304, 46348, 15606, 14351, // alpha = 0.6553288 + 15266, 46239, 15543, 14135, // alpha = 0.68128 + 15228, 46129, 15484, 13909, // alpha = 0.7077349 + 15186, 45968, 15430, 13696, // alpha = 0.7346939 + 15143, 45750, 15378, 13491, // alpha = 0.7621567 + 15098, 45517, 15301, 13278, // alpha = 0.7901235 + 15054, 45287, 15217, 12924, // alpha = 0.8185941 + 15017, 45061, 15150, 12610, // alpha = 0.8475687 + 14987, 44623, 15093, 12327, // alpha = 0.8770471 + 14965, 44193, 15047, 11826, // alpha = 0.9070295 + 14953, 43525, 15006, 11284, // alpha = 0.9375157 + 14946, 42427, 14970, 10220, // alpha = 0.9685059 + 14938, 6088, 14938, 37957, // alpha = 1 + + // Cos (theta) = 0.292265 + 24528, 49803, 28087, 26212, // alpha = 0.001 + 24528, 49803, 28087, 26212, // alpha = 0.001 + 24512, 49803, 28076, 26199, // alpha = 0.001007811 + 23268, 49803, 26890, 24995, // alpha = 0.002267574 + 22463, 49802, 26027, 24150, // alpha = 0.004031243 + 21748, 49800, 25407, 23565, // alpha = 0.006298816 + 21214, 49797, 24838, 22942, // alpha = 0.009070295 + 20744, 49791, 24412, 22557, // alpha = 0.01234568 + 20397, 49783, 23963, 22086, // alpha = 0.01612497 + 19975, 49767, 23653, 21740, // alpha = 0.02040816 + 19671, 49748, 23308, 21478, // alpha = 0.02519527 + 19434, 49726, 22976, 21108, // alpha = 0.03048627 + 19088, 49696, 22720, 20824, // alpha = 0.03628118 + 18817, 49661, 22511, 20601, // alpha = 0.04258 + 18601, 49622, 22189, 20365, // alpha = 0.04938272 + 18421, 49576, 21927, 20077, // alpha = 0.05668934 + 18138, 49527, 21710, 19841, // alpha = 0.06449988 + 17906, 49474, 21529, 19648, // alpha = 0.07281432 + 17715, 49418, 21249, 19486, // alpha = 0.08163266 + 17558, 49359, 20988, 19249, // alpha = 0.09095491 + 17428, 49301, 20766, 19022, // alpha = 0.1007811 + 17233, 49243, 20576, 18832, // alpha = 0.1111111 + 17052, 49185, 20347, 18668, // alpha = 0.1219451 + 16900, 49105, 20071, 18527, // alpha = 0.1332829 + 16766, 48995, 19837, 18371, // alpha = 0.1451247 + 16653, 48889, 19637, 18153, // alpha = 0.1574704 + 16554, 48787, 19469, 17960, // alpha = 0.17032 + 16472, 48691, 19192, 17795, // alpha = 0.1836735 + 16400, 48601, 18950, 17648, // alpha = 0.1975309 + 16291, 48514, 18741, 17519, // alpha = 0.2118922 + 16179, 48432, 18567, 17399, // alpha = 0.2267574 + 16082, 48355, 18404, 17195, // alpha = 0.2421265 + 15994, 48281, 18151, 17013, // alpha = 0.2579995 + 15923, 48211, 17933, 16857, // alpha = 0.2743765 + 15851, 48144, 17751, 16710, // alpha = 0.2912573 + 15794, 48037, 17594, 16585, // alpha = 0.308642 + 15739, 47920, 17460, 16471, // alpha = 0.3265306 + 15693, 47809, 17282, 16357, // alpha = 0.3449232 + 15651, 47704, 17086, 16174, // alpha = 0.3638196 + 15611, 47603, 16915, 16008, // alpha = 0.38322 + 15575, 47508, 16771, 15858, // alpha = 0.4031242 + 15547, 47416, 16642, 15728, // alpha = 0.4235324 + 15514, 47331, 16534, 15599, // alpha = 0.4444445 + 15490, 47249, 16437, 15492, // alpha = 0.4658605 + 15462, 47171, 16326, 15385, // alpha = 0.4877803 + 15438, 47089, 16181, 15220, // alpha = 0.5102041 + 15419, 46946, 16052, 15050, // alpha = 0.5331318 + 15396, 46810, 15941, 14885, // alpha = 0.5565634 + 15377, 46681, 15840, 14735, // alpha = 0.5804989 + 15354, 46557, 15752, 14593, // alpha = 0.6049383 + 15319, 46437, 15674, 14463, // alpha = 0.6298816 + 15281, 46322, 15602, 14339, // alpha = 0.6553288 + 15244, 46210, 15538, 14108, // alpha = 0.68128 + 15207, 46102, 15480, 13888, // alpha = 0.7077349 + 15166, 45919, 15425, 13679, // alpha = 0.7346939 + 15125, 45715, 15374, 13480, // alpha = 0.7621567 + 15085, 45515, 15294, 13282, // alpha = 0.7901235 + 15045, 45315, 15212, 12945, // alpha = 0.8185941 + 15009, 45104, 15142, 12632, // alpha = 0.8475687 + 14978, 44709, 15083, 12344, // alpha = 0.8770471 + 14953, 44272, 15035, 11857, // alpha = 0.9070295 + 14941, 43653, 14993, 11310, // alpha = 0.9375157 + 14933, 42617, 14957, 10274, // alpha = 0.9685059 + 14923, 36705, 14923, 2424, // alpha = 1 + + // Cos (theta) = 0.2653061 + 24528, 49989, 28400, 26393, // alpha = 0.001 + 24528, 49989, 28400, 26393, // alpha = 0.001 + 24512, 49989, 28386, 26379, // alpha = 0.001007811 + 23268, 49988, 27166, 25154, // alpha = 0.002267574 + 22463, 49987, 26337, 24329, // alpha = 0.004031243 + 21748, 49984, 25701, 23680, // alpha = 0.006298816 + 21213, 49980, 25111, 23100, // alpha = 0.009070295 + 20743, 49972, 24693, 22672, // alpha = 0.01234568 + 20392, 49960, 24264, 22259, // alpha = 0.01612497 + 19968, 49939, 23887, 21873, // alpha = 0.02040816 + 19664, 49915, 23615, 21596, // alpha = 0.02519527 + 19417, 49883, 23272, 21273, // alpha = 0.03048627 + 19068, 49845, 22959, 20956, // alpha = 0.03628118 + 18796, 49800, 22714, 20706, // alpha = 0.04258 + 18579, 49748, 22505, 20508, // alpha = 0.04938272 + 18378, 49691, 22184, 20214, // alpha = 0.05668934 + 18096, 49629, 21919, 19952, // alpha = 0.06449988 + 17866, 49563, 21697, 19738, // alpha = 0.07281432 + 17678, 49494, 21510, 19560, // alpha = 0.08163266 + 17526, 49424, 21199, 19372, // alpha = 0.09095491 + 17386, 49356, 20933, 19121, // alpha = 0.1007811 + 17177, 49288, 20707, 18912, // alpha = 0.1111111 + 17000, 49222, 20516, 18732, // alpha = 0.1219451 + 16852, 49158, 20230, 18577, // alpha = 0.1332829 + 16723, 49043, 19960, 18440, // alpha = 0.1451247 + 16617, 48926, 19731, 18217, // alpha = 0.1574704 + 16521, 48817, 19541, 18009, // alpha = 0.17032 + 16441, 48714, 19307, 17830, // alpha = 0.1836735 + 16359, 48618, 19038, 17675, // alpha = 0.1975309 + 16238, 48527, 18812, 17537, // alpha = 0.2118922 + 16131, 48442, 18622, 17417, // alpha = 0.2267574 + 16036, 48362, 18461, 17212, // alpha = 0.2421265 + 15958, 48286, 18217, 17029, // alpha = 0.2579995 + 15885, 48215, 17989, 16865, // alpha = 0.2743765 + 15818, 48148, 17795, 16716, // alpha = 0.2912573 + 15762, 48039, 17629, 16586, // alpha = 0.308642 + 15712, 47920, 17488, 16472, // alpha = 0.3265306 + 15669, 47809, 17328, 16356, // alpha = 0.3449232 + 15623, 47703, 17122, 16165, // alpha = 0.3638196 + 15590, 47602, 16944, 16005, // alpha = 0.38322 + 15556, 47506, 16792, 15854, // alpha = 0.4031242 + 15526, 47414, 16663, 15717, // alpha = 0.4235324 + 15497, 47327, 16548, 15594, // alpha = 0.4444445 + 15473, 47243, 16449, 15484, // alpha = 0.4658605 + 15448, 47165, 16344, 15379, // alpha = 0.4877803 + 15424, 47076, 16193, 15206, // alpha = 0.5102041 + 15405, 46932, 16061, 15033, // alpha = 0.5331318 + 15384, 46793, 15946, 14871, // alpha = 0.5565634 + 15364, 46661, 15842, 14721, // alpha = 0.5804989 + 15332, 46534, 15752, 14580, // alpha = 0.6049383 + 15294, 46412, 15670, 14448, // alpha = 0.6298816 + 15256, 46295, 15597, 14310, // alpha = 0.6553288 + 15220, 46183, 15531, 14079, // alpha = 0.68128 + 15183, 46067, 15472, 13861, // alpha = 0.7077349 + 15146, 45857, 15418, 13657, // alpha = 0.7346939 + 15106, 45653, 15366, 13459, // alpha = 0.7621567 + 15065, 45454, 15279, 13246, // alpha = 0.7901235 + 15027, 45264, 15198, 12916, // alpha = 0.8185941 + 14994, 45074, 15129, 12619, // alpha = 0.8475687 + 14966, 44716, 15072, 12347, // alpha = 0.8770471 + 14941, 44341, 15022, 11884, // alpha = 0.9070295 + 14926, 43849, 14979, 11352, // alpha = 0.9375157 + 14917, 42994, 14942, 10363, // alpha = 0.9685059 + 14907, 40342, 14907, 6493, // alpha = 1 + + // Cos (theta) = 0.2378433 + 24528, 50197, 28753, 26618, // alpha = 0.001 + 24528, 50197, 28753, 26618, // alpha = 0.001 + 24512, 50197, 28744, 26602, // alpha = 0.001007811 + 23268, 50197, 27548, 25353, // alpha = 0.002267574 + 22463, 50196, 26695, 24552, // alpha = 0.004031243 + 21747, 50194, 25975, 23821, // alpha = 0.006298816 + 21211, 50191, 25490, 23295, // alpha = 0.009070295 + 20740, 50186, 24968, 22814, // alpha = 0.01234568 + 20384, 50175, 24627, 22470, // alpha = 0.01612497 + 19959, 50149, 24207, 22036, // alpha = 0.02040816 + 19653, 50116, 23867, 21722, // alpha = 0.02519527 + 19393, 50072, 23612, 21472, // alpha = 0.03048627 + 19043, 50021, 23281, 21113, // alpha = 0.03628118 + 18769, 49961, 22972, 20831, // alpha = 0.04258 + 18552, 49893, 22724, 20606, // alpha = 0.04938272 + 18324, 49818, 22517, 20371, // alpha = 0.05668934 + 18045, 49740, 22184, 20079, // alpha = 0.06449988 + 17818, 49657, 21906, 19839, // alpha = 0.07281432 + 17638, 49573, 21673, 19644, // alpha = 0.08163266 + 17488, 49490, 21452, 19480, // alpha = 0.09095491 + 17317, 49408, 21127, 19226, // alpha = 0.1007811 + 17114, 49330, 20854, 18994, // alpha = 0.1111111 + 16944, 49255, 20629, 18795, // alpha = 0.1219451 + 16799, 49184, 20403, 18624, // alpha = 0.1332829 + 16679, 49082, 20090, 18479, // alpha = 0.1451247 + 16572, 48957, 19833, 18269, // alpha = 0.1574704 + 16484, 48840, 19618, 18051, // alpha = 0.17032 + 16408, 48730, 19424, 17861, // alpha = 0.1836735 + 16299, 48629, 19128, 17697, // alpha = 0.1975309 + 16184, 48535, 18881, 17553, // alpha = 0.2118922 + 16081, 48447, 18677, 17427, // alpha = 0.2267574 + 15991, 48365, 18504, 17225, // alpha = 0.2421265 + 15918, 48288, 18285, 17038, // alpha = 0.2579995 + 15848, 48216, 18042, 16867, // alpha = 0.2743765 + 15786, 48148, 17839, 16717, // alpha = 0.2912573 + 15734, 48039, 17663, 16588, // alpha = 0.308642 + 15681, 47918, 17517, 16466, // alpha = 0.3265306 + 15643, 47804, 17371, 16352, // alpha = 0.3449232 + 15604, 47698, 17157, 16164, // alpha = 0.3638196 + 15569, 47597, 16975, 15997, // alpha = 0.38322 + 15540, 47501, 16816, 15853, // alpha = 0.4031242 + 15511, 47410, 16680, 15714, // alpha = 0.4235324 + 15482, 47323, 16563, 15588, // alpha = 0.4444445 + 15457, 47240, 16461, 15476, // alpha = 0.4658605 + 15435, 47160, 16358, 15374, // alpha = 0.4877803 + 15411, 47063, 16206, 15193, // alpha = 0.5102041 + 15392, 46917, 16070, 15020, // alpha = 0.5331318 + 15371, 46778, 15949, 14857, // alpha = 0.5565634 + 15345, 46644, 15844, 14709, // alpha = 0.5804989 + 15308, 46514, 15751, 14566, // alpha = 0.6049383 + 15270, 46391, 15669, 14434, // alpha = 0.6298816 + 15233, 46272, 15593, 14285, // alpha = 0.6553288 + 15197, 46157, 15527, 14054, // alpha = 0.68128 + 15158, 46013, 15465, 13834, // alpha = 0.7077349 + 15122, 45798, 15410, 13628, // alpha = 0.7346939 + 15083, 45590, 15356, 13436, // alpha = 0.7621567 + 15043, 45388, 15261, 13203, // alpha = 0.7901235 + 15006, 45193, 15179, 12876, // alpha = 0.8185941 + 14974, 44947, 15111, 12584, // alpha = 0.8475687 + 14948, 44576, 15054, 12314, // alpha = 0.8770471 + 14926, 44215, 15006, 11828, // alpha = 0.9070295 + 14911, 43692, 14963, 11314, // alpha = 0.9375157 + 14900, 42952, 14924, 10351, // alpha = 0.9685059 + 14890, 41185, 14889, 7311, // alpha = 1 + + // Cos (theta) = 0.2098765 + 24528, 50344, 29067, 26765, // alpha = 0.001 + 24528, 50344, 29067, 26765, // alpha = 0.001 + 24512, 50344, 29056, 26756, // alpha = 0.001007811 + 23267, 50344, 27875, 25603, // alpha = 0.002267574 + 22462, 50343, 27006, 24706, // alpha = 0.004031243 + 21746, 50340, 26371, 24002, // alpha = 0.006298816 + 21208, 50335, 25818, 23543, // alpha = 0.009070295 + 20736, 50327, 25365, 22993, // alpha = 0.01234568 + 20374, 50312, 24924, 22633, // alpha = 0.01612497 + 19947, 50294, 24620, 22239, // alpha = 0.02040816 + 19639, 50269, 24223, 21879, // alpha = 0.02519527 + 19361, 50239, 23893, 21609, // alpha = 0.03048627 + 19009, 50204, 23639, 21301, // alpha = 0.03628118 + 18733, 50149, 23325, 20977, // alpha = 0.04258 + 18517, 50057, 23002, 20721, // alpha = 0.04938272 + 18258, 49961, 22741, 20516, // alpha = 0.05668934 + 17985, 49859, 22521, 20223, // alpha = 0.06449988 + 17765, 49754, 22164, 19955, // alpha = 0.07281432 + 17587, 49652, 21869, 19733, // alpha = 0.08163266 + 17445, 49552, 21625, 19552, // alpha = 0.09095491 + 17241, 49457, 21349, 19335, // alpha = 0.1007811 + 17046, 49367, 21020, 19077, // alpha = 0.1111111 + 16878, 49283, 20753, 18854, // alpha = 0.1219451 + 16746, 49204, 20533, 18671, // alpha = 0.1332829 + 16625, 49111, 20230, 18508, // alpha = 0.1451247 + 16527, 48977, 19937, 18314, // alpha = 0.1574704 + 16438, 48853, 19698, 18074, // alpha = 0.17032 + 16348, 48738, 19502, 17874, // alpha = 0.1836735 + 16222, 48633, 19221, 17702, // alpha = 0.1975309 + 16120, 48536, 18952, 17558, // alpha = 0.2118922 + 16025, 48446, 18731, 17428, // alpha = 0.2267574 + 15941, 48363, 18547, 17224, // alpha = 0.2421265 + 15870, 48285, 18355, 17032, // alpha = 0.2579995 + 15803, 48213, 18098, 16858, // alpha = 0.2743765 + 15749, 48145, 17881, 16711, // alpha = 0.2912573 + 15704, 48033, 17697, 16585, // alpha = 0.308642 + 15659, 47913, 17543, 16467, // alpha = 0.3265306 + 15617, 47799, 17412, 16339, // alpha = 0.3449232 + 15581, 47691, 17194, 16154, // alpha = 0.3638196 + 15551, 47590, 17002, 15994, // alpha = 0.38322 + 15519, 47495, 16840, 15840, // alpha = 0.4031242 + 15490, 47404, 16700, 15703, // alpha = 0.4235324 + 15468, 47317, 16579, 15583, // alpha = 0.4444445 + 15442, 47235, 16472, 15469, // alpha = 0.4658605 + 15419, 47156, 16378, 15365, // alpha = 0.4877803 + 15400, 47055, 16217, 15186, // alpha = 0.5102041 + 15380, 46908, 16078, 15009, // alpha = 0.5331318 + 15357, 46767, 15956, 14844, // alpha = 0.5565634 + 15320, 46631, 15847, 14694, // alpha = 0.5804989 + 15287, 46501, 15751, 14558, // alpha = 0.6049383 + 15246, 46376, 15665, 14421, // alpha = 0.6298816 + 15207, 46255, 15589, 14255, // alpha = 0.6553288 + 15174, 46137, 15521, 14028, // alpha = 0.68128 + 15135, 45968, 15458, 13810, // alpha = 0.7077349 + 15097, 45748, 15401, 13603, // alpha = 0.7346939 + 15059, 45534, 15336, 13412, // alpha = 0.7621567 + 15020, 45328, 15240, 13156, // alpha = 0.7901235 + 14982, 45127, 15158, 12834, // alpha = 0.8185941 + 14953, 44807, 15090, 12542, // alpha = 0.8475687 + 14926, 44426, 15035, 12265, // alpha = 0.8770471 + 14905, 44060, 14986, 11744, // alpha = 0.9070295 + 14888, 43366, 14942, 11203, // alpha = 0.9375157 + 14878, 42308, 14903, 10142, // alpha = 0.9685059 + 14868, 4192, 14867, 36012, // alpha = 1 + + // Cos (theta) = 0.1814059 + 24528, 50540, 29547, 26955, // alpha = 0.001 + 24528, 50540, 29547, 26955, // alpha = 0.001 + 24513, 50540, 29533, 26945, // alpha = 0.001007811 + 23268, 50539, 28298, 25771, // alpha = 0.002267574 + 22460, 50537, 27481, 24893, // alpha = 0.004031243 + 21744, 50533, 26800, 24241, // alpha = 0.006298816 + 21204, 50525, 26233, 23712, // alpha = 0.009070295 + 20730, 50510, 25782, 23227, // alpha = 0.01234568 + 20358, 50489, 25371, 22806, // alpha = 0.01612497 + 19928, 50461, 24961, 22499, // alpha = 0.02040816 + 19618, 50425, 24663, 22077, // alpha = 0.02519527 + 19315, 50382, 24303, 21760, // alpha = 0.03048627 + 18961, 50330, 23958, 21518, // alpha = 0.03628118 + 18687, 50271, 23685, 21154, // alpha = 0.04258 + 18473, 50210, 23383, 20858, // alpha = 0.04938272 + 18181, 50113, 23028, 20624, // alpha = 0.05668934 + 17911, 49980, 22740, 20385, // alpha = 0.06449988 + 17700, 49851, 22484, 20079, // alpha = 0.07281432 + 17533, 49725, 22103, 19831, // alpha = 0.08163266 + 17378, 49608, 21798, 19621, // alpha = 0.09095491 + 17152, 49497, 21551, 19440, // alpha = 0.1007811 + 16965, 49396, 21203, 19150, // alpha = 0.1111111 + 16804, 49302, 20887, 18902, // alpha = 0.1219451 + 16678, 49217, 20631, 18702, // alpha = 0.1332829 + 16568, 49126, 20375, 18531, // alpha = 0.1451247 + 16473, 48985, 20044, 18337, // alpha = 0.1574704 + 16394, 48855, 19777, 18091, // alpha = 0.17032 + 16270, 48737, 19561, 17883, // alpha = 0.1836735 + 16152, 48629, 19313, 17705, // alpha = 0.1975309 + 16055, 48530, 19023, 17555, // alpha = 0.2118922 + 15965, 48439, 18786, 17423, // alpha = 0.2267574 + 15885, 48356, 18591, 17210, // alpha = 0.2421265 + 15823, 48278, 18419, 17019, // alpha = 0.2579995 + 15764, 48206, 18152, 16848, // alpha = 0.2743765 + 15718, 48138, 17921, 16707, // alpha = 0.2912573 + 15671, 48022, 17732, 16574, // alpha = 0.308642 + 15625, 47902, 17572, 16454, // alpha = 0.3265306 + 15586, 47790, 17437, 16315, // alpha = 0.3449232 + 15557, 47684, 17233, 16140, // alpha = 0.3638196 + 15524, 47583, 17036, 15972, // alpha = 0.38322 + 15495, 47487, 16868, 15822, // alpha = 0.4031242 + 15471, 47396, 16721, 15691, // alpha = 0.4235324 + 15449, 47310, 16595, 15570, // alpha = 0.4444445 + 15422, 47229, 16487, 15455, // alpha = 0.4658605 + 15407, 47150, 16392, 15359, // alpha = 0.4877803 + 15384, 47046, 16236, 15165, // alpha = 0.5102041 + 15366, 46902, 16090, 14995, // alpha = 0.5331318 + 15336, 46762, 15964, 14835, // alpha = 0.5565634 + 15298, 46626, 15852, 14682, // alpha = 0.5804989 + 15257, 46495, 15752, 14540, // alpha = 0.6049383 + 15224, 46368, 15664, 14411, // alpha = 0.6298816 + 15187, 46244, 15585, 14237, // alpha = 0.6553288 + 15151, 46124, 15514, 14008, // alpha = 0.68128 + 15113, 45939, 15450, 13787, // alpha = 0.7077349 + 15075, 45715, 15389, 13583, // alpha = 0.7346939 + 15034, 45496, 15309, 13389, // alpha = 0.7621567 + 14994, 45286, 15212, 13116, // alpha = 0.7901235 + 14955, 45081, 15128, 12791, // alpha = 0.8185941 + 14913, 44703, 15058, 12498, // alpha = 0.8475687 + 14888, 44311, 15005, 12179, // alpha = 0.8770471 + 14873, 43826, 14957, 11664, // alpha = 0.9070295 + 14863, 43081, 14916, 11035, // alpha = 0.9375157 + 14852, 41409, 14877, 9810, // alpha = 0.9685059 + 14842, 8561, 14842, 40322, // alpha = 1 + + // Cos (theta) = 0.1524313 + 24528, 50812, 30017, 27221, // alpha = 0.001 + 24528, 50812, 30017, 27221, // alpha = 0.001 + 24513, 50812, 30006, 27208, // alpha = 0.001007811 + 23267, 50810, 28833, 26004, // alpha = 0.002267574 + 22460, 50807, 27954, 25156, // alpha = 0.004031243 + 21742, 50800, 27295, 24572, // alpha = 0.006298816 + 21197, 50786, 26768, 23937, // alpha = 0.009070295 + 20719, 50760, 26268, 23547, // alpha = 0.01234568 + 20334, 50728, 25846, 23040, // alpha = 0.01612497 + 19899, 50682, 25503, 22686, // alpha = 0.02040816 + 19586, 50626, 25074, 22333, // alpha = 0.02519527 + 19249, 50558, 24752, 21951, // alpha = 0.03048627 + 18895, 50480, 24431, 21661, // alpha = 0.03628118 + 18625, 50397, 24041, 21369, // alpha = 0.04258 + 18402, 50310, 23729, 21019, // alpha = 0.04938272 + 18079, 50222, 23409, 20744, // alpha = 0.05668934 + 17826, 50098, 23014, 20524, // alpha = 0.06449988 + 17628, 49936, 22699, 20216, // alpha = 0.07281432 + 17464, 49787, 22379, 19923, // alpha = 0.08163266 + 17261, 49649, 21990, 19687, // alpha = 0.09095491 + 17048, 49524, 21688, 19491, // alpha = 0.1007811 + 16869, 49411, 21398, 19200, // alpha = 0.1111111 + 16720, 49310, 21025, 18934, // alpha = 0.1219451 + 16604, 49220, 20732, 18720, // alpha = 0.1332829 + 16503, 49124, 20499, 18539, // alpha = 0.1451247 + 16416, 48978, 20152, 18337, // alpha = 0.1574704 + 16306, 48846, 19858, 18088, // alpha = 0.17032 + 16178, 48726, 19621, 17873, // alpha = 0.1836735 + 16070, 48617, 19405, 17691, // alpha = 0.1975309 + 15978, 48518, 19093, 17539, // alpha = 0.2118922 + 15904, 48426, 18839, 17411, // alpha = 0.2267574 + 15835, 48343, 18630, 17192, // alpha = 0.2421265 + 15770, 48266, 18460, 16994, // alpha = 0.2579995 + 15725, 48195, 18203, 16835, // alpha = 0.2743765 + 15676, 48128, 17965, 16686, // alpha = 0.2912573 + 15632, 48004, 17770, 16555, // alpha = 0.308642 + 15593, 47887, 17604, 16439, // alpha = 0.3265306 + 15564, 47777, 17459, 16304, // alpha = 0.3449232 + 15531, 47673, 17274, 16117, // alpha = 0.3638196 + 15501, 47574, 17072, 15953, // alpha = 0.38322 + 15479, 47480, 16893, 15815, // alpha = 0.4031242 + 15453, 47391, 16745, 15678, // alpha = 0.4235324 + 15427, 47306, 16615, 15553, // alpha = 0.4444445 + 15409, 47224, 16502, 15449, // alpha = 0.4658605 + 15389, 47146, 16404, 15337, // alpha = 0.4877803 + 15371, 47037, 16253, 15155, // alpha = 0.5102041 + 15348, 46893, 16103, 14984, // alpha = 0.5331318 + 15303, 46755, 15972, 14817, // alpha = 0.5565634 + 15276, 46622, 15855, 14678, // alpha = 0.5804989 + 15237, 46493, 15752, 14535, // alpha = 0.6049383 + 15203, 46367, 15662, 14405, // alpha = 0.6298816 + 15165, 46244, 15578, 14227, // alpha = 0.6553288 + 15130, 46125, 15504, 13993, // alpha = 0.68128 + 15090, 45938, 15438, 13775, // alpha = 0.7077349 + 15048, 45710, 15375, 13564, // alpha = 0.7346939 + 15001, 45487, 15275, 13368, // alpha = 0.7621567 + 14948, 45269, 15176, 13050, // alpha = 0.7901235 + 14915, 45060, 15097, 12743, // alpha = 0.8185941 + 14888, 44653, 15032, 12468, // alpha = 0.8475687 + 14863, 44251, 14976, 12120, // alpha = 0.8770471 + 14848, 43684, 14930, 11606, // alpha = 0.9070295 + 14836, 42827, 14887, 10924, // alpha = 0.9375157 + 14824, 40348, 14849, 9590, // alpha = 0.9685059 + 14813, 9320, 14814, 41117, // alpha = 1 + + // Cos (theta) = 0.1229529 + 24528, 51209, 30729, 27617, // alpha = 0.001 + 24528, 51209, 30729, 27617, // alpha = 0.001 + 24511, 51209, 30721, 27601, // alpha = 0.001007811 + 23266, 51208, 29469, 26353, // alpha = 0.002267574 + 22456, 51204, 28665, 25546, // alpha = 0.004031243 + 21737, 51195, 27921, 24820, // alpha = 0.006298816 + 21182, 51164, 27378, 24267, // alpha = 0.009070295 + 20702, 51122, 26880, 23781, // alpha = 0.01234568 + 20291, 51061, 26476, 23369, // alpha = 0.01612497 + 19852, 50983, 26016, 22924, // alpha = 0.02040816 + 19536, 50886, 25681, 22602, // alpha = 0.02519527 + 19150, 50776, 25257, 22198, // alpha = 0.03048627 + 18804, 50656, 24869, 21840, // alpha = 0.03628118 + 18544, 50533, 24558, 21567, // alpha = 0.04258 + 18265, 50411, 24088, 21212, // alpha = 0.04938272 + 17961, 50294, 23727, 20881, // alpha = 0.05668934 + 17723, 50186, 23347, 20618, // alpha = 0.06449988 + 17532, 49999, 22928, 20332, // alpha = 0.07281432 + 17361, 49824, 22606, 20000, // alpha = 0.08163266 + 17117, 49668, 22202, 19730, // alpha = 0.09095491 + 16922, 49531, 21833, 19514, // alpha = 0.1007811 + 16757, 49410, 21552, 19217, // alpha = 0.1111111 + 16628, 49304, 21167, 18939, // alpha = 0.1219451 + 16520, 49210, 20832, 18712, // alpha = 0.1332829 + 16429, 49102, 20572, 18525, // alpha = 0.1451247 + 16320, 48955, 20256, 18309, // alpha = 0.1574704 + 16192, 48822, 19935, 18058, // alpha = 0.17032 + 16089, 48703, 19676, 17852, // alpha = 0.1836735 + 15992, 48596, 19472, 17672, // alpha = 0.1975309 + 15913, 48498, 19159, 17522, // alpha = 0.2118922 + 15837, 48408, 18892, 17374, // alpha = 0.2267574 + 15777, 48326, 18674, 17156, // alpha = 0.2421265 + 15721, 48250, 18495, 16964, // alpha = 0.2579995 + 15667, 48180, 18263, 16794, // alpha = 0.2743765 + 15637, 48102, 18013, 16663, // alpha = 0.2912573 + 15592, 47981, 17809, 16530, // alpha = 0.308642 + 15557, 47867, 17634, 16420, // alpha = 0.3265306 + 15535, 47760, 17488, 16274, // alpha = 0.3449232 + 15502, 47659, 17320, 16089, // alpha = 0.3638196 + 15468, 47563, 17113, 15918, // alpha = 0.38322 + 15456, 47471, 16928, 15793, // alpha = 0.4031242 + 15431, 47384, 16771, 15659, // alpha = 0.4235324 + 15415, 47300, 16635, 15550, // alpha = 0.4444445 + 15391, 47220, 16519, 15436, // alpha = 0.4658605 + 15379, 47144, 16416, 15334, // alpha = 0.4877803 + 15350, 47036, 16275, 15135, // alpha = 0.5102041 + 15312, 46894, 16117, 14967, // alpha = 0.5331318 + 15285, 46756, 15983, 14815, // alpha = 0.5565634 + 15250, 46623, 15862, 14667, // alpha = 0.5804989 + 15210, 46493, 15752, 14528, // alpha = 0.6049383 + 15182, 46369, 15662, 14401, // alpha = 0.6298816 + 15144, 46249, 15575, 14219, // alpha = 0.6553288 + 15104, 46131, 15496, 13979, // alpha = 0.68128 + 15065, 45953, 15427, 13761, // alpha = 0.7077349 + 15012, 45729, 15362, 13540, // alpha = 0.7346939 + 14968, 45510, 15250, 13349, // alpha = 0.7621567 + 14929, 45294, 15154, 13048, // alpha = 0.7901235 + 14893, 45082, 15070, 12739, // alpha = 0.8185941 + 14865, 44692, 15005, 12463, // alpha = 0.8475687 + 14838, 44281, 14948, 12112, // alpha = 0.8770471 + 14820, 43720, 14899, 11591, // alpha = 0.9070295 + 14807, 42830, 14856, 10892, // alpha = 0.9375157 + 14793, 40078, 14816, 9510, // alpha = 0.9685059 + 14780, 9430, 14780, 41259, // alpha = 1 + + // Cos (theta) = 0.09297051 + 24527, 51546, 31503, 27962, // alpha = 0.001 + 24527, 51546, 31503, 27962, // alpha = 0.001 + 24512, 51546, 31489, 27952, // alpha = 0.001007811 + 23264, 51543, 30263, 26777, // alpha = 0.002267574 + 22450, 51536, 29428, 25892, // alpha = 0.004031243 + 21723, 51517, 28777, 25214, // alpha = 0.006298816 + 21155, 51486, 28150, 24685, // alpha = 0.009070295 + 20667, 51439, 27706, 24140, // alpha = 0.01234568 + 20212, 51377, 27175, 23707, // alpha = 0.01612497 + 19769, 51299, 26762, 23263, // alpha = 0.02040816 + 19457, 51211, 26300, 22837, // alpha = 0.02519527 + 19007, 51032, 25852, 22525, // alpha = 0.03048627 + 18681, 50841, 25433, 22066, // alpha = 0.03628118 + 18443, 50659, 24934, 21724, // alpha = 0.04258 + 18083, 50491, 24565, 21408, // alpha = 0.04938272 + 17810, 50342, 24029, 21006, // alpha = 0.05668934 + 17589, 50211, 23645, 20687, // alpha = 0.06449988 + 17420, 50019, 23178, 20407, // alpha = 0.07281432 + 17167, 49824, 22770, 20031, // alpha = 0.08163266 + 16953, 49656, 22415, 19737, // alpha = 0.09095491 + 16772, 49513, 21979, 19501, // alpha = 0.1007811 + 16635, 49389, 21651, 19191, // alpha = 0.1111111 + 16524, 49281, 21301, 18907, // alpha = 0.1219451 + 16428, 49188, 20927, 18677, // alpha = 0.1332829 + 16316, 49059, 20641, 18492, // alpha = 0.1451247 + 16183, 48914, 20356, 18250, // alpha = 0.1574704 + 16083, 48785, 20005, 18014, // alpha = 0.17032 + 15988, 48669, 19732, 17808, // alpha = 0.1836735 + 15900, 48565, 19517, 17630, // alpha = 0.1975309 + 15823, 48470, 19231, 17481, // alpha = 0.2118922 + 15764, 48384, 18947, 17312, // alpha = 0.2267574 + 15716, 48304, 18717, 17110, // alpha = 0.2421265 + 15668, 48231, 18531, 16924, // alpha = 0.2579995 + 15622, 48163, 18325, 16763, // alpha = 0.2743765 + 15580, 48072, 18068, 16619, // alpha = 0.2912573 + 15554, 47953, 17852, 16505, // alpha = 0.308642 + 15521, 47843, 17672, 16396, // alpha = 0.3265306 + 15501, 47739, 17518, 16231, // alpha = 0.3449232 + 15471, 47641, 17373, 16052, // alpha = 0.3638196 + 15456, 47548, 17147, 15914, // alpha = 0.38322 + 15429, 47459, 16965, 15766, // alpha = 0.4031242 + 15404, 47375, 16802, 15635, // alpha = 0.4235324 + 15395, 47294, 16660, 15534, // alpha = 0.4444445 + 15373, 47217, 16540, 15425, // alpha = 0.4658605 + 15361, 47143, 16434, 15310, // alpha = 0.4877803 + 15322, 47038, 16302, 15124, // alpha = 0.5102041 + 15297, 46899, 16139, 14969, // alpha = 0.5331318 + 15259, 46765, 15998, 14809, // alpha = 0.5565634 + 15215, 46636, 15870, 14653, // alpha = 0.5804989 + 15194, 46510, 15761, 14528, // alpha = 0.6049383 + 15156, 46388, 15660, 14398, // alpha = 0.6298816 + 15124, 46268, 15574, 14221, // alpha = 0.6553288 + 15072, 46151, 15493, 13966, // alpha = 0.68128 + 15037, 45993, 15420, 13753, // alpha = 0.7077349 + 14986, 45769, 15341, 13540, // alpha = 0.7346939 + 14953, 45549, 15231, 13357, // alpha = 0.7621567 + 14906, 45333, 15127, 13054, // alpha = 0.7901235 + 14869, 45123, 15044, 12742, // alpha = 0.8185941 + 14840, 44780, 14975, 12467, // alpha = 0.8475687 + 14812, 44376, 14916, 12127, // alpha = 0.8770471 + 14790, 43924, 14865, 11625, // alpha = 0.9070295 + 14773, 43138, 14820, 10974, // alpha = 0.9375157 + 14756, 41437, 14778, 9718, // alpha = 0.9685059 + 14742, 8752, 14741, 40665, // alpha = 1 + + // Cos (theta) = 0.06248425 + 24526, 52218, 31744, 28618, // alpha = 0.001 + 24526, 52218, 31744, 28618, // alpha = 0.001 + 24511, 52218, 31744, 28603, // alpha = 0.001007811 + 23259, 52209, 31453, 27352, // alpha = 0.002267574 + 22428, 52180, 30622, 26519, // alpha = 0.004031243 + 21682, 52124, 29905, 25772, // alpha = 0.006298816 + 21083, 52032, 29253, 25165, // alpha = 0.009070295 + 20586, 51906, 28746, 24665, // alpha = 0.01234568 + 20047, 51749, 28145, 24100, // alpha = 0.01612497 + 19620, 51576, 27675, 23662, // alpha = 0.02040816 + 19201, 51401, 27045, 23161, // alpha = 0.02519527 + 18797, 51236, 26553, 22730, // alpha = 0.03048627 + 18510, 50978, 25929, 22308, // alpha = 0.03628118 + 18164, 50727, 25415, 21853, // alpha = 0.04258 + 17844, 50516, 24853, 21518, // alpha = 0.04938272 + 17600, 50340, 24370, 21039, // alpha = 0.05668934 + 17424, 50195, 23848, 20691, // alpha = 0.06449988 + 17161, 49974, 23426, 20378, // alpha = 0.07281432 + 16932, 49774, 22928, 19978, // alpha = 0.08163266 + 16759, 49607, 22575, 19684, // alpha = 0.09095491 + 16621, 49465, 22110, 19459, // alpha = 0.1007811 + 16507, 49345, 21738, 19113, // alpha = 0.1111111 + 16414, 49242, 21425, 18837, // alpha = 0.1219451 + 16287, 49152, 21015, 18620, // alpha = 0.1332829 + 16152, 48995, 20704, 18442, // alpha = 0.1451247 + 16051, 48857, 20449, 18175, // alpha = 0.1574704 + 15957, 48735, 20081, 17938, // alpha = 0.17032 + 15869, 48625, 19795, 17737, // alpha = 0.1836735 + 15804, 48526, 19565, 17578, // alpha = 0.1975309 + 15737, 48436, 19311, 17436, // alpha = 0.2118922 + 15691, 48353, 19014, 17238, // alpha = 0.2267574 + 15642, 48278, 18775, 17034, // alpha = 0.2421265 + 15597, 48208, 18579, 16856, // alpha = 0.2579995 + 15572, 48143, 18397, 16719, // alpha = 0.2743765 + 15536, 48037, 18132, 16583, // alpha = 0.2912573 + 15500, 47924, 17908, 16462, // alpha = 0.308642 + 15482, 47818, 17719, 16350, // alpha = 0.3265306 + 15454, 47718, 17558, 16164, // alpha = 0.3449232 + 15442, 47623, 17421, 16018, // alpha = 0.3638196 + 15416, 47533, 17207, 15862, // alpha = 0.38322 + 15405, 47448, 17006, 15743, // alpha = 0.4031242 + 15382, 47366, 16838, 15614, // alpha = 0.4235324 + 15372, 47288, 16689, 15516, // alpha = 0.4444445 + 15341, 47213, 16564, 15408, // alpha = 0.4658605 + 15321, 47141, 16455, 15284, // alpha = 0.4877803 + 15288, 47041, 16329, 15111, // alpha = 0.5102041 + 15266, 46907, 16162, 14960, // alpha = 0.5331318 + 15235, 46778, 16016, 14808, // alpha = 0.5565634 + 15210, 46652, 15886, 14671, // alpha = 0.5804989 + 15159, 46530, 15769, 14521, // alpha = 0.6049383 + 15144, 46412, 15669, 14408, // alpha = 0.6298816 + 15098, 46296, 15577, 14224, // alpha = 0.6553288 + 15052, 46182, 15489, 13984, // alpha = 0.68128 + 15022, 46063, 15416, 13777, // alpha = 0.7077349 + 14969, 45846, 15326, 13562, // alpha = 0.7346939 + 14929, 45632, 15206, 13375, // alpha = 0.7621567 + 14886, 45423, 15101, 13092, // alpha = 0.7901235 + 14849, 45218, 15016, 12783, // alpha = 0.8185941 + 14811, 44975, 14941, 12499, // alpha = 0.8475687 + 14784, 44575, 14881, 12201, // alpha = 0.8770471 + 14756, 44180, 14826, 11702, // alpha = 0.9070295 + 14733, 43547, 14777, 11163, // alpha = 0.9375157 + 14712, 42539, 14732, 10129, // alpha = 0.9685059 + 14693, 37280, 14692, 1865, // alpha = 1 + + // Cos (theta) = 0.03149408 + 24518, 53222, 31744, 29616, // alpha = 0.001 + 24518, 53222, 31744, 29616, // alpha = 0.001 + 24501, 53222, 31744, 29599, // alpha = 0.001007811 + 23242, 53179, 31744, 28345, // alpha = 0.002267574 + 22340, 53081, 31744, 27434, // alpha = 0.004031243 + 21580, 52911, 31744, 26675, // alpha = 0.006298816 + 20841, 52684, 30950, 25905, // alpha = 0.009070295 + 20273, 52436, 30150, 25251, // alpha = 0.01234568 + 19709, 52186, 29373, 24655, // alpha = 0.01612497 + 19253, 51797, 28642, 23981, // alpha = 0.02040816 + 18794, 51490, 27822, 23455, // alpha = 0.02519527 + 18477, 51253, 27063, 22834, // alpha = 0.03048627 + 18078, 50941, 26415, 22335, // alpha = 0.03628118 + 17768, 50660, 25763, 21814, // alpha = 0.04258 + 17532, 50441, 25131, 21407, // alpha = 0.04938272 + 17325, 50268, 24623, 20932, // alpha = 0.05668934 + 17057, 50083, 24027, 20587, // alpha = 0.06449988 + 16858, 49858, 23597, 20211, // alpha = 0.07281432 + 16692, 49674, 23063, 19848, // alpha = 0.08163266 + 16561, 49520, 22665, 19580, // alpha = 0.09095491 + 16451, 49391, 22240, 19289, // alpha = 0.1007811 + 16339, 49281, 21832, 18970, // alpha = 0.1111111 + 16193, 49187, 21535, 18722, // alpha = 0.1219451 + 16066, 49058, 21125, 18521, // alpha = 0.1332829 + 15961, 48914, 20793, 18288, // alpha = 0.1451247 + 15881, 48787, 20534, 18038, // alpha = 0.1574704 + 15802, 48674, 20195, 17820, // alpha = 0.17032 + 15730, 48572, 19884, 17639, // alpha = 0.1836735 + 15690, 48480, 19633, 17503, // alpha = 0.1975309 + 15637, 48396, 19426, 17338, // alpha = 0.2118922 + 15592, 48319, 19107, 17121, // alpha = 0.2267574 + 15567, 48248, 18847, 16952, // alpha = 0.2421265 + 15529, 48182, 18639, 16786, // alpha = 0.2579995 + 15508, 48114, 18463, 16657, // alpha = 0.2743765 + 15476, 48000, 18210, 16530, // alpha = 0.2912573 + 15466, 47893, 17968, 16437, // alpha = 0.308642 + 15435, 47792, 17772, 16280, // alpha = 0.3265306 + 15427, 47697, 17599, 16130, // alpha = 0.3449232 + 15417, 47606, 17455, 15992, // alpha = 0.3638196 + 15393, 47520, 17262, 15843, // alpha = 0.38322 + 15385, 47439, 17052, 15730, // alpha = 0.4031242 + 15364, 47360, 16877, 15606, // alpha = 0.4235324 + 15348, 47285, 16724, 15507, // alpha = 0.4444445 + 15310, 47214, 16593, 15404, // alpha = 0.4658605 + 15290, 47144, 16478, 15279, // alpha = 0.4877803 + 15255, 47051, 16371, 15105, // alpha = 0.5102041 + 15231, 46922, 16197, 14954, // alpha = 0.5331318 + 15191, 46797, 16039, 14797, // alpha = 0.5565634 + 15175, 46675, 15905, 14671, // alpha = 0.5804989 + 15129, 46558, 15780, 14528, // alpha = 0.6049383 + 15113, 46443, 15677, 14417, // alpha = 0.6298816 + 15075, 46331, 15578, 14257, // alpha = 0.6553288 + 15018, 46221, 15480, 14003, // alpha = 0.68128 + 14986, 46114, 15404, 13799, // alpha = 0.7077349 + 14937, 45939, 15298, 13589, // alpha = 0.7346939 + 14882, 45734, 15162, 13395, // alpha = 0.7621567 + 14860, 45532, 15071, 13156, // alpha = 0.7901235 + 14816, 45334, 14978, 12838, // alpha = 0.8185941 + 14778, 45140, 14900, 12557, // alpha = 0.8475687 + 14754, 44842, 14840, 12302, // alpha = 0.8770471 + 14720, 44465, 14780, 11829, // alpha = 0.9070295 + 14685, 44092, 14724, 11361, // alpha = 0.9375157 + 14656, 43416, 14675, 10529, // alpha = 0.9685059 + 14630, 42367, 14630, 8763, // alpha = 1 + + // Cos (theta) = 0.0003754022 + 22517, 56113, 31744, 30531, // alpha = 0.001 + 22517, 56113, 31744, 30531, // alpha = 0.001 + 22524, 56098, 31744, 30523, // alpha = 0.001007811 + 21064, 54796, 31744, 27917, // alpha = 0.002267574 + 20188, 53936, 31744, 26243, // alpha = 0.004031243 + 19533, 53311, 31744, 24974, // alpha = 0.006298816 + 18940, 52704, 31744, 24008, // alpha = 0.009070295 + 18535, 52303, 31744, 23238, // alpha = 0.01234568 + 18253, 51865, 31041, 22701, // alpha = 0.01612497 + 17983, 51511, 29440, 23355, // alpha = 0.02040816 + 17827, 51259, 28415, 22890, // alpha = 0.02519527 + 17579, 50948, 27642, 22356, // alpha = 0.03048627 + 17370, 50667, 26860, 21799, // alpha = 0.03628118 + 17101, 50450, 26100, 21425, // alpha = 0.04258 + 16868, 50278, 25507, 20928, // alpha = 0.04938272 + 16689, 50105, 24877, 20577, // alpha = 0.05668934 + 16541, 49881, 24353, 20178, // alpha = 0.06449988 + 16486, 49697, 23797, 19882, // alpha = 0.07281432 + 16372, 49543, 23336, 19596, // alpha = 0.08163266 + 16191, 49413, 22863, 19301, // alpha = 0.09095491 + 16135, 49303, 22486, 19038, // alpha = 0.1007811 + 15999, 49208, 22014, 18767, // alpha = 0.1111111 + 15878, 49099, 21675, 18546, // alpha = 0.1219451 + 15779, 48954, 21339, 18314, // alpha = 0.1332829 + 15751, 48826, 20939, 18093, // alpha = 0.1451247 + 15672, 48711, 20652, 17856, // alpha = 0.1574704 + 15654, 48609, 20359, 17704, // alpha = 0.17032 + 15587, 48516, 20017, 17534, // alpha = 0.1836735 + 15572, 48431, 19734, 17422, // alpha = 0.1975309 + 15519, 48354, 19521, 17192, // alpha = 0.2118922 + 15507, 48283, 19227, 17026, // alpha = 0.2267574 + 15491, 48217, 18947, 16876, // alpha = 0.2421265 + 15455, 48155, 18723, 16715, // alpha = 0.2579995 + 15442, 48067, 18531, 16598, // alpha = 0.2743765 + 15409, 47960, 18326, 16474, // alpha = 0.2912573 + 15405, 47859, 18065, 16389, // alpha = 0.308642 + 15401, 47763, 17845, 16240, // alpha = 0.3265306 + 15368, 47673, 17667, 16053, // alpha = 0.3449232 + 15371, 47587, 17512, 15939, // alpha = 0.3638196 + 15314, 47506, 17361, 15776, // alpha = 0.38322 + 15311, 47428, 17138, 15679, // alpha = 0.4031242 + 15291, 47353, 16943, 15575, // alpha = 0.4235324 + 15248, 47282, 16780, 15464, // alpha = 0.4444445 + 15242, 47213, 16641, 15384, // alpha = 0.4658605 + 15247, 47147, 16517, 15274, // alpha = 0.4877803 + 15176, 47063, 16407, 15068, // alpha = 0.5102041 + 15180, 46939, 16252, 14947, // alpha = 0.5331318 + 15119, 46820, 16075, 14779, // alpha = 0.5565634 + 15136, 46705, 15943, 14682, // alpha = 0.5804989 + 15056, 46592, 15793, 14520, // alpha = 0.6049383 + 15014, 46483, 15663, 14400, // alpha = 0.6298816 + 14990, 46377, 15560, 14245, // alpha = 0.6553288 + 14981, 46273, 15476, 14058, // alpha = 0.68128 + 14913, 46172, 15376, 13828, // alpha = 0.7077349 + 14864, 46066, 15236, 13623, // alpha = 0.7346939 + 14832, 45872, 15116, 13448, // alpha = 0.7621567 + 14792, 45681, 15008, 13248, // alpha = 0.7901235 + 14771, 45495, 14916, 12950, // alpha = 0.8185941 + 14751, 45311, 14847, 12669, // alpha = 0.8475687 + 14698, 45131, 14769, 12408, // alpha = 0.8770471 + 14653, 44850, 14699, 12053, // alpha = 0.9070295 + 14620, 44500, 14646, 11602, // alpha = 0.9375157 + 14571, 44154, 14592, 11063, // alpha = 0.9685059 + 14542, 43594, 14547, 10141, // alpha = 1 + }; + + // NOTE: Formerly, we needed to also export and create a table for the BRDF's amplitude factor + fresnel coefficient + // but it turns out these 2 factors are actually already precomputed and available in the FGD table corresponding + // to the BRDF_GGX BRDF, therefore they are no longer exported... + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_GGX.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_GGX.cs.meta new file mode 100644 index 00000000..7f3afc37 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_GGX.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5c69fea42cc6cc8408effc5faaa54d9a +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_GGX.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_KajiyaKaySpecular.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_KajiyaKaySpecular.cs new file mode 100644 index 00000000..eca61ea7 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_KajiyaKaySpecular.cs @@ -0,0 +1,4248 @@ +using UnityEngine; +using System; + +namespace BadDog.Rendering.AreaLight +{ + public partial class LTCAreaLight + { + // [GENERATED CONTENT 31 10月 2025 11:28:29] + // Table contains 3x3 matrix coefficients of M^-1 for the fitting of the BRDF_KajiyaKaySpecular BRDF using the LTC technique + // Only the 0,2,4,6 of the 3x3 coefficients are emitted, and they are encoded into FP16 + // From "Real-Time Polygonal-Light Shading with Linearly Transformed Cosines" 2016 (https://eheitzresearch.wordpress.com/415-2/) + // + // The table is accessed via LTCAreaLight.s_LtcMatrixData_BRDF_KajiyaKaySpecular[ + 64 * ] // Theta values are along the Y axis, Roughness values are along the X axis + // • roughness = ( / 63 )^2 (the table is indexed by perceptual roughness) + // • cosTheta = 1 - ( / 63 )^2 + // + public static ushort[] s_LtcMatrixData_BRDF_KajiyaKaySpecular = new ushort[64 * 64 * 4] + { + // Cos (theta) = 1 + 17424, 0, 17424, 0, // alpha = 0.001 + 17424, 0, 17424, 0, // alpha = 0.001 + 17424, 0, 17424, 0, // alpha = 0.001007811 + 17424, 0, 17424, 0, // alpha = 0.002267574 + 17424, 0, 17424, 0, // alpha = 0.004031243 + 17424, 0, 17424, 0, // alpha = 0.006298816 + 17424, 0, 17424, 0, // alpha = 0.009070295 + 17424, 0, 17424, 0, // alpha = 0.01234568 + 17424, 0, 17424, 0, // alpha = 0.01612497 + 17424, 0, 17424, 0, // alpha = 0.02040816 + 17424, 0, 17424, 0, // alpha = 0.02519527 + 17153, 0, 17153, 0, // alpha = 0.03048627 + 16922, 0, 16922, 0, // alpha = 0.03628118 + 16756, 0, 16756, 0, // alpha = 0.04258 + 16634, 0, 16634, 0, // alpha = 0.04938272 + 16550, 0, 16550, 0, // alpha = 0.05668934 + 16485, 0, 16485, 0, // alpha = 0.06449988 + 16430, 0, 16430, 0, // alpha = 0.07281432 + 16387, 0, 16387, 0, // alpha = 0.08163266 + 16319, 0, 16319, 0, // alpha = 0.09095491 + 16258, 0, 16258, 0, // alpha = 0.1007811 + 16199, 0, 16199, 0, // alpha = 0.1111111 + 16140, 0, 16140, 0, // alpha = 0.1219451 + 16096, 0, 16096, 0, // alpha = 0.1332829 + 16047, 0, 16047, 0, // alpha = 0.1451247 + 16008, 0, 16008, 0, // alpha = 0.1574704 + 15968, 0, 15968, 0, // alpha = 0.17032 + 15930, 0, 15930, 0, // alpha = 0.1836735 + 15894, 0, 15894, 0, // alpha = 0.1975309 + 15859, 0, 15859, 0, // alpha = 0.2118922 + 15830, 0, 15830, 0, // alpha = 0.2267574 + 15798, 0, 15798, 0, // alpha = 0.2421265 + 15772, 0, 15772, 0, // alpha = 0.2579995 + 15745, 0, 15745, 0, // alpha = 0.2743765 + 15720, 0, 15720, 0, // alpha = 0.2912573 + 15697, 0, 15697, 0, // alpha = 0.308642 + 15675, 0, 15675, 0, // alpha = 0.3265306 + 15653, 0, 15653, 0, // alpha = 0.3449232 + 15633, 0, 15633, 0, // alpha = 0.3638196 + 15615, 0, 15615, 0, // alpha = 0.38322 + 15596, 0, 15596, 0, // alpha = 0.4031242 + 15580, 0, 15580, 0, // alpha = 0.4235324 + 15565, 0, 15565, 0, // alpha = 0.4444445 + 15551, 0, 15551, 0, // alpha = 0.4658605 + 15539, 0, 15539, 0, // alpha = 0.4877803 + 15527, 0, 15527, 0, // alpha = 0.5102041 + 15516, 0, 15516, 0, // alpha = 0.5331318 + 15505, 0, 15505, 0, // alpha = 0.5565634 + 15496, 0, 15496, 0, // alpha = 0.5804989 + 15487, 0, 15487, 0, // alpha = 0.6049383 + 15480, 0, 15480, 0, // alpha = 0.6298816 + 15473, 0, 15473, 0, // alpha = 0.6553288 + 15465, 0, 15465, 0, // alpha = 0.68128 + 15460, 0, 15460, 0, // alpha = 0.7077349 + 15453, 0, 15453, 0, // alpha = 0.7346939 + 15448, 0, 15448, 0, // alpha = 0.7621567 + 15442, 0, 15442, 0, // alpha = 0.7901235 + 15438, 0, 15438, 0, // alpha = 0.8185941 + 15433, 0, 15433, 0, // alpha = 0.8475687 + 15429, 0, 15429, 0, // alpha = 0.8770471 + 15424, 0, 15424, 0, // alpha = 0.9070295 + 15420, 0, 15420, 0, // alpha = 0.9375157 + 15416, 0, 15416, 0, // alpha = 0.9685059 + 15413, 0, 15413, 0, // alpha = 1 + + // Cos (theta) = 0.9997481 + 16578, 43362, 17206, 11008, // alpha = 0.001 + 16578, 43362, 17206, 11008, // alpha = 0.001 + 16578, 43362, 17206, 11008, // alpha = 0.001007811 + 16578, 43362, 17206, 11008, // alpha = 0.002267574 + 16574, 43362, 17203, 11014, // alpha = 0.004031243 + 16574, 43362, 17203, 11014, // alpha = 0.006298816 + 16574, 43362, 17203, 11014, // alpha = 0.009070295 + 16574, 43362, 17203, 11014, // alpha = 0.01234568 + 16574, 43362, 17203, 11014, // alpha = 0.01612497 + 16574, 43362, 17203, 11014, // alpha = 0.02040816 + 16574, 43362, 17203, 11014, // alpha = 0.02519527 + 16493, 43336, 17050, 10906, // alpha = 0.03048627 + 19298, 43270, 15466, 13760, // alpha = 0.03628118 + 18970, 43185, 15450, 13490, // alpha = 0.04258 + 18727, 43093, 15439, 13260, // alpha = 0.04938272 + 18541, 43005, 15431, 12940, // alpha = 0.05668934 + 18358, 42851, 15426, 12691, // alpha = 0.06449988 + 18123, 42719, 15423, 12484, // alpha = 0.07281432 + 17932, 42605, 15421, 12310, // alpha = 0.08163266 + 17775, 42499, 15420, 12031, // alpha = 0.09095491 + 17643, 42394, 15419, 11771, // alpha = 0.1007811 + 17530, 42284, 15418, 11538, // alpha = 0.1111111 + 17433, 42165, 15417, 11332, // alpha = 0.1219451 + 17291, 42035, 15416, 11026, // alpha = 0.1332829 + 17145, 41798, 15415, 10682, // alpha = 0.1451247 + 17016, 41482, 15414, 10368, // alpha = 0.1574704 + 16904, 41136, 15412, 9888, // alpha = 0.17032 + 16804, 40557, 15411, 9322, // alpha = 0.1836735 + 16716, 39541, 15409, 8349, // alpha = 0.1975309 + 16638, 2786, 15408, 5113, // alpha = 0.2118922 + 16568, 7116, 15406, 40652, // alpha = 0.2267574 + 16505, 8143, 15405, 41773, // alpha = 0.2421265 + 16449, 8695, 15403, 42355, // alpha = 0.2579995 + 16399, 9231, 15401, 42826, // alpha = 0.2743765 + 16322, 9517, 15400, 43145, // alpha = 0.2912573 + 16241, 9812, 15398, 43363, // alpha = 0.308642 + 16166, 10113, 15396, 43575, // alpha = 0.3265306 + 16099, 10329, 15394, 43784, // alpha = 0.3449232 + 16039, 10483, 15393, 43992, // alpha = 0.3638196 + 15983, 10636, 15391, 44109, // alpha = 0.38322 + 15933, 10788, 15390, 44207, // alpha = 0.4031242 + 15888, 10938, 15388, 44300, // alpha = 0.4235324 + 15846, 11085, 15387, 44391, // alpha = 0.4444445 + 15809, 11228, 15386, 44477, // alpha = 0.4658605 + 15775, 11315, 15384, 44560, // alpha = 0.4877803 + 15743, 11382, 15383, 44640, // alpha = 0.5102041 + 15715, 11446, 15382, 44715, // alpha = 0.5331318 + 15689, 11507, 15382, 44787, // alpha = 0.5565634 + 15666, 11566, 15381, 44855, // alpha = 0.5804989 + 15644, 11621, 15380, 44919, // alpha = 0.6049383 + 15625, 11674, 15380, 44981, // alpha = 0.6298816 + 15607, 11724, 15379, 45037, // alpha = 0.6553288 + 15590, 11771, 15379, 45072, // alpha = 0.68128 + 15575, 11816, 15379, 45098, // alpha = 0.7077349 + 15562, 11858, 15379, 45121, // alpha = 0.7346939 + 15549, 11898, 15379, 45142, // alpha = 0.7621567 + 15538, 11935, 15379, 45163, // alpha = 0.7901235 + 15527, 11970, 15379, 45181, // alpha = 0.8185941 + 15517, 12002, 15379, 45198, // alpha = 0.8475687 + 15508, 12033, 15379, 45215, // alpha = 0.8770471 + 15500, 12062, 15379, 45230, // alpha = 0.9070295 + 15492, 12089, 15380, 45244, // alpha = 0.9375157 + 15485, 12114, 15380, 45256, // alpha = 0.9685059 + 15478, 12138, 15380, 45268, // alpha = 1 + + // Cos (theta) = 0.9989922 + 19588, 44196, 15433, 15173, // alpha = 0.001 + 19588, 44196, 15433, 15173, // alpha = 0.001 + 19588, 44196, 15433, 15173, // alpha = 0.001007811 + 19587, 44196, 15431, 15171, // alpha = 0.002267574 + 19588, 44196, 15432, 15174, // alpha = 0.004031243 + 19587, 44196, 15432, 15174, // alpha = 0.006298816 + 19587, 44196, 15432, 15176, // alpha = 0.009070295 + 19586, 44196, 15432, 15173, // alpha = 0.01234568 + 19588, 44196, 15433, 15175, // alpha = 0.01612497 + 19586, 44196, 15432, 15173, // alpha = 0.02040816 + 19586, 44196, 15432, 15173, // alpha = 0.02519527 + 19407, 44209, 15421, 14910, // alpha = 0.03048627 + 19116, 44190, 15416, 14663, // alpha = 0.03628118 + 18877, 44147, 15413, 14464, // alpha = 0.04258 + 18681, 44090, 15413, 14263, // alpha = 0.04938272 + 18519, 44032, 15413, 13990, // alpha = 0.05668934 + 18339, 43925, 15414, 13765, // alpha = 0.06449988 + 18116, 43833, 15415, 13576, // alpha = 0.07281432 + 17930, 43754, 15415, 13416, // alpha = 0.08163266 + 17775, 43684, 15416, 13246, // alpha = 0.09095491 + 17642, 43617, 15416, 13005, // alpha = 0.1007811 + 17529, 43550, 15416, 12796, // alpha = 0.1111111 + 17433, 43479, 15415, 12615, // alpha = 0.1219451 + 17290, 43402, 15415, 12454, // alpha = 0.1332829 + 17144, 43318, 15414, 12308, // alpha = 0.1451247 + 17016, 43226, 15413, 12061, // alpha = 0.1574704 + 16904, 43126, 15411, 11820, // alpha = 0.17032 + 16804, 43018, 15411, 11593, // alpha = 0.1836735 + 16716, 42793, 15409, 11382, // alpha = 0.1975309 + 16638, 42541, 15407, 11104, // alpha = 0.2118922 + 16568, 42271, 15406, 10731, // alpha = 0.2267574 + 16505, 41984, 15404, 10364, // alpha = 0.2421265 + 16449, 41380, 15402, 9816, // alpha = 0.2579995 + 16399, 40534, 15401, 9080, // alpha = 0.2743765 + 16322, 38092, 15399, 7445, // alpha = 0.2912573 + 16240, 7193, 15397, 40018, // alpha = 0.308642 + 16166, 8387, 15395, 41655, // alpha = 0.3265306 + 16099, 9092, 15393, 42393, // alpha = 0.3449232 + 16038, 9509, 15391, 42921, // alpha = 0.3638196 + 15982, 9865, 15390, 43230, // alpha = 0.38322 + 15932, 10219, 15388, 43477, // alpha = 0.4031242 + 15887, 10404, 15387, 43722, // alpha = 0.4235324 + 15845, 10576, 15385, 43951, // alpha = 0.4444445 + 15807, 10743, 15383, 44103, // alpha = 0.4658605 + 15773, 10905, 15382, 44208, // alpha = 0.4877803 + 15741, 11063, 15381, 44307, // alpha = 0.5102041 + 15713, 11214, 15380, 44402, // alpha = 0.5331318 + 15687, 11311, 15379, 44493, // alpha = 0.5565634 + 15663, 11381, 15379, 44578, // alpha = 0.5804989 + 15642, 11446, 15378, 44658, // alpha = 0.6049383 + 15622, 11509, 15378, 44733, // alpha = 0.6298816 + 15604, 11569, 15377, 44803, // alpha = 0.6553288 + 15588, 11625, 15377, 44869, // alpha = 0.68128 + 15573, 11678, 15377, 44931, // alpha = 0.7077349 + 15559, 11728, 15377, 44990, // alpha = 0.7346939 + 15546, 11775, 15377, 45041, // alpha = 0.7621567 + 15534, 11819, 15377, 45074, // alpha = 0.7901235 + 15524, 11861, 15377, 45097, // alpha = 0.8185941 + 15514, 11900, 15377, 45119, // alpha = 0.8475687 + 15505, 11937, 15378, 45139, // alpha = 0.8770471 + 15497, 11972, 15378, 45158, // alpha = 0.9070295 + 15489, 12004, 15378, 45175, // alpha = 0.9375157 + 15482, 12035, 15378, 45191, // alpha = 0.9685059 + 15475, 12063, 15379, 45207, // alpha = 1 + + // Cos (theta) = 0.9977324 + 19272, 44604, 15421, 15470, // alpha = 0.001 + 19272, 44604, 15421, 15470, // alpha = 0.001 + 19272, 44604, 15421, 15470, // alpha = 0.001007811 + 19270, 44604, 15421, 15469, // alpha = 0.002267574 + 19270, 44604, 15421, 15469, // alpha = 0.004031243 + 19271, 44604, 15420, 15470, // alpha = 0.006298816 + 19270, 44604, 15420, 15469, // alpha = 0.009070295 + 19272, 44604, 15420, 15470, // alpha = 0.01234568 + 19271, 44604, 15422, 15469, // alpha = 0.01612497 + 19272, 44604, 15420, 15470, // alpha = 0.02040816 + 19270, 44604, 15421, 15469, // alpha = 0.02519527 + 19114, 44611, 15417, 15380, // alpha = 0.03048627 + 18943, 44604, 15413, 15185, // alpha = 0.03628118 + 18782, 44579, 15409, 14966, // alpha = 0.04258 + 18632, 44539, 15406, 14761, // alpha = 0.04938272 + 18495, 44491, 15407, 14581, // alpha = 0.05668934 + 18315, 44443, 15409, 14426, // alpha = 0.06449988 + 18105, 44397, 15411, 14247, // alpha = 0.07281432 + 17926, 44356, 15413, 14018, // alpha = 0.08163266 + 17772, 44317, 15413, 13820, // alpha = 0.09095491 + 17640, 44280, 15414, 13648, // alpha = 0.1007811 + 17528, 44241, 15414, 13498, // alpha = 0.1111111 + 17432, 44200, 15414, 13367, // alpha = 0.1219451 + 17288, 44156, 15414, 13190, // alpha = 0.1332829 + 17143, 44109, 15414, 12985, // alpha = 0.1451247 + 17016, 44057, 15413, 12799, // alpha = 0.1574704 + 16903, 43969, 15412, 12630, // alpha = 0.17032 + 16805, 43846, 15411, 12474, // alpha = 0.1836735 + 16716, 43714, 15409, 12331, // alpha = 0.1975309 + 16638, 43571, 15408, 12105, // alpha = 0.2118922 + 16568, 43419, 15406, 11854, // alpha = 0.2267574 + 16505, 43258, 15404, 11619, // alpha = 0.2421265 + 16449, 43087, 15402, 11393, // alpha = 0.2579995 + 16398, 42810, 15400, 11100, // alpha = 0.2743765 + 16322, 42438, 15399, 10698, // alpha = 0.2912573 + 16239, 42055, 15397, 10309, // alpha = 0.308642 + 16166, 41339, 15395, 9646, // alpha = 0.3265306 + 16098, 40118, 15393, 8656, // alpha = 0.3449232 + 16037, 5735, 15391, 5299, // alpha = 0.3638196 + 15982, 8174, 15389, 41086, // alpha = 0.38322 + 15931, 8990, 15387, 42153, // alpha = 0.4031242 + 15885, 9502, 15385, 42739, // alpha = 0.4235324 + 15844, 9895, 15383, 43158, // alpha = 0.4444445 + 15806, 10259, 15382, 43428, // alpha = 0.4658605 + 15771, 10446, 15381, 43681, // alpha = 0.4877803 + 15740, 10626, 15379, 43925, // alpha = 0.5102041 + 15711, 10801, 15378, 44093, // alpha = 0.5331318 + 15685, 10968, 15377, 44200, // alpha = 0.5565634 + 15661, 11128, 15377, 44302, // alpha = 0.5804989 + 15640, 11272, 15376, 44399, // alpha = 0.6049383 + 15620, 11345, 15376, 44488, // alpha = 0.6298816 + 15602, 11413, 15375, 44573, // alpha = 0.6553288 + 15585, 11479, 15375, 44651, // alpha = 0.68128 + 15570, 11540, 15375, 44725, // alpha = 0.7077349 + 15556, 11599, 15375, 44793, // alpha = 0.7346939 + 15543, 11653, 15375, 44859, // alpha = 0.7621567 + 15531, 11705, 15375, 44918, // alpha = 0.7901235 + 15521, 11754, 15376, 44972, // alpha = 0.8185941 + 15511, 11800, 15376, 45025, // alpha = 0.8475687 + 15502, 11843, 15376, 45065, // alpha = 0.8770471 + 15493, 11883, 15376, 45087, // alpha = 0.9070295 + 15486, 11921, 15377, 45110, // alpha = 0.9375157 + 15478, 11957, 15377, 45128, // alpha = 0.9685059 + 15472, 11990, 15377, 45148, // alpha = 1 + + // Cos (theta) = 0.9959688 + 19134, 44976, 15439, 15722, // alpha = 0.001 + 19134, 44976, 15439, 15722, // alpha = 0.001 + 19134, 44976, 15439, 15722, // alpha = 0.001007811 + 19133, 44976, 15439, 15721, // alpha = 0.002267574 + 19132, 44976, 15438, 15721, // alpha = 0.004031243 + 19132, 44976, 15438, 15721, // alpha = 0.006298816 + 19131, 44976, 15439, 15720, // alpha = 0.009070295 + 19133, 44976, 15438, 15721, // alpha = 0.01234568 + 19133, 44976, 15439, 15721, // alpha = 0.01612497 + 19133, 44976, 15438, 15721, // alpha = 0.02040816 + 19134, 44976, 15439, 15723, // alpha = 0.02519527 + 18995, 44956, 15434, 15619, // alpha = 0.03048627 + 18851, 44947, 15431, 15505, // alpha = 0.03628118 + 18714, 44939, 15428, 15391, // alpha = 0.04258 + 18588, 44925, 15426, 15201, // alpha = 0.04938272 + 18470, 44903, 15422, 14989, // alpha = 0.05668934 + 18286, 44875, 15419, 14796, // alpha = 0.06449988 + 18087, 44842, 15418, 14625, // alpha = 0.07281432 + 17914, 44807, 15418, 14477, // alpha = 0.08163266 + 17764, 44770, 15417, 14349, // alpha = 0.09095491 + 17636, 44731, 15417, 14140, // alpha = 0.1007811 + 17526, 44689, 15417, 13946, // alpha = 0.1111111 + 17430, 44644, 15416, 13774, // alpha = 0.1219451 + 17286, 44596, 15415, 13623, // alpha = 0.1332829 + 17142, 44542, 15415, 13489, // alpha = 0.1451247 + 17015, 44485, 15414, 13372, // alpha = 0.1574704 + 16903, 44422, 15413, 13208, // alpha = 0.17032 + 16805, 44353, 15412, 13012, // alpha = 0.1836735 + 16717, 44280, 15410, 12828, // alpha = 0.1975309 + 16638, 44200, 15409, 12660, // alpha = 0.2118922 + 16568, 44116, 15407, 12504, // alpha = 0.2267574 + 16505, 44019, 15405, 12356, // alpha = 0.2421265 + 16449, 43830, 15403, 12146, // alpha = 0.2579995 + 16398, 43631, 15401, 11887, // alpha = 0.2743765 + 16322, 43423, 15399, 11641, // alpha = 0.2912573 + 16239, 43209, 15397, 11409, // alpha = 0.308642 + 16165, 42971, 15395, 11098, // alpha = 0.3265306 + 16098, 42524, 15393, 10679, // alpha = 0.3449232 + 16037, 42071, 15391, 10275, // alpha = 0.3638196 + 15981, 41249, 15389, 9529, // alpha = 0.38322 + 15930, 39514, 15386, 8381, // alpha = 0.4031242 + 15884, 7087, 15384, 38418, // alpha = 0.4235324 + 15843, 8544, 15383, 41455, // alpha = 0.4444445 + 15804, 9313, 15381, 42354, // alpha = 0.4658605 + 15770, 9735, 15379, 42953, // alpha = 0.4877803 + 15738, 10143, 15378, 43265, // alpha = 0.5102041 + 15710, 10389, 15377, 43534, // alpha = 0.5331318 + 15683, 10578, 15376, 43787, // alpha = 0.5565634 + 15659, 10760, 15375, 44024, // alpha = 0.5804989 + 15637, 10933, 15375, 44139, // alpha = 0.6049383 + 15618, 11098, 15374, 44245, // alpha = 0.6298816 + 15599, 11255, 15374, 44342, // alpha = 0.6553288 + 15583, 11334, 15374, 44435, // alpha = 0.68128 + 15567, 11404, 15374, 44519, // alpha = 0.7077349 + 15553, 11470, 15374, 44599, // alpha = 0.7346939 + 15540, 11533, 15374, 44674, // alpha = 0.7621567 + 15528, 11592, 15374, 44744, // alpha = 0.7901235 + 15518, 11648, 15374, 44809, // alpha = 0.8185941 + 15508, 11700, 15374, 44871, // alpha = 0.8475687 + 15498, 11749, 15375, 44928, // alpha = 0.8770471 + 15490, 11795, 15375, 44984, // alpha = 0.9070295 + 15482, 11839, 15375, 45035, // alpha = 0.9375157 + 15475, 11880, 15376, 45069, // alpha = 0.9685059 + 15469, 11918, 15376, 45092, // alpha = 1 + + // Cos (theta) = 0.9937012 + 19303, 45173, 15519, 16231, // alpha = 0.001 + 19303, 45173, 15519, 16231, // alpha = 0.001 + 19303, 45173, 15519, 16231, // alpha = 0.001007811 + 19304, 45173, 15519, 16231, // alpha = 0.002267574 + 19302, 45173, 15520, 16230, // alpha = 0.004031243 + 19304, 45173, 15520, 16231, // alpha = 0.006298816 + 19303, 45173, 15520, 16231, // alpha = 0.009070295 + 19304, 45173, 15519, 16231, // alpha = 0.01234568 + 19303, 45173, 15519, 16230, // alpha = 0.01612497 + 19302, 45173, 15518, 16232, // alpha = 0.02040816 + 19302, 45173, 15520, 16230, // alpha = 0.02519527 + 19059, 45164, 15494, 15993, // alpha = 0.03048627 + 18854, 45161, 15476, 15791, // alpha = 0.03628118 + 18699, 45165, 15464, 15635, // alpha = 0.04258 + 18564, 45170, 15456, 15495, // alpha = 0.04938272 + 18448, 45173, 15448, 15372, // alpha = 0.05668934 + 18252, 45172, 15441, 15156, // alpha = 0.06449988 + 18066, 45165, 15436, 14956, // alpha = 0.07281432 + 17900, 45153, 15431, 14776, // alpha = 0.08163266 + 17755, 45137, 15428, 14621, // alpha = 0.09095491 + 17631, 45117, 15426, 14485, // alpha = 0.1007811 + 17522, 45096, 15424, 14365, // alpha = 0.1111111 + 17427, 45072, 15422, 14184, // alpha = 0.1219451 + 17284, 45034, 15420, 13999, // alpha = 0.1332829 + 17140, 44976, 15419, 13833, // alpha = 0.1451247 + 17014, 44912, 15418, 13686, // alpha = 0.1574704 + 16903, 44843, 15416, 13551, // alpha = 0.17032 + 16804, 44768, 15415, 13431, // alpha = 0.1836735 + 16717, 44687, 15413, 13320, // alpha = 0.1975309 + 16638, 44599, 15412, 13123, // alpha = 0.2118922 + 16569, 44506, 15410, 12936, // alpha = 0.2267574 + 16506, 44407, 15408, 12759, // alpha = 0.2421265 + 16449, 44302, 15406, 12595, // alpha = 0.2579995 + 16399, 44192, 15403, 12440, // alpha = 0.2743765 + 16322, 44078, 15401, 12295, // alpha = 0.2912573 + 16239, 43887, 15399, 12026, // alpha = 0.308642 + 16165, 43644, 15396, 11764, // alpha = 0.3265306 + 16097, 43396, 15394, 11515, // alpha = 0.3449232 + 16036, 43145, 15392, 11278, // alpha = 0.3638196 + 15980, 42779, 15389, 10841, // alpha = 0.38322 + 15930, 42275, 15387, 10415, // alpha = 0.4031242 + 15883, 41568, 15385, 9776, // alpha = 0.4235324 + 15842, 40209, 15383, 8812, // alpha = 0.4444445 + 15803, 6385, 15381, 5657, // alpha = 0.4658605 + 15768, 8425, 15379, 41129, // alpha = 0.4877803 + 15737, 9277, 15378, 42210, // alpha = 0.5102041 + 15708, 9717, 15376, 42826, // alpha = 0.5331318 + 15682, 10141, 15375, 43204, // alpha = 0.5565634 + 15658, 10394, 15374, 43479, // alpha = 0.5804989 + 15636, 10588, 15374, 43732, // alpha = 0.6049383 + 15615, 10773, 15373, 43971, // alpha = 0.6298816 + 15597, 10949, 15373, 44114, // alpha = 0.6553288 + 15580, 11116, 15373, 44220, // alpha = 0.68128 + 15565, 11269, 15373, 44316, // alpha = 0.7077349 + 15550, 11343, 15373, 44409, // alpha = 0.7346939 + 15538, 11414, 15373, 44496, // alpha = 0.7621567 + 15526, 11480, 15373, 44575, // alpha = 0.7901235 + 15515, 11543, 15373, 44651, // alpha = 0.8185941 + 15505, 11602, 15374, 44722, // alpha = 0.8475687 + 15495, 11657, 15374, 44788, // alpha = 0.8770471 + 15487, 11709, 15374, 44849, // alpha = 0.9070295 + 15479, 11758, 15374, 44908, // alpha = 0.9375157 + 15472, 11804, 15375, 44964, // alpha = 0.9685059 + 15465, 11848, 15375, 45017, // alpha = 1 + + // Cos (theta) = 0.9909297 + 19496, 45320, 15611, 16629, // alpha = 0.001 + 19496, 45320, 15611, 16629, // alpha = 0.001 + 19496, 45320, 15611, 16629, // alpha = 0.001007811 + 19494, 45320, 15611, 16627, // alpha = 0.002267574 + 19496, 45320, 15612, 16629, // alpha = 0.004031243 + 19496, 45320, 15611, 16629, // alpha = 0.006298816 + 19496, 45320, 15612, 16629, // alpha = 0.009070295 + 19496, 45320, 15611, 16630, // alpha = 0.01234568 + 19495, 45320, 15611, 16629, // alpha = 0.01612497 + 19494, 45320, 15612, 16627, // alpha = 0.02040816 + 19495, 45320, 15612, 16628, // alpha = 0.02519527 + 19191, 45325, 15569, 16429, // alpha = 0.03048627 + 18911, 45332, 15534, 16145, // alpha = 0.03628118 + 18711, 45343, 15508, 15907, // alpha = 0.04258 + 18559, 45358, 15490, 15724, // alpha = 0.04938272 + 18434, 45371, 15476, 15568, // alpha = 0.05668934 + 18222, 45379, 15465, 15434, // alpha = 0.06449988 + 18041, 45379, 15456, 15277, // alpha = 0.07281432 + 17883, 45372, 15449, 15073, // alpha = 0.08163266 + 17744, 45359, 15442, 14891, // alpha = 0.09095491 + 17623, 45341, 15437, 14732, // alpha = 0.1007811 + 17518, 45319, 15433, 14592, // alpha = 0.1111111 + 17425, 45293, 15430, 14466, // alpha = 0.1219451 + 17280, 45265, 15427, 14357, // alpha = 0.1332829 + 17138, 45233, 15425, 14180, // alpha = 0.1451247 + 17013, 45199, 15423, 14004, // alpha = 0.1574704 + 16902, 45161, 15421, 13846, // alpha = 0.17032 + 16804, 45120, 15419, 13703, // alpha = 0.1836735 + 16717, 45075, 15417, 13572, // alpha = 0.1975309 + 16639, 44999, 15415, 13451, // alpha = 0.2118922 + 16569, 44897, 15413, 13341, // alpha = 0.2267574 + 16506, 44789, 15411, 13166, // alpha = 0.2421265 + 16450, 44674, 15408, 12975, // alpha = 0.2579995 + 16399, 44554, 15406, 12795, // alpha = 0.2743765 + 16322, 44428, 15404, 12627, // alpha = 0.2912573 + 16240, 44299, 15401, 12469, // alpha = 0.308642 + 16165, 44166, 15398, 12317, // alpha = 0.3265306 + 16097, 44027, 15396, 12061, // alpha = 0.3449232 + 16036, 43752, 15393, 11789, // alpha = 0.3638196 + 15980, 43475, 15390, 11535, // alpha = 0.38322 + 15929, 43198, 15388, 11290, // alpha = 0.4031242 + 15883, 42839, 15385, 10858, // alpha = 0.4235324 + 15841, 42297, 15383, 10419, // alpha = 0.4444445 + 15802, 41546, 15381, 9776, // alpha = 0.4658605 + 15768, 40056, 15379, 8775, // alpha = 0.4877803 + 15736, 6863, 15378, 5127, // alpha = 0.5102041 + 15707, 8578, 15376, 41195, // alpha = 0.5331318 + 15680, 9366, 15375, 42245, // alpha = 0.5565634 + 15656, 9816, 15374, 42858, // alpha = 0.5804989 + 15634, 10243, 15373, 43221, // alpha = 0.6049383 + 15613, 10448, 15373, 43491, // alpha = 0.6298816 + 15595, 10643, 15372, 43741, // alpha = 0.6553288 + 15578, 10829, 15372, 43981, // alpha = 0.68128 + 15562, 11004, 15372, 44117, // alpha = 0.7077349 + 15548, 11170, 15372, 44219, // alpha = 0.7346939 + 15535, 11295, 15372, 44316, // alpha = 0.7621567 + 15523, 11369, 15372, 44407, // alpha = 0.7901235 + 15512, 11439, 15372, 44491, // alpha = 0.8185941 + 15502, 11504, 15373, 44573, // alpha = 0.8475687 + 15492, 11566, 15373, 44649, // alpha = 0.8770471 + 15484, 11624, 15373, 44719, // alpha = 0.9070295 + 15476, 11679, 15374, 44786, // alpha = 0.9375157 + 15469, 11730, 15374, 44850, // alpha = 0.9685059 + 15462, 11778, 15374, 44910, // alpha = 1 + + // Cos (theta) = 0.9876543 + 19497, 45495, 15662, 16838, // alpha = 0.001 + 19497, 45495, 15662, 16838, // alpha = 0.001 + 19497, 45495, 15662, 16838, // alpha = 0.001007811 + 19498, 45495, 15661, 16840, // alpha = 0.002267574 + 19496, 45495, 15660, 16838, // alpha = 0.004031243 + 19498, 45495, 15664, 16840, // alpha = 0.006298816 + 19498, 45495, 15664, 16840, // alpha = 0.009070295 + 19498, 45495, 15663, 16840, // alpha = 0.01234568 + 19498, 45495, 15663, 16839, // alpha = 0.01612497 + 19496, 45495, 15663, 16838, // alpha = 0.02040816 + 19497, 45495, 15663, 16838, // alpha = 0.02519527 + 19234, 45512, 15625, 16634, // alpha = 0.03048627 + 18948, 45530, 15586, 16440, // alpha = 0.03628118 + 18727, 45548, 15552, 16192, // alpha = 0.04258 + 18558, 45567, 15526, 15956, // alpha = 0.04938272 + 18416, 45584, 15504, 15767, // alpha = 0.05668934 + 18201, 45595, 15489, 15610, // alpha = 0.06449988 + 18019, 45598, 15476, 15477, // alpha = 0.07281432 + 17865, 45594, 15466, 15361, // alpha = 0.08163266 + 17732, 45582, 15457, 15158, // alpha = 0.09095491 + 17616, 45564, 15450, 14979, // alpha = 0.1007811 + 17513, 45542, 15444, 14818, // alpha = 0.1111111 + 17422, 45515, 15439, 14675, // alpha = 0.1219451 + 17277, 45485, 15435, 14548, // alpha = 0.1332829 + 17136, 45451, 15432, 14435, // alpha = 0.1451247 + 17011, 45414, 15430, 14329, // alpha = 0.1574704 + 16901, 45373, 15427, 14143, // alpha = 0.17032 + 16804, 45329, 15425, 13979, // alpha = 0.1836735 + 16717, 45280, 15422, 13828, // alpha = 0.1975309 + 16639, 45228, 15420, 13689, // alpha = 0.2118922 + 16569, 45173, 15418, 13562, // alpha = 0.2267574 + 16507, 45114, 15415, 13444, // alpha = 0.2421265 + 16450, 45047, 15412, 13335, // alpha = 0.2579995 + 16400, 44916, 15410, 13153, // alpha = 0.2743765 + 16324, 44780, 15407, 12962, // alpha = 0.2912573 + 16241, 44639, 15404, 12781, // alpha = 0.308642 + 16166, 44494, 15401, 12609, // alpha = 0.3265306 + 16098, 44346, 15398, 12450, // alpha = 0.3449232 + 16036, 44196, 15395, 12297, // alpha = 0.3638196 + 15980, 44045, 15392, 12015, // alpha = 0.38322 + 15929, 43755, 15389, 11739, // alpha = 0.4031242 + 15883, 43455, 15386, 11483, // alpha = 0.4235324 + 15840, 43159, 15384, 11213, // alpha = 0.4444445 + 15802, 42729, 15381, 10752, // alpha = 0.4658605 + 15767, 42161, 15379, 10316, // alpha = 0.4877803 + 15735, 41234, 15377, 9581, // alpha = 0.5102041 + 15706, 38704, 15376, 8369, // alpha = 0.5331318 + 15679, 7742, 15375, 38872, // alpha = 0.5565634 + 15654, 8954, 15374, 41554, // alpha = 0.5804989 + 15632, 9558, 15373, 42416, // alpha = 0.6049383 + 15612, 10008, 15372, 43012, // alpha = 0.6298816 + 15593, 10339, 15372, 43293, // alpha = 0.6553288 + 15576, 10542, 15371, 43557, // alpha = 0.68128 + 15560, 10735, 15371, 43803, // alpha = 0.7077349 + 15545, 10918, 15371, 44032, // alpha = 0.7346939 + 15532, 11091, 15371, 44139, // alpha = 0.7621567 + 15520, 11253, 15371, 44242, // alpha = 0.7901235 + 15509, 11336, 15371, 44337, // alpha = 0.8185941 + 15499, 11408, 15372, 44427, // alpha = 0.8475687 + 15489, 11476, 15372, 44512, // alpha = 0.8770471 + 15481, 11540, 15372, 44591, // alpha = 0.9070295 + 15473, 11600, 15373, 44671, // alpha = 0.9375157 + 15466, 11657, 15373, 44739, // alpha = 0.9685059 + 15459, 11710, 15373, 44806, // alpha = 1 + + // Cos (theta) = 0.983875 + 19416, 45718, 15681, 16954, // alpha = 0.001 + 19416, 45718, 15681, 16954, // alpha = 0.001 + 19416, 45718, 15681, 16954, // alpha = 0.001007811 + 19417, 45718, 15682, 16953, // alpha = 0.002267574 + 19417, 45718, 15682, 16954, // alpha = 0.004031243 + 19415, 45718, 15682, 16952, // alpha = 0.006298816 + 19414, 45718, 15683, 16952, // alpha = 0.009070295 + 19418, 45718, 15683, 16954, // alpha = 0.01234568 + 19421, 45718, 15682, 16956, // alpha = 0.01612497 + 19418, 45718, 15683, 16955, // alpha = 0.02040816 + 19420, 45718, 15684, 16955, // alpha = 0.02519527 + 19177, 45743, 15653, 16771, // alpha = 0.03048627 + 18927, 45769, 15619, 16579, // alpha = 0.03628118 + 18712, 45790, 15587, 16411, // alpha = 0.04258 + 18544, 45806, 15557, 16170, // alpha = 0.04938272 + 18388, 45817, 15531, 15953, // alpha = 0.05668934 + 18174, 45824, 15511, 15779, // alpha = 0.06449988 + 17997, 45824, 15495, 15630, // alpha = 0.07281432 + 17849, 45819, 15483, 15503, // alpha = 0.08163266 + 17720, 45807, 15472, 15391, // alpha = 0.09095491 + 17608, 45789, 15463, 15224, // alpha = 0.1007811 + 17508, 45766, 15456, 15044, // alpha = 0.1111111 + 17419, 45738, 15450, 14884, // alpha = 0.1219451 + 17275, 45706, 15445, 14742, // alpha = 0.1332829 + 17135, 45670, 15441, 14612, // alpha = 0.1451247 + 17013, 45630, 15438, 14496, // alpha = 0.1574704 + 16902, 45586, 15434, 14392, // alpha = 0.17032 + 16804, 45538, 15432, 14257, // alpha = 0.1836735 + 16717, 45486, 15429, 14085, // alpha = 0.1975309 + 16639, 45430, 15426, 13928, // alpha = 0.2118922 + 16570, 45370, 15423, 13784, // alpha = 0.2267574 + 16508, 45306, 15420, 13651, // alpha = 0.2421265 + 16451, 45239, 15417, 13528, // alpha = 0.2579995 + 16401, 45168, 15414, 13413, // alpha = 0.2743765 + 16325, 45094, 15410, 13296, // alpha = 0.2912573 + 16242, 44980, 15407, 13095, // alpha = 0.308642 + 16167, 44823, 15404, 12905, // alpha = 0.3265306 + 16099, 44663, 15400, 12725, // alpha = 0.3449232 + 16036, 44500, 15397, 12553, // alpha = 0.3638196 + 15980, 44336, 15394, 12394, // alpha = 0.38322 + 15929, 44173, 15390, 12195, // alpha = 0.4031242 + 15883, 43988, 15387, 11906, // alpha = 0.4235324 + 15840, 43666, 15385, 11637, // alpha = 0.4444445 + 15802, 43350, 15382, 11379, // alpha = 0.4658605 + 15766, 43042, 15380, 11013, // alpha = 0.4877803 + 15734, 42475, 15378, 10556, // alpha = 0.5102041 + 15704, 41805, 15376, 10016, // alpha = 0.5331318 + 15678, 40410, 15375, 9209, // alpha = 0.5565634 + 15653, 6427, 15373, 7206, // alpha = 0.5804989 + 15630, 8525, 15372, 40675, // alpha = 0.6049383 + 15610, 9362, 15371, 42059, // alpha = 0.6298816 + 15591, 9830, 15371, 42681, // alpha = 0.6553288 + 15574, 10257, 15371, 43138, // alpha = 0.68128 + 15558, 10468, 15370, 43410, // alpha = 0.7077349 + 15543, 10668, 15370, 43666, // alpha = 0.7346939 + 15530, 10856, 15370, 43902, // alpha = 0.7621567 + 15517, 11034, 15370, 44081, // alpha = 0.7901235 + 15506, 11202, 15370, 44186, // alpha = 0.8185941 + 15496, 11312, 15371, 44285, // alpha = 0.8475687 + 15486, 11387, 15371, 44380, // alpha = 0.8770471 + 15478, 11457, 15371, 44468, // alpha = 0.9070295 + 15470, 11523, 15371, 44552, // alpha = 0.9375157 + 15462, 11585, 15372, 44631, // alpha = 0.9685059 + 15456, 11643, 15372, 44706, // alpha = 1 + + // Cos (theta) = 0.9795918 + 19300, 46019, 15690, 17052, // alpha = 0.001 + 19300, 46019, 15690, 17052, // alpha = 0.001 + 19300, 46019, 15690, 17052, // alpha = 0.001007811 + 19300, 46019, 15689, 17052, // alpha = 0.002267574 + 19301, 46019, 15688, 17053, // alpha = 0.004031243 + 19299, 46019, 15690, 17052, // alpha = 0.006298816 + 19300, 46019, 15689, 17052, // alpha = 0.009070295 + 19302, 46019, 15689, 17053, // alpha = 0.01234568 + 19302, 46019, 15689, 17054, // alpha = 0.01612497 + 19302, 46019, 15689, 17053, // alpha = 0.02040816 + 19299, 46019, 15689, 17052, // alpha = 0.02519527 + 19067, 46036, 15663, 16852, // alpha = 0.03048627 + 18846, 46055, 15633, 16661, // alpha = 0.03628118 + 18664, 46067, 15606, 16500, // alpha = 0.04258 + 18515, 46071, 15579, 16351, // alpha = 0.04938272 + 18348, 46069, 15555, 16125, // alpha = 0.05668934 + 18145, 46065, 15534, 15938, // alpha = 0.06449988 + 17975, 46058, 15516, 15779, // alpha = 0.07281432 + 17831, 46048, 15502, 15641, // alpha = 0.08163266 + 17708, 46034, 15490, 15521, // alpha = 0.09095491 + 17599, 46015, 15480, 15413, // alpha = 0.1007811 + 17502, 45991, 15471, 15270, // alpha = 0.1111111 + 17417, 45962, 15464, 15093, // alpha = 0.1219451 + 17272, 45929, 15458, 14936, // alpha = 0.1332829 + 17134, 45891, 15452, 14791, // alpha = 0.1451247 + 17011, 45848, 15448, 14662, // alpha = 0.1574704 + 16903, 45801, 15444, 14544, // alpha = 0.17032 + 16805, 45749, 15440, 14438, // alpha = 0.1836735 + 16718, 45693, 15437, 14341, // alpha = 0.1975309 + 16640, 45633, 15433, 14170, // alpha = 0.2118922 + 16571, 45568, 15430, 14008, // alpha = 0.2267574 + 16509, 45499, 15426, 13861, // alpha = 0.2421265 + 16452, 45427, 15423, 13722, // alpha = 0.2579995 + 16401, 45351, 15419, 13594, // alpha = 0.2743765 + 16326, 45271, 15415, 13474, // alpha = 0.2912573 + 16243, 45189, 15411, 13361, // alpha = 0.308642 + 16168, 45104, 15407, 13200, // alpha = 0.3265306 + 16100, 44980, 15403, 13001, // alpha = 0.3449232 + 16037, 44805, 15400, 12814, // alpha = 0.3638196 + 15981, 44628, 15396, 12636, // alpha = 0.38322 + 15930, 44452, 15392, 12468, // alpha = 0.4031242 + 15883, 44276, 15389, 12310, // alpha = 0.4235324 + 15840, 44103, 15386, 12033, // alpha = 0.4444445 + 15801, 43832, 15383, 11752, // alpha = 0.4658605 + 15766, 43499, 15380, 11486, // alpha = 0.4877803 + 15733, 43175, 15378, 11211, // alpha = 0.5102041 + 15704, 42713, 15376, 10744, // alpha = 0.5331318 + 15677, 42107, 15375, 10301, // alpha = 0.5565634 + 15652, 41065, 15373, 9536, // alpha = 0.5804989 + 15629, 34576, 15372, 8301, // alpha = 0.6049383 + 15608, 8219, 15371, 39157, // alpha = 0.6298816 + 15589, 9225, 15370, 41610, // alpha = 0.6553288 + 15571, 9707, 15370, 42440, // alpha = 0.68128 + 15555, 10164, 15370, 43024, // alpha = 0.7077349 + 15541, 10419, 15370, 43303, // alpha = 0.7346939 + 15527, 10624, 15369, 43567, // alpha = 0.7621567 + 15515, 10817, 15369, 43815, // alpha = 0.7901235 + 15503, 10999, 15370, 44038, // alpha = 0.8185941 + 15493, 11171, 15370, 44148, // alpha = 0.8475687 + 15483, 11299, 15370, 44253, // alpha = 0.8770471 + 15475, 11375, 15370, 44350, // alpha = 0.9070295 + 15466, 11447, 15370, 44441, // alpha = 0.9375157 + 15459, 11514, 15371, 44526, // alpha = 0.9685059 + 15452, 11577, 15371, 44607, // alpha = 1 + + // Cos (theta) = 0.9748048 + 19149, 46240, 15685, 17097, // alpha = 0.001 + 19149, 46240, 15685, 17097, // alpha = 0.001 + 19149, 46240, 15685, 17097, // alpha = 0.001007811 + 19147, 46240, 15684, 17096, // alpha = 0.002267574 + 19143, 46240, 15686, 17091, // alpha = 0.004031243 + 19147, 46240, 15684, 17096, // alpha = 0.006298816 + 19148, 46240, 15687, 17096, // alpha = 0.009070295 + 19150, 46240, 15684, 17098, // alpha = 0.01234568 + 19146, 46240, 15684, 17095, // alpha = 0.01612497 + 19146, 46240, 15686, 17094, // alpha = 0.02040816 + 19148, 46240, 15685, 17096, // alpha = 0.02519527 + 18932, 46235, 15660, 16889, // alpha = 0.03048627 + 18748, 46229, 15635, 16712, // alpha = 0.03628118 + 18599, 46223, 15615, 16565, // alpha = 0.04258 + 18473, 46215, 15595, 16441, // alpha = 0.04938272 + 18299, 46206, 15575, 16280, // alpha = 0.05668934 + 18113, 46197, 15557, 16089, // alpha = 0.06449988 + 17953, 46189, 15540, 15923, // alpha = 0.07281432 + 17815, 46181, 15525, 15776, // alpha = 0.08163266 + 17696, 46172, 15510, 15647, // alpha = 0.09095491 + 17590, 46162, 15499, 15531, // alpha = 0.1007811 + 17496, 46149, 15489, 15425, // alpha = 0.1111111 + 17412, 46134, 15481, 15300, // alpha = 0.1219451 + 17266, 46116, 15473, 15128, // alpha = 0.1332829 + 17131, 46096, 15467, 14971, // alpha = 0.1451247 + 17010, 46067, 15461, 14828, // alpha = 0.1574704 + 16902, 46017, 15455, 14698, // alpha = 0.17032 + 16805, 45961, 15450, 14580, // alpha = 0.1836735 + 16719, 45901, 15446, 14474, // alpha = 0.1975309 + 16641, 45837, 15442, 14375, // alpha = 0.2118922 + 16572, 45767, 15438, 14236, // alpha = 0.2267574 + 16509, 45694, 15434, 14071, // alpha = 0.2421265 + 16453, 45616, 15429, 13920, // alpha = 0.2579995 + 16402, 45534, 15425, 13777, // alpha = 0.2743765 + 16328, 45449, 15421, 13645, // alpha = 0.2912573 + 16245, 45360, 15416, 13521, // alpha = 0.308642 + 16169, 45270, 15411, 13405, // alpha = 0.3265306 + 16101, 45177, 15407, 13279, // alpha = 0.3449232 + 16038, 45083, 15403, 13074, // alpha = 0.3638196 + 15982, 44921, 15399, 12878, // alpha = 0.38322 + 15930, 44731, 15395, 12695, // alpha = 0.4031242 + 15883, 44543, 15391, 12522, // alpha = 0.4235324 + 15840, 44357, 15388, 12360, // alpha = 0.4444445 + 15801, 44173, 15385, 12125, // alpha = 0.4658605 + 15766, 43956, 15382, 11836, // alpha = 0.4877803 + 15733, 43608, 15379, 11566, // alpha = 0.5102041 + 15703, 43270, 15377, 11310, // alpha = 0.5331318 + 15675, 42879, 15375, 10871, // alpha = 0.5565634 + 15650, 42253, 15374, 10425, // alpha = 0.5804989 + 15627, 41320, 15372, 9769, // alpha = 0.6049383 + 15606, 38750, 15371, 8732, // alpha = 0.6298816 + 15587, 7860, 15370, 4480, // alpha = 0.6553288 + 15569, 9066, 15370, 41243, // alpha = 0.68128 + 15553, 9635, 15369, 42262, // alpha = 0.7077349 + 15538, 10102, 15369, 42875, // alpha = 0.7346939 + 15525, 10392, 15369, 43234, // alpha = 0.7621567 + 15512, 10601, 15369, 43502, // alpha = 0.7901235 + 15501, 10798, 15369, 43753, // alpha = 0.8185941 + 15490, 10984, 15369, 43993, // alpha = 0.8475687 + 15481, 11159, 15369, 44124, // alpha = 0.8770471 + 15472, 11294, 15369, 44231, // alpha = 0.9070295 + 15464, 11371, 15369, 44331, // alpha = 0.9375157 + 15456, 11444, 15370, 44426, // alpha = 0.9685059 + 15449, 11513, 15370, 44514, // alpha = 1 + + // Cos (theta) = 0.9695137 + 18970, 46438, 15690, 17078, // alpha = 0.001 + 18970, 46438, 15690, 17078, // alpha = 0.001 + 18970, 46438, 15690, 17078, // alpha = 0.001007811 + 18972, 46438, 15693, 17079, // alpha = 0.002267574 + 18969, 46438, 15694, 17076, // alpha = 0.004031243 + 18973, 46438, 15694, 17081, // alpha = 0.006298816 + 18971, 46438, 15692, 17078, // alpha = 0.009070295 + 18974, 46438, 15693, 17081, // alpha = 0.01234568 + 18971, 46438, 15693, 17078, // alpha = 0.01612497 + 18972, 46438, 15693, 17080, // alpha = 0.02040816 + 18969, 46438, 15695, 17077, // alpha = 0.02519527 + 18814, 46417, 15668, 16916, // alpha = 0.03048627 + 18669, 46392, 15645, 16763, // alpha = 0.03628118 + 18545, 46371, 15628, 16629, // alpha = 0.04258 + 18440, 46352, 15612, 16514, // alpha = 0.04938272 + 18255, 46336, 15595, 16408, // alpha = 0.05668934 + 18083, 46322, 15579, 16236, // alpha = 0.06449988 + 17934, 46310, 15563, 16066, // alpha = 0.07281432 + 17800, 46300, 15549, 15909, // alpha = 0.08163266 + 17686, 46289, 15535, 15772, // alpha = 0.09095491 + 17581, 46278, 15522, 15647, // alpha = 0.1007811 + 17490, 46264, 15512, 15536, // alpha = 0.1111111 + 17406, 46248, 15501, 15432, // alpha = 0.1219451 + 17259, 46229, 15492, 15319, // alpha = 0.1332829 + 17126, 46208, 15483, 15149, // alpha = 0.1451247 + 17008, 46184, 15476, 14995, // alpha = 0.1574704 + 16900, 46157, 15470, 14853, // alpha = 0.17032 + 16804, 46127, 15464, 14724, // alpha = 0.1836735 + 16719, 46095, 15458, 14607, // alpha = 0.1975309 + 16642, 46042, 15453, 14500, // alpha = 0.2118922 + 16573, 45968, 15447, 14402, // alpha = 0.2267574 + 16510, 45889, 15443, 14286, // alpha = 0.2421265 + 16454, 45805, 15438, 14118, // alpha = 0.2579995 + 16403, 45718, 15433, 13962, // alpha = 0.2743765 + 16330, 45627, 15427, 13817, // alpha = 0.2912573 + 16246, 45533, 15422, 13681, // alpha = 0.308642 + 16171, 45436, 15417, 13555, // alpha = 0.3265306 + 16102, 45337, 15412, 13435, // alpha = 0.3449232 + 16039, 45236, 15407, 13323, // alpha = 0.3638196 + 15982, 45135, 15403, 13123, // alpha = 0.38322 + 15930, 45011, 15398, 12923, // alpha = 0.4031242 + 15883, 44810, 15394, 12736, // alpha = 0.4235324 + 15840, 44611, 15390, 12559, // alpha = 0.4444445 + 15801, 44415, 15387, 12394, // alpha = 0.4658605 + 15765, 44223, 15384, 12186, // alpha = 0.4877803 + 15732, 44036, 15381, 11894, // alpha = 0.5102041 + 15702, 43679, 15378, 11618, // alpha = 0.5331318 + 15674, 43330, 15376, 11356, // alpha = 0.5565634 + 15649, 42980, 15374, 10961, // alpha = 0.5804989 + 15626, 42335, 15373, 10505, // alpha = 0.6049383 + 15605, 41456, 15371, 9914, // alpha = 0.6298816 + 15585, 39272, 15370, 9005, // alpha = 0.6553288 + 15567, 7685, 15370, 6443, // alpha = 0.68128 + 15551, 8998, 15369, 41026, // alpha = 0.7077349 + 15536, 9609, 15369, 42166, // alpha = 0.7346939 + 15522, 10084, 15368, 42785, // alpha = 0.7621567 + 15510, 10387, 15368, 43191, // alpha = 0.7901235 + 15498, 10599, 15368, 43465, // alpha = 0.8185941 + 15487, 10798, 15368, 43725, // alpha = 0.8475687 + 15478, 10987, 15368, 43968, // alpha = 0.8770471 + 15469, 11164, 15368, 44116, // alpha = 0.9070295 + 15460, 11297, 15368, 44225, // alpha = 0.9375157 + 15453, 11376, 15369, 44327, // alpha = 0.9685059 + 15446, 11450, 15369, 44422, // alpha = 1 + + // Cos (theta) = 0.9637188 + 18919, 46593, 15711, 17169, // alpha = 0.001 + 18919, 46593, 15711, 17169, // alpha = 0.001 + 18919, 46593, 15711, 17169, // alpha = 0.001007811 + 18921, 46593, 15712, 17172, // alpha = 0.002267574 + 18918, 46593, 15713, 17168, // alpha = 0.004031243 + 18922, 46593, 15713, 17172, // alpha = 0.006298816 + 18917, 46593, 15714, 17168, // alpha = 0.009070295 + 18916, 46593, 15709, 17167, // alpha = 0.01234568 + 18925, 46593, 15712, 17176, // alpha = 0.01612497 + 18923, 46593, 15710, 17175, // alpha = 0.02040816 + 18920, 46593, 15714, 17171, // alpha = 0.02519527 + 18772, 46563, 15708, 17004, // alpha = 0.03048627 + 18645, 46531, 15683, 16860, // alpha = 0.03628118 + 18530, 46503, 15658, 16727, // alpha = 0.04258 + 18422, 46480, 15640, 16605, // alpha = 0.04938272 + 18237, 46461, 15623, 16494, // alpha = 0.05668934 + 18071, 46445, 15607, 16392, // alpha = 0.06449988 + 17922, 46431, 15592, 16213, // alpha = 0.07281432 + 17791, 46419, 15576, 16048, // alpha = 0.08163266 + 17675, 46407, 15562, 15897, // alpha = 0.09095491 + 17574, 46395, 15549, 15765, // alpha = 0.1007811 + 17483, 46380, 15536, 15643, // alpha = 0.1111111 + 17396, 46363, 15524, 15534, // alpha = 0.1219451 + 17253, 46343, 15513, 15436, // alpha = 0.1332829 + 17121, 46320, 15504, 15328, // alpha = 0.1451247 + 17005, 46295, 15495, 15163, // alpha = 0.1574704 + 16899, 46266, 15487, 15011, // alpha = 0.17032 + 16803, 46235, 15479, 14870, // alpha = 0.1836735 + 16719, 46201, 15472, 14743, // alpha = 0.1975309 + 16642, 46164, 15466, 14626, // alpha = 0.2118922 + 16573, 46124, 15459, 14519, // alpha = 0.2267574 + 16511, 46082, 15453, 14420, // alpha = 0.2421265 + 16455, 45996, 15447, 14320, // alpha = 0.2579995 + 16404, 45903, 15441, 14149, // alpha = 0.2743765 + 16332, 45806, 15436, 13993, // alpha = 0.2912573 + 16248, 45705, 15430, 13844, // alpha = 0.308642 + 16172, 45602, 15424, 13706, // alpha = 0.3265306 + 16102, 45496, 15419, 13576, // alpha = 0.3449232 + 16040, 45389, 15413, 13455, // alpha = 0.3638196 + 15983, 45282, 15408, 13341, // alpha = 0.38322 + 15931, 45174, 15403, 13155, // alpha = 0.4031242 + 15883, 45067, 15398, 12951, // alpha = 0.4235324 + 15840, 44865, 15394, 12761, // alpha = 0.4444445 + 15801, 44656, 15390, 12582, // alpha = 0.4658605 + 15765, 44452, 15386, 12413, // alpha = 0.4877803 + 15731, 44253, 15383, 12221, // alpha = 0.5102041 + 15701, 44060, 15380, 11923, // alpha = 0.5331318 + 15673, 43715, 15378, 11645, // alpha = 0.5565634 + 15648, 43356, 15376, 11381, // alpha = 0.5804989 + 15624, 43012, 15374, 11007, // alpha = 0.6049383 + 15603, 42359, 15372, 10543, // alpha = 0.6298816 + 15583, 41480, 15371, 9973, // alpha = 0.6553288 + 15565, 39290, 15370, 9127, // alpha = 0.68128 + 15549, 7709, 15369, 6832, // alpha = 0.7077349 + 15534, 9025, 15369, 40895, // alpha = 0.7346939 + 15520, 9629, 15368, 42135, // alpha = 0.7621567 + 15507, 10109, 15368, 42770, // alpha = 0.7901235 + 15495, 10401, 15368, 43185, // alpha = 0.8185941 + 15485, 10615, 15368, 43467, // alpha = 0.8475687 + 15475, 10817, 15368, 43729, // alpha = 0.8770471 + 15466, 11007, 15368, 43975, // alpha = 0.9070295 + 15458, 11186, 15368, 44122, // alpha = 0.9375157 + 15450, 11309, 15368, 44230, // alpha = 0.9685059 + 15443, 11388, 15368, 44334, // alpha = 1 + + // Cos (theta) = 0.95742 + 19051, 46663, 15792, 17447, // alpha = 0.001 + 19051, 46663, 15792, 17447, // alpha = 0.001 + 19051, 46663, 15792, 17447, // alpha = 0.001007811 + 19055, 46663, 15792, 17449, // alpha = 0.002267574 + 19052, 46663, 15790, 17447, // alpha = 0.004031243 + 19053, 46663, 15792, 17448, // alpha = 0.006298816 + 19050, 46663, 15791, 17446, // alpha = 0.009070295 + 19056, 46663, 15794, 17449, // alpha = 0.01234568 + 19051, 46663, 15791, 17446, // alpha = 0.01612497 + 19052, 46663, 15791, 17447, // alpha = 0.02040816 + 19049, 46663, 15791, 17445, // alpha = 0.02519527 + 18876, 46648, 15752, 17273, // alpha = 0.03048627 + 18692, 46630, 15736, 17043, // alpha = 0.03628118 + 18554, 46611, 15710, 16870, // alpha = 0.04258 + 18437, 46594, 15682, 16722, // alpha = 0.04938272 + 18244, 46578, 15659, 16594, // alpha = 0.05668934 + 18070, 46565, 15640, 16480, // alpha = 0.06449988 + 17919, 46552, 15622, 16371, // alpha = 0.07281432 + 17785, 46540, 15607, 16190, // alpha = 0.08163266 + 17669, 46527, 15592, 16028, // alpha = 0.09095491 + 17566, 46513, 15577, 15883, // alpha = 0.1007811 + 17476, 46497, 15563, 15752, // alpha = 0.1111111 + 17386, 46479, 15550, 15637, // alpha = 0.1219451 + 17243, 46458, 15538, 15531, // alpha = 0.1332829 + 17117, 46434, 15527, 15434, // alpha = 0.1451247 + 17001, 46407, 15516, 15330, // alpha = 0.1574704 + 16898, 46377, 15506, 15168, // alpha = 0.17032 + 16803, 46343, 15497, 15018, // alpha = 0.1836735 + 16719, 46307, 15488, 14880, // alpha = 0.1975309 + 16642, 46268, 15481, 14753, // alpha = 0.2118922 + 16573, 46226, 15473, 14636, // alpha = 0.2267574 + 16511, 46181, 15466, 14529, // alpha = 0.2421265 + 16455, 46134, 15459, 14430, // alpha = 0.2579995 + 16404, 46084, 15452, 14337, // alpha = 0.2743765 + 16333, 45985, 15446, 14168, // alpha = 0.2912573 + 16249, 45878, 15439, 14009, // alpha = 0.308642 + 16173, 45769, 15432, 13860, // alpha = 0.3265306 + 16103, 45657, 15426, 13719, // alpha = 0.3449232 + 16040, 45543, 15420, 13588, // alpha = 0.3638196 + 15983, 45429, 15414, 13465, // alpha = 0.38322 + 15931, 45314, 15408, 13349, // alpha = 0.4031242 + 15883, 45200, 15403, 13169, // alpha = 0.4235324 + 15840, 45087, 15398, 12963, // alpha = 0.4444445 + 15800, 44897, 15394, 12771, // alpha = 0.4658605 + 15764, 44680, 15389, 12589, // alpha = 0.4877803 + 15731, 44469, 15386, 12418, // alpha = 0.5102041 + 15700, 44264, 15382, 12231, // alpha = 0.5331318 + 15673, 44065, 15380, 11929, // alpha = 0.5565634 + 15647, 43717, 15377, 11649, // alpha = 0.5804989 + 15623, 43352, 15375, 11383, // alpha = 0.6049383 + 15602, 42995, 15373, 11007, // alpha = 0.6298816 + 15582, 42328, 15372, 10544, // alpha = 0.6553288 + 15564, 41400, 15371, 9973, // alpha = 0.68128 + 15547, 38915, 15370, 9101, // alpha = 0.7077349 + 15531, 7920, 15369, 6690, // alpha = 0.7346939 + 15518, 9140, 15368, 40991, // alpha = 0.7621567 + 15505, 9690, 15368, 42169, // alpha = 0.7901235 + 15493, 10174, 15367, 42805, // alpha = 0.8185941 + 15482, 10435, 15367, 43206, // alpha = 0.8475687 + 15472, 10651, 15367, 43489, // alpha = 0.8770471 + 15463, 10853, 15367, 43757, // alpha = 0.9070295 + 15454, 11045, 15367, 44007, // alpha = 0.9375157 + 15447, 11224, 15367, 44138, // alpha = 0.9685059 + 15440, 11329, 15368, 44250, // alpha = 1 + + // Cos (theta) = 0.9506173 + 19211, 46680, 15927, 17640, // alpha = 0.001 + 19211, 46680, 15927, 17640, // alpha = 0.001 + 19211, 46680, 15927, 17640, // alpha = 0.001007811 + 19210, 46680, 15928, 17639, // alpha = 0.002267574 + 19208, 46680, 15926, 17638, // alpha = 0.004031243 + 19210, 46680, 15927, 17640, // alpha = 0.006298816 + 19209, 46680, 15928, 17639, // alpha = 0.009070295 + 19210, 46680, 15926, 17639, // alpha = 0.01234568 + 19206, 46680, 15925, 17637, // alpha = 0.01612497 + 19209, 46680, 15928, 17639, // alpha = 0.02040816 + 19212, 46680, 15928, 17640, // alpha = 0.02519527 + 19003, 46694, 15847, 17502, // alpha = 0.03048627 + 18787, 46702, 15791, 17307, // alpha = 0.03628118 + 18599, 46703, 15761, 17051, // alpha = 0.04258 + 18457, 46699, 15733, 16858, // alpha = 0.04938272 + 18262, 46692, 15703, 16705, // alpha = 0.05668934 + 18075, 46683, 15679, 16573, // alpha = 0.06449988 + 17920, 46673, 15655, 16461, // alpha = 0.07281432 + 17783, 46662, 15637, 16338, // alpha = 0.08163266 + 17663, 46648, 15621, 16159, // alpha = 0.09095491 + 17562, 46633, 15606, 16004, // alpha = 0.1007811 + 17471, 46616, 15591, 15865, // alpha = 0.1111111 + 17377, 46597, 15577, 15740, // alpha = 0.1219451 + 17237, 46574, 15564, 15628, // alpha = 0.1332829 + 17112, 46549, 15551, 15525, // alpha = 0.1451247 + 16997, 46520, 15539, 15429, // alpha = 0.1574704 + 16896, 46488, 15528, 15326, // alpha = 0.17032 + 16803, 46452, 15516, 15166, // alpha = 0.1836735 + 16719, 46414, 15507, 15019, // alpha = 0.1975309 + 16643, 46372, 15497, 14882, // alpha = 0.2118922 + 16575, 46328, 15489, 14757, // alpha = 0.2267574 + 16512, 46280, 15480, 14640, // alpha = 0.2421265 + 16456, 46230, 15472, 14534, // alpha = 0.2579995 + 16405, 46177, 15464, 14434, // alpha = 0.2743765 + 16334, 46123, 15457, 14341, // alpha = 0.2912573 + 16250, 46052, 15449, 14175, // alpha = 0.308642 + 16175, 45936, 15442, 14015, // alpha = 0.3265306 + 16105, 45817, 15434, 13864, // alpha = 0.3449232 + 16042, 45697, 15428, 13723, // alpha = 0.3638196 + 15984, 45575, 15421, 13591, // alpha = 0.38322 + 15932, 45454, 15414, 13466, // alpha = 0.4031242 + 15884, 45334, 15408, 13349, // alpha = 0.4235324 + 15840, 45214, 15403, 13167, // alpha = 0.4444445 + 15800, 45097, 15398, 12961, // alpha = 0.4658605 + 15764, 44908, 15393, 12766, // alpha = 0.4877803 + 15730, 44684, 15389, 12584, // alpha = 0.5102041 + 15700, 44467, 15385, 12413, // alpha = 0.5331318 + 15672, 44257, 15382, 12216, // alpha = 0.5565634 + 15646, 44054, 15379, 11914, // alpha = 0.5804989 + 15622, 43689, 15377, 11632, // alpha = 0.6049383 + 15600, 43318, 15374, 11366, // alpha = 0.6298816 + 15580, 42919, 15373, 10971, // alpha = 0.6553288 + 15562, 42244, 15371, 10503, // alpha = 0.68128 + 15545, 41222, 15370, 9888, // alpha = 0.7077349 + 15529, 36959, 15369, 8934, // alpha = 0.7346939 + 15515, 8250, 15368, 5731, // alpha = 0.7621567 + 15502, 9277, 15368, 41178, // alpha = 0.7901235 + 15490, 9792, 15367, 42267, // alpha = 0.8185941 + 15479, 10259, 15367, 42912, // alpha = 0.8475687 + 15469, 10488, 15367, 43262, // alpha = 0.8770471 + 15460, 10704, 15367, 43546, // alpha = 0.9070295 + 15451, 10907, 15367, 43815, // alpha = 0.9375157 + 15444, 11098, 15367, 44050, // alpha = 0.9685059 + 15436, 11271, 15367, 44167, // alpha = 1 + + // Cos (theta) = 0.9433107 + 19244, 46742, 16028, 17761, // alpha = 0.001 + 19244, 46742, 16028, 17761, // alpha = 0.001 + 19244, 46742, 16028, 17761, // alpha = 0.001007811 + 19244, 46742, 16027, 17761, // alpha = 0.002267574 + 19241, 46742, 16027, 17759, // alpha = 0.004031243 + 19241, 46742, 16028, 17758, // alpha = 0.006298816 + 19241, 46742, 16029, 17759, // alpha = 0.009070295 + 19240, 46742, 16027, 17758, // alpha = 0.01234568 + 19243, 46742, 16026, 17760, // alpha = 0.01612497 + 19240, 46742, 16026, 17757, // alpha = 0.02040816 + 19241, 46742, 16027, 17758, // alpha = 0.02519527 + 19029, 46763, 15923, 17607, // alpha = 0.03048627 + 18814, 46783, 15844, 17452, // alpha = 0.03628118 + 18623, 46799, 15804, 17215, // alpha = 0.04258 + 18473, 46807, 15774, 16994, // alpha = 0.04938272 + 18273, 46809, 15743, 16815, // alpha = 0.05668934 + 18078, 46805, 15716, 16667, // alpha = 0.06449988 + 17917, 46797, 15692, 16542, // alpha = 0.07281432 + 17780, 46786, 15671, 16435, // alpha = 0.08163266 + 17661, 46772, 15651, 16298, // alpha = 0.09095491 + 17558, 46756, 15635, 16130, // alpha = 0.1007811 + 17468, 46738, 15619, 15979, // alpha = 0.1111111 + 17369, 46716, 15604, 15844, // alpha = 0.1219451 + 17229, 46692, 15590, 15724, // alpha = 0.1332829 + 17105, 46665, 15576, 15615, // alpha = 0.1451247 + 16994, 46635, 15563, 15515, // alpha = 0.1574704 + 16893, 46600, 15551, 15423, // alpha = 0.17032 + 16802, 46563, 15538, 15317, // alpha = 0.1836735 + 16720, 46522, 15526, 15160, // alpha = 0.1975309 + 16644, 46478, 15516, 15014, // alpha = 0.2118922 + 16575, 46430, 15506, 14879, // alpha = 0.2267574 + 16513, 46380, 15495, 14754, // alpha = 0.2421265 + 16457, 46327, 15486, 14639, // alpha = 0.2579995 + 16406, 46271, 15477, 14532, // alpha = 0.2743765 + 16336, 46213, 15468, 14432, // alpha = 0.2912573 + 16252, 46153, 15460, 14340, // alpha = 0.308642 + 16176, 46092, 15452, 14172, // alpha = 0.3265306 + 16106, 45978, 15443, 14010, // alpha = 0.3449232 + 16043, 45851, 15436, 13859, // alpha = 0.3638196 + 15985, 45723, 15428, 13717, // alpha = 0.38322 + 15933, 45595, 15421, 13584, // alpha = 0.4031242 + 15884, 45468, 15414, 13459, // alpha = 0.4235324 + 15841, 45342, 15408, 13341, // alpha = 0.4444445 + 15801, 45218, 15402, 13151, // alpha = 0.4658605 + 15764, 45096, 15397, 12943, // alpha = 0.4877803 + 15730, 44900, 15392, 12750, // alpha = 0.5102041 + 15699, 44670, 15388, 12566, // alpha = 0.5331318 + 15671, 44448, 15384, 12394, // alpha = 0.5565634 + 15645, 44234, 15381, 12180, // alpha = 0.5804989 + 15621, 44027, 15378, 11879, // alpha = 0.6049383 + 15599, 43634, 15376, 11595, // alpha = 0.6298816 + 15579, 43259, 15373, 11329, // alpha = 0.6553288 + 15560, 42796, 15372, 10898, // alpha = 0.68128 + 15543, 42117, 15370, 10432, // alpha = 0.7077349 + 15527, 40961, 15369, 9743, // alpha = 0.7346939 + 15513, 5654, 15368, 8631, // alpha = 0.7621567 + 15500, 8517, 15368, 37332, // alpha = 0.7901235 + 15488, 9412, 15367, 41491, // alpha = 0.8185941 + 15477, 9927, 15367, 42422, // alpha = 0.8475687 + 15466, 10326, 15366, 43036, // alpha = 0.8770471 + 15457, 10555, 15366, 43340, // alpha = 0.9070295 + 15448, 10771, 15366, 43627, // alpha = 0.9375157 + 15440, 10974, 15366, 43896, // alpha = 0.9685059 + 15433, 11165, 15366, 44089, // alpha = 1 + + // Cos (theta) = 0.9355001 + 19134, 46877, 16059, 17775, // alpha = 0.001 + 19134, 46877, 16059, 17775, // alpha = 0.001 + 19134, 46877, 16059, 17775, // alpha = 0.001007811 + 19139, 46877, 16062, 17778, // alpha = 0.002267574 + 19133, 46877, 16053, 17774, // alpha = 0.004031243 + 19134, 46877, 16060, 17774, // alpha = 0.006298816 + 19136, 46877, 16062, 17776, // alpha = 0.009070295 + 19134, 46877, 16059, 17775, // alpha = 0.01234568 + 19136, 46877, 16061, 17777, // alpha = 0.01612497 + 19135, 46877, 16059, 17776, // alpha = 0.02040816 + 19135, 46877, 16059, 17776, // alpha = 0.02519527 + 18965, 46886, 15961, 17647, // alpha = 0.03048627 + 18784, 46901, 15885, 17506, // alpha = 0.03628118 + 18616, 46917, 15836, 17341, // alpha = 0.04258 + 18466, 46929, 15808, 17100, // alpha = 0.04938272 + 18263, 46935, 15782, 16910, // alpha = 0.05668934 + 18070, 46933, 15751, 16755, // alpha = 0.06449988 + 17911, 46926, 15726, 16623, // alpha = 0.07281432 + 17773, 46914, 15703, 16508, // alpha = 0.08163266 + 17656, 46899, 15683, 16408, // alpha = 0.09095491 + 17554, 46882, 15665, 16254, // alpha = 0.1007811 + 17465, 46861, 15648, 16095, // alpha = 0.1111111 + 17366, 46838, 15632, 15954, // alpha = 0.1219451 + 17224, 46813, 15617, 15824, // alpha = 0.1332829 + 17102, 46783, 15602, 15708, // alpha = 0.1451247 + 16990, 46751, 15588, 15600, // alpha = 0.1574704 + 16891, 46715, 15574, 15504, // alpha = 0.17032 + 16801, 46675, 15561, 15414, // alpha = 0.1836735 + 16719, 46631, 15549, 15302, // alpha = 0.1975309 + 16644, 46585, 15536, 15146, // alpha = 0.2118922 + 16576, 46534, 15524, 15002, // alpha = 0.2267574 + 16514, 46481, 15512, 14870, // alpha = 0.2421265 + 16458, 46425, 15502, 14745, // alpha = 0.2579995 + 16407, 46366, 15491, 14632, // alpha = 0.2743765 + 16337, 46305, 15481, 14524, // alpha = 0.2912573 + 16253, 46241, 15472, 14425, // alpha = 0.308642 + 16177, 46176, 15462, 14331, // alpha = 0.3265306 + 16107, 46110, 15453, 14157, // alpha = 0.3449232 + 16044, 46006, 15445, 13996, // alpha = 0.3638196 + 15986, 45871, 15436, 13845, // alpha = 0.38322 + 15934, 45736, 15428, 13703, // alpha = 0.4031242 + 15885, 45602, 15421, 13570, // alpha = 0.4235324 + 15841, 45469, 15413, 13445, // alpha = 0.4444445 + 15801, 45339, 15407, 13328, // alpha = 0.4658605 + 15764, 45211, 15401, 13121, // alpha = 0.4877803 + 15730, 45086, 15396, 12914, // alpha = 0.5102041 + 15699, 44874, 15391, 12720, // alpha = 0.5331318 + 15671, 44640, 15387, 12538, // alpha = 0.5565634 + 15644, 44415, 15383, 12366, // alpha = 0.5804989 + 15620, 44198, 15380, 12124, // alpha = 0.6049383 + 15598, 43950, 15377, 11824, // alpha = 0.6298816 + 15577, 43554, 15375, 11542, // alpha = 0.6553288 + 15559, 43177, 15373, 11278, // alpha = 0.68128 + 15541, 42630, 15371, 10792, // alpha = 0.7077349 + 15525, 41915, 15370, 10327, // alpha = 0.7346939 + 15511, 40291, 15369, 9536, // alpha = 0.7621567 + 15497, 7206, 15368, 8215, // alpha = 0.7901235 + 15485, 8852, 15367, 39893, // alpha = 0.8185941 + 15474, 9579, 15366, 41896, // alpha = 0.8475687 + 15464, 10093, 15366, 42622, // alpha = 0.8770471 + 15454, 10409, 15366, 43140, // alpha = 0.9070295 + 15445, 10637, 15366, 43442, // alpha = 0.9375157 + 15437, 10852, 15366, 43728, // alpha = 0.9685059 + 15430, 11054, 15366, 43996, // alpha = 1 + + // Cos (theta) = 0.9271857 + 18992, 47043, 16069, 17748, // alpha = 0.001 + 18992, 47043, 16069, 17748, // alpha = 0.001 + 18992, 47043, 16069, 17748, // alpha = 0.001007811 + 18990, 47043, 16070, 17746, // alpha = 0.002267574 + 18987, 47043, 16068, 17745, // alpha = 0.004031243 + 18989, 47043, 16068, 17747, // alpha = 0.006298816 + 18986, 47043, 16067, 17744, // alpha = 0.009070295 + 18992, 47043, 16071, 17749, // alpha = 0.01234568 + 18990, 47043, 16070, 17747, // alpha = 0.01612497 + 18992, 47043, 16071, 17748, // alpha = 0.02040816 + 18988, 47043, 16069, 17745, // alpha = 0.02519527 + 18859, 47049, 15986, 17642, // alpha = 0.03048627 + 18715, 47057, 15916, 17525, // alpha = 0.03628118 + 18575, 47065, 15864, 17406, // alpha = 0.04258 + 18446, 47072, 15837, 17187, // alpha = 0.04938272 + 18238, 47073, 15810, 16996, // alpha = 0.05668934 + 18050, 47069, 15784, 16833, // alpha = 0.06449988 + 17896, 47060, 15759, 16697, // alpha = 0.07281432 + 17765, 47047, 15736, 16579, // alpha = 0.08163266 + 17651, 47030, 15714, 16476, // alpha = 0.09095491 + 17551, 47010, 15696, 16383, // alpha = 0.1007811 + 17463, 46988, 15677, 16217, // alpha = 0.1111111 + 17361, 46963, 15661, 16064, // alpha = 0.1219451 + 17222, 46935, 15645, 15927, // alpha = 0.1332829 + 17098, 46904, 15629, 15803, // alpha = 0.1451247 + 16989, 46869, 15614, 15690, // alpha = 0.1574704 + 16889, 46830, 15600, 15586, // alpha = 0.17032 + 16800, 46788, 15585, 15490, // alpha = 0.1836735 + 16719, 46742, 15571, 15402, // alpha = 0.1975309 + 16644, 46693, 15557, 15280, // alpha = 0.2118922 + 16577, 46639, 15544, 15129, // alpha = 0.2267574 + 16516, 46583, 15531, 14987, // alpha = 0.2421265 + 16459, 46523, 15519, 14855, // alpha = 0.2579995 + 16408, 46461, 15507, 14731, // alpha = 0.2743765 + 16340, 46396, 15496, 14618, // alpha = 0.2912573 + 16255, 46330, 15485, 14512, // alpha = 0.308642 + 16179, 46261, 15474, 14413, // alpha = 0.3265306 + 16109, 46192, 15464, 14308, // alpha = 0.3449232 + 16046, 46121, 15454, 14135, // alpha = 0.3638196 + 15988, 46020, 15445, 13974, // alpha = 0.38322 + 15935, 45878, 15436, 13823, // alpha = 0.4031242 + 15886, 45737, 15427, 13681, // alpha = 0.4235324 + 15842, 45597, 15420, 13548, // alpha = 0.4444445 + 15801, 45460, 15413, 13423, // alpha = 0.4658605 + 15764, 45325, 15406, 13301, // alpha = 0.4877803 + 15730, 45194, 15400, 13080, // alpha = 0.5102041 + 15699, 45067, 15394, 12874, // alpha = 0.5331318 + 15670, 44832, 15390, 12681, // alpha = 0.5565634 + 15644, 44595, 15385, 12499, // alpha = 0.5804989 + 15619, 44367, 15382, 12329, // alpha = 0.6049383 + 15597, 44149, 15379, 12052, // alpha = 0.6298816 + 15576, 43849, 15376, 11752, // alpha = 0.6553288 + 15557, 43452, 15374, 11471, // alpha = 0.68128 + 15540, 43074, 15372, 11152, // alpha = 0.7077349 + 15524, 42423, 15370, 10658, // alpha = 0.7346939 + 15509, 41503, 15369, 10148, // alpha = 0.7621567 + 15495, 39009, 15368, 9268, // alpha = 0.7901235 + 15483, 8017, 15367, 7193, // alpha = 0.8185941 + 15471, 9235, 15366, 40963, // alpha = 0.8475687 + 15461, 9777, 15366, 42201, // alpha = 0.8770471 + 15451, 10264, 15365, 42882, // alpha = 0.9070295 + 15442, 10505, 15365, 43264, // alpha = 0.9375157 + 15434, 10732, 15365, 43566, // alpha = 0.9685059 + 15427, 10946, 15365, 43850, // alpha = 1 + + // Cos (theta) = 0.9183673 + 18879, 47169, 16097, 17733, // alpha = 0.001 + 18879, 47169, 16097, 17733, // alpha = 0.001 + 18879, 47169, 16097, 17733, // alpha = 0.001007811 + 18877, 47169, 16094, 17731, // alpha = 0.002267574 + 18876, 47169, 16094, 17731, // alpha = 0.004031243 + 18878, 47169, 16096, 17733, // alpha = 0.006298816 + 18880, 47169, 16096, 17734, // alpha = 0.009070295 + 18876, 47169, 16098, 17731, // alpha = 0.01234568 + 18877, 47169, 16094, 17732, // alpha = 0.01612497 + 18876, 47169, 16096, 17730, // alpha = 0.02040816 + 18878, 47169, 16094, 17732, // alpha = 0.02519527 + 18763, 47171, 16009, 17636, // alpha = 0.03048627 + 18641, 47171, 15947, 17530, // alpha = 0.03628118 + 18527, 47170, 15899, 17430, // alpha = 0.04258 + 18400, 47167, 15870, 17252, // alpha = 0.04938272 + 18204, 47164, 15842, 17072, // alpha = 0.05668934 + 18030, 47158, 15819, 16911, // alpha = 0.06449988 + 17885, 47151, 15794, 16774, // alpha = 0.07281432 + 17758, 47143, 15770, 16653, // alpha = 0.08163266 + 17646, 47133, 15748, 16545, // alpha = 0.09095491 + 17547, 47123, 15729, 16447, // alpha = 0.1007811 + 17460, 47110, 15709, 16335, // alpha = 0.1111111 + 17361, 47090, 15691, 16178, // alpha = 0.1219451 + 17223, 47060, 15674, 16034, // alpha = 0.1332829 + 17098, 47026, 15658, 15901, // alpha = 0.1451247 + 16987, 46989, 15642, 15780, // alpha = 0.1574704 + 16888, 46948, 15627, 15670, // alpha = 0.17032 + 16799, 46903, 15611, 15568, // alpha = 0.1836735 + 16719, 46854, 15595, 15476, // alpha = 0.1975309 + 16646, 46802, 15580, 15388, // alpha = 0.2118922 + 16578, 46746, 15565, 15255, // alpha = 0.2267574 + 16516, 46686, 15551, 15104, // alpha = 0.2421265 + 16461, 46623, 15537, 14965, // alpha = 0.2579995 + 16410, 46557, 15524, 14835, // alpha = 0.2743765 + 16342, 46489, 15511, 14713, // alpha = 0.2912573 + 16258, 46419, 15499, 14601, // alpha = 0.308642 + 16180, 46347, 15487, 14495, // alpha = 0.3265306 + 16111, 46273, 15476, 14397, // alpha = 0.3449232 + 16047, 46199, 15464, 14276, // alpha = 0.3638196 + 15989, 46125, 15454, 14104, // alpha = 0.38322 + 15936, 46020, 15444, 13944, // alpha = 0.4031242 + 15888, 45872, 15435, 13794, // alpha = 0.4235324 + 15843, 45726, 15426, 13653, // alpha = 0.4444445 + 15802, 45582, 15418, 13520, // alpha = 0.4658605 + 15765, 45440, 15411, 13396, // alpha = 0.4877803 + 15730, 45303, 15404, 13247, // alpha = 0.5102041 + 15699, 45169, 15398, 13028, // alpha = 0.5331318 + 15670, 45024, 15393, 12823, // alpha = 0.5565634 + 15643, 44775, 15388, 12631, // alpha = 0.5804989 + 15618, 44536, 15384, 12451, // alpha = 0.6049383 + 15596, 44307, 15380, 12275, // alpha = 0.6298816 + 15575, 44088, 15377, 11959, // alpha = 0.6553288 + 15556, 43726, 15375, 11664, // alpha = 0.68128 + 15538, 43328, 15372, 11386, // alpha = 0.7077349 + 15522, 42895, 15371, 10983, // alpha = 0.7346939 + 15507, 42179, 15369, 10492, // alpha = 0.7621567 + 15493, 41021, 15368, 9822, // alpha = 0.7901235 + 15480, 5665, 15367, 8696, // alpha = 0.8185941 + 15469, 8574, 15366, 37631, // alpha = 0.8475687 + 15458, 9466, 15365, 41578, // alpha = 0.8770471 + 15449, 10005, 15365, 42501, // alpha = 0.9070295 + 15440, 10376, 15365, 43094, // alpha = 0.9375157 + 15431, 10616, 15364, 43413, // alpha = 0.9685059 + 15424, 10841, 15364, 43711, // alpha = 1 + + // Cos (theta) = 0.9090451 + 18810, 47281, 16150, 17750, // alpha = 0.001 + 18810, 47281, 16150, 17750, // alpha = 0.001 + 18810, 47281, 16150, 17750, // alpha = 0.001007811 + 18813, 47281, 16153, 17752, // alpha = 0.002267574 + 18811, 47281, 16149, 17751, // alpha = 0.004031243 + 18812, 47281, 16150, 17751, // alpha = 0.006298816 + 18811, 47281, 16149, 17750, // alpha = 0.009070295 + 18809, 47281, 16149, 17748, // alpha = 0.01234568 + 18812, 47281, 16151, 17751, // alpha = 0.01612497 + 18810, 47281, 16151, 17750, // alpha = 0.02040816 + 18810, 47281, 16148, 17749, // alpha = 0.02519527 + 18701, 47276, 16062, 17651, // alpha = 0.03048627 + 18590, 47269, 15992, 17550, // alpha = 0.03628118 + 18491, 47260, 15944, 17458, // alpha = 0.04258 + 18355, 47250, 15906, 17324, // alpha = 0.04938272 + 18176, 47241, 15883, 17150, // alpha = 0.05668934 + 18020, 47232, 15857, 16998, // alpha = 0.06449988 + 17875, 47222, 15834, 16854, // alpha = 0.07281432 + 17752, 47212, 15809, 16729, // alpha = 0.08163266 + 17643, 47202, 15785, 16616, // alpha = 0.09095491 + 17546, 47190, 15762, 16514, // alpha = 0.1007811 + 17460, 47176, 15744, 16422, // alpha = 0.1111111 + 17359, 47162, 15724, 16295, // alpha = 0.1219451 + 17221, 47145, 15705, 16141, // alpha = 0.1332829 + 17098, 47127, 15689, 16001, // alpha = 0.1451247 + 16988, 47108, 15671, 15873, // alpha = 0.1574704 + 16888, 47067, 15654, 15756, // alpha = 0.17032 + 16799, 47020, 15637, 15648, // alpha = 0.1836735 + 16719, 46968, 15621, 15550, // alpha = 0.1975309 + 16646, 46912, 15605, 15458, // alpha = 0.2118922 + 16580, 46853, 15588, 15372, // alpha = 0.2267574 + 16518, 46790, 15573, 15226, // alpha = 0.2421265 + 16462, 46724, 15557, 15077, // alpha = 0.2579995 + 16412, 46654, 15542, 14940, // alpha = 0.2743765 + 16345, 46582, 15528, 14810, // alpha = 0.2912573 + 16261, 46508, 15514, 14690, // alpha = 0.308642 + 16183, 46433, 15501, 14578, // alpha = 0.3265306 + 16113, 46356, 15488, 14474, // alpha = 0.3449232 + 16049, 46278, 15476, 14376, // alpha = 0.3638196 + 15991, 46200, 15465, 14235, // alpha = 0.38322 + 15938, 46121, 15453, 14065, // alpha = 0.4031242 + 15889, 46008, 15443, 13906, // alpha = 0.4235324 + 15844, 45854, 15433, 13756, // alpha = 0.4444445 + 15803, 45703, 15425, 13616, // alpha = 0.4658605 + 15765, 45555, 15416, 13485, // alpha = 0.4877803 + 15731, 45411, 15409, 13362, // alpha = 0.5102041 + 15699, 45271, 15402, 13183, // alpha = 0.5331318 + 15670, 45136, 15396, 12965, // alpha = 0.5565634 + 15642, 44955, 15391, 12763, // alpha = 0.5804989 + 15618, 44704, 15387, 12573, // alpha = 0.6049383 + 15595, 44463, 15382, 12394, // alpha = 0.6298816 + 15574, 44234, 15379, 12167, // alpha = 0.6553288 + 15554, 43998, 15376, 11854, // alpha = 0.68128 + 15536, 43581, 15374, 11559, // alpha = 0.7077349 + 15520, 43185, 15371, 11285, // alpha = 0.7346939 + 15505, 42611, 15370, 10785, // alpha = 0.7621567 + 15491, 41815, 15368, 10296, // alpha = 0.7901235 + 15478, 39978, 15367, 9442, // alpha = 0.8185941 + 15466, 7621, 15366, 7711, // alpha = 0.8475687 + 15456, 9107, 15365, 40589, // alpha = 0.8770471 + 15446, 9728, 15365, 42139, // alpha = 0.9070295 + 15437, 10251, 15364, 42855, // alpha = 0.9375157 + 15428, 10503, 15364, 43266, // alpha = 0.9685059 + 15421, 10740, 15364, 43582, // alpha = 1 + + // Cos (theta) = 0.8992189 + 18898, 47392, 16073, 17924, // alpha = 0.001 + 18898, 47392, 16073, 17924, // alpha = 0.001 + 18898, 47392, 16073, 17924, // alpha = 0.001007811 + 18898, 47392, 16071, 17924, // alpha = 0.002267574 + 18896, 47392, 16071, 17922, // alpha = 0.004031243 + 18895, 47392, 16071, 17921, // alpha = 0.006298816 + 18895, 47392, 16071, 17922, // alpha = 0.009070295 + 18895, 47392, 16072, 17921, // alpha = 0.01234568 + 18895, 47392, 16072, 17921, // alpha = 0.01612497 + 18896, 47392, 16071, 17922, // alpha = 0.02040816 + 18895, 47392, 16070, 17922, // alpha = 0.02519527 + 18684, 47377, 16142, 17708, // alpha = 0.03048627 + 18574, 47360, 16054, 17602, // alpha = 0.03628118 + 18474, 47344, 16002, 17504, // alpha = 0.04258 + 18333, 47329, 15957, 17412, // alpha = 0.04938272 + 18163, 47316, 15930, 17243, // alpha = 0.05668934 + 18009, 47305, 15901, 17082, // alpha = 0.06449988 + 17873, 47294, 15877, 16940, // alpha = 0.07281432 + 17749, 47283, 15852, 16808, // alpha = 0.08163266 + 17642, 47271, 15827, 16690, // alpha = 0.09095491 + 17545, 47258, 15803, 16583, // alpha = 0.1007811 + 17460, 47243, 15782, 16486, // alpha = 0.1111111 + 17358, 47228, 15761, 16398, // alpha = 0.1219451 + 17221, 47210, 15740, 16251, // alpha = 0.1332829 + 17099, 47191, 15721, 16104, // alpha = 0.1451247 + 16989, 47170, 15703, 15969, // alpha = 0.1574704 + 16890, 47146, 15684, 15845, // alpha = 0.17032 + 16801, 47121, 15666, 15731, // alpha = 0.1836735 + 16721, 47083, 15649, 15626, // alpha = 0.1975309 + 16647, 47024, 15631, 15528, // alpha = 0.2118922 + 16581, 46962, 15613, 15438, // alpha = 0.2267574 + 16520, 46895, 15596, 15347, // alpha = 0.2421265 + 16465, 46825, 15579, 15193, // alpha = 0.2579995 + 16413, 46752, 15562, 15045, // alpha = 0.2743765 + 16349, 46676, 15546, 14908, // alpha = 0.2912573 + 16262, 46599, 15530, 14780, // alpha = 0.308642 + 16186, 46519, 15516, 14662, // alpha = 0.3265306 + 16116, 46438, 15502, 14552, // alpha = 0.3449232 + 16052, 46357, 15488, 14448, // alpha = 0.3638196 + 15994, 46275, 15475, 14352, // alpha = 0.38322 + 15940, 46193, 15463, 14187, // alpha = 0.4031242 + 15890, 46112, 15452, 14019, // alpha = 0.4235324 + 15845, 45983, 15442, 13862, // alpha = 0.4444445 + 15804, 45825, 15432, 13714, // alpha = 0.4658605 + 15765, 45670, 15423, 13576, // alpha = 0.4877803 + 15731, 45520, 15415, 13446, // alpha = 0.5102041 + 15699, 45373, 15407, 13325, // alpha = 0.5331318 + 15669, 45232, 15401, 13109, // alpha = 0.5565634 + 15642, 45095, 15395, 12895, // alpha = 0.5804989 + 15617, 44872, 15390, 12694, // alpha = 0.6049383 + 15594, 44620, 15385, 12507, // alpha = 0.6298816 + 15572, 44380, 15381, 12331, // alpha = 0.6553288 + 15553, 44151, 15378, 12044, // alpha = 0.68128 + 15535, 43832, 15375, 11734, // alpha = 0.7077349 + 15518, 43417, 15372, 11443, // alpha = 0.7346939 + 15503, 43024, 15370, 11077, // alpha = 0.7621567 + 15489, 42294, 15369, 10567, // alpha = 0.7901235 + 15476, 41193, 15367, 9926, // alpha = 0.8185941 + 15464, 4310, 15366, 8826, // alpha = 0.8475687 + 15453, 8505, 15365, 36107, // alpha = 0.8770471 + 15443, 9455, 15364, 41574, // alpha = 0.9070295 + 15434, 10016, 15364, 42533, // alpha = 0.9375157 + 15426, 10392, 15364, 43124, // alpha = 0.9685059 + 15418, 10641, 15363, 43457, // alpha = 1 + + // Cos (theta) = 0.8888889 + 18949, 47468, 16178, 18067, // alpha = 0.001 + 18949, 47468, 16178, 18067, // alpha = 0.001 + 18949, 47468, 16178, 18067, // alpha = 0.001007811 + 18951, 47468, 16181, 18068, // alpha = 0.002267574 + 18951, 47468, 16184, 18068, // alpha = 0.004031243 + 18951, 47468, 16183, 18068, // alpha = 0.006298816 + 18951, 47468, 16182, 18067, // alpha = 0.009070295 + 18952, 47468, 16182, 18069, // alpha = 0.01234568 + 18953, 47468, 16184, 18070, // alpha = 0.01612497 + 18953, 47468, 16183, 18071, // alpha = 0.02040816 + 18953, 47468, 16183, 18070, // alpha = 0.02519527 + 18798, 47450, 16112, 17910, // alpha = 0.03048627 + 18605, 47431, 16143, 17704, // alpha = 0.03628118 + 18494, 47415, 16072, 17589, // alpha = 0.04258 + 18350, 47400, 16023, 17479, // alpha = 0.04938272 + 18174, 47388, 15981, 17362, // alpha = 0.05668934 + 18015, 47376, 15951, 17187, // alpha = 0.06449988 + 17874, 47365, 15925, 17031, // alpha = 0.07281432 + 17751, 47353, 15899, 16892, // alpha = 0.08163266 + 17641, 47341, 15873, 16765, // alpha = 0.09095491 + 17545, 47327, 15847, 16654, // alpha = 0.1007811 + 17460, 47312, 15823, 16552, // alpha = 0.1111111 + 17358, 47295, 15800, 16458, // alpha = 0.1219451 + 17224, 47276, 15777, 16365, // alpha = 0.1332829 + 17100, 47255, 15756, 16209, // alpha = 0.1451247 + 16991, 47233, 15737, 16067, // alpha = 0.1574704 + 16891, 47208, 15716, 15936, // alpha = 0.17032 + 16804, 47181, 15697, 15816, // alpha = 0.1836735 + 16723, 47152, 15677, 15705, // alpha = 0.1975309 + 16649, 47121, 15659, 15601, // alpha = 0.2118922 + 16583, 47071, 15639, 15505, // alpha = 0.2267574 + 16522, 47001, 15620, 15417, // alpha = 0.2421265 + 16466, 46928, 15602, 15306, // alpha = 0.2579995 + 16415, 46851, 15583, 15152, // alpha = 0.2743765 + 16352, 46771, 15566, 15007, // alpha = 0.2912573 + 16267, 46690, 15548, 14873, // alpha = 0.308642 + 16189, 46606, 15532, 14747, // alpha = 0.3265306 + 16119, 46521, 15516, 14629, // alpha = 0.3449232 + 16054, 46436, 15502, 14520, // alpha = 0.3638196 + 15995, 46350, 15488, 14419, // alpha = 0.38322 + 15940, 46265, 15475, 14311, // alpha = 0.4031242 + 15891, 46180, 15462, 14133, // alpha = 0.4235324 + 15846, 46096, 15451, 13967, // alpha = 0.4444445 + 15804, 45947, 15440, 13812, // alpha = 0.4658605 + 15766, 45785, 15430, 13666, // alpha = 0.4877803 + 15731, 45628, 15421, 13530, // alpha = 0.5102041 + 15698, 45475, 15413, 13402, // alpha = 0.5331318 + 15669, 45327, 15405, 13251, // alpha = 0.5565634 + 15642, 45185, 15399, 13027, // alpha = 0.5804989 + 15616, 45039, 15393, 12816, // alpha = 0.6049383 + 15593, 44776, 15388, 12619, // alpha = 0.6298816 + 15571, 44525, 15383, 12433, // alpha = 0.6553288 + 15551, 44285, 15380, 12233, // alpha = 0.68128 + 15533, 44057, 15376, 11907, // alpha = 0.7077349 + 15517, 43647, 15373, 11600, // alpha = 0.7346939 + 15501, 43236, 15371, 11314, // alpha = 0.7621567 + 15487, 42682, 15369, 10824, // alpha = 0.7901235 + 15474, 41903, 15367, 10319, // alpha = 0.8185941 + 15462, 40052, 15366, 9449, // alpha = 0.8475687 + 15451, 7644, 15365, 7589, // alpha = 0.8770471 + 15440, 9164, 15364, 40846, // alpha = 0.9070295 + 15431, 9778, 15364, 42226, // alpha = 0.9375157 + 15423, 10286, 15363, 42973, // alpha = 0.9685059 + 15415, 10547, 15363, 43338, // alpha = 1 + + // Cos (theta) = 0.8780549 + 19028, 47485, 16299, 18252, // alpha = 0.001 + 19028, 47485, 16299, 18252, // alpha = 0.001 + 19028, 47485, 16299, 18252, // alpha = 0.001007811 + 19030, 47485, 16302, 18253, // alpha = 0.002267574 + 19027, 47485, 16300, 18250, // alpha = 0.004031243 + 19028, 47485, 16300, 18252, // alpha = 0.006298816 + 19027, 47485, 16296, 18250, // alpha = 0.009070295 + 19030, 47485, 16301, 18253, // alpha = 0.01234568 + 19027, 47485, 16301, 18250, // alpha = 0.01612497 + 19030, 47485, 16300, 18254, // alpha = 0.02040816 + 19030, 47485, 16300, 18254, // alpha = 0.02519527 + 18861, 47482, 16207, 18069, // alpha = 0.03048627 + 18651, 47477, 16223, 17830, // alpha = 0.03628118 + 18520, 47470, 16153, 17686, // alpha = 0.04258 + 18388, 47462, 16090, 17562, // alpha = 0.04938272 + 18196, 47454, 16047, 17453, // alpha = 0.05668934 + 18028, 47445, 16008, 17304, // alpha = 0.06449988 + 17882, 47435, 15978, 17133, // alpha = 0.07281432 + 17755, 47424, 15948, 16982, // alpha = 0.08163266 + 17644, 47412, 15923, 16847, // alpha = 0.09095491 + 17547, 47398, 15895, 16728, // alpha = 0.1007811 + 17461, 47382, 15869, 16620, // alpha = 0.1111111 + 17361, 47363, 15844, 16521, // alpha = 0.1219451 + 17226, 47343, 15819, 16433, // alpha = 0.1332829 + 17103, 47321, 15797, 16319, // alpha = 0.1451247 + 16994, 47297, 15774, 16168, // alpha = 0.1574704 + 16895, 47271, 15752, 16030, // alpha = 0.17032 + 16806, 47242, 15729, 15902, // alpha = 0.1836735 + 16724, 47211, 15709, 15784, // alpha = 0.1975309 + 16651, 47178, 15688, 15676, // alpha = 0.2118922 + 16585, 47143, 15667, 15574, // alpha = 0.2267574 + 16524, 47106, 15646, 15480, // alpha = 0.2421265 + 16469, 47031, 15626, 15394, // alpha = 0.2579995 + 16417, 46950, 15605, 15261, // alpha = 0.2743765 + 16356, 46867, 15586, 15109, // alpha = 0.2912573 + 16271, 46781, 15567, 14966, // alpha = 0.308642 + 16193, 46693, 15549, 14832, // alpha = 0.3265306 + 16121, 46605, 15532, 14709, // alpha = 0.3449232 + 16055, 46515, 15516, 14593, // alpha = 0.3638196 + 15996, 46426, 15501, 14486, // alpha = 0.38322 + 15942, 46337, 15487, 14386, // alpha = 0.4031242 + 15892, 46248, 15473, 14250, // alpha = 0.4235324 + 15846, 46160, 15460, 14074, // alpha = 0.4444445 + 15804, 46069, 15449, 13911, // alpha = 0.4658605 + 15766, 45900, 15438, 13758, // alpha = 0.4877803 + 15731, 45736, 15428, 13614, // alpha = 0.5102041 + 15699, 45577, 15419, 13480, // alpha = 0.5331318 + 15669, 45423, 15410, 13353, // alpha = 0.5565634 + 15641, 45274, 15403, 13159, // alpha = 0.5804989 + 15616, 45131, 15396, 12937, // alpha = 0.6049383 + 15592, 44931, 15391, 12730, // alpha = 0.6298816 + 15570, 44669, 15386, 12536, // alpha = 0.6553288 + 15550, 44419, 15382, 12354, // alpha = 0.68128 + 15532, 44180, 15378, 12076, // alpha = 0.7077349 + 15515, 43875, 15375, 11755, // alpha = 0.7346939 + 15499, 43445, 15372, 11456, // alpha = 0.7621567 + 15485, 43037, 15370, 11081, // alpha = 0.7901235 + 15472, 42293, 15368, 10550, // alpha = 0.8185941 + 15459, 41140, 15367, 9863, // alpha = 0.8475687 + 15448, 5511, 15365, 8630, // alpha = 0.8770471 + 15438, 8649, 15364, 39091, // alpha = 0.9070295 + 15428, 9548, 15364, 41890, // alpha = 0.9375157 + 15420, 10128, 15363, 42718, // alpha = 0.9685059 + 15412, 10457, 15363, 43228, // alpha = 1 + + // Cos (theta) = 0.866717 + 19061, 47491, 16391, 18395, // alpha = 0.001 + 19061, 47491, 16391, 18395, // alpha = 0.001 + 19061, 47491, 16391, 18395, // alpha = 0.001007811 + 19062, 47491, 16391, 18396, // alpha = 0.002267574 + 19063, 47491, 16390, 18398, // alpha = 0.004031243 + 19061, 47491, 16391, 18395, // alpha = 0.006298816 + 19064, 47491, 16391, 18399, // alpha = 0.009070295 + 19059, 47491, 16391, 18392, // alpha = 0.01234568 + 19060, 47491, 16390, 18396, // alpha = 0.01612497 + 19063, 47491, 16391, 18398, // alpha = 0.02040816 + 19060, 47491, 16391, 18396, // alpha = 0.02519527 + 18885, 47504, 16292, 18191, // alpha = 0.03048627 + 18709, 47514, 16220, 17984, // alpha = 0.03628118 + 18540, 47520, 16218, 17781, // alpha = 0.04258 + 18417, 47522, 16156, 17644, // alpha = 0.04938272 + 18208, 47520, 16109, 17518, // alpha = 0.05668934 + 18038, 47515, 16065, 17416, // alpha = 0.06449988 + 17886, 47507, 16035, 17235, // alpha = 0.07281432 + 17759, 47497, 16004, 17074, // alpha = 0.08163266 + 17648, 47485, 15973, 16934, // alpha = 0.09095491 + 17548, 47470, 15946, 16804, // alpha = 0.1007811 + 17463, 47453, 15918, 16691, // alpha = 0.1111111 + 17363, 47434, 15891, 16586, // alpha = 0.1219451 + 17228, 47412, 15865, 16493, // alpha = 0.1332829 + 17107, 47389, 15838, 16407, // alpha = 0.1451247 + 16996, 47363, 15814, 16272, // alpha = 0.1574704 + 16897, 47335, 15790, 16126, // alpha = 0.17032 + 16808, 47304, 15766, 15991, // alpha = 0.1836735 + 16727, 47272, 15743, 15867, // alpha = 0.1975309 + 16654, 47237, 15720, 15752, // alpha = 0.2118922 + 16587, 47200, 15696, 15645, // alpha = 0.2267574 + 16526, 47161, 15674, 15545, // alpha = 0.2421265 + 16470, 47120, 15652, 15453, // alpha = 0.2579995 + 16419, 47050, 15630, 15366, // alpha = 0.2743765 + 16361, 46963, 15608, 15212, // alpha = 0.2912573 + 16275, 46873, 15587, 15061, // alpha = 0.308642 + 16196, 46781, 15568, 14921, // alpha = 0.3265306 + 16123, 46689, 15550, 14790, // alpha = 0.3449232 + 16058, 46595, 15532, 14668, // alpha = 0.3638196 + 15998, 46502, 15515, 14555, // alpha = 0.38322 + 15943, 46409, 15499, 14449, // alpha = 0.4031242 + 15893, 46316, 15485, 14351, // alpha = 0.4235324 + 15847, 46225, 15471, 14183, // alpha = 0.4444445 + 15805, 46136, 15458, 14010, // alpha = 0.4658605 + 15767, 46016, 15446, 13850, // alpha = 0.4877803 + 15732, 45845, 15435, 13700, // alpha = 0.5102041 + 15699, 45679, 15425, 13558, // alpha = 0.5331318 + 15669, 45518, 15416, 13426, // alpha = 0.5565634 + 15641, 45363, 15407, 13292, // alpha = 0.5804989 + 15615, 45214, 15401, 13059, // alpha = 0.6049383 + 15591, 45071, 15394, 12841, // alpha = 0.6298816 + 15569, 44813, 15389, 12637, // alpha = 0.6553288 + 15549, 44552, 15384, 12447, // alpha = 0.68128 + 15531, 44303, 15380, 12246, // alpha = 0.7077349 + 15513, 44067, 15376, 11911, // alpha = 0.7346939 + 15498, 43653, 15373, 11595, // alpha = 0.7621567 + 15483, 43227, 15371, 11298, // alpha = 0.7901235 + 15470, 42639, 15369, 10779, // alpha = 0.8185941 + 15457, 41769, 15367, 10255, // alpha = 0.8475687 + 15446, 39449, 15366, 9292, // alpha = 0.8770471 + 15435, 8088, 15364, 6491, // alpha = 0.9070295 + 15426, 9321, 15364, 41328, // alpha = 0.9375157 + 15417, 9927, 15363, 42467, // alpha = 0.9685059 + 15409, 10370, 15363, 43121, // alpha = 1 + + // Cos (theta) = 0.8548753 + 19015, 47546, 16427, 18438, // alpha = 0.001 + 19015, 47546, 16427, 18438, // alpha = 0.001 + 19015, 47546, 16427, 18438, // alpha = 0.001007811 + 19017, 47546, 16427, 18440, // alpha = 0.002267574 + 19013, 47546, 16427, 18437, // alpha = 0.004031243 + 19014, 47546, 16426, 18438, // alpha = 0.006298816 + 19019, 47546, 16430, 18441, // alpha = 0.009070295 + 19016, 47546, 16427, 18439, // alpha = 0.01234568 + 19017, 47546, 16427, 18440, // alpha = 0.01612497 + 19013, 47546, 16427, 18438, // alpha = 0.02040816 + 19018, 47546, 16427, 18440, // alpha = 0.02519527 + 18863, 47557, 16367, 18261, // alpha = 0.03048627 + 18703, 47570, 16282, 18063, // alpha = 0.03628118 + 18547, 47581, 16260, 17867, // alpha = 0.04258 + 18412, 47588, 16222, 17710, // alpha = 0.04938272 + 18214, 47590, 16166, 17584, // alpha = 0.05668934 + 18041, 47588, 16125, 17473, // alpha = 0.06449988 + 17892, 47582, 16088, 17342, // alpha = 0.07281432 + 17762, 47572, 16059, 17171, // alpha = 0.08163266 + 17649, 47560, 16027, 17019, // alpha = 0.09095491 + 17551, 47544, 15997, 16885, // alpha = 0.1007811 + 17463, 47526, 15969, 16763, // alpha = 0.1111111 + 17367, 47506, 15940, 16654, // alpha = 0.1219451 + 17232, 47483, 15912, 16556, // alpha = 0.1332829 + 17110, 47458, 15884, 16466, // alpha = 0.1451247 + 17000, 47430, 15856, 16379, // alpha = 0.1574704 + 16900, 47400, 15831, 16224, // alpha = 0.17032 + 16810, 47368, 15805, 16083, // alpha = 0.1836735 + 16730, 47333, 15779, 15953, // alpha = 0.1975309 + 16657, 47296, 15753, 15830, // alpha = 0.2118922 + 16589, 47257, 15729, 15717, // alpha = 0.2267574 + 16529, 47216, 15703, 15612, // alpha = 0.2421265 + 16473, 47173, 15679, 15515, // alpha = 0.2579995 + 16422, 47128, 15655, 15423, // alpha = 0.2743765 + 16365, 47060, 15632, 15317, // alpha = 0.2912573 + 16279, 46966, 15610, 15158, // alpha = 0.308642 + 16199, 46870, 15588, 15010, // alpha = 0.3265306 + 16126, 46773, 15568, 14872, // alpha = 0.3449232 + 16059, 46676, 15548, 14744, // alpha = 0.3638196 + 15999, 46578, 15530, 14625, // alpha = 0.38322 + 15944, 46481, 15513, 14514, // alpha = 0.4031242 + 15895, 46385, 15497, 14410, // alpha = 0.4235324 + 15848, 46290, 15482, 14291, // alpha = 0.4444445 + 15806, 46197, 15468, 14110, // alpha = 0.4658605 + 15767, 46106, 15454, 13941, // alpha = 0.4877803 + 15732, 45954, 15442, 13784, // alpha = 0.5102041 + 15699, 45781, 15431, 13636, // alpha = 0.5331318 + 15668, 45614, 15421, 13497, // alpha = 0.5565634 + 15641, 45453, 15412, 13368, // alpha = 0.5804989 + 15615, 45298, 15404, 13179, // alpha = 0.6049383 + 15591, 45149, 15397, 12952, // alpha = 0.6298816 + 15569, 44957, 15391, 12739, // alpha = 0.6553288 + 15548, 44685, 15386, 12539, // alpha = 0.68128 + 15529, 44426, 15381, 12351, // alpha = 0.7077349 + 15512, 44180, 15377, 12062, // alpha = 0.7346939 + 15496, 43859, 15374, 11732, // alpha = 0.7621567 + 15481, 43415, 15371, 11423, // alpha = 0.7901235 + 15467, 42982, 15369, 10998, // alpha = 0.8185941 + 15455, 42186, 15367, 10452, // alpha = 0.8475687 + 15443, 40807, 15365, 9643, // alpha = 0.8770471 + 15433, 7018, 15364, 8085, // alpha = 0.9070295 + 15423, 8985, 15363, 40596, // alpha = 0.9375157 + 15414, 9734, 15363, 42233, // alpha = 0.9685059 + 15406, 10285, 15362, 43021, // alpha = 1 + + // Cos (theta) = 0.8425296 + 18943, 47647, 16461, 18445, // alpha = 0.001 + 18943, 47647, 16461, 18445, // alpha = 0.001 + 18943, 47647, 16461, 18445, // alpha = 0.001007811 + 18945, 47647, 16463, 18445, // alpha = 0.002267574 + 18946, 47647, 16463, 18447, // alpha = 0.004031243 + 18950, 47647, 16464, 18449, // alpha = 0.006298816 + 18945, 47647, 16462, 18446, // alpha = 0.009070295 + 18943, 47647, 16462, 18445, // alpha = 0.01234568 + 18945, 47647, 16462, 18446, // alpha = 0.01612497 + 18944, 47647, 16462, 18445, // alpha = 0.02040816 + 18942, 47647, 16461, 18444, // alpha = 0.02519527 + 18809, 47650, 16408, 18288, // alpha = 0.03048627 + 18668, 47656, 16348, 18105, // alpha = 0.03628118 + 18533, 47663, 16302, 17928, // alpha = 0.04258 + 18391, 47668, 16281, 17766, // alpha = 0.04938272 + 18201, 47670, 16227, 17639, // alpha = 0.05668934 + 18033, 47668, 16190, 17525, // alpha = 0.06449988 + 17891, 47661, 16149, 17427, // alpha = 0.07281432 + 17764, 47651, 16114, 17269, // alpha = 0.08163266 + 17651, 47637, 16082, 17108, // alpha = 0.09095491 + 17554, 47621, 16052, 16968, // alpha = 0.1007811 + 17468, 47602, 16021, 16842, // alpha = 0.1111111 + 17372, 47580, 15992, 16725, // alpha = 0.1219451 + 17235, 47555, 15962, 16620, // alpha = 0.1332829 + 17115, 47528, 15932, 16526, // alpha = 0.1451247 + 17003, 47499, 15903, 16437, // alpha = 0.1574704 + 16904, 47467, 15875, 16328, // alpha = 0.17032 + 16815, 47433, 15845, 16179, // alpha = 0.1836735 + 16733, 47396, 15818, 16039, // alpha = 0.1975309 + 16659, 47357, 15790, 15910, // alpha = 0.2118922 + 16593, 47315, 15762, 15792, // alpha = 0.2267574 + 16531, 47272, 15735, 15680, // alpha = 0.2421265 + 16476, 47226, 15708, 15578, // alpha = 0.2579995 + 16424, 47180, 15682, 15482, // alpha = 0.2743765 + 16369, 47131, 15657, 15392, // alpha = 0.2912573 + 16282, 47060, 15633, 15256, // alpha = 0.308642 + 16202, 46960, 15609, 15101, // alpha = 0.3265306 + 16129, 46859, 15587, 14956, // alpha = 0.3449232 + 16062, 46757, 15566, 14821, // alpha = 0.3638196 + 16001, 46655, 15545, 14695, // alpha = 0.38322 + 15946, 46554, 15527, 14578, // alpha = 0.4031242 + 15895, 46454, 15509, 14470, // alpha = 0.4235324 + 15850, 46355, 15493, 14369, // alpha = 0.4444445 + 15807, 46258, 15478, 14212, // alpha = 0.4658605 + 15768, 46164, 15463, 14035, // alpha = 0.4877803 + 15732, 46063, 15450, 13869, // alpha = 0.5102041 + 15699, 45883, 15438, 13715, // alpha = 0.5331318 + 15668, 45710, 15427, 13569, // alpha = 0.5565634 + 15641, 45542, 15417, 13434, // alpha = 0.5804989 + 15614, 45381, 15409, 13301, // alpha = 0.6049383 + 15590, 45226, 15401, 13062, // alpha = 0.6298816 + 15568, 45078, 15394, 12839, // alpha = 0.6553288 + 15547, 44818, 15388, 12630, // alpha = 0.68128 + 15528, 44549, 15383, 12434, // alpha = 0.7077349 + 15511, 44292, 15379, 12213, // alpha = 0.7346939 + 15494, 44049, 15375, 11868, // alpha = 0.7621567 + 15479, 43603, 15372, 11546, // alpha = 0.7901235 + 15466, 43165, 15370, 11217, // alpha = 0.8185941 + 15453, 42493, 15367, 10651, // alpha = 0.8475687 + 15441, 41434, 15366, 9988, // alpha = 0.8770471 + 15431, 34766, 15364, 8743, // alpha = 0.9070295 + 15421, 8552, 15363, 39133, // alpha = 0.9375157 + 15412, 9544, 15362, 42003, // alpha = 0.9685059 + 15403, 10167, 15362, 42844, // alpha = 1 + + // Cos (theta) = 0.82968 + 18888, 47769, 16507, 18458, // alpha = 0.001 + 18888, 47769, 16507, 18458, // alpha = 0.001 + 18888, 47769, 16507, 18458, // alpha = 0.001007811 + 18885, 47769, 16505, 18457, // alpha = 0.002267574 + 18886, 47769, 16505, 18457, // alpha = 0.004031243 + 18884, 47769, 16507, 18456, // alpha = 0.006298816 + 18885, 47769, 16507, 18457, // alpha = 0.009070295 + 18883, 47769, 16504, 18455, // alpha = 0.01234568 + 18885, 47769, 16505, 18457, // alpha = 0.01612497 + 18886, 47769, 16505, 18457, // alpha = 0.02040816 + 18885, 47769, 16505, 18457, // alpha = 0.02519527 + 18755, 47768, 16449, 18309, // alpha = 0.03048627 + 18629, 47768, 16403, 18139, // alpha = 0.03628118 + 18511, 47767, 16365, 17976, // alpha = 0.04258 + 18361, 47765, 16343, 17816, // alpha = 0.04938272 + 18184, 47761, 16294, 17692, // alpha = 0.05668934 + 18029, 47754, 16249, 17581, // alpha = 0.06449988 + 17886, 47745, 16215, 17478, // alpha = 0.07281432 + 17763, 47733, 16174, 17366, // alpha = 0.08163266 + 17651, 47718, 16144, 17199, // alpha = 0.09095491 + 17554, 47700, 16110, 17051, // alpha = 0.1007811 + 17469, 47679, 16078, 16920, // alpha = 0.1111111 + 17377, 47656, 16047, 16798, // alpha = 0.1219451 + 17238, 47630, 16015, 16687, // alpha = 0.1332829 + 17117, 47601, 15984, 16586, // alpha = 0.1451247 + 17007, 47569, 15953, 16494, // alpha = 0.1574704 + 16908, 47535, 15920, 16409, // alpha = 0.17032 + 16818, 47499, 15889, 16275, // alpha = 0.1836735 + 16737, 47460, 15859, 16130, // alpha = 0.1975309 + 16663, 47418, 15828, 15994, // alpha = 0.2118922 + 16595, 47374, 15798, 15868, // alpha = 0.2267574 + 16534, 47329, 15769, 15751, // alpha = 0.2421265 + 16478, 47281, 15739, 15642, // alpha = 0.2579995 + 16426, 47232, 15711, 15540, // alpha = 0.2743765 + 16373, 47181, 15683, 15446, // alpha = 0.2912573 + 16286, 47129, 15657, 15357, // alpha = 0.308642 + 16206, 47050, 15632, 15194, // alpha = 0.3265306 + 16132, 46944, 15607, 15041, // alpha = 0.3449232 + 16065, 46838, 15584, 14899, // alpha = 0.3638196 + 16004, 46733, 15562, 14767, // alpha = 0.38322 + 15948, 46627, 15542, 14645, // alpha = 0.4031242 + 15897, 46523, 15523, 14530, // alpha = 0.4235324 + 15850, 46421, 15505, 14424, // alpha = 0.4444445 + 15808, 46320, 15488, 14314, // alpha = 0.4658605 + 15769, 46222, 15473, 14129, // alpha = 0.4877803 + 15733, 46126, 15458, 13955, // alpha = 0.5102041 + 15699, 45986, 15445, 13793, // alpha = 0.5331318 + 15669, 45806, 15433, 13642, // alpha = 0.5565634 + 15640, 45632, 15423, 13500, // alpha = 0.5804989 + 15614, 45464, 15413, 13367, // alpha = 0.6049383 + 15590, 45304, 15405, 13173, // alpha = 0.6298816 + 15567, 45150, 15397, 12940, // alpha = 0.6553288 + 15547, 44951, 15391, 12722, // alpha = 0.68128 + 15527, 44671, 15385, 12517, // alpha = 0.7077349 + 15509, 44404, 15380, 12325, // alpha = 0.7346939 + 15493, 44151, 15377, 12002, // alpha = 0.7621567 + 15478, 43789, 15373, 11665, // alpha = 0.7901235 + 15464, 43333, 15370, 11350, // alpha = 0.8185941 + 15451, 42796, 15368, 10838, // alpha = 0.8475687 + 15439, 41975, 15366, 10279, // alpha = 0.8770471 + 15428, 39870, 15364, 9272, // alpha = 0.9070295 + 15418, 8068, 15363, 5576, // alpha = 0.9375157 + 15409, 9361, 15362, 41605, // alpha = 0.9685059 + 15400, 10010, 15361, 42664, // alpha = 1 + + // Cos (theta) = 0.8163265 + 18853, 47907, 16565, 18485, // alpha = 0.001 + 18853, 47907, 16565, 18485, // alpha = 0.001 + 18853, 47907, 16565, 18485, // alpha = 0.001007811 + 18850, 47907, 16563, 18483, // alpha = 0.002267574 + 18853, 47907, 16565, 18485, // alpha = 0.004031243 + 18849, 47907, 16562, 18482, // alpha = 0.006298816 + 18847, 47907, 16562, 18481, // alpha = 0.009070295 + 18850, 47907, 16564, 18483, // alpha = 0.01234568 + 18849, 47907, 16562, 18483, // alpha = 0.01612497 + 18851, 47907, 16564, 18484, // alpha = 0.02040816 + 18849, 47907, 16562, 18482, // alpha = 0.02519527 + 18724, 47902, 16503, 18357, // alpha = 0.03048627 + 18602, 47894, 16451, 18186, // alpha = 0.03628118 + 18491, 47883, 16416, 18027, // alpha = 0.04258 + 18352, 47872, 16391, 17882, // alpha = 0.04938272 + 18170, 47859, 16367, 17748, // alpha = 0.05668934 + 18019, 47847, 16319, 17634, // alpha = 0.06449988 + 17886, 47833, 16279, 17533, // alpha = 0.07281432 + 17761, 47818, 16244, 17437, // alpha = 0.08163266 + 17653, 47801, 16208, 17296, // alpha = 0.09095491 + 17558, 47781, 16174, 17142, // alpha = 0.1007811 + 17472, 47759, 16139, 17001, // alpha = 0.1111111 + 17383, 47734, 16104, 16875, // alpha = 0.1219451 + 17248, 47706, 16070, 16759, // alpha = 0.1332829 + 17124, 47675, 16037, 16653, // alpha = 0.1451247 + 17014, 47642, 16004, 16554, // alpha = 0.1574704 + 16913, 47605, 15970, 16464, // alpha = 0.17032 + 16822, 47566, 15937, 16377, // alpha = 0.1836735 + 16741, 47525, 15903, 16224, // alpha = 0.1975309 + 16666, 47481, 15870, 16080, // alpha = 0.2118922 + 16599, 47435, 15836, 15947, // alpha = 0.2267574 + 16537, 47386, 15804, 15823, // alpha = 0.2421265 + 16481, 47336, 15773, 15709, // alpha = 0.2579995 + 16428, 47284, 15742, 15601, // alpha = 0.2743765 + 16378, 47231, 15712, 15503, // alpha = 0.2912573 + 16290, 47177, 15683, 15410, // alpha = 0.308642 + 16210, 47123, 15655, 15288, // alpha = 0.3265306 + 16135, 47031, 15629, 15127, // alpha = 0.3449232 + 16068, 46921, 15604, 14978, // alpha = 0.3638196 + 16007, 46811, 15580, 14840, // alpha = 0.38322 + 15950, 46701, 15558, 14711, // alpha = 0.4031242 + 15899, 46593, 15537, 14591, // alpha = 0.4235324 + 15852, 46487, 15518, 14480, // alpha = 0.4444445 + 15809, 46382, 15499, 14376, // alpha = 0.4658605 + 15770, 46280, 15482, 14222, // alpha = 0.4877803 + 15734, 46181, 15467, 14041, // alpha = 0.5102041 + 15700, 46084, 15453, 13872, // alpha = 0.5331318 + 15669, 45902, 15440, 13714, // alpha = 0.5565634 + 15641, 45721, 15429, 13566, // alpha = 0.5804989 + 15614, 45548, 15418, 13427, // alpha = 0.6049383 + 15590, 45381, 15409, 13282, // alpha = 0.6298816 + 15567, 45222, 15401, 13039, // alpha = 0.6553288 + 15546, 45069, 15394, 12811, // alpha = 0.68128 + 15526, 44792, 15388, 12599, // alpha = 0.7077349 + 15508, 44515, 15382, 12399, // alpha = 0.7346939 + 15492, 44252, 15378, 12135, // alpha = 0.7621567 + 15476, 43973, 15374, 11784, // alpha = 0.7901235 + 15462, 43499, 15371, 11454, // alpha = 0.8185941 + 15449, 43051, 15368, 11024, // alpha = 0.8475687 + 15437, 42245, 15366, 10441, // alpha = 0.8770471 + 15426, 40842, 15364, 9552, // alpha = 0.9070295 + 15416, 7248, 15363, 7489, // alpha = 0.9375157 + 15406, 9152, 15362, 41205, // alpha = 0.9685059 + 15398, 9859, 15361, 42500, // alpha = 1 + + // Cos (theta) = 0.8024691 + 18842, 48055, 16637, 18529, // alpha = 0.001 + 18842, 48055, 16637, 18529, // alpha = 0.001 + 18842, 48055, 16637, 18529, // alpha = 0.001007811 + 18840, 48055, 16636, 18528, // alpha = 0.002267574 + 18842, 48055, 16636, 18529, // alpha = 0.004031243 + 18841, 48055, 16635, 18528, // alpha = 0.006298816 + 18840, 48055, 16636, 18528, // alpha = 0.009070295 + 18840, 48055, 16636, 18528, // alpha = 0.01234568 + 18841, 48055, 16636, 18529, // alpha = 0.01612497 + 18841, 48055, 16636, 18528, // alpha = 0.02040816 + 18839, 48055, 16636, 18527, // alpha = 0.02519527 + 18717, 48040, 16568, 18438, // alpha = 0.03048627 + 18597, 48020, 16509, 18267, // alpha = 0.03628118 + 18489, 48000, 16466, 18104, // alpha = 0.04258 + 18350, 47979, 16436, 17955, // alpha = 0.04938272 + 18180, 47960, 16412, 17823, // alpha = 0.05668934 + 18021, 47942, 16392, 17698, // alpha = 0.06449988 + 17888, 47924, 16355, 17592, // alpha = 0.07281432 + 17763, 47906, 16317, 17491, // alpha = 0.08163266 + 17659, 47887, 16277, 17400, // alpha = 0.09095491 + 17562, 47866, 16239, 17237, // alpha = 0.1007811 + 17475, 47842, 16204, 17088, // alpha = 0.1111111 + 17392, 47815, 16167, 16956, // alpha = 0.1219451 + 17252, 47785, 16131, 16832, // alpha = 0.1332829 + 17128, 47752, 16095, 16718, // alpha = 0.1451247 + 17019, 47716, 16058, 16617, // alpha = 0.1574704 + 16919, 47677, 16022, 16521, // alpha = 0.17032 + 16827, 47636, 15987, 16433, // alpha = 0.1836735 + 16745, 47592, 15949, 16320, // alpha = 0.1975309 + 16670, 47545, 15914, 16168, // alpha = 0.2118922 + 16603, 47496, 15878, 16028, // alpha = 0.2267574 + 16541, 47445, 15843, 15898, // alpha = 0.2421265 + 16482, 47392, 15808, 15775, // alpha = 0.2579995 + 16431, 47338, 15774, 15663, // alpha = 0.2743765 + 16382, 47282, 15741, 15559, // alpha = 0.2912573 + 16294, 47226, 15710, 15462, // alpha = 0.308642 + 16213, 47169, 15680, 15371, // alpha = 0.3265306 + 16139, 47111, 15651, 15215, // alpha = 0.3449232 + 16072, 47003, 15624, 15060, // alpha = 0.3638196 + 16009, 46889, 15598, 14914, // alpha = 0.38322 + 15953, 46775, 15574, 14779, // alpha = 0.4031242 + 15901, 46663, 15552, 14653, // alpha = 0.4235324 + 15854, 46553, 15530, 14536, // alpha = 0.4444445 + 15811, 46444, 15511, 14428, // alpha = 0.4658605 + 15771, 46339, 15493, 14317, // alpha = 0.4877803 + 15734, 46236, 15476, 14127, // alpha = 0.5102041 + 15701, 46136, 15461, 13951, // alpha = 0.5331318 + 15670, 45998, 15447, 13785, // alpha = 0.5565634 + 15641, 45811, 15434, 13632, // alpha = 0.5804989 + 15614, 45631, 15423, 13487, // alpha = 0.6049383 + 15589, 45459, 15413, 13352, // alpha = 0.6298816 + 15566, 45293, 15404, 13140, // alpha = 0.6553288 + 15545, 45135, 15397, 12902, // alpha = 0.68128 + 15525, 44913, 15390, 12680, // alpha = 0.7077349 + 15507, 44626, 15384, 12472, // alpha = 0.7346939 + 15490, 44353, 15379, 12265, // alpha = 0.7621567 + 15475, 44094, 15375, 11900, // alpha = 0.7901235 + 15460, 43664, 15372, 11557, // alpha = 0.8185941 + 15447, 43198, 15369, 11206, // alpha = 0.8475687 + 15435, 42506, 15366, 10601, // alpha = 0.8770471 + 15424, 41359, 15365, 9821, // alpha = 0.9070295 + 15413, 5322, 15363, 8295, // alpha = 0.9375157 + 15404, 8810, 15362, 40672, // alpha = 0.9685059 + 15395, 9716, 15361, 42341, // alpha = 1 + + // Cos (theta) = 0.7881078 + 18874, 48154, 16726, 18610, // alpha = 0.001 + 18874, 48154, 16726, 18610, // alpha = 0.001 + 18874, 48154, 16726, 18610, // alpha = 0.001007811 + 18873, 48154, 16725, 18609, // alpha = 0.002267574 + 18873, 48154, 16725, 18609, // alpha = 0.004031243 + 18870, 48154, 16724, 18608, // alpha = 0.006298816 + 18896, 48154, 16736, 18628, // alpha = 0.009070295 + 18874, 48154, 16726, 18610, // alpha = 0.01234568 + 18871, 48154, 16724, 18608, // alpha = 0.01612497 + 18869, 48154, 16724, 18606, // alpha = 0.02040816 + 18872, 48154, 16725, 18609, // alpha = 0.02519527 + 18745, 48141, 16648, 18511, // alpha = 0.03048627 + 18619, 48126, 16577, 18393, // alpha = 0.03628118 + 18507, 48101, 16524, 18218, // alpha = 0.04258 + 18372, 48078, 16487, 18050, // alpha = 0.04938272 + 18193, 48056, 16457, 17904, // alpha = 0.05668934 + 18031, 48036, 16437, 17771, // alpha = 0.06449988 + 17896, 48016, 16414, 17657, // alpha = 0.07281432 + 17775, 47997, 16389, 17554, // alpha = 0.08163266 + 17663, 47976, 16356, 17457, // alpha = 0.09095491 + 17568, 47952, 16313, 17337, // alpha = 0.1007811 + 17481, 47927, 16273, 17182, // alpha = 0.1111111 + 17398, 47898, 16236, 17039, // alpha = 0.1219451 + 17262, 47866, 16197, 16911, // alpha = 0.1332829 + 17138, 47830, 16157, 16791, // alpha = 0.1451247 + 17025, 47792, 16117, 16682, // alpha = 0.1574704 + 16925, 47751, 16079, 16581, // alpha = 0.17032 + 16834, 47706, 16039, 16489, // alpha = 0.1836735 + 16752, 47660, 16000, 16403, // alpha = 0.1975309 + 16675, 47610, 15960, 16260, // alpha = 0.2118922 + 16607, 47558, 15921, 16111, // alpha = 0.2267574 + 16545, 47504, 15884, 15975, // alpha = 0.2421265 + 16487, 47449, 15845, 15847, // alpha = 0.2579995 + 16434, 47392, 15809, 15728, // alpha = 0.2743765 + 16386, 47334, 15773, 15618, // alpha = 0.2912573 + 16298, 47275, 15739, 15515, // alpha = 0.308642 + 16218, 47215, 15706, 15421, // alpha = 0.3265306 + 16143, 47155, 15675, 15305, // alpha = 0.3449232 + 16075, 47087, 15646, 15141, // alpha = 0.3638196 + 16013, 46967, 15618, 14989, // alpha = 0.38322 + 15956, 46850, 15591, 14847, // alpha = 0.4031242 + 15904, 46733, 15567, 14715, // alpha = 0.4235324 + 15857, 46619, 15544, 14593, // alpha = 0.4444445 + 15813, 46507, 15523, 14479, // alpha = 0.4658605 + 15773, 46397, 15504, 14374, // alpha = 0.4877803 + 15736, 46290, 15486, 14215, // alpha = 0.5102041 + 15701, 46187, 15469, 14031, // alpha = 0.5331318 + 15670, 46087, 15454, 13858, // alpha = 0.5565634 + 15641, 45900, 15441, 13698, // alpha = 0.5804989 + 15614, 45714, 15429, 13547, // alpha = 0.6049383 + 15589, 45536, 15418, 13407, // alpha = 0.6298816 + 15566, 45364, 15408, 13238, // alpha = 0.6553288 + 15545, 45201, 15400, 12992, // alpha = 0.68128 + 15525, 45033, 15392, 12761, // alpha = 0.7077349 + 15506, 44736, 15386, 12544, // alpha = 0.7346939 + 15489, 44453, 15381, 12341, // alpha = 0.7621567 + 15473, 44184, 15376, 12015, // alpha = 0.7901235 + 15459, 43825, 15373, 11657, // alpha = 0.8185941 + 15445, 43342, 15369, 11323, // alpha = 0.8475687 + 15433, 42761, 15367, 10753, // alpha = 0.8770471 + 15422, 41805, 15365, 10089, // alpha = 0.9070295 + 15411, 38720, 15363, 8736, // alpha = 0.9375157 + 15401, 8483, 15362, 39947, // alpha = 0.9685059 + 15393, 9580, 15361, 42198, // alpha = 1 + + // Cos (theta) = 0.7732427 + 18988, 48176, 16679, 18773, // alpha = 0.001 + 18988, 48176, 16679, 18773, // alpha = 0.001 + 18988, 48176, 16679, 18773, // alpha = 0.001007811 + 18990, 48176, 16678, 18774, // alpha = 0.002267574 + 18989, 48176, 16678, 18774, // alpha = 0.004031243 + 18988, 48176, 16677, 18773, // alpha = 0.006298816 + 18990, 48176, 16679, 18774, // alpha = 0.009070295 + 18991, 48176, 16678, 18775, // alpha = 0.01234568 + 18992, 48176, 16679, 18777, // alpha = 0.01612497 + 18987, 48176, 16676, 18772, // alpha = 0.02040816 + 18986, 48176, 16677, 18772, // alpha = 0.02519527 + 18842, 48169, 16636, 18652, // alpha = 0.03048627 + 18652, 48162, 16650, 18491, // alpha = 0.03628118 + 18532, 48154, 16588, 18351, // alpha = 0.04258 + 18411, 48145, 16547, 18164, // alpha = 0.04938272 + 18217, 48137, 16510, 18000, // alpha = 0.05668934 + 18056, 48127, 16481, 17860, // alpha = 0.06449988 + 17909, 48109, 16459, 17731, // alpha = 0.07281432 + 17783, 48089, 16435, 17618, // alpha = 0.08163266 + 17673, 48066, 16410, 17517, // alpha = 0.09095491 + 17574, 48042, 16390, 17426, // alpha = 0.1007811 + 17487, 48014, 16351, 17278, // alpha = 0.1111111 + 17409, 47983, 16308, 17129, // alpha = 0.1219451 + 17270, 47949, 16267, 16991, // alpha = 0.1332829 + 17145, 47911, 16225, 16865, // alpha = 0.1451247 + 17033, 47870, 16181, 16750, // alpha = 0.1574704 + 16933, 47826, 16138, 16644, // alpha = 0.17032 + 16840, 47779, 16095, 16545, // alpha = 0.1836735 + 16756, 47729, 16053, 16454, // alpha = 0.1975309 + 16681, 47676, 16010, 16356, // alpha = 0.2118922 + 16612, 47622, 15968, 16200, // alpha = 0.2267574 + 16548, 47565, 15926, 16054, // alpha = 0.2421265 + 16490, 47506, 15885, 15920, // alpha = 0.2579995 + 16437, 47447, 15846, 15794, // alpha = 0.2743765 + 16389, 47386, 15807, 15679, // alpha = 0.2912573 + 16304, 47324, 15769, 15570, // alpha = 0.308642 + 16223, 47262, 15733, 15471, // alpha = 0.3265306 + 16148, 47199, 15700, 15378, // alpha = 0.3449232 + 16079, 47137, 15667, 15224, // alpha = 0.3638196 + 16017, 47046, 15637, 15064, // alpha = 0.38322 + 15961, 46924, 15608, 14917, // alpha = 0.4031242 + 15907, 46803, 15583, 14779, // alpha = 0.4235324 + 15859, 46685, 15559, 14651, // alpha = 0.4444445 + 15814, 46569, 15536, 14533, // alpha = 0.4658605 + 15774, 46456, 15515, 14422, // alpha = 0.4877803 + 15737, 46345, 15496, 14303, // alpha = 0.5102041 + 15703, 46238, 15479, 14111, // alpha = 0.5331318 + 15670, 46135, 15463, 13932, // alpha = 0.5565634 + 15642, 45989, 15448, 13765, // alpha = 0.5804989 + 15614, 45797, 15435, 13608, // alpha = 0.6049383 + 15589, 45612, 15423, 13462, // alpha = 0.6298816 + 15566, 45435, 15413, 13325, // alpha = 0.6553288 + 15544, 45266, 15403, 13081, // alpha = 0.68128 + 15524, 45104, 15395, 12841, // alpha = 0.7077349 + 15505, 44844, 15388, 12616, // alpha = 0.7346939 + 15488, 44551, 15383, 12405, // alpha = 0.7621567 + 15472, 44273, 15378, 12127, // alpha = 0.7901235 + 15457, 43985, 15374, 11757, // alpha = 0.8185941 + 15443, 43483, 15370, 11411, // alpha = 0.8475687 + 15431, 43009, 15367, 10902, // alpha = 0.8770471 + 15420, 42111, 15365, 10290, // alpha = 0.9070295 + 15409, 40118, 15363, 9165, // alpha = 0.9375157 + 15399, 8150, 15362, 38231, // alpha = 0.9685059 + 15390, 9452, 15361, 42065, // alpha = 1 + + // Cos (theta) = 0.7578735 + 19152, 48173, 16662, 18991, // alpha = 0.001 + 19152, 48173, 16662, 18991, // alpha = 0.001 + 19152, 48173, 16662, 18991, // alpha = 0.001007811 + 19145, 48173, 16665, 18986, // alpha = 0.002267574 + 19145, 48173, 16659, 18986, // alpha = 0.004031243 + 19142, 48173, 16663, 18983, // alpha = 0.006298816 + 19146, 48173, 16664, 18986, // alpha = 0.009070295 + 19146, 48173, 16662, 18987, // alpha = 0.01234568 + 19140, 48173, 16663, 18981, // alpha = 0.01612497 + 19146, 48173, 16663, 18986, // alpha = 0.02040816 + 19143, 48173, 16663, 18983, // alpha = 0.02519527 + 18871, 48180, 16698, 18740, // alpha = 0.03048627 + 18673, 48184, 16720, 18564, // alpha = 0.03628118 + 18548, 48185, 16652, 18455, // alpha = 0.04258 + 18437, 48183, 16603, 18280, // alpha = 0.04938272 + 18241, 48179, 16568, 18100, // alpha = 0.05668934 + 18075, 48173, 16535, 17949, // alpha = 0.06449988 + 17927, 48165, 16506, 17812, // alpha = 0.07281432 + 17794, 48155, 16482, 17687, // alpha = 0.08163266 + 17680, 48144, 16458, 17578, // alpha = 0.09095491 + 17581, 48131, 16434, 17482, // alpha = 0.1007811 + 17491, 48104, 16411, 17379, // alpha = 0.1111111 + 17415, 48071, 16387, 17223, // alpha = 0.1219451 + 17279, 48034, 16342, 17075, // alpha = 0.1332829 + 17155, 47994, 16296, 16944, // alpha = 0.1451247 + 17042, 47950, 16250, 16821, // alpha = 0.1574704 + 16938, 47903, 16202, 16708, // alpha = 0.17032 + 16847, 47853, 16155, 16605, // alpha = 0.1836735 + 16763, 47800, 16109, 16508, // alpha = 0.1975309 + 16686, 47744, 16064, 16420, // alpha = 0.2118922 + 16616, 47686, 16017, 16290, // alpha = 0.2267574 + 16552, 47626, 15971, 16136, // alpha = 0.2421265 + 16494, 47565, 15927, 15994, // alpha = 0.2579995 + 16441, 47502, 15884, 15863, // alpha = 0.2743765 + 16393, 47438, 15841, 15741, // alpha = 0.2912573 + 16311, 47374, 15802, 15627, // alpha = 0.308642 + 16229, 47309, 15763, 15523, // alpha = 0.3265306 + 16154, 47244, 15726, 15425, // alpha = 0.3449232 + 16086, 47179, 15690, 15310, // alpha = 0.3638196 + 16021, 47115, 15658, 15141, // alpha = 0.38322 + 15964, 46999, 15628, 14987, // alpha = 0.4031242 + 15910, 46874, 15600, 14843, // alpha = 0.4235324 + 15862, 46751, 15574, 14710, // alpha = 0.4444445 + 15817, 46631, 15550, 14586, // alpha = 0.4658605 + 15775, 46514, 15528, 14470, // alpha = 0.4877803 + 15738, 46400, 15507, 14363, // alpha = 0.5102041 + 15703, 46290, 15488, 14191, // alpha = 0.5331318 + 15671, 46183, 15471, 14005, // alpha = 0.5565634 + 15642, 46079, 15455, 13831, // alpha = 0.5804989 + 15614, 45880, 15441, 13668, // alpha = 0.6049383 + 15589, 45689, 15428, 13516, // alpha = 0.6298816 + 15566, 45506, 15417, 13374, // alpha = 0.6553288 + 15544, 45331, 15407, 13170, // alpha = 0.68128 + 15524, 45164, 15398, 12920, // alpha = 0.7077349 + 15504, 44952, 15391, 12688, // alpha = 0.7346939 + 15487, 44649, 15384, 12469, // alpha = 0.7621567 + 15471, 44361, 15379, 12240, // alpha = 0.7901235 + 15456, 44087, 15375, 11855, // alpha = 0.8185941 + 15442, 43623, 15371, 11494, // alpha = 0.8475687 + 15429, 43131, 15368, 11048, // alpha = 0.8770471 + 15418, 42323, 15365, 10414, // alpha = 0.9070295 + 15407, 40839, 15363, 9393, // alpha = 0.9375157 + 15397, 7549, 15362, 5330, // alpha = 0.9685059 + 15388, 9330, 15360, 41898, // alpha = 1 + + // Cos (theta) = 0.7420005 + 19007, 48198, 16795, 18930, // alpha = 0.001 + 19007, 48198, 16795, 18930, // alpha = 0.001 + 19007, 48198, 16795, 18930, // alpha = 0.001007811 + 19005, 48198, 16795, 18929, // alpha = 0.002267574 + 19006, 48198, 16796, 18930, // alpha = 0.004031243 + 19005, 48198, 16797, 18928, // alpha = 0.006298816 + 19006, 48198, 16798, 18929, // alpha = 0.009070295 + 19007, 48198, 16797, 18930, // alpha = 0.01234568 + 19008, 48198, 16794, 18931, // alpha = 0.01612497 + 19006, 48198, 16795, 18929, // alpha = 0.02040816 + 19005, 48198, 16798, 18928, // alpha = 0.02519527 + 18859, 48206, 16751, 18796, // alpha = 0.03048627 + 18673, 48215, 16787, 18621, // alpha = 0.03628118 + 18554, 48222, 16718, 18512, // alpha = 0.04258 + 18441, 48225, 16662, 18383, // alpha = 0.04938272 + 18261, 48224, 16624, 18204, // alpha = 0.05668934 + 18082, 48221, 16590, 18032, // alpha = 0.06449988 + 17937, 48214, 16559, 17891, // alpha = 0.07281432 + 17807, 48204, 16530, 17762, // alpha = 0.08163266 + 17688, 48193, 16507, 17644, // alpha = 0.09095491 + 17589, 48179, 16480, 17542, // alpha = 0.1007811 + 17499, 48163, 16454, 17449, // alpha = 0.1111111 + 17420, 48145, 16431, 17320, // alpha = 0.1219451 + 17290, 48123, 16404, 17166, // alpha = 0.1332829 + 17163, 48080, 16375, 17025, // alpha = 0.1451247 + 17051, 48033, 16323, 16897, // alpha = 0.1574704 + 16949, 47983, 16272, 16778, // alpha = 0.17032 + 16855, 47929, 16220, 16668, // alpha = 0.1836735 + 16770, 47873, 16168, 16565, // alpha = 0.1975309 + 16693, 47813, 16119, 16472, // alpha = 0.2118922 + 16622, 47752, 16069, 16384, // alpha = 0.2267574 + 16558, 47689, 16020, 16222, // alpha = 0.2421265 + 16499, 47624, 15972, 16071, // alpha = 0.2579995 + 16445, 47558, 15924, 15933, // alpha = 0.2743765 + 16396, 47491, 15879, 15803, // alpha = 0.2912573 + 16318, 47424, 15835, 15685, // alpha = 0.308642 + 16235, 47356, 15792, 15574, // alpha = 0.3265306 + 16161, 47289, 15752, 15473, // alpha = 0.3449232 + 16091, 47222, 15716, 15378, // alpha = 0.3638196 + 16025, 47155, 15681, 15220, // alpha = 0.38322 + 15966, 47075, 15648, 15058, // alpha = 0.4031242 + 15913, 46945, 15619, 14909, // alpha = 0.4235324 + 15863, 46818, 15591, 14769, // alpha = 0.4444445 + 15819, 46694, 15564, 14640, // alpha = 0.4658605 + 15777, 46573, 15541, 14519, // alpha = 0.4877803 + 15740, 46455, 15518, 14408, // alpha = 0.5102041 + 15704, 46341, 15498, 14272, // alpha = 0.5331318 + 15672, 46231, 15479, 14079, // alpha = 0.5565634 + 15642, 46124, 15463, 13897, // alpha = 0.5804989 + 15615, 45963, 15447, 13729, // alpha = 0.6049383 + 15589, 45766, 15433, 13570, // alpha = 0.6298816 + 15566, 45577, 15421, 13424, // alpha = 0.6553288 + 15544, 45396, 15411, 13258, // alpha = 0.68128 + 15523, 45223, 15401, 13001, // alpha = 0.7077349 + 15504, 45058, 15393, 12758, // alpha = 0.7346939 + 15486, 44747, 15386, 12531, // alpha = 0.7621567 + 15470, 44448, 15380, 12319, // alpha = 0.7901235 + 15454, 44165, 15376, 11951, // alpha = 0.8185941 + 15440, 43761, 15371, 11577, // alpha = 0.8475687 + 15427, 43251, 15368, 11193, // alpha = 0.8770471 + 15416, 42530, 15365, 10535, // alpha = 0.9070295 + 15405, 41250, 15363, 9586, // alpha = 0.9375157 + 15395, 6768, 15362, 6959, // alpha = 0.9685059 + 15386, 9210, 15360, 41660, // alpha = 1 + + // Cos (theta) = 0.7256235 + 18978, 48262, 16861, 18977, // alpha = 0.001 + 18978, 48262, 16861, 18977, // alpha = 0.001 + 18978, 48262, 16861, 18977, // alpha = 0.001007811 + 18972, 48262, 16857, 18973, // alpha = 0.002267574 + 18971, 48262, 16858, 18971, // alpha = 0.004031243 + 18974, 48262, 16858, 18973, // alpha = 0.006298816 + 18970, 48262, 16857, 18970, // alpha = 0.009070295 + 18972, 48262, 16860, 18971, // alpha = 0.01234568 + 18978, 48262, 16860, 18977, // alpha = 0.01612497 + 18975, 48262, 16858, 18975, // alpha = 0.02040816 + 18972, 48262, 16857, 18972, // alpha = 0.02519527 + 18838, 48264, 16808, 18844, // alpha = 0.03048627 + 18653, 48269, 16859, 18661, // alpha = 0.03628118 + 18542, 48273, 16785, 18555, // alpha = 0.04258 + 18436, 48276, 16728, 18452, // alpha = 0.04938272 + 18257, 48276, 16684, 18289, // alpha = 0.05668934 + 18088, 48273, 16651, 18119, // alpha = 0.06449988 + 17941, 48266, 16618, 17969, // alpha = 0.07281432 + 17811, 48256, 16587, 17834, // alpha = 0.08163266 + 17695, 48244, 16561, 17712, // alpha = 0.09095491 + 17596, 48229, 16533, 17604, // alpha = 0.1007811 + 17505, 48212, 16504, 17505, // alpha = 0.1111111 + 17426, 48193, 16477, 17416, // alpha = 0.1219451 + 17301, 48172, 16450, 17260, // alpha = 0.1332829 + 17174, 48148, 16420, 17111, // alpha = 0.1451247 + 17059, 48118, 16393, 16975, // alpha = 0.1574704 + 16956, 48064, 16346, 16849, // alpha = 0.17032 + 16862, 48007, 16288, 16732, // alpha = 0.1836735 + 16777, 47947, 16232, 16625, // alpha = 0.1975309 + 16699, 47884, 16178, 16525, // alpha = 0.2118922 + 16628, 47820, 16124, 16433, // alpha = 0.2267574 + 16562, 47753, 16070, 16309, // alpha = 0.2421265 + 16504, 47685, 16018, 16151, // alpha = 0.2579995 + 16448, 47615, 15967, 16004, // alpha = 0.2743765 + 16399, 47545, 15917, 15869, // alpha = 0.2912573 + 16326, 47475, 15869, 15744, // alpha = 0.308642 + 16243, 47405, 15824, 15629, // alpha = 0.3265306 + 16166, 47334, 15781, 15521, // alpha = 0.3449232 + 16095, 47264, 15742, 15422, // alpha = 0.3638196 + 16031, 47195, 15705, 15302, // alpha = 0.38322 + 15970, 47127, 15670, 15131, // alpha = 0.4031242 + 15915, 47017, 15637, 14974, // alpha = 0.4235324 + 15866, 46885, 15607, 14829, // alpha = 0.4444445 + 15821, 46757, 15580, 14695, // alpha = 0.4658605 + 15779, 46632, 15554, 14569, // alpha = 0.4877803 + 15740, 46511, 15530, 14453, // alpha = 0.5102041 + 15706, 46393, 15508, 14345, // alpha = 0.5331318 + 15673, 46279, 15488, 14153, // alpha = 0.5565634 + 15643, 46169, 15470, 13964, // alpha = 0.5804989 + 15615, 46046, 15454, 13790, // alpha = 0.6049383 + 15589, 45842, 15439, 13626, // alpha = 0.6298816 + 15565, 45647, 15426, 13472, // alpha = 0.6553288 + 15543, 45461, 15415, 13329, // alpha = 0.68128 + 15523, 45282, 15405, 13080, // alpha = 0.7077349 + 15504, 45112, 15395, 12828, // alpha = 0.7346939 + 15486, 44844, 15388, 12594, // alpha = 0.7621567 + 15469, 44535, 15382, 12374, // alpha = 0.7901235 + 15453, 44243, 15377, 12046, // alpha = 0.8185941 + 15439, 43897, 15372, 11660, // alpha = 0.8475687 + 15426, 43370, 15369, 11297, // alpha = 0.8770471 + 15414, 42734, 15366, 10648, // alpha = 0.9070295 + 15403, 41594, 15363, 9775, // alpha = 0.9375157 + 15393, 5141, 15361, 7649, // alpha = 0.9685059 + 15383, 8988, 15360, 41446, // alpha = 1 + + // Cos (theta) = 0.7087427 + 18944, 48346, 16943, 19019, // alpha = 0.001 + 18944, 48346, 16943, 19019, // alpha = 0.001 + 18944, 48346, 16943, 19019, // alpha = 0.001007811 + 18947, 48346, 16940, 19022, // alpha = 0.002267574 + 18944, 48346, 16941, 19019, // alpha = 0.004031243 + 18945, 48346, 16942, 19020, // alpha = 0.006298816 + 18946, 48346, 16943, 19022, // alpha = 0.009070295 + 18948, 48346, 16941, 19024, // alpha = 0.01234568 + 18948, 48346, 16942, 19023, // alpha = 0.01612497 + 18949, 48346, 16942, 19024, // alpha = 0.02040816 + 18948, 48346, 16945, 19023, // alpha = 0.02519527 + 18807, 48345, 16881, 18882, // alpha = 0.03048627 + 18670, 48344, 16846, 18744, // alpha = 0.03628118 + 18525, 48343, 16853, 18594, // alpha = 0.04258 + 18426, 48341, 16796, 18497, // alpha = 0.04938272 + 18248, 48337, 16751, 18375, // alpha = 0.05668934 + 18086, 48331, 16714, 18203, // alpha = 0.06449988 + 17944, 48323, 16680, 18050, // alpha = 0.07281432 + 17815, 48311, 16646, 17909, // alpha = 0.08163266 + 17702, 48298, 16616, 17783, // alpha = 0.09095491 + 17601, 48281, 16587, 17668, // alpha = 0.1007811 + 17511, 48263, 16558, 17564, // alpha = 0.1111111 + 17432, 48242, 16527, 17470, // alpha = 0.1219451 + 17313, 48219, 16497, 17361, // alpha = 0.1332829 + 17184, 48194, 16467, 17202, // alpha = 0.1451247 + 17069, 48167, 16437, 17057, // alpha = 0.1574704 + 16964, 48138, 16406, 16923, // alpha = 0.17032 + 16870, 48088, 16365, 16800, // alpha = 0.1836735 + 16783, 48024, 16302, 16686, // alpha = 0.1975309 + 16706, 47957, 16240, 16581, // alpha = 0.2118922 + 16634, 47888, 16183, 16483, // alpha = 0.2267574 + 16568, 47818, 16125, 16392, // alpha = 0.2421265 + 16508, 47746, 16068, 16233, // alpha = 0.2579995 + 16454, 47674, 16012, 16080, // alpha = 0.2743765 + 16404, 47600, 15957, 15937, // alpha = 0.2912573 + 16333, 47527, 15906, 15805, // alpha = 0.308642 + 16249, 47453, 15858, 15683, // alpha = 0.3265306 + 16170, 47380, 15813, 15570, // alpha = 0.3449232 + 16100, 47308, 15770, 15467, // alpha = 0.3638196 + 16034, 47236, 15729, 15371, // alpha = 0.38322 + 15974, 47166, 15692, 15206, // alpha = 0.4031242 + 15919, 47089, 15657, 15042, // alpha = 0.4235324 + 15868, 46953, 15625, 14889, // alpha = 0.4444445 + 15823, 46821, 15595, 14749, // alpha = 0.4658605 + 15782, 46692, 15567, 14620, // alpha = 0.4877803 + 15742, 46566, 15542, 14498, // alpha = 0.5102041 + 15707, 46445, 15519, 14385, // alpha = 0.5331318 + 15674, 46327, 15497, 14227, // alpha = 0.5565634 + 15644, 46214, 15478, 14032, // alpha = 0.5804989 + 15616, 46105, 15461, 13850, // alpha = 0.6049383 + 15590, 45919, 15445, 13681, // alpha = 0.6298816 + 15565, 45718, 15431, 13522, // alpha = 0.6553288 + 15543, 45526, 15419, 13374, // alpha = 0.68128 + 15523, 45341, 15408, 13158, // alpha = 0.7077349 + 15503, 45166, 15398, 12900, // alpha = 0.7346939 + 15485, 44941, 15390, 12656, // alpha = 0.7621567 + 15468, 44622, 15383, 12428, // alpha = 0.7901235 + 15452, 44320, 15378, 12142, // alpha = 0.8185941 + 15438, 44032, 15373, 11742, // alpha = 0.8475687 + 15424, 43488, 15369, 11366, // alpha = 0.8770471 + 15412, 42934, 15366, 10762, // alpha = 0.9070295 + 15401, 41929, 15363, 9955, // alpha = 0.9375157 + 15391, 38001, 15361, 8206, // alpha = 0.9685059 + 15381, 8775, 15360, 41241, // alpha = 1 + + // Cos (theta) = 0.691358 + 18938, 48444, 17057, 19091, // alpha = 0.001 + 18938, 48444, 17057, 19091, // alpha = 0.001 + 18938, 48444, 17057, 19091, // alpha = 0.001007811 + 18937, 48444, 17056, 19091, // alpha = 0.002267574 + 18938, 48444, 17056, 19091, // alpha = 0.004031243 + 18934, 48444, 17055, 19086, // alpha = 0.006298816 + 18937, 48444, 17054, 19090, // alpha = 0.009070295 + 18935, 48444, 17054, 19088, // alpha = 0.01234568 + 18938, 48444, 17056, 19091, // alpha = 0.01612497 + 18938, 48444, 17055, 19091, // alpha = 0.02040816 + 18931, 48444, 17053, 19084, // alpha = 0.02519527 + 18796, 48440, 16980, 18943, // alpha = 0.03048627 + 18655, 48434, 16927, 18795, // alpha = 0.03628118 + 18534, 48426, 16893, 18664, // alpha = 0.04258 + 18416, 48416, 16874, 18544, // alpha = 0.04938272 + 18247, 48407, 16824, 18452, // alpha = 0.05668934 + 18089, 48396, 16781, 18297, // alpha = 0.06449988 + 17946, 48384, 16749, 18135, // alpha = 0.07281432 + 17822, 48370, 16711, 17991, // alpha = 0.08163266 + 17711, 48354, 16678, 17860, // alpha = 0.09095491 + 17609, 48336, 16644, 17738, // alpha = 0.1007811 + 17519, 48316, 16612, 17628, // alpha = 0.1111111 + 17439, 48294, 16581, 17529, // alpha = 0.1219451 + 17325, 48269, 16548, 17437, // alpha = 0.1332829 + 17196, 48242, 16515, 17298, // alpha = 0.1451247 + 17079, 48213, 16481, 17144, // alpha = 0.1574704 + 16975, 48182, 16447, 17002, // alpha = 0.17032 + 16878, 48149, 16413, 16871, // alpha = 0.1836735 + 16791, 48102, 16377, 16750, // alpha = 0.1975309 + 16712, 48032, 16311, 16639, // alpha = 0.2118922 + 16641, 47959, 16245, 16536, // alpha = 0.2267574 + 16574, 47885, 16180, 16440, // alpha = 0.2421265 + 16514, 47809, 16119, 16319, // alpha = 0.2579995 + 16459, 47733, 16058, 16157, // alpha = 0.2743765 + 16409, 47656, 16000, 16006, // alpha = 0.2912573 + 16340, 47579, 15945, 15867, // alpha = 0.308642 + 16254, 47503, 15893, 15739, // alpha = 0.3265306 + 16176, 47427, 15844, 15621, // alpha = 0.3449232 + 16104, 47351, 15799, 15513, // alpha = 0.3638196 + 16038, 47277, 15756, 15413, // alpha = 0.38322 + 15978, 47204, 15715, 15281, // alpha = 0.4031242 + 15922, 47132, 15677, 15110, // alpha = 0.4235324 + 15872, 47021, 15643, 14952, // alpha = 0.4444445 + 15825, 46884, 15611, 14806, // alpha = 0.4658605 + 15783, 46751, 15582, 14669, // alpha = 0.4877803 + 15745, 46622, 15554, 14544, // alpha = 0.5102041 + 15708, 46497, 15530, 14428, // alpha = 0.5331318 + 15676, 46376, 15507, 14302, // alpha = 0.5565634 + 15645, 46259, 15486, 14099, // alpha = 0.5804989 + 15617, 46146, 15467, 13911, // alpha = 0.6049383 + 15591, 45996, 15451, 13736, // alpha = 0.6298816 + 15566, 45789, 15436, 13571, // alpha = 0.6553288 + 15544, 45590, 15423, 13418, // alpha = 0.68128 + 15522, 45400, 15411, 13237, // alpha = 0.7077349 + 15503, 45219, 15401, 12969, // alpha = 0.7346939 + 15485, 45037, 15392, 12717, // alpha = 0.7621567 + 15467, 44708, 15385, 12482, // alpha = 0.7901235 + 15451, 44396, 15379, 12234, // alpha = 0.8185941 + 15437, 44099, 15374, 11820, // alpha = 0.8475687 + 15423, 43603, 15370, 11431, // alpha = 0.8770471 + 15411, 43069, 15366, 10871, // alpha = 0.9070295 + 15399, 42119, 15363, 10132, // alpha = 0.9375157 + 15389, 39498, 15361, 8463, // alpha = 0.9685059 + 15379, 8576, 15359, 41059, // alpha = 1 + + // Cos (theta) = 0.6734694 + 18956, 48552, 17193, 19195, // alpha = 0.001 + 18956, 48552, 17193, 19195, // alpha = 0.001 + 18956, 48552, 17193, 19195, // alpha = 0.001007811 + 18963, 48552, 17196, 19202, // alpha = 0.002267574 + 18956, 48552, 17191, 19194, // alpha = 0.004031243 + 18957, 48552, 17191, 19197, // alpha = 0.006298816 + 18954, 48553, 17192, 19192, // alpha = 0.009070295 + 18954, 48553, 17192, 19193, // alpha = 0.01234568 + 18957, 48553, 17192, 19196, // alpha = 0.01612497 + 18951, 48553, 17190, 19189, // alpha = 0.02040816 + 18953, 48553, 17191, 19192, // alpha = 0.02519527 + 18811, 48542, 17106, 19036, // alpha = 0.03048627 + 18665, 48528, 17033, 18874, // alpha = 0.03628118 + 18542, 48512, 16984, 18736, // alpha = 0.04258 + 18433, 48495, 16951, 18612, // alpha = 0.04938272 + 18257, 48479, 16905, 18509, // alpha = 0.05668934 + 18099, 48464, 16861, 18403, // alpha = 0.06449988 + 17959, 48448, 16819, 18235, // alpha = 0.07281432 + 17832, 48432, 16783, 18081, // alpha = 0.08163266 + 17718, 48414, 16746, 17940, // alpha = 0.09095491 + 17617, 48394, 16710, 17813, // alpha = 0.1007811 + 17526, 48372, 16675, 17696, // alpha = 0.1111111 + 17446, 48347, 16640, 17590, // alpha = 0.1219451 + 17337, 48320, 16605, 17492, // alpha = 0.1332829 + 17207, 48291, 16568, 17398, // alpha = 0.1451247 + 17088, 48260, 16531, 17233, // alpha = 0.1574704 + 16983, 48227, 16495, 17084, // alpha = 0.17032 + 16888, 48192, 16456, 16945, // alpha = 0.1836735 + 16800, 48156, 16420, 16818, // alpha = 0.1975309 + 16720, 48108, 16384, 16699, // alpha = 0.2118922 + 16646, 48031, 16310, 16589, // alpha = 0.2267574 + 16580, 47952, 16241, 16489, // alpha = 0.2421265 + 16519, 47873, 16173, 16396, // alpha = 0.2579995 + 16464, 47793, 16108, 16236, // alpha = 0.2743765 + 16413, 47712, 16046, 16077, // alpha = 0.2912573 + 16346, 47632, 15986, 15930, // alpha = 0.308642 + 16260, 47552, 15931, 15797, // alpha = 0.3265306 + 16181, 47473, 15879, 15673, // alpha = 0.3449232 + 16109, 47395, 15829, 15560, // alpha = 0.3638196 + 16043, 47318, 15783, 15456, // alpha = 0.38322 + 15981, 47243, 15739, 15357, // alpha = 0.4031242 + 15927, 47169, 15699, 15179, // alpha = 0.4235324 + 15875, 47089, 15662, 15014, // alpha = 0.4444445 + 15828, 46948, 15628, 14862, // alpha = 0.4658605 + 15786, 46811, 15596, 14721, // alpha = 0.4877803 + 15746, 46678, 15567, 14591, // alpha = 0.5102041 + 15710, 46549, 15541, 14469, // alpha = 0.5331318 + 15677, 46424, 15517, 14356, // alpha = 0.5565634 + 15646, 46304, 15495, 14168, // alpha = 0.5804989 + 15618, 46188, 15475, 13973, // alpha = 0.6049383 + 15591, 46073, 15457, 13791, // alpha = 0.6298816 + 15566, 45860, 15441, 13621, // alpha = 0.6553288 + 15544, 45655, 15427, 13462, // alpha = 0.68128 + 15522, 45460, 15415, 13314, // alpha = 0.7077349 + 15503, 45273, 15404, 13038, // alpha = 0.7346939 + 15484, 45095, 15395, 12778, // alpha = 0.7621567 + 15467, 44794, 15387, 12536, // alpha = 0.7901235 + 15451, 44472, 15380, 12307, // alpha = 0.8185941 + 15436, 44165, 15375, 11898, // alpha = 0.8475687 + 15422, 43717, 15370, 11497, // alpha = 0.8770471 + 15409, 43165, 15366, 10977, // alpha = 0.9070295 + 15398, 42277, 15364, 10270, // alpha = 0.9375157 + 15387, 40221, 15361, 8719, // alpha = 0.9685059 + 15377, 8386, 15359, 40811, // alpha = 1 + + // Cos (theta) = 0.6550768 + 19004, 48650, 17347, 19342, // alpha = 0.001 + 19004, 48650, 17347, 19342, // alpha = 0.001 + 19004, 48650, 17347, 19342, // alpha = 0.001007811 + 19107, 48650, 17196, 19464, // alpha = 0.002267574 + 19007, 48651, 17349, 19345, // alpha = 0.004031243 + 19007, 48651, 17353, 19346, // alpha = 0.006298816 + 19007, 48651, 17348, 19346, // alpha = 0.009070295 + 19007, 48651, 17350, 19346, // alpha = 0.01234568 + 19011, 48651, 17348, 19350, // alpha = 0.01612497 + 19008, 48651, 17350, 19345, // alpha = 0.02040816 + 19008, 48651, 17351, 19346, // alpha = 0.02519527 + 18855, 48632, 17244, 19170, // alpha = 0.03048627 + 18702, 48610, 17160, 18992, // alpha = 0.03628118 + 18568, 48590, 17091, 18833, // alpha = 0.04258 + 18456, 48570, 17038, 18699, // alpha = 0.04938272 + 18286, 48551, 16996, 18582, // alpha = 0.05668934 + 18119, 48533, 16951, 18479, // alpha = 0.06449988 + 17973, 48515, 16904, 18344, // alpha = 0.07281432 + 17847, 48496, 16861, 18182, // alpha = 0.08163266 + 17729, 48476, 16824, 18029, // alpha = 0.09095491 + 17627, 48454, 16782, 17894, // alpha = 0.1007811 + 17535, 48430, 16742, 17768, // alpha = 0.1111111 + 17454, 48403, 16705, 17655, // alpha = 0.1219451 + 17350, 48374, 16665, 17551, // alpha = 0.1332829 + 17221, 48342, 16624, 17458, // alpha = 0.1451247 + 17101, 48309, 16584, 17332, // alpha = 0.1574704 + 16993, 48273, 16544, 17170, // alpha = 0.17032 + 16896, 48236, 16503, 17024, // alpha = 0.1836735 + 16808, 48197, 16462, 16887, // alpha = 0.1975309 + 16727, 48157, 16423, 16762, // alpha = 0.2118922 + 16654, 48104, 16382, 16646, // alpha = 0.2267574 + 16587, 48022, 16306, 16540, // alpha = 0.2421265 + 16525, 47938, 16231, 16441, // alpha = 0.2579995 + 16468, 47854, 16161, 16317, // alpha = 0.2743765 + 16417, 47770, 16095, 16150, // alpha = 0.2912573 + 16355, 47686, 16031, 15997, // alpha = 0.308642 + 16267, 47603, 15971, 15856, // alpha = 0.3265306 + 16187, 47521, 15913, 15726, // alpha = 0.3449232 + 16114, 47440, 15860, 15608, // alpha = 0.3638196 + 16048, 47360, 15811, 15499, // alpha = 0.38322 + 15987, 47282, 15764, 15398, // alpha = 0.4031242 + 15930, 47205, 15721, 15250, // alpha = 0.4235324 + 15880, 47131, 15683, 15079, // alpha = 0.4444445 + 15832, 47012, 15645, 14920, // alpha = 0.4658605 + 15788, 46871, 15611, 14773, // alpha = 0.4877803 + 15749, 46734, 15580, 14637, // alpha = 0.5102041 + 15713, 46601, 15552, 14512, // alpha = 0.5331318 + 15679, 46473, 15527, 14395, // alpha = 0.5565634 + 15648, 46349, 15504, 14237, // alpha = 0.5804989 + 15619, 46230, 15482, 14035, // alpha = 0.6049383 + 15593, 46115, 15463, 13847, // alpha = 0.6298816 + 15567, 45930, 15447, 13671, // alpha = 0.6553288 + 15544, 45720, 15431, 13507, // alpha = 0.68128 + 15523, 45518, 15418, 13353, // alpha = 0.7077349 + 15503, 45326, 15407, 13109, // alpha = 0.7346939 + 15484, 45142, 15397, 12841, // alpha = 0.7621567 + 15466, 44879, 15389, 12588, // alpha = 0.7901235 + 15450, 44546, 15381, 12354, // alpha = 0.8185941 + 15435, 44230, 15375, 11976, // alpha = 0.8475687 + 15421, 43828, 15371, 11561, // alpha = 0.8770471 + 15408, 43259, 15367, 11081, // alpha = 0.9070295 + 15396, 42430, 15364, 10351, // alpha = 0.9375157 + 15385, 40699, 15361, 8960, // alpha = 0.9685059 + 15375, 8210, 15359, 40498, // alpha = 1 + + // Cos (theta) = 0.6361803 + 19234, 48691, 17298, 19598, // alpha = 0.001 + 19234, 48691, 17298, 19598, // alpha = 0.001 + 19234, 48691, 17298, 19598, // alpha = 0.001007811 + 19231, 48691, 17297, 19596, // alpha = 0.002267574 + 19232, 48691, 17301, 19597, // alpha = 0.004031243 + 19232, 48691, 17299, 19597, // alpha = 0.006298816 + 19231, 48691, 17296, 19596, // alpha = 0.009070295 + 19232, 48692, 17297, 19597, // alpha = 0.01234568 + 19236, 48692, 17297, 19599, // alpha = 0.01612497 + 19234, 48692, 17297, 19598, // alpha = 0.02040816 + 19233, 48692, 17300, 19597, // alpha = 0.02519527 + 18921, 48680, 17384, 19344, // alpha = 0.03048627 + 18757, 48666, 17279, 19142, // alpha = 0.03628118 + 18607, 48651, 17210, 18957, // alpha = 0.04258 + 18482, 48635, 17150, 18798, // alpha = 0.04938272 + 18330, 48619, 17097, 18669, // alpha = 0.05668934 + 18146, 48601, 17047, 18550, // alpha = 0.06449988 + 17994, 48583, 16998, 18450, // alpha = 0.07281432 + 17863, 48563, 16950, 18291, // alpha = 0.08163266 + 17743, 48541, 16906, 18127, // alpha = 0.09095491 + 17641, 48517, 16861, 17983, // alpha = 0.1007811 + 17544, 48490, 16819, 17845, // alpha = 0.1111111 + 17461, 48461, 16775, 17725, // alpha = 0.1219451 + 17369, 48429, 16730, 17616, // alpha = 0.1332829 + 17234, 48395, 16686, 17514, // alpha = 0.1451247 + 17113, 48359, 16642, 17421, // alpha = 0.1574704 + 17005, 48321, 16596, 17263, // alpha = 0.17032 + 16908, 48281, 16554, 17108, // alpha = 0.1836735 + 16816, 48240, 16508, 16961, // alpha = 0.1975309 + 16736, 48197, 16464, 16828, // alpha = 0.2118922 + 16661, 48154, 16420, 16705, // alpha = 0.2267574 + 16594, 48092, 16374, 16593, // alpha = 0.2421265 + 16531, 48004, 16293, 16489, // alpha = 0.2579995 + 16474, 47916, 16217, 16393, // alpha = 0.2743765 + 16421, 47827, 16146, 16226, // alpha = 0.2912573 + 16361, 47740, 16077, 16064, // alpha = 0.308642 + 16274, 47654, 16011, 15917, // alpha = 0.3265306 + 16193, 47568, 15950, 15781, // alpha = 0.3449232 + 16120, 47484, 15893, 15657, // alpha = 0.3638196 + 16053, 47402, 15840, 15543, // alpha = 0.38322 + 15991, 47321, 15791, 15438, // alpha = 0.4031242 + 15935, 47242, 15744, 15322, // alpha = 0.4235324 + 15883, 47165, 15702, 15144, // alpha = 0.4444445 + 15836, 47077, 15662, 14979, // alpha = 0.4658605 + 15792, 46931, 15627, 14826, // alpha = 0.4877803 + 15751, 46790, 15594, 14685, // alpha = 0.5102041 + 15715, 46653, 15564, 14555, // alpha = 0.5331318 + 15681, 46521, 15537, 14433, // alpha = 0.5565634 + 15649, 46394, 15513, 14304, // alpha = 0.5804989 + 15620, 46271, 15491, 14097, // alpha = 0.6049383 + 15594, 46154, 15470, 13903, // alpha = 0.6298816 + 15568, 46001, 15452, 13720, // alpha = 0.6553288 + 15545, 45784, 15436, 13551, // alpha = 0.68128 + 15523, 45577, 15422, 13393, // alpha = 0.7077349 + 15502, 45379, 15410, 13177, // alpha = 0.7346939 + 15484, 45190, 15399, 12902, // alpha = 0.7621567 + 15466, 44963, 15390, 12642, // alpha = 0.7901235 + 15449, 44620, 15383, 12398, // alpha = 0.8185941 + 15434, 44294, 15377, 12053, // alpha = 0.8475687 + 15419, 43937, 15371, 11625, // alpha = 0.8770471 + 15407, 43350, 15367, 11185, // alpha = 0.9070295 + 15395, 42577, 15364, 10430, // alpha = 0.9375157 + 15384, 41057, 15361, 9185, // alpha = 0.9685059 + 15373, 7901, 15359, 40202, // alpha = 1 + + // Cos (theta) = 0.61678 + 19283, 48686, 17403, 19692, // alpha = 0.001 + 19283, 48686, 17403, 19692, // alpha = 0.001 + 19283, 48686, 17403, 19692, // alpha = 0.001007811 + 19285, 48686, 17402, 19694, // alpha = 0.002267574 + 19292, 48686, 17402, 19698, // alpha = 0.004031243 + 19286, 48686, 17400, 19694, // alpha = 0.006298816 + 19281, 48686, 17401, 19691, // alpha = 0.009070295 + 19285, 48686, 17403, 19693, // alpha = 0.01234568 + 19286, 48686, 17401, 19694, // alpha = 0.01612497 + 19284, 48686, 17401, 19693, // alpha = 0.02040816 + 19286, 48686, 17399, 19694, // alpha = 0.02519527 + 18960, 48695, 17454, 19478, // alpha = 0.03048627 + 18785, 48700, 17401, 19272, // alpha = 0.03628118 + 18634, 48699, 17331, 19073, // alpha = 0.04258 + 18506, 48693, 17266, 18902, // alpha = 0.04938272 + 18361, 48683, 17203, 18754, // alpha = 0.05668934 + 18174, 48669, 17148, 18627, // alpha = 0.06449988 + 18021, 48652, 17098, 18520, // alpha = 0.07281432 + 17880, 48632, 17049, 18409, // alpha = 0.08163266 + 17758, 48608, 16998, 18233, // alpha = 0.09095491 + 17652, 48582, 16950, 18076, // alpha = 0.1007811 + 17556, 48553, 16901, 17932, // alpha = 0.1111111 + 17472, 48522, 16851, 17802, // alpha = 0.1219451 + 17380, 48487, 16804, 17681, // alpha = 0.1332829 + 17249, 48451, 16753, 17575, // alpha = 0.1451247 + 17126, 48411, 16704, 17475, // alpha = 0.1574704 + 17016, 48370, 16655, 17359, // alpha = 0.17032 + 16917, 48327, 16605, 17193, // alpha = 0.1836735 + 16826, 48283, 16557, 17039, // alpha = 0.1975309 + 16743, 48238, 16508, 16897, // alpha = 0.2118922 + 16669, 48192, 16461, 16767, // alpha = 0.2267574 + 16601, 48146, 16415, 16648, // alpha = 0.2421265 + 16537, 48071, 16360, 16538, // alpha = 0.2579995 + 16479, 47978, 16278, 16437, // alpha = 0.2743765 + 16426, 47886, 16200, 16304, // alpha = 0.2912573 + 16371, 47795, 16125, 16135, // alpha = 0.308642 + 16281, 47705, 16054, 15980, // alpha = 0.3265306 + 16200, 47616, 15989, 15837, // alpha = 0.3449232 + 16127, 47529, 15928, 15708, // alpha = 0.3638196 + 16059, 47444, 15870, 15589, // alpha = 0.38322 + 15996, 47360, 15817, 15478, // alpha = 0.4031242 + 15941, 47279, 15768, 15378, // alpha = 0.4235324 + 15888, 47200, 15723, 15210, // alpha = 0.4444445 + 15841, 47123, 15681, 15039, // alpha = 0.4658605 + 15795, 46991, 15644, 14880, // alpha = 0.4877803 + 15755, 46846, 15609, 14733, // alpha = 0.5102041 + 15717, 46706, 15577, 14597, // alpha = 0.5331318 + 15684, 46570, 15548, 14473, // alpha = 0.5565634 + 15651, 46439, 15522, 14356, // alpha = 0.5804989 + 15622, 46313, 15498, 14159, // alpha = 0.6049383 + 15595, 46192, 15477, 13958, // alpha = 0.6298816 + 15569, 46072, 15458, 13772, // alpha = 0.6553288 + 15546, 45849, 15441, 13596, // alpha = 0.68128 + 15523, 45635, 15426, 13432, // alpha = 0.7077349 + 15503, 45432, 15413, 13248, // alpha = 0.7346939 + 15484, 45237, 15402, 12962, // alpha = 0.7621567 + 15466, 45047, 15392, 12694, // alpha = 0.7901235 + 15449, 44694, 15384, 12444, // alpha = 0.8185941 + 15433, 44358, 15378, 12129, // alpha = 0.8475687 + 15419, 44039, 15372, 11687, // alpha = 0.8770471 + 15405, 43439, 15367, 11273, // alpha = 0.9070295 + 15393, 42720, 15364, 10506, // alpha = 0.9375157 + 15382, 41276, 15361, 9312, // alpha = 0.9685059 + 15372, 7594, 15359, 39939, // alpha = 1 + + // Cos (theta) = 0.5968758 + 19261, 48723, 17465, 19744, // alpha = 0.001 + 19261, 48723, 17465, 19744, // alpha = 0.001 + 19261, 48723, 17465, 19744, // alpha = 0.001007811 + 19257, 48723, 17464, 19742, // alpha = 0.002267574 + 19256, 48723, 17464, 19741, // alpha = 0.004031243 + 19252, 48723, 17464, 19738, // alpha = 0.006298816 + 19253, 48723, 17463, 19739, // alpha = 0.009070295 + 19256, 48723, 17465, 19741, // alpha = 0.01234568 + 19252, 48723, 17464, 19739, // alpha = 0.01612497 + 19256, 48723, 17465, 19741, // alpha = 0.02040816 + 19259, 48723, 17466, 19743, // alpha = 0.02519527 + 18956, 48735, 17518, 19531, // alpha = 0.03048627 + 18785, 48746, 17470, 19373, // alpha = 0.03628118 + 18642, 48754, 17433, 19174, // alpha = 0.04258 + 18515, 48756, 17388, 18996, // alpha = 0.04938272 + 18382, 48751, 17327, 18841, // alpha = 0.05668934 + 18195, 48741, 17266, 18706, // alpha = 0.06449988 + 18038, 48725, 17210, 18589, // alpha = 0.07281432 + 17894, 48705, 17157, 18482, // alpha = 0.08163266 + 17770, 48680, 17101, 18343, // alpha = 0.09095491 + 17663, 48652, 17046, 18175, // alpha = 0.1007811 + 17566, 48620, 16991, 18021, // alpha = 0.1111111 + 17482, 48586, 16936, 17883, // alpha = 0.1219451 + 17401, 48548, 16883, 17754, // alpha = 0.1332829 + 17265, 48508, 16827, 17640, // alpha = 0.1451247 + 17141, 48466, 16771, 17533, // alpha = 0.1574704 + 17029, 48421, 16716, 17436, // alpha = 0.17032 + 16928, 48375, 16662, 17284, // alpha = 0.1836735 + 16835, 48328, 16607, 17120, // alpha = 0.1975309 + 16753, 48280, 16555, 16969, // alpha = 0.2118922 + 16676, 48232, 16504, 16831, // alpha = 0.2267574 + 16607, 48183, 16455, 16705, // alpha = 0.2421265 + 16543, 48134, 16407, 16589, // alpha = 0.2579995 + 16485, 48042, 16341, 16482, // alpha = 0.2743765 + 16431, 47946, 16255, 16385, // alpha = 0.2912573 + 16379, 47851, 16175, 16207, // alpha = 0.308642 + 16289, 47757, 16100, 16044, // alpha = 0.3265306 + 16208, 47665, 16029, 15895, // alpha = 0.3449232 + 16133, 47575, 15963, 15760, // alpha = 0.3638196 + 16066, 47486, 15901, 15635, // alpha = 0.38322 + 16004, 47400, 15845, 15521, // alpha = 0.4031242 + 15945, 47316, 15793, 15415, // alpha = 0.4235324 + 15892, 47234, 15744, 15276, // alpha = 0.4444445 + 15844, 47155, 15700, 15098, // alpha = 0.4658605 + 15799, 47052, 15660, 14935, // alpha = 0.4877803 + 15758, 46903, 15624, 14782, // alpha = 0.5102041 + 15719, 46758, 15589, 14641, // alpha = 0.5331318 + 15686, 46619, 15559, 14512, // alpha = 0.5565634 + 15653, 46485, 15532, 14391, // alpha = 0.5804989 + 15623, 46355, 15506, 14223, // alpha = 0.6049383 + 15596, 46231, 15484, 14015, // alpha = 0.6298816 + 15571, 46111, 15464, 13822, // alpha = 0.6553288 + 15547, 45913, 15446, 13641, // alpha = 0.68128 + 15524, 45694, 15430, 13472, // alpha = 0.7077349 + 15504, 45484, 15416, 13315, // alpha = 0.7346939 + 15484, 45284, 15404, 13024, // alpha = 0.7621567 + 15466, 45093, 15394, 12747, // alpha = 0.7901235 + 15449, 44767, 15386, 12489, // alpha = 0.8185941 + 15433, 44421, 15379, 12203, // alpha = 0.8475687 + 15418, 44092, 15373, 11749, // alpha = 0.8770471 + 15404, 43528, 15368, 11325, // alpha = 0.9070295 + 15392, 42861, 15364, 10582, // alpha = 0.9375157 + 15380, 41488, 15361, 9418, // alpha = 0.9685059 + 15370, 7303, 15359, 39428, // alpha = 1 + + // Cos (theta) = 0.5764676 + 19069, 48826, 17654, 19672, // alpha = 0.001 + 19069, 48826, 17654, 19672, // alpha = 0.001 + 19069, 48826, 17654, 19672, // alpha = 0.001007811 + 19173, 48826, 17552, 19753, // alpha = 0.002267574 + 19177, 48826, 17557, 19756, // alpha = 0.004031243 + 19173, 48826, 17552, 19752, // alpha = 0.006298816 + 19171, 48826, 17555, 19751, // alpha = 0.009070295 + 19062, 48826, 17654, 19667, // alpha = 0.01234568 + 19174, 48826, 17550, 19753, // alpha = 0.01612497 + 19176, 48826, 17551, 19754, // alpha = 0.02040816 + 19067, 48826, 17656, 19671, // alpha = 0.02519527 + 18915, 48827, 17599, 19562, // alpha = 0.03048627 + 18766, 48831, 17548, 19453, // alpha = 0.03628118 + 18630, 48835, 17507, 19254, // alpha = 0.04258 + 18513, 48836, 17467, 19081, // alpha = 0.04938272 + 18390, 48832, 17434, 18926, // alpha = 0.05668934 + 18209, 48821, 17394, 18786, // alpha = 0.06449988 + 18049, 48805, 17331, 18661, // alpha = 0.07281432 + 17910, 48783, 17272, 18550, // alpha = 0.08163266 + 17783, 48756, 17215, 18448, // alpha = 0.09095491 + 17674, 48725, 17153, 18281, // alpha = 0.1007811 + 17577, 48690, 17094, 18117, // alpha = 0.1111111 + 17490, 48653, 17031, 17967, // alpha = 0.1219451 + 17412, 48612, 16971, 17831, // alpha = 0.1332829 + 17277, 48568, 16908, 17706, // alpha = 0.1451247 + 17154, 48522, 16845, 17593, // alpha = 0.1574704 + 17042, 48474, 16784, 17490, // alpha = 0.17032 + 16939, 48425, 16724, 17380, // alpha = 0.1836735 + 16846, 48375, 16664, 17205, // alpha = 0.1975309 + 16763, 48323, 16605, 17047, // alpha = 0.2118922 + 16685, 48272, 16550, 16898, // alpha = 0.2267574 + 16615, 48220, 16496, 16765, // alpha = 0.2421265 + 16550, 48169, 16444, 16642, // alpha = 0.2579995 + 16491, 48108, 16395, 16530, // alpha = 0.2743765 + 16437, 48007, 16315, 16428, // alpha = 0.2912573 + 16388, 47907, 16229, 16284, // alpha = 0.308642 + 16299, 47810, 16147, 16112, // alpha = 0.3265306 + 16219, 47714, 16070, 15957, // alpha = 0.3449232 + 16142, 47621, 16000, 15814, // alpha = 0.3638196 + 16073, 47529, 15934, 15683, // alpha = 0.38322 + 16008, 47440, 15874, 15563, // alpha = 0.4031242 + 15951, 47354, 15819, 15454, // alpha = 0.4235324 + 15896, 47269, 15768, 15345, // alpha = 0.4444445 + 15847, 47188, 15721, 15160, // alpha = 0.4658605 + 15803, 47108, 15678, 14989, // alpha = 0.4877803 + 15761, 46960, 15639, 14831, // alpha = 0.5102041 + 15723, 46811, 15603, 14686, // alpha = 0.5331318 + 15688, 46668, 15571, 14551, // alpha = 0.5565634 + 15656, 46530, 15542, 14428, // alpha = 0.5804989 + 15625, 46397, 15515, 14287, // alpha = 0.6049383 + 15598, 46269, 15491, 14073, // alpha = 0.6298816 + 15572, 46147, 15470, 13873, // alpha = 0.6553288 + 15547, 45978, 15451, 13686, // alpha = 0.68128 + 15525, 45753, 15434, 13513, // alpha = 0.7077349 + 15504, 45538, 15420, 13350, // alpha = 0.7346939 + 15484, 45332, 15407, 13085, // alpha = 0.7621567 + 15466, 45135, 15396, 12801, // alpha = 0.7901235 + 15449, 44841, 15387, 12532, // alpha = 0.8185941 + 15432, 44484, 15380, 12279, // alpha = 0.8475687 + 15417, 44146, 15373, 11811, // alpha = 0.8770471 + 15403, 43615, 15368, 11373, // alpha = 0.9070295 + 15391, 43000, 15364, 10655, // alpha = 0.9375157 + 15379, 41694, 15361, 9522, // alpha = 0.9685059 + 15368, 6885, 15359, 38946, // alpha = 1 + + // Cos (theta) = 0.5555555 + 19114, 48966, 17653, 19781, // alpha = 0.001 + 19114, 48966, 17653, 19781, // alpha = 0.001 + 19114, 48966, 17653, 19781, // alpha = 0.001007811 + 19111, 48966, 17653, 19778, // alpha = 0.002267574 + 19113, 48966, 17651, 19779, // alpha = 0.004031243 + 19116, 48966, 17651, 19783, // alpha = 0.006298816 + 19110, 48966, 17652, 19778, // alpha = 0.009070295 + 19112, 48966, 17652, 19779, // alpha = 0.01234568 + 19112, 48966, 17652, 19780, // alpha = 0.01612497 + 19117, 48966, 17652, 19783, // alpha = 0.02040816 + 19111, 48966, 17653, 19778, // alpha = 0.02519527 + 18882, 48962, 17699, 19600, // alpha = 0.03048627 + 18742, 48956, 17639, 19494, // alpha = 0.03628118 + 18621, 48949, 17591, 19344, // alpha = 0.04258 + 18509, 48941, 17550, 19167, // alpha = 0.04938272 + 18393, 48930, 17512, 19013, // alpha = 0.05668934 + 18214, 48914, 17476, 18867, // alpha = 0.06449988 + 18057, 48893, 17441, 18736, // alpha = 0.07281432 + 17920, 48868, 17407, 18619, // alpha = 0.08163266 + 17798, 48838, 17339, 18513, // alpha = 0.09095491 + 17686, 48803, 17272, 18397, // alpha = 0.1007811 + 17587, 48765, 17203, 18220, // alpha = 0.1111111 + 17499, 48723, 17133, 18059, // alpha = 0.1219451 + 17421, 48678, 17066, 17912, // alpha = 0.1332829 + 17297, 48631, 16996, 17782, // alpha = 0.1451247 + 17168, 48581, 16925, 17658, // alpha = 0.1574704 + 17053, 48530, 16857, 17546, // alpha = 0.17032 + 16952, 48477, 16790, 17446, // alpha = 0.1836735 + 16857, 48423, 16723, 17296, // alpha = 0.1975309 + 16772, 48368, 16659, 17126, // alpha = 0.2118922 + 16693, 48313, 16598, 16970, // alpha = 0.2267574 + 16622, 48259, 16540, 16827, // alpha = 0.2421265 + 16554, 48205, 16484, 16695, // alpha = 0.2579995 + 16495, 48151, 16430, 16577, // alpha = 0.2743765 + 16440, 48068, 16378, 16470, // alpha = 0.2912573 + 16393, 47965, 16283, 16362, // alpha = 0.308642 + 16313, 47863, 16195, 16184, // alpha = 0.3265306 + 16228, 47764, 16114, 16018, // alpha = 0.3449232 + 16150, 47667, 16039, 15869, // alpha = 0.3638196 + 16079, 47573, 15970, 15731, // alpha = 0.38322 + 16015, 47481, 15905, 15607, // alpha = 0.4031242 + 15955, 47391, 15846, 15492, // alpha = 0.4235324 + 15902, 47305, 15791, 15388, // alpha = 0.4444445 + 15852, 47221, 15741, 15223, // alpha = 0.4658605 + 15807, 47139, 15695, 15046, // alpha = 0.4877803 + 15765, 47017, 15655, 14883, // alpha = 0.5102041 + 15726, 46864, 15617, 14731, // alpha = 0.5331318 + 15690, 46718, 15582, 14591, // alpha = 0.5565634 + 15658, 46576, 15551, 14464, // alpha = 0.5804989 + 15627, 46440, 15524, 14344, // alpha = 0.6049383 + 15600, 46308, 15499, 14131, // alpha = 0.6298816 + 15573, 46183, 15476, 13924, // alpha = 0.6553288 + 15549, 46043, 15456, 13732, // alpha = 0.68128 + 15526, 45812, 15439, 13553, // alpha = 0.7077349 + 15504, 45591, 15423, 13385, // alpha = 0.7346939 + 15485, 45379, 15410, 13146, // alpha = 0.7621567 + 15466, 45178, 15398, 12852, // alpha = 0.7901235 + 15449, 44914, 15389, 12579, // alpha = 0.8185941 + 15432, 44548, 15381, 12322, // alpha = 0.8475687 + 15416, 44199, 15374, 11872, // alpha = 0.8770471 + 15402, 43702, 15369, 11421, // alpha = 0.9070295 + 15389, 43072, 15365, 10728, // alpha = 0.9375157 + 15378, 41895, 15362, 9619, // alpha = 0.9685059 + 15367, 6359, 15358, 38073, // alpha = 1 + + // Cos (theta) = 0.5341396 + 19101, 49133, 17777, 19848, // alpha = 0.001 + 19101, 49133, 17777, 19848, // alpha = 0.001 + 19101, 49133, 17777, 19848, // alpha = 0.001007811 + 19102, 49133, 17776, 19849, // alpha = 0.002267574 + 19098, 49133, 17775, 19845, // alpha = 0.004031243 + 19101, 49134, 17775, 19847, // alpha = 0.006298816 + 19099, 49134, 17776, 19846, // alpha = 0.009070295 + 19103, 49134, 17776, 19849, // alpha = 0.01234568 + 19098, 49134, 17773, 19845, // alpha = 0.01612497 + 19101, 49134, 17775, 19847, // alpha = 0.02040816 + 19101, 49134, 17777, 19847, // alpha = 0.02519527 + 18874, 49124, 17825, 19660, // alpha = 0.03048627 + 18737, 49108, 17753, 19551, // alpha = 0.03628118 + 18616, 49089, 17694, 19448, // alpha = 0.04258 + 18511, 49067, 17646, 19271, // alpha = 0.04938272 + 18395, 49044, 17601, 19106, // alpha = 0.05668934 + 18224, 49019, 17560, 18957, // alpha = 0.06449988 + 18068, 48991, 17520, 18820, // alpha = 0.07281432 + 17932, 48960, 17481, 18696, // alpha = 0.08163266 + 17807, 48925, 17443, 18580, // alpha = 0.09095491 + 17697, 48887, 17402, 18476, // alpha = 0.1007811 + 17599, 48844, 17323, 18332, // alpha = 0.1111111 + 17511, 48798, 17250, 18158, // alpha = 0.1219451 + 17430, 48748, 17169, 18000, // alpha = 0.1332829 + 17310, 48697, 17093, 17857, // alpha = 0.1451247 + 17183, 48642, 17014, 17727, // alpha = 0.1574704 + 17068, 48587, 16936, 17608, // alpha = 0.17032 + 16963, 48530, 16861, 17499, // alpha = 0.1836735 + 16868, 48472, 16787, 17391, // alpha = 0.1975309 + 16780, 48414, 16718, 17209, // alpha = 0.2118922 + 16700, 48356, 16651, 17041, // alpha = 0.2267574 + 16627, 48298, 16586, 16890, // alpha = 0.2421265 + 16562, 48241, 16526, 16753, // alpha = 0.2579995 + 16502, 48185, 16468, 16629, // alpha = 0.2743765 + 16448, 48130, 16413, 16516, // alpha = 0.2912573 + 16398, 48023, 16340, 16412, // alpha = 0.308642 + 16318, 47918, 16247, 16250, // alpha = 0.3265306 + 16237, 47814, 16160, 16082, // alpha = 0.3449232 + 16160, 47714, 16080, 15925, // alpha = 0.3638196 + 16087, 47616, 16006, 15782, // alpha = 0.38322 + 16020, 47522, 15937, 15651, // alpha = 0.4031242 + 15961, 47429, 15873, 15532, // alpha = 0.4235324 + 15907, 47340, 15816, 15423, // alpha = 0.4444445 + 15856, 47254, 15763, 15287, // alpha = 0.4658605 + 15810, 47170, 15714, 15102, // alpha = 0.4877803 + 15768, 47074, 15670, 14933, // alpha = 0.5102041 + 15729, 46918, 15631, 14777, // alpha = 0.5331318 + 15693, 46767, 15594, 14633, // alpha = 0.5565634 + 15661, 46622, 15562, 14500, // alpha = 0.5804989 + 15630, 46482, 15533, 14377, // alpha = 0.6049383 + 15601, 46348, 15506, 14189, // alpha = 0.6298816 + 15575, 46218, 15482, 13977, // alpha = 0.6553288 + 15550, 46094, 15462, 13778, // alpha = 0.68128 + 15527, 45871, 15443, 13594, // alpha = 0.7077349 + 15505, 45644, 15427, 13421, // alpha = 0.7346939 + 15485, 45427, 15413, 13209, // alpha = 0.7621567 + 15467, 45220, 15400, 12907, // alpha = 0.7901235 + 15449, 44987, 15390, 12624, // alpha = 0.8185941 + 15432, 44610, 15382, 12360, // alpha = 0.8475687 + 15416, 44251, 15375, 11934, // alpha = 0.8770471 + 15402, 43788, 15369, 11468, // alpha = 0.9070295 + 15388, 43139, 15365, 10801, // alpha = 0.9375157 + 15376, 42036, 15362, 9716, // alpha = 0.9685059 + 15365, 5587, 15358, 36140, // alpha = 1 + + // Cos (theta) = 0.5122197 + 19059, 49238, 18074, 19888, // alpha = 0.001 + 19059, 49238, 18074, 19888, // alpha = 0.001 + 19059, 49238, 18074, 19888, // alpha = 0.001007811 + 19146, 49238, 17930, 19969, // alpha = 0.002267574 + 19143, 49238, 17930, 19968, // alpha = 0.004031243 + 19143, 49238, 17933, 19968, // alpha = 0.006298816 + 19145, 49239, 17932, 19969, // alpha = 0.009070295 + 19054, 49239, 18074, 19884, // alpha = 0.01234568 + 19148, 49239, 17930, 19972, // alpha = 0.01612497 + 19056, 49239, 18076, 19885, // alpha = 0.02040816 + 19054, 49239, 18076, 19884, // alpha = 0.02519527 + 18953, 49227, 17888, 19805, // alpha = 0.03048627 + 18772, 49212, 17862, 19648, // alpha = 0.03628118 + 18640, 49195, 17800, 19533, // alpha = 0.04258 + 18525, 49177, 17747, 19407, // alpha = 0.04938272 + 18421, 49160, 17701, 19227, // alpha = 0.05668934 + 18241, 49133, 17655, 19062, // alpha = 0.06449988 + 18088, 49097, 17609, 18917, // alpha = 0.07281432 + 17948, 49060, 17565, 18781, // alpha = 0.08163266 + 17822, 49019, 17522, 18657, // alpha = 0.09095491 + 17711, 48975, 17478, 18545, // alpha = 0.1007811 + 17609, 48928, 17434, 18441, // alpha = 0.1111111 + 17519, 48876, 17373, 18263, // alpha = 0.1219451 + 17439, 48822, 17285, 18094, // alpha = 0.1332829 + 17327, 48765, 17197, 17940, // alpha = 0.1451247 + 17198, 48706, 17110, 17800, // alpha = 0.1574704 + 17082, 48646, 17023, 17673, // alpha = 0.17032 + 16976, 48585, 16940, 17556, // alpha = 0.1836735 + 16878, 48523, 16857, 17449, // alpha = 0.1975309 + 16790, 48461, 16780, 17295, // alpha = 0.2118922 + 16709, 48399, 16706, 17118, // alpha = 0.2267574 + 16636, 48338, 16637, 16958, // alpha = 0.2421265 + 16570, 48278, 16569, 16814, // alpha = 0.2579995 + 16511, 48219, 16505, 16682, // alpha = 0.2743765 + 16454, 48162, 16447, 16562, // alpha = 0.2912573 + 16402, 48082, 16393, 16453, // alpha = 0.308642 + 16330, 47972, 16302, 16326, // alpha = 0.3265306 + 16242, 47865, 16209, 16144, // alpha = 0.3449232 + 16163, 47762, 16122, 15980, // alpha = 0.3638196 + 16097, 47661, 16043, 15835, // alpha = 0.38322 + 16029, 47563, 15970, 15698, // alpha = 0.4031242 + 15967, 47468, 15902, 15573, // alpha = 0.4235324 + 15912, 47376, 15841, 15459, // alpha = 0.4444445 + 15863, 47287, 15785, 15353, // alpha = 0.4658605 + 15814, 47201, 15733, 15160, // alpha = 0.4877803 + 15773, 47118, 15687, 14986, // alpha = 0.5102041 + 15734, 46972, 15645, 14825, // alpha = 0.5331318 + 15698, 46817, 15607, 14675, // alpha = 0.5565634 + 15664, 46668, 15572, 14538, // alpha = 0.5804989 + 15633, 46525, 15542, 14411, // alpha = 0.6049383 + 15604, 46387, 15514, 14249, // alpha = 0.6298816 + 15577, 46254, 15489, 14029, // alpha = 0.6553288 + 15553, 46127, 15467, 13826, // alpha = 0.68128 + 15528, 45931, 15447, 13636, // alpha = 0.7077349 + 15506, 45698, 15430, 13458, // alpha = 0.7346939 + 15486, 45475, 15416, 13270, // alpha = 0.7621567 + 15467, 45262, 15403, 12961, // alpha = 0.7901235 + 15449, 45058, 15392, 12670, // alpha = 0.8185941 + 15432, 44673, 15383, 12398, // alpha = 0.8475687 + 15416, 44304, 15376, 11997, // alpha = 0.8770471 + 15401, 43873, 15370, 11517, // alpha = 0.9070295 + 15387, 43205, 15365, 10871, // alpha = 0.9375157 + 15375, 42131, 15362, 9812, // alpha = 0.9685059 + 15364, 4184, 15358, 4056, // alpha = 1 + + // Cos (theta) = 0.4897959 + 19298, 49321, 18099, 20204, // alpha = 0.001 + 19298, 49321, 18099, 20204, // alpha = 0.001 + 19298, 49321, 18099, 20204, // alpha = 0.001007811 + 19297, 49321, 18096, 20204, // alpha = 0.002267574 + 19292, 49322, 18097, 20199, // alpha = 0.004031243 + 19294, 49322, 18100, 20201, // alpha = 0.006298816 + 19297, 49322, 18097, 20203, // alpha = 0.009070295 + 19279, 49322, 18110, 20188, // alpha = 0.01234568 + 19301, 49322, 18096, 20207, // alpha = 0.01612497 + 19294, 49322, 18097, 20201, // alpha = 0.02040816 + 19292, 49322, 18100, 20200, // alpha = 0.02519527 + 19053, 49304, 18042, 19982, // alpha = 0.03048627 + 18835, 49283, 18002, 19780, // alpha = 0.03628118 + 18682, 49263, 17938, 19639, // alpha = 0.04258 + 18556, 49242, 17876, 19520, // alpha = 0.04938272 + 18449, 49222, 17817, 19376, // alpha = 0.05668934 + 18278, 49202, 17760, 19192, // alpha = 0.06449988 + 18112, 49181, 17710, 19025, // alpha = 0.07281432 + 17966, 49159, 17661, 18875, // alpha = 0.08163266 + 17838, 49120, 17612, 18741, // alpha = 0.09095491 + 17726, 49070, 17559, 18621, // alpha = 0.1007811 + 17624, 49016, 17510, 18508, // alpha = 0.1111111 + 17531, 48959, 17459, 18380, // alpha = 0.1219451 + 17450, 48899, 17409, 18198, // alpha = 0.1332829 + 17347, 48837, 17313, 18031, // alpha = 0.1451247 + 17216, 48773, 17213, 17879, // alpha = 0.1574704 + 17097, 48708, 17116, 17741, // alpha = 0.17032 + 16988, 48642, 17023, 17616, // alpha = 0.1836735 + 16888, 48575, 16934, 17501, // alpha = 0.1975309 + 16800, 48509, 16846, 17388, // alpha = 0.2118922 + 16719, 48444, 16765, 17201, // alpha = 0.2267574 + 16646, 48379, 16688, 17031, // alpha = 0.2421265 + 16581, 48316, 16614, 16879, // alpha = 0.2579995 + 16518, 48254, 16547, 16738, // alpha = 0.2743765 + 16462, 48194, 16484, 16612, // alpha = 0.2912573 + 16409, 48135, 16426, 16496, // alpha = 0.308642 + 16339, 48028, 16359, 16392, // alpha = 0.3265306 + 16250, 47917, 16259, 16210, // alpha = 0.3449232 + 16173, 47809, 16167, 16040, // alpha = 0.3638196 + 16098, 47705, 16082, 15884, // alpha = 0.38322 + 16038, 47604, 16004, 15746, // alpha = 0.4031242 + 15975, 47506, 15933, 15615, // alpha = 0.4235324 + 15919, 47412, 15867, 15497, // alpha = 0.4444445 + 15867, 47320, 15807, 15389, // alpha = 0.4658605 + 15820, 47232, 15753, 15220, // alpha = 0.4877803 + 15776, 47147, 15704, 15039, // alpha = 0.5102041 + 15738, 47026, 15660, 14873, // alpha = 0.5331318 + 15700, 46867, 15620, 14717, // alpha = 0.5565634 + 15666, 46714, 15583, 14575, // alpha = 0.5804989 + 15636, 46567, 15551, 14445, // alpha = 0.6049383 + 15606, 46426, 15522, 14309, // alpha = 0.6298816 + 15579, 46290, 15496, 14083, // alpha = 0.6553288 + 15554, 46160, 15472, 13873, // alpha = 0.68128 + 15530, 45991, 15452, 13677, // alpha = 0.7077349 + 15507, 45752, 15434, 13494, // alpha = 0.7346939 + 15487, 45523, 15419, 13323, // alpha = 0.7621567 + 15467, 45304, 15405, 13015, // alpha = 0.7901235 + 15449, 45095, 15394, 12716, // alpha = 0.8185941 + 15432, 44736, 15384, 12436, // alpha = 0.8475687 + 15415, 44356, 15377, 12057, // alpha = 0.8770471 + 15400, 43958, 15370, 11566, // alpha = 0.9070295 + 15386, 43270, 15365, 10940, // alpha = 0.9375157 + 15374, 42223, 15362, 9906, // alpha = 0.9685059 + 15362, 36110, 15358, 5454, // alpha = 1 + + // Cos (theta) = 0.4668682 + 19463, 49347, 18263, 20484, // alpha = 0.001 + 19463, 49347, 18263, 20484, // alpha = 0.001 + 19463, 49347, 18263, 20484, // alpha = 0.001007811 + 19574, 49347, 18008, 20594, // alpha = 0.002267574 + 19572, 49347, 18009, 20592, // alpha = 0.004031243 + 19465, 49347, 18264, 20486, // alpha = 0.006298816 + 19575, 49347, 18009, 20595, // alpha = 0.009070295 + 19465, 49348, 18264, 20486, // alpha = 0.01234568 + 19576, 49348, 18008, 20597, // alpha = 0.01612497 + 19573, 49348, 18009, 20593, // alpha = 0.02040816 + 19462, 49348, 18263, 20483, // alpha = 0.02519527 + 19178, 49341, 18195, 20205, // alpha = 0.03048627 + 18924, 49330, 18158, 19954, // alpha = 0.03628118 + 18739, 49316, 18092, 19771, // alpha = 0.04258 + 18595, 49300, 18019, 19626, // alpha = 0.04938272 + 18477, 49282, 17951, 19504, // alpha = 0.05668934 + 18318, 49261, 17891, 19339, // alpha = 0.06449988 + 18144, 49239, 17829, 19153, // alpha = 0.07281432 + 17993, 49215, 17769, 18987, // alpha = 0.08163266 + 17860, 49189, 17710, 18837, // alpha = 0.09095491 + 17741, 49161, 17654, 18701, // alpha = 0.1007811 + 17638, 49110, 17595, 18580, // alpha = 0.1111111 + 17545, 49047, 17538, 18470, // alpha = 0.1219451 + 17461, 48980, 17479, 18308, // alpha = 0.1332829 + 17370, 48912, 17422, 18129, // alpha = 0.1451247 + 17232, 48842, 17326, 17963, // alpha = 0.1574704 + 17110, 48771, 17218, 17813, // alpha = 0.17032 + 17001, 48700, 17115, 17679, // alpha = 0.1836735 + 16903, 48629, 17013, 17558, // alpha = 0.1975309 + 16813, 48559, 16918, 17447, // alpha = 0.2118922 + 16730, 48489, 16828, 17287, // alpha = 0.2267574 + 16657, 48421, 16742, 17107, // alpha = 0.2421265 + 16589, 48355, 16663, 16944, // alpha = 0.2579995 + 16526, 48290, 16590, 16795, // alpha = 0.2743765 + 16469, 48227, 16522, 16663, // alpha = 0.2912573 + 16416, 48165, 16460, 16542, // alpha = 0.308642 + 16351, 48084, 16402, 16432, // alpha = 0.3265306 + 16262, 47969, 16311, 16281, // alpha = 0.3449232 + 16180, 47858, 16213, 16100, // alpha = 0.3638196 + 16107, 47750, 16122, 15938, // alpha = 0.38322 + 16039, 47646, 16038, 15790, // alpha = 0.4031242 + 15983, 47545, 15963, 15659, // alpha = 0.4235324 + 15923, 47448, 15894, 15535, // alpha = 0.4444445 + 15872, 47354, 15831, 15423, // alpha = 0.4658605 + 15827, 47263, 15774, 15283, // alpha = 0.4877803 + 15781, 47176, 15722, 15092, // alpha = 0.5102041 + 15741, 47080, 15675, 14921, // alpha = 0.5331318 + 15705, 46917, 15633, 14761, // alpha = 0.5565634 + 15670, 46761, 15595, 14615, // alpha = 0.5804989 + 15638, 46610, 15561, 14478, // alpha = 0.6049383 + 15609, 46466, 15530, 14353, // alpha = 0.6298816 + 15581, 46327, 15502, 14136, // alpha = 0.6553288 + 15555, 46193, 15478, 13921, // alpha = 0.68128 + 15532, 46051, 15457, 13720, // alpha = 0.7077349 + 15509, 45805, 15438, 13531, // alpha = 0.7346939 + 15487, 45571, 15422, 13355, // alpha = 0.7621567 + 15468, 45346, 15408, 13071, // alpha = 0.7901235 + 15450, 45132, 15395, 12764, // alpha = 0.8185941 + 15432, 44799, 15385, 12474, // alpha = 0.8475687 + 15415, 44409, 15378, 12120, // alpha = 0.8770471 + 15400, 44037, 15371, 11613, // alpha = 0.9070295 + 15385, 43333, 15366, 11011, // alpha = 0.9375157 + 15373, 42311, 15362, 9996, // alpha = 0.9685059 + 15361, 38002, 15358, 6196, // alpha = 1 + + // Cos (theta) = 0.4434366 + 19585, 49347, 18116, 20683, // alpha = 0.001 + 19585, 49347, 18116, 20683, // alpha = 0.001 + 19585, 49347, 18116, 20683, // alpha = 0.001007811 + 19502, 49347, 18408, 20595, // alpha = 0.002267574 + 19500, 49347, 18407, 20592, // alpha = 0.004031243 + 19584, 49347, 18115, 20683, // alpha = 0.006298816 + 19496, 49347, 18407, 20589, // alpha = 0.009070295 + 19584, 49347, 18115, 20682, // alpha = 0.01234568 + 19497, 49347, 18406, 20590, // alpha = 0.01612497 + 19500, 49347, 18408, 20593, // alpha = 0.02040816 + 19588, 49347, 18118, 20686, // alpha = 0.02519527 + 19246, 49357, 18357, 20395, // alpha = 0.03048627 + 18977, 49363, 18318, 20112, // alpha = 0.03628118 + 18784, 49361, 18256, 19907, // alpha = 0.04258 + 18630, 49354, 18180, 19740, // alpha = 0.04938272 + 18503, 49341, 18105, 19600, // alpha = 0.05668934 + 18358, 49323, 18036, 19479, // alpha = 0.06449988 + 18174, 49300, 17963, 19291, // alpha = 0.07281432 + 18019, 49274, 17896, 19107, // alpha = 0.08163266 + 17878, 49245, 17829, 18939, // alpha = 0.09095491 + 17759, 49214, 17762, 18792, // alpha = 0.1007811 + 17651, 49181, 17692, 18658, // alpha = 0.1111111 + 17557, 49139, 17625, 18538, // alpha = 0.1219451 + 17474, 49066, 17559, 18429, // alpha = 0.1332829 + 17386, 48991, 17494, 18230, // alpha = 0.1451247 + 17248, 48914, 17431, 18051, // alpha = 0.1574704 + 17125, 48837, 17330, 17891, // alpha = 0.17032 + 17017, 48761, 17212, 17747, // alpha = 0.1836735 + 16915, 48685, 17102, 17616, // alpha = 0.1975309 + 16825, 48610, 16994, 17498, // alpha = 0.2118922 + 16743, 48536, 16893, 17377, // alpha = 0.2267574 + 16665, 48464, 16802, 17184, // alpha = 0.2421265 + 16596, 48394, 16716, 17011, // alpha = 0.2579995 + 16533, 48326, 16637, 16855, // alpha = 0.2743765 + 16474, 48260, 16563, 16714, // alpha = 0.2912573 + 16423, 48196, 16495, 16588, // alpha = 0.308642 + 16363, 48135, 16433, 16473, // alpha = 0.3265306 + 16274, 48022, 16366, 16354, // alpha = 0.3449232 + 16191, 47906, 16261, 16165, // alpha = 0.3638196 + 16116, 47795, 16163, 15994, // alpha = 0.38322 + 16048, 47688, 16075, 15840, // alpha = 0.4031242 + 15990, 47584, 15995, 15704, // alpha = 0.4235324 + 15933, 47484, 15922, 15575, // alpha = 0.4444445 + 15878, 47388, 15855, 15457, // alpha = 0.4658605 + 15830, 47295, 15794, 15343, // alpha = 0.4877803 + 15787, 47205, 15740, 15149, // alpha = 0.5102041 + 15745, 47119, 15691, 14970, // alpha = 0.5331318 + 15710, 46968, 15646, 14807, // alpha = 0.5565634 + 15674, 46808, 15606, 14654, // alpha = 0.5804989 + 15640, 46654, 15570, 14513, // alpha = 0.6049383 + 15612, 46506, 15539, 14385, // alpha = 0.6298816 + 15583, 46363, 15510, 14192, // alpha = 0.6553288 + 15557, 46227, 15484, 13970, // alpha = 0.68128 + 15534, 46096, 15461, 13763, // alpha = 0.7077349 + 15511, 45860, 15442, 13569, // alpha = 0.7346939 + 15489, 45619, 15425, 13388, // alpha = 0.7621567 + 15469, 45389, 15410, 13126, // alpha = 0.7901235 + 15450, 45169, 15397, 12811, // alpha = 0.8185941 + 15432, 44862, 15387, 12514, // alpha = 0.8475687 + 15415, 44461, 15378, 12182, // alpha = 0.8770471 + 15399, 44079, 15371, 11662, // alpha = 0.9070295 + 15385, 43397, 15366, 11081, // alpha = 0.9375157 + 15371, 42399, 15362, 10083, // alpha = 0.9685059 + 15358, 38786, 15358, 6565, // alpha = 1 + + // Cos (theta) = 0.4195011 + 19556, 49406, 18281, 20740, // alpha = 0.001 + 19556, 49406, 18281, 20740, // alpha = 0.001 + 19556, 49406, 18281, 20740, // alpha = 0.001007811 + 19468, 49406, 18510, 20640, // alpha = 0.002267574 + 19468, 49406, 18511, 20640, // alpha = 0.004031243 + 19559, 49406, 18281, 20744, // alpha = 0.006298816 + 19466, 49406, 18511, 20638, // alpha = 0.009070295 + 19558, 49406, 18281, 20742, // alpha = 0.01234568 + 19468, 49406, 18510, 20639, // alpha = 0.01612497 + 19466, 49406, 18508, 20638, // alpha = 0.02040816 + 19557, 49406, 18280, 20741, // alpha = 0.02519527 + 19220, 49411, 18487, 20494, // alpha = 0.03048627 + 18974, 49417, 18469, 20229, // alpha = 0.03628118 + 18792, 49420, 18434, 20021, // alpha = 0.04258 + 18643, 49417, 18358, 19846, // alpha = 0.04938272 + 18517, 49407, 18280, 19696, // alpha = 0.05668934 + 18388, 49390, 18199, 19566, // alpha = 0.06449988 + 18203, 49367, 18120, 19445, // alpha = 0.07281432 + 18040, 49338, 18040, 19238, // alpha = 0.08163266 + 17897, 49306, 17961, 19053, // alpha = 0.09095491 + 17776, 49271, 17880, 18891, // alpha = 0.1007811 + 17666, 49234, 17801, 18744, // alpha = 0.1111111 + 17571, 49194, 17723, 18613, // alpha = 0.1219451 + 17484, 49154, 17646, 18494, // alpha = 0.1332829 + 17408, 49073, 17570, 18343, // alpha = 0.1451247 + 17267, 48990, 17497, 18148, // alpha = 0.1574704 + 17144, 48906, 17429, 17976, // alpha = 0.17032 + 17030, 48824, 17318, 17819, // alpha = 0.1836735 + 16929, 48742, 17193, 17678, // alpha = 0.1975309 + 16836, 48662, 17075, 17552, // alpha = 0.2118922 + 16750, 48584, 16967, 17438, // alpha = 0.2267574 + 16673, 48508, 16866, 17264, // alpha = 0.2421265 + 16603, 48434, 16772, 17080, // alpha = 0.2579995 + 16538, 48363, 16686, 16914, // alpha = 0.2743765 + 16479, 48294, 16606, 16766, // alpha = 0.2912573 + 16427, 48228, 16533, 16634, // alpha = 0.308642 + 16373, 48163, 16465, 16514, // alpha = 0.3265306 + 16285, 48075, 16404, 16406, // alpha = 0.3449232 + 16204, 47956, 16311, 16232, // alpha = 0.3638196 + 16126, 47841, 16207, 16053, // alpha = 0.38322 + 16056, 47730, 16113, 15891, // alpha = 0.4031242 + 15993, 47624, 16027, 15745, // alpha = 0.4235324 + 15942, 47521, 15951, 15617, // alpha = 0.4444445 + 15885, 47422, 15881, 15494, // alpha = 0.4658605 + 15836, 47327, 15816, 15384, // alpha = 0.4877803 + 15793, 47235, 15759, 15207, // alpha = 0.5102041 + 15749, 47146, 15707, 15020, // alpha = 0.5331318 + 15712, 47019, 15660, 14851, // alpha = 0.5565634 + 15677, 46855, 15618, 14694, // alpha = 0.5804989 + 15644, 46697, 15580, 14549, // alpha = 0.6049383 + 15615, 46546, 15547, 14417, // alpha = 0.6298816 + 15586, 46400, 15516, 14249, // alpha = 0.6553288 + 15560, 46260, 15490, 14020, // alpha = 0.68128 + 15535, 46126, 15466, 13807, // alpha = 0.7077349 + 15512, 45915, 15446, 13607, // alpha = 0.7346939 + 15490, 45668, 15428, 13421, // alpha = 0.7621567 + 15470, 45432, 15412, 13183, // alpha = 0.7901235 + 15451, 45207, 15399, 12859, // alpha = 0.8185941 + 15433, 44926, 15388, 12554, // alpha = 0.8475687 + 15415, 44514, 15379, 12247, // alpha = 0.8770471 + 15399, 44121, 15372, 11710, // alpha = 0.9070295 + 15384, 43461, 15366, 11150, // alpha = 0.9375157 + 15370, 42486, 15362, 10176, // alpha = 0.9685059 + 15355, 39234, 15359, 6810, // alpha = 1 + + // Cos (theta) = 0.3950617 + 19376, 49526, 18644, 20669, // alpha = 0.001 + 19376, 49526, 18644, 20669, // alpha = 0.001 + 19376, 49526, 18644, 20669, // alpha = 0.001007811 + 19384, 49526, 18647, 20673, // alpha = 0.002267574 + 19388, 49526, 18647, 20675, // alpha = 0.004031243 + 19377, 49526, 18646, 20669, // alpha = 0.006298816 + 19386, 49526, 18646, 20674, // alpha = 0.009070295 + 19382, 49526, 18647, 20672, // alpha = 0.01234568 + 19384, 49526, 18647, 20673, // alpha = 0.01612497 + 19390, 49526, 18645, 20677, // alpha = 0.02040816 + 19382, 49526, 18642, 20673, // alpha = 0.02519527 + 19165, 49522, 18607, 20541, // alpha = 0.03048627 + 18955, 49517, 18582, 20343, // alpha = 0.03628118 + 18789, 49511, 18543, 20137, // alpha = 0.04258 + 18648, 49502, 18500, 19956, // alpha = 0.04938272 + 18527, 49488, 18457, 19800, // alpha = 0.05668934 + 18407, 49468, 18391, 19657, // alpha = 0.06449988 + 18223, 49441, 18298, 19532, // alpha = 0.07281432 + 18061, 49409, 18205, 19382, // alpha = 0.08163266 + 17919, 49373, 18112, 19181, // alpha = 0.09095491 + 17792, 49333, 18018, 18999, // alpha = 0.1007811 + 17681, 49290, 17926, 18837, // alpha = 0.1111111 + 17583, 49246, 17833, 18692, // alpha = 0.1219451 + 17496, 49201, 17743, 18562, // alpha = 0.1332829 + 17418, 49156, 17657, 18447, // alpha = 0.1451247 + 17287, 49069, 17574, 18252, // alpha = 0.1574704 + 17160, 48978, 17495, 18063, // alpha = 0.17032 + 17044, 48889, 17421, 17894, // alpha = 0.1836735 + 16944, 48802, 17293, 17745, // alpha = 0.1975309 + 16847, 48716, 17165, 17608, // alpha = 0.2118922 + 16762, 48633, 17044, 17487, // alpha = 0.2267574 + 16684, 48553, 16933, 17350, // alpha = 0.2421265 + 16612, 48476, 16832, 17155, // alpha = 0.2579995 + 16546, 48401, 16738, 16980, // alpha = 0.2743765 + 16487, 48329, 16651, 16822, // alpha = 0.2912573 + 16432, 48259, 16572, 16682, // alpha = 0.308642 + 16381, 48193, 16500, 16556, // alpha = 0.3265306 + 16297, 48129, 16433, 16444, // alpha = 0.3449232 + 16214, 48006, 16360, 16300, // alpha = 0.3638196 + 16139, 47887, 16252, 16114, // alpha = 0.38322 + 16066, 47773, 16152, 15944, // alpha = 0.4031242 + 16003, 47664, 16062, 15793, // alpha = 0.4235324 + 15942, 47558, 15980, 15654, // alpha = 0.4444445 + 15894, 47457, 15905, 15532, // alpha = 0.4658605 + 15841, 47359, 15838, 15416, // alpha = 0.4877803 + 15798, 47265, 15777, 15265, // alpha = 0.5102041 + 15755, 47174, 15723, 15072, // alpha = 0.5331318 + 15718, 47070, 15674, 14898, // alpha = 0.5565634 + 15682, 46903, 15630, 14736, // alpha = 0.5804989 + 15648, 46741, 15590, 14587, // alpha = 0.6049383 + 15617, 46586, 15555, 14448, // alpha = 0.6298816 + 15589, 46437, 15524, 14307, // alpha = 0.6553288 + 15562, 46294, 15496, 14070, // alpha = 0.68128 + 15538, 46157, 15471, 13852, // alpha = 0.7077349 + 15514, 45970, 15449, 13647, // alpha = 0.7346939 + 15492, 45718, 15431, 13455, // alpha = 0.7621567 + 15471, 45476, 15415, 13244, // alpha = 0.7901235 + 15451, 45244, 15401, 12908, // alpha = 0.8185941 + 15433, 44990, 15389, 12596, // alpha = 0.8475687 + 15415, 44568, 15380, 12301, // alpha = 0.8770471 + 15399, 44164, 15373, 11761, // alpha = 0.9070295 + 15383, 43525, 15367, 11221, // alpha = 0.9375157 + 15369, 42574, 15362, 10250, // alpha = 0.9685059 + 15352, 39615, 15359, 7073, // alpha = 1 + + // Cos (theta) = 0.3701184 + 19324, 49687, 18821, 20733, // alpha = 0.001 + 19324, 49687, 18821, 20733, // alpha = 0.001 + 19324, 49687, 18821, 20733, // alpha = 0.001007811 + 19322, 49687, 18819, 20732, // alpha = 0.002267574 + 19326, 49687, 18818, 20734, // alpha = 0.004031243 + 19327, 49687, 18819, 20735, // alpha = 0.006298816 + 19324, 49687, 18820, 20733, // alpha = 0.009070295 + 19324, 49687, 18818, 20734, // alpha = 0.01234568 + 19327, 49687, 18819, 20735, // alpha = 0.01612497 + 19325, 49687, 18817, 20734, // alpha = 0.02040816 + 19321, 49688, 18819, 20732, // alpha = 0.02519527 + 19134, 49676, 18770, 20608, // alpha = 0.03048627 + 18945, 49660, 18722, 20483, // alpha = 0.03628118 + 18785, 49640, 18680, 20269, // alpha = 0.04258 + 18651, 49617, 18630, 20080, // alpha = 0.04938272 + 18532, 49591, 18576, 19911, // alpha = 0.05668934 + 18423, 49561, 18524, 19759, // alpha = 0.06449988 + 18242, 49527, 18469, 19623, // alpha = 0.07281432 + 18079, 49488, 18395, 19498, // alpha = 0.08163266 + 17936, 49445, 18285, 19319, // alpha = 0.09095491 + 17810, 49399, 18174, 19119, // alpha = 0.1007811 + 17697, 49351, 18064, 18941, // alpha = 0.1111111 + 17596, 49302, 17955, 18780, // alpha = 0.1219451 + 17507, 49252, 17852, 18637, // alpha = 0.1332829 + 17429, 49201, 17751, 18511, // alpha = 0.1451247 + 17306, 49151, 17656, 18362, // alpha = 0.1574704 + 17178, 49053, 17565, 18159, // alpha = 0.17032 + 17062, 48957, 17483, 17977, // alpha = 0.1836735 + 16955, 48863, 17403, 17813, // alpha = 0.1975309 + 16860, 48772, 17260, 17669, // alpha = 0.2118922 + 16772, 48684, 17129, 17539, // alpha = 0.2267574 + 16693, 48599, 17007, 17424, // alpha = 0.2421265 + 16621, 48518, 16894, 17233, // alpha = 0.2579995 + 16555, 48439, 16792, 17047, // alpha = 0.2743765 + 16496, 48364, 16698, 16884, // alpha = 0.2912573 + 16442, 48292, 16613, 16736, // alpha = 0.308642 + 16391, 48223, 16534, 16602, // alpha = 0.3265306 + 16304, 48156, 16464, 16482, // alpha = 0.3449232 + 16222, 48057, 16400, 16367, // alpha = 0.3638196 + 16148, 47934, 16298, 16175, // alpha = 0.38322 + 16077, 47817, 16193, 16000, // alpha = 0.4031242 + 16009, 47704, 16096, 15840, // alpha = 0.4235324 + 15951, 47596, 16011, 15697, // alpha = 0.4444445 + 15903, 47491, 15932, 15571, // alpha = 0.4658605 + 15849, 47391, 15860, 15450, // alpha = 0.4877803 + 15803, 47295, 15797, 15323, // alpha = 0.5102041 + 15762, 47202, 15740, 15127, // alpha = 0.5331318 + 15721, 47113, 15688, 14944, // alpha = 0.5565634 + 15686, 46951, 15642, 14778, // alpha = 0.5804989 + 15653, 46786, 15601, 14625, // alpha = 0.6049383 + 15620, 46627, 15564, 14481, // alpha = 0.6298816 + 15593, 46475, 15531, 14351, // alpha = 0.6553288 + 15564, 46329, 15502, 14122, // alpha = 0.68128 + 15539, 46188, 15476, 13896, // alpha = 0.7077349 + 15516, 46027, 15453, 13687, // alpha = 0.7346939 + 15493, 45768, 15434, 13490, // alpha = 0.7621567 + 15472, 45520, 15417, 13301, // alpha = 0.7901235 + 15452, 45283, 15403, 12959, // alpha = 0.8185941 + 15434, 45056, 15391, 12638, // alpha = 0.8475687 + 15415, 44622, 15381, 12332, // alpha = 0.8770471 + 15398, 44207, 15373, 11812, // alpha = 0.9070295 + 15383, 43591, 15367, 11278, // alpha = 0.9375157 + 15368, 42662, 15363, 10292, // alpha = 0.9685059 + 15349, 39964, 15359, 7282, // alpha = 1 + + // Cos (theta) = 0.3446712 + 19320, 49892, 19056, 20841, // alpha = 0.001 + 19320, 49892, 19056, 20841, // alpha = 0.001 + 19320, 49892, 19056, 20841, // alpha = 0.001007811 + 19318, 49892, 19055, 20840, // alpha = 0.002267574 + 19322, 49892, 19058, 20842, // alpha = 0.004031243 + 19323, 49892, 19057, 20843, // alpha = 0.006298816 + 19321, 49893, 19057, 20842, // alpha = 0.009070295 + 19318, 49893, 19057, 20840, // alpha = 0.01234568 + 19320, 49893, 19055, 20842, // alpha = 0.01612497 + 19321, 49893, 19057, 20842, // alpha = 0.02040816 + 19318, 49894, 19056, 20840, // alpha = 0.02519527 + 19131, 49870, 18992, 20707, // alpha = 0.03048627 + 18955, 49836, 18918, 20578, // alpha = 0.03628118 + 18801, 49798, 18853, 20446, // alpha = 0.04258 + 18663, 49757, 18787, 20234, // alpha = 0.04938272 + 18545, 49714, 18722, 20048, // alpha = 0.05668934 + 18440, 49670, 18657, 19879, // alpha = 0.06449988 + 18263, 49624, 18590, 19726, // alpha = 0.07281432 + 18100, 49576, 18524, 19588, // alpha = 0.08163266 + 17957, 49525, 18457, 19465, // alpha = 0.09095491 + 17826, 49472, 18350, 19251, // alpha = 0.1007811 + 17712, 49417, 18222, 19053, // alpha = 0.1111111 + 17610, 49361, 18095, 18877, // alpha = 0.1219451 + 17520, 49305, 17974, 18719, // alpha = 0.1332829 + 17438, 49249, 17858, 18579, // alpha = 0.1451247 + 17326, 49195, 17747, 18456, // alpha = 0.1574704 + 17198, 49131, 17645, 18261, // alpha = 0.17032 + 17078, 49027, 17552, 18063, // alpha = 0.1836735 + 16970, 48926, 17465, 17887, // alpha = 0.1975309 + 16874, 48829, 17363, 17733, // alpha = 0.2118922 + 16784, 48736, 17217, 17594, // alpha = 0.2267574 + 16702, 48647, 17083, 17470, // alpha = 0.2421265 + 16630, 48561, 16961, 17314, // alpha = 0.2579995 + 16566, 48479, 16849, 17121, // alpha = 0.2743765 + 16505, 48400, 16747, 16945, // alpha = 0.2912573 + 16449, 48325, 16655, 16789, // alpha = 0.308642 + 16399, 48253, 16572, 16650, // alpha = 0.3265306 + 16318, 48184, 16496, 16524, // alpha = 0.3449232 + 16231, 48108, 16427, 16410, // alpha = 0.3638196 + 16158, 47982, 16346, 16238, // alpha = 0.38322 + 16087, 47861, 16234, 16056, // alpha = 0.4031242 + 16021, 47745, 16132, 15891, // alpha = 0.4235324 + 15957, 47633, 16040, 15740, // alpha = 0.4444445 + 15903, 47527, 15958, 15605, // alpha = 0.4658605 + 15857, 47424, 15884, 15485, // alpha = 0.4877803 + 15807, 47325, 15817, 15372, // alpha = 0.5102041 + 15766, 47230, 15757, 15180, // alpha = 0.5331318 + 15725, 47139, 15703, 14992, // alpha = 0.5565634 + 15690, 46999, 15655, 14821, // alpha = 0.5804989 + 15655, 46831, 15611, 14662, // alpha = 0.6049383 + 15623, 46669, 15573, 14516, // alpha = 0.6298816 + 15595, 46513, 15538, 14382, // alpha = 0.6553288 + 15568, 46363, 15508, 14177, // alpha = 0.68128 + 15541, 46220, 15481, 13944, // alpha = 0.7077349 + 15518, 46082, 15458, 13729, // alpha = 0.7346939 + 15495, 45819, 15437, 13526, // alpha = 0.7621567 + 15473, 45565, 15420, 13337, // alpha = 0.7901235 + 15453, 45322, 15405, 13009, // alpha = 0.8185941 + 15435, 45089, 15392, 12681, // alpha = 0.8475687 + 15416, 44677, 15382, 12369, // alpha = 0.8770471 + 15398, 44251, 15374, 11864, // alpha = 0.9070295 + 15382, 43657, 15368, 11314, // alpha = 0.9375157 + 15367, 42751, 15363, 10339, // alpha = 0.9685059 + 15347, 40149, 15359, 7451, // alpha = 1 + + // Cos (theta) = 0.3187201 + 19405, 50126, 19378, 21034, // alpha = 0.001 + 19405, 50126, 19378, 21034, // alpha = 0.001 + 19405, 50126, 19378, 21034, // alpha = 0.001007811 + 19406, 50126, 19382, 21035, // alpha = 0.002267574 + 19402, 50126, 19380, 21031, // alpha = 0.004031243 + 19399, 50127, 19380, 21030, // alpha = 0.006298816 + 19404, 50127, 19379, 21034, // alpha = 0.009070295 + 19403, 50128, 19378, 21033, // alpha = 0.01234568 + 19402, 50128, 19382, 21033, // alpha = 0.01612497 + 19401, 50129, 19380, 21031, // alpha = 0.02040816 + 19401, 50129, 19379, 21032, // alpha = 0.02519527 + 19200, 50081, 19274, 20875, // alpha = 0.03048627 + 19001, 50024, 19176, 20716, // alpha = 0.03628118 + 18835, 49966, 19079, 20578, // alpha = 0.04258 + 18692, 49908, 18990, 20433, // alpha = 0.04938272 + 18565, 49850, 18903, 20213, // alpha = 0.05668934 + 18457, 49791, 18820, 20019, // alpha = 0.06449988 + 18291, 49733, 18738, 19846, // alpha = 0.07281432 + 18125, 49673, 18656, 19691, // alpha = 0.08163266 + 17976, 49612, 18574, 19551, // alpha = 0.09095491 + 17848, 49550, 18492, 19402, // alpha = 0.1007811 + 17731, 49487, 18398, 19181, // alpha = 0.1111111 + 17627, 49424, 18249, 18984, // alpha = 0.1219451 + 17532, 49361, 18108, 18808, // alpha = 0.1332829 + 17453, 49300, 17972, 18657, // alpha = 0.1451247 + 17348, 49240, 17848, 18520, // alpha = 0.1574704 + 17217, 49182, 17732, 18370, // alpha = 0.17032 + 17094, 49099, 17627, 18154, // alpha = 0.1836735 + 16982, 48991, 17531, 17964, // alpha = 0.1975309 + 16884, 48888, 17441, 17798, // alpha = 0.2118922 + 16794, 48789, 17312, 17650, // alpha = 0.2267574 + 16714, 48695, 17164, 17520, // alpha = 0.2421265 + 16640, 48605, 17030, 17398, // alpha = 0.2579995 + 16572, 48519, 16909, 17190, // alpha = 0.2743765 + 16510, 48436, 16799, 17006, // alpha = 0.2912573 + 16459, 48358, 16700, 16847, // alpha = 0.308642 + 16406, 48283, 16610, 16698, // alpha = 0.3265306 + 16334, 48212, 16529, 16568, // alpha = 0.3449232 + 16246, 48144, 16456, 16449, // alpha = 0.3638196 + 16164, 48030, 16390, 16300, // alpha = 0.38322 + 16095, 47905, 16277, 16112, // alpha = 0.4031242 + 16033, 47786, 16169, 15944, // alpha = 0.4235324 + 15967, 47672, 16073, 15786, // alpha = 0.4444445 + 15912, 47562, 15986, 15646, // alpha = 0.4658605 + 15866, 47457, 15908, 15522, // alpha = 0.4877803 + 15815, 47356, 15837, 15404, // alpha = 0.5102041 + 15771, 47259, 15774, 15235, // alpha = 0.5331318 + 15731, 47166, 15718, 15043, // alpha = 0.5565634 + 15693, 47048, 15667, 14864, // alpha = 0.5804989 + 15661, 46876, 15622, 14703, // alpha = 0.6049383 + 15628, 46711, 15582, 14552, // alpha = 0.6298816 + 15598, 46552, 15546, 14413, // alpha = 0.6553288 + 15571, 46399, 15514, 14232, // alpha = 0.68128 + 15544, 46252, 15486, 13994, // alpha = 0.7077349 + 15521, 46111, 15462, 13772, // alpha = 0.7346939 + 15497, 45871, 15440, 13563, // alpha = 0.7621567 + 15474, 45611, 15422, 13368, // alpha = 0.7901235 + 15454, 45362, 15406, 13062, // alpha = 0.8185941 + 15435, 45123, 15393, 12725, // alpha = 0.8475687 + 15416, 44733, 15383, 12403, // alpha = 0.8770471 + 15398, 44296, 15374, 11917, // alpha = 0.9070295 + 15382, 43724, 15368, 11353, // alpha = 0.9375157 + 15366, 42841, 15363, 10389, // alpha = 0.9685059 + 15346, 40334, 15359, 7627, // alpha = 1 + + // Cos (theta) = 0.292265 + 19545, 50228, 19600, 21385, // alpha = 0.001 + 19545, 50228, 19600, 21385, // alpha = 0.001 + 19545, 50228, 19600, 21385, // alpha = 0.001007811 + 19547, 50228, 19601, 21388, // alpha = 0.002267574 + 19551, 50228, 19600, 21394, // alpha = 0.004031243 + 19544, 50229, 19601, 21383, // alpha = 0.006298816 + 19546, 50229, 19599, 21386, // alpha = 0.009070295 + 19545, 50229, 19601, 21384, // alpha = 0.01234568 + 19542, 50229, 19608, 21378, // alpha = 0.01612497 + 19544, 50230, 19600, 21383, // alpha = 0.02040816 + 19542, 50230, 19600, 21380, // alpha = 0.02519527 + 19347, 50207, 19543, 21137, // alpha = 0.03048627 + 19097, 50178, 19473, 20916, // alpha = 0.03628118 + 18901, 50120, 19367, 20738, // alpha = 0.04258 + 18736, 50056, 19245, 20584, // alpha = 0.04938272 + 18597, 49989, 19132, 20421, // alpha = 0.05668934 + 18481, 49920, 19021, 20191, // alpha = 0.06449988 + 18328, 49849, 18915, 19987, // alpha = 0.07281432 + 18156, 49778, 18808, 19810, // alpha = 0.08163266 + 18003, 49706, 18709, 19651, // alpha = 0.09095491 + 17870, 49633, 18610, 19512, // alpha = 0.1007811 + 17748, 49561, 18515, 19318, // alpha = 0.1111111 + 17642, 49490, 18423, 19099, // alpha = 0.1219451 + 17550, 49420, 18254, 18909, // alpha = 0.1332829 + 17466, 49352, 18100, 18739, // alpha = 0.1451247 + 17371, 49286, 17959, 18589, // alpha = 0.1574704 + 17231, 49223, 17828, 18456, // alpha = 0.17032 + 17108, 49163, 17708, 18250, // alpha = 0.1836735 + 16998, 49059, 17599, 18048, // alpha = 0.1975309 + 16897, 48948, 17500, 17868, // alpha = 0.2118922 + 16809, 48844, 17410, 17712, // alpha = 0.2267574 + 16726, 48744, 17251, 17572, // alpha = 0.2421265 + 16650, 48649, 17104, 17448, // alpha = 0.2579995 + 16582, 48559, 16972, 17269, // alpha = 0.2743765 + 16519, 48474, 16853, 17073, // alpha = 0.2912573 + 16463, 48392, 16746, 16901, // alpha = 0.308642 + 16412, 48315, 16650, 16748, // alpha = 0.3265306 + 16347, 48241, 16563, 16612, // alpha = 0.3449232 + 16261, 48170, 16485, 16488, // alpha = 0.3638196 + 16178, 48078, 16416, 16370, // alpha = 0.38322 + 16101, 47950, 16321, 16169, // alpha = 0.4031242 + 16041, 47828, 16207, 15996, // alpha = 0.4235324 + 15978, 47710, 16105, 15834, // alpha = 0.4444445 + 15918, 47598, 16014, 15686, // alpha = 0.4658605 + 15866, 47490, 15931, 15554, // alpha = 0.4877803 + 15822, 47387, 15858, 15437, // alpha = 0.5102041 + 15778, 47288, 15792, 15294, // alpha = 0.5331318 + 15739, 47192, 15733, 15096, // alpha = 0.5565634 + 15698, 47098, 15680, 14911, // alpha = 0.5804989 + 15665, 46922, 15633, 14743, // alpha = 0.6049383 + 15633, 46753, 15591, 14588, // alpha = 0.6298816 + 15602, 46590, 15554, 14445, // alpha = 0.6553288 + 15574, 46434, 15520, 14289, // alpha = 0.68128 + 15546, 46284, 15491, 14041, // alpha = 0.7077349 + 15522, 46140, 15466, 13815, // alpha = 0.7346939 + 15498, 45923, 15443, 13600, // alpha = 0.7621567 + 15476, 45657, 15425, 13401, // alpha = 0.7901235 + 15455, 45402, 15408, 13117, // alpha = 0.8185941 + 15436, 45158, 15395, 12768, // alpha = 0.8475687 + 15416, 44790, 15384, 12441, // alpha = 0.8770471 + 15398, 44341, 15375, 11974, // alpha = 0.9070295 + 15381, 43792, 15368, 11391, // alpha = 0.9375157 + 15365, 42932, 15363, 10442, // alpha = 0.9685059 + 15344, 40520, 15359, 7811, // alpha = 1 + + // Cos (theta) = 0.2653061 + 19646, 50233, 19781, 21642, // alpha = 0.001 + 19646, 50233, 19781, 21642, // alpha = 0.001 + 19646, 50233, 19781, 21642, // alpha = 0.001007811 + 19644, 50233, 19782, 21640, // alpha = 0.002267574 + 19657, 50233, 19769, 21652, // alpha = 0.004031243 + 19652, 50234, 19773, 21648, // alpha = 0.006298816 + 19646, 50234, 19782, 21642, // alpha = 0.009070295 + 19654, 50234, 19766, 21650, // alpha = 0.01234568 + 19656, 50234, 19769, 21652, // alpha = 0.01612497 + 19655, 50234, 19769, 21651, // alpha = 0.02040816 + 19653, 50235, 19772, 21649, // alpha = 0.02519527 + 19467, 50238, 19743, 21435, // alpha = 0.03048627 + 19193, 50230, 19665, 21154, // alpha = 0.03628118 + 18970, 50211, 19587, 20928, // alpha = 0.04258 + 18788, 50185, 19508, 20739, // alpha = 0.04938272 + 18636, 50128, 19412, 20576, // alpha = 0.05668934 + 18509, 50053, 19266, 20394, // alpha = 0.06449988 + 18374, 49973, 19129, 20155, // alpha = 0.07281432 + 18188, 49890, 18997, 19945, // alpha = 0.08163266 + 18030, 49806, 18868, 19763, // alpha = 0.09095491 + 17892, 49723, 18746, 19605, // alpha = 0.1007811 + 17769, 49640, 18631, 19464, // alpha = 0.1111111 + 17662, 49560, 18525, 19229, // alpha = 0.1219451 + 17565, 49482, 18424, 19015, // alpha = 0.1332829 + 17476, 49407, 18245, 18826, // alpha = 0.1451247 + 17388, 49335, 18081, 18661, // alpha = 0.1574704 + 17251, 49267, 17932, 18519, // alpha = 0.17032 + 17125, 49202, 17797, 18354, // alpha = 0.1836735 + 17015, 49128, 17672, 18137, // alpha = 0.1975309 + 16914, 49010, 17563, 17945, // alpha = 0.2118922 + 16821, 48899, 17463, 17775, // alpha = 0.2267574 + 16739, 48794, 17341, 17627, // alpha = 0.2421265 + 16662, 48695, 17180, 17495, // alpha = 0.2579995 + 16591, 48601, 17039, 17348, // alpha = 0.2743765 + 16531, 48511, 16910, 17146, // alpha = 0.2912573 + 16472, 48427, 16795, 16962, // alpha = 0.308642 + 16419, 48346, 16691, 16800, // alpha = 0.3265306 + 16360, 48270, 16599, 16657, // alpha = 0.3449232 + 16273, 48197, 16515, 16528, // alpha = 0.3638196 + 16193, 48128, 16441, 16413, // alpha = 0.38322 + 16114, 47996, 16365, 16233, // alpha = 0.4031242 + 16050, 47870, 16245, 16050, // alpha = 0.4235324 + 15990, 47749, 16138, 15884, // alpha = 0.4444445 + 15927, 47634, 16042, 15729, // alpha = 0.4658605 + 15875, 47524, 15955, 15593, // alpha = 0.4877803 + 15832, 47418, 15880, 15472, // alpha = 0.5102041 + 15782, 47317, 15810, 15352, // alpha = 0.5331318 + 15743, 47220, 15748, 15148, // alpha = 0.5565634 + 15703, 47126, 15693, 14957, // alpha = 0.5804989 + 15669, 46969, 15644, 14784, // alpha = 0.6049383 + 15635, 46796, 15600, 14624, // alpha = 0.6298816 + 15604, 46630, 15562, 14476, // alpha = 0.6553288 + 15578, 46470, 15527, 14342, // alpha = 0.68128 + 15549, 46317, 15497, 14092, // alpha = 0.7077349 + 15524, 46170, 15470, 13858, // alpha = 0.7346939 + 15500, 45976, 15447, 13639, // alpha = 0.7621567 + 15477, 45704, 15427, 13434, // alpha = 0.7901235 + 15456, 45443, 15410, 13171, // alpha = 0.8185941 + 15436, 45193, 15396, 12815, // alpha = 0.8475687 + 15417, 44849, 15385, 12479, // alpha = 0.8770471 + 15398, 44388, 15376, 12032, // alpha = 0.9070295 + 15381, 43861, 15369, 11434, // alpha = 0.9375157 + 15365, 43016, 15363, 10495, // alpha = 0.9685059 + 15342, 40709, 15359, 8009, // alpha = 1 + + // Cos (theta) = 0.2378433 + 19624, 50283, 20028, 21759, // alpha = 0.001 + 19624, 50283, 20028, 21759, // alpha = 0.001 + 19624, 50283, 20028, 21759, // alpha = 0.001007811 + 19623, 50283, 20033, 21758, // alpha = 0.002267574 + 19626, 50283, 20025, 21761, // alpha = 0.004031243 + 19626, 50283, 20029, 21761, // alpha = 0.006298816 + 19622, 50283, 20032, 21757, // alpha = 0.009070295 + 19624, 50283, 20029, 21760, // alpha = 0.01234568 + 19624, 50283, 20030, 21760, // alpha = 0.01612497 + 19623, 50284, 20030, 21759, // alpha = 0.02040816 + 19625, 50284, 20028, 21761, // alpha = 0.02519527 + 19474, 50289, 19972, 21595, // alpha = 0.03048627 + 19231, 50289, 19887, 21388, // alpha = 0.03628118 + 19010, 50280, 19794, 21132, // alpha = 0.04258 + 18827, 50258, 19703, 20912, // alpha = 0.04938272 + 18669, 50226, 19608, 20719, // alpha = 0.05668934 + 18537, 50186, 19514, 20555, // alpha = 0.06449988 + 18415, 50107, 19393, 20344, // alpha = 0.07281432 + 18225, 50012, 19220, 20101, // alpha = 0.08163266 + 18057, 49915, 19058, 19888, // alpha = 0.09095491 + 17917, 49818, 18904, 19709, // alpha = 0.1007811 + 17792, 49725, 18765, 19551, // alpha = 0.1111111 + 17678, 49634, 18637, 19369, // alpha = 0.1219451 + 17578, 49547, 18522, 19129, // alpha = 0.1332829 + 17488, 49464, 18406, 18919, // alpha = 0.1451247 + 17410, 49386, 18215, 18742, // alpha = 0.1574704 + 17275, 49312, 18043, 18587, // alpha = 0.17032 + 17150, 49242, 17889, 18452, // alpha = 0.1836735 + 17037, 49175, 17751, 18236, // alpha = 0.1975309 + 16934, 49074, 17629, 18028, // alpha = 0.2118922 + 16839, 48957, 17520, 17846, // alpha = 0.2267574 + 16755, 48846, 17422, 17687, // alpha = 0.2421265 + 16677, 48742, 17261, 17547, // alpha = 0.2579995 + 16605, 48643, 17106, 17423, // alpha = 0.2743765 + 16540, 48550, 16968, 17218, // alpha = 0.2912573 + 16479, 48462, 16844, 17024, // alpha = 0.308642 + 16428, 48378, 16733, 16855, // alpha = 0.3265306 + 16372, 48299, 16635, 16703, // alpha = 0.3449232 + 16286, 48224, 16547, 16570, // alpha = 0.3638196 + 16203, 48153, 16468, 16449, // alpha = 0.38322 + 16128, 48042, 16397, 16298, // alpha = 0.4031242 + 16055, 47913, 16284, 16102, // alpha = 0.4235324 + 15999, 47789, 16172, 15933, // alpha = 0.4444445 + 15939, 47671, 16071, 15775, // alpha = 0.4658605 + 15880, 47558, 15981, 15630, // alpha = 0.4877803 + 15839, 47450, 15900, 15506, // alpha = 0.5102041 + 15790, 47346, 15828, 15387, // alpha = 0.5331318 + 15748, 47247, 15764, 15200, // alpha = 0.5565634 + 15710, 47152, 15706, 15007, // alpha = 0.5804989 + 15671, 47016, 15655, 14825, // alpha = 0.6049383 + 15641, 46840, 15609, 14663, // alpha = 0.6298816 + 15608, 46670, 15569, 14510, // alpha = 0.6553288 + 15580, 46507, 15533, 14371, // alpha = 0.68128 + 15552, 46351, 15502, 14147, // alpha = 0.7077349 + 15526, 46200, 15474, 13904, // alpha = 0.7346939 + 15503, 46031, 15450, 13680, // alpha = 0.7621567 + 15479, 45753, 15430, 13469, // alpha = 0.7901235 + 15457, 45486, 15412, 13233, // alpha = 0.8185941 + 15437, 45229, 15397, 12863, // alpha = 0.8475687 + 15418, 44909, 15385, 12518, // alpha = 0.8770471 + 15398, 44436, 15376, 12092, // alpha = 0.9070295 + 15380, 43934, 15369, 11478, // alpha = 0.9375157 + 15364, 43065, 15363, 10555, // alpha = 0.9685059 + 15340, 40908, 15359, 8209, // alpha = 1 + + // Cos (theta) = 0.2098765 + 19596, 50441, 20352, 21903, // alpha = 0.001 + 19596, 50441, 20352, 21903, // alpha = 0.001 + 19596, 50441, 20352, 21903, // alpha = 0.001007811 + 19593, 50441, 20359, 21900, // alpha = 0.002267574 + 19593, 50441, 20357, 21901, // alpha = 0.004031243 + 19594, 50441, 20358, 21901, // alpha = 0.006298816 + 19592, 50441, 20358, 21899, // alpha = 0.009070295 + 19594, 50442, 20358, 21902, // alpha = 0.01234568 + 19592, 50442, 20353, 21901, // alpha = 0.01612497 + 19592, 50442, 20357, 21901, // alpha = 0.02040816 + 19592, 50442, 20356, 21901, // alpha = 0.02519527 + 19463, 50427, 20271, 21733, // alpha = 0.03048627 + 19231, 50409, 20171, 21572, // alpha = 0.03628118 + 19029, 50387, 20063, 21359, // alpha = 0.04258 + 18852, 50356, 19945, 21108, // alpha = 0.04938272 + 18695, 50317, 19823, 20884, // alpha = 0.05668934 + 18560, 50269, 19703, 20690, // alpha = 0.06449988 + 18445, 50216, 19586, 20523, // alpha = 0.07281432 + 18255, 50145, 19474, 20276, // alpha = 0.08163266 + 18087, 50032, 19284, 20032, // alpha = 0.09095491 + 17941, 49922, 19094, 19824, // alpha = 0.1007811 + 17810, 49815, 18922, 19644, // alpha = 0.1111111 + 17694, 49713, 18767, 19488, // alpha = 0.1219451 + 17595, 49616, 18628, 19257, // alpha = 0.1332829 + 17506, 49525, 18505, 19029, // alpha = 0.1451247 + 17421, 49439, 18360, 18827, // alpha = 0.1574704 + 17293, 49358, 18165, 18657, // alpha = 0.17032 + 17163, 49283, 17991, 18508, // alpha = 0.1836735 + 17049, 49212, 17837, 18331, // alpha = 0.1975309 + 16945, 49140, 17701, 18108, // alpha = 0.2118922 + 16849, 49016, 17580, 17914, // alpha = 0.2267574 + 16762, 48899, 17473, 17744, // alpha = 0.2421265 + 16684, 48789, 17347, 17595, // alpha = 0.2579995 + 16611, 48686, 17178, 17464, // alpha = 0.2743765 + 16553, 48589, 17028, 17298, // alpha = 0.2912573 + 16491, 48498, 16896, 17093, // alpha = 0.308642 + 16435, 48411, 16778, 16912, // alpha = 0.3265306 + 16387, 48329, 16672, 16754, // alpha = 0.3449232 + 16297, 48252, 16579, 16612, // alpha = 0.3638196 + 16220, 48178, 16495, 16489, // alpha = 0.38322 + 16138, 48089, 16421, 16363, // alpha = 0.4031242 + 16069, 47956, 16325, 16162, // alpha = 0.4235324 + 16004, 47830, 16205, 15982, // alpha = 0.4444445 + 15951, 47709, 16101, 15822, // alpha = 0.4658605 + 15890, 47593, 16005, 15671, // alpha = 0.4877803 + 15840, 47482, 15922, 15538, // alpha = 0.5102041 + 15798, 47377, 15847, 15420, // alpha = 0.5331318 + 15755, 47275, 15779, 15259, // alpha = 0.5565634 + 15714, 47178, 15719, 15055, // alpha = 0.5804989 + 15677, 47064, 15666, 14871, // alpha = 0.6049383 + 15646, 46884, 15619, 14703, // alpha = 0.6298816 + 15612, 46711, 15577, 14546, // alpha = 0.6553288 + 15583, 46545, 15540, 14401, // alpha = 0.68128 + 15555, 46385, 15507, 14201, // alpha = 0.7077349 + 15529, 46231, 15478, 13952, // alpha = 0.7346939 + 15505, 46083, 15453, 13723, // alpha = 0.7621567 + 15481, 45802, 15432, 13504, // alpha = 0.7901235 + 15458, 45529, 15414, 13291, // alpha = 0.8185941 + 15438, 45266, 15398, 12914, // alpha = 0.8475687 + 15418, 44971, 15386, 12559, // alpha = 0.8770471 + 15399, 44486, 15376, 12156, // alpha = 0.9070295 + 15380, 44009, 15369, 11523, // alpha = 0.9375157 + 15363, 43116, 15363, 10617, // alpha = 0.9685059 + 15338, 41039, 15359, 8323, // alpha = 1 + + // Cos (theta) = 0.1814059 + 19588, 50693, 20658, 22119, // alpha = 0.001 + 19588, 50693, 20658, 22119, // alpha = 0.001 + 19588, 50693, 20658, 22119, // alpha = 0.001007811 + 19588, 50693, 20659, 22119, // alpha = 0.002267574 + 19589, 50693, 20658, 22121, // alpha = 0.004031243 + 19586, 50694, 20658, 22118, // alpha = 0.006298816 + 19586, 50694, 20658, 22118, // alpha = 0.009070295 + 19585, 50694, 20660, 22117, // alpha = 0.01234568 + 19586, 50695, 20660, 22118, // alpha = 0.01612497 + 19584, 50695, 20661, 22116, // alpha = 0.02040816 + 19583, 50695, 20659, 22115, // alpha = 0.02519527 + 19461, 50659, 20599, 21924, // alpha = 0.03048627 + 19234, 50610, 20525, 21734, // alpha = 0.03628118 + 19036, 50556, 20422, 21568, // alpha = 0.04258 + 18866, 50498, 20265, 21339, // alpha = 0.04938272 + 18712, 50436, 20102, 21075, // alpha = 0.05668934 + 18579, 50371, 19939, 20847, // alpha = 0.06449988 + 18461, 50304, 19783, 20647, // alpha = 0.07281432 + 18292, 50236, 19637, 20481, // alpha = 0.08163266 + 18113, 50162, 19506, 20193, // alpha = 0.09095491 + 17964, 50034, 19315, 19953, // alpha = 0.1007811 + 17830, 49911, 19104, 19748, // alpha = 0.1111111 + 17717, 49796, 18913, 19576, // alpha = 0.1219451 + 17609, 49689, 18748, 19392, // alpha = 0.1332829 + 17519, 49588, 18603, 19140, // alpha = 0.1451247 + 17437, 49494, 18476, 18923, // alpha = 0.1574704 + 17321, 49407, 18296, 18736, // alpha = 0.17032 + 17183, 49326, 18100, 18572, // alpha = 0.1836735 + 17066, 49250, 17927, 18434, // alpha = 0.1975309 + 16958, 49180, 17776, 18195, // alpha = 0.2118922 + 16862, 49076, 17642, 17987, // alpha = 0.2267574 + 16781, 48954, 17525, 17811, // alpha = 0.2421265 + 16699, 48839, 17421, 17652, // alpha = 0.2579995 + 16626, 48731, 17252, 17512, // alpha = 0.2743765 + 16559, 48630, 17091, 17373, // alpha = 0.2912573 + 16504, 48534, 16947, 17166, // alpha = 0.308642 + 16446, 48445, 16821, 16975, // alpha = 0.3265306 + 16394, 48360, 16710, 16805, // alpha = 0.3449232 + 16313, 48280, 16611, 16658, // alpha = 0.3638196 + 16226, 48205, 16523, 16525, // alpha = 0.38322 + 16154, 48133, 16444, 16410, // alpha = 0.4031242 + 16083, 48001, 16365, 16226, // alpha = 0.4235324 + 16012, 47871, 16241, 16034, // alpha = 0.4444445 + 15958, 47747, 16130, 15868, // alpha = 0.4658605 + 15901, 47629, 16031, 15714, // alpha = 0.4877803 + 15850, 47515, 15943, 15576, // alpha = 0.5102041 + 15808, 47407, 15865, 15454, // alpha = 0.5331318 + 15758, 47303, 15795, 15313, // alpha = 0.5565634 + 15721, 47204, 15732, 15109, // alpha = 0.5804989 + 15682, 47108, 15677, 14916, // alpha = 0.6049383 + 15648, 46929, 15628, 14742, // alpha = 0.6298816 + 15616, 46753, 15584, 14581, // alpha = 0.6553288 + 15584, 46583, 15546, 14432, // alpha = 0.68128 + 15558, 46420, 15512, 14257, // alpha = 0.7077349 + 15530, 46263, 15482, 13999, // alpha = 0.7346939 + 15507, 46112, 15456, 13765, // alpha = 0.7621567 + 15482, 45853, 15435, 13542, // alpha = 0.7901235 + 15460, 45574, 15416, 13333, // alpha = 0.8185941 + 15438, 45305, 15400, 12966, // alpha = 0.8475687 + 15419, 45036, 15387, 12602, // alpha = 0.8770471 + 15399, 44538, 15377, 12222, // alpha = 0.9070295 + 15380, 44060, 15369, 11573, // alpha = 0.9375157 + 15363, 43169, 15363, 10682, // alpha = 0.9685059 + 15336, 41150, 15359, 8450, // alpha = 1 + + // Cos (theta) = 0.1524313 + 19622, 51077, 21049, 22478, // alpha = 0.001 + 19622, 51077, 21049, 22478, // alpha = 0.001 + 19622, 51077, 21049, 22478, // alpha = 0.001007811 + 19622, 51077, 21049, 22477, // alpha = 0.002267574 + 19622, 51078, 21050, 22477, // alpha = 0.004031243 + 19621, 51079, 21050, 22476, // alpha = 0.006298816 + 19621, 51079, 21051, 22477, // alpha = 0.009070295 + 19621, 51080, 21051, 22477, // alpha = 0.01234568 + 19622, 51081, 21051, 22480, // alpha = 0.01612497 + 19620, 51081, 21046, 22478, // alpha = 0.02040816 + 19621, 51082, 21050, 22479, // alpha = 0.02519527 + 19487, 51002, 20945, 22221, // alpha = 0.03048627 + 19265, 50900, 20828, 21967, // alpha = 0.03628118 + 19057, 50794, 20710, 21751, // alpha = 0.04258 + 18882, 50691, 20590, 21566, // alpha = 0.04938272 + 18732, 50591, 20465, 21310, // alpha = 0.05668934 + 18601, 50497, 20239, 21036, // alpha = 0.06449988 + 18480, 50407, 20029, 20797, // alpha = 0.07281432 + 18323, 50321, 19837, 20598, // alpha = 0.08163266 + 18143, 50241, 19667, 20379, // alpha = 0.09095491 + 17984, 50156, 19516, 20096, // alpha = 0.1007811 + 17851, 50015, 19308, 19864, // alpha = 0.1111111 + 17734, 49885, 19079, 19668, // alpha = 0.1219451 + 17626, 49765, 18881, 19500, // alpha = 0.1332829 + 17533, 49655, 18711, 19263, // alpha = 0.1451247 + 17451, 49552, 18562, 19023, // alpha = 0.1574704 + 17345, 49458, 18435, 18819, // alpha = 0.17032 + 17212, 49371, 18216, 18645, // alpha = 0.1836735 + 17092, 49290, 18021, 18495, // alpha = 0.1975309 + 16982, 49215, 17854, 18296, // alpha = 0.2118922 + 16883, 49139, 17707, 18072, // alpha = 0.2267574 + 16793, 49010, 17579, 17878, // alpha = 0.2421265 + 16710, 48889, 17467, 17708, // alpha = 0.2579995 + 16635, 48777, 17328, 17559, // alpha = 0.2743765 + 16573, 48671, 17153, 17435, // alpha = 0.2912573 + 16509, 48572, 17002, 17233, // alpha = 0.308642 + 16459, 48479, 16866, 17042, // alpha = 0.3265306 + 16404, 48392, 16748, 16862, // alpha = 0.3449232 + 16325, 48309, 16643, 16703, // alpha = 0.3638196 + 16241, 48231, 16550, 16567, // alpha = 0.38322 + 16166, 48157, 16468, 16446, // alpha = 0.4031242 + 16091, 48046, 16394, 16287, // alpha = 0.4235324 + 16026, 47913, 16275, 16091, // alpha = 0.4444445 + 15964, 47786, 16158, 15915, // alpha = 0.4658605 + 15913, 47665, 16056, 15760, // alpha = 0.4877803 + 15854, 47549, 15964, 15612, // alpha = 0.5102041 + 15806, 47438, 15883, 15483, // alpha = 0.5331318 + 15767, 47333, 15810, 15368, // alpha = 0.5565634 + 15724, 47231, 15746, 15159, // alpha = 0.5804989 + 15688, 47133, 15688, 14964, // alpha = 0.6049383 + 15653, 46976, 15637, 14785, // alpha = 0.6298816 + 15620, 46796, 15592, 14619, // alpha = 0.6553288 + 15588, 46623, 15552, 14465, // alpha = 0.68128 + 15562, 46456, 15517, 14317, // alpha = 0.7077349 + 15533, 46296, 15486, 14052, // alpha = 0.7346939 + 15509, 46142, 15459, 13809, // alpha = 0.7621567 + 15484, 45906, 15436, 13580, // alpha = 0.7901235 + 15461, 45620, 15417, 13366, // alpha = 0.8185941 + 15439, 45344, 15401, 13021, // alpha = 0.8475687 + 15419, 45079, 15388, 12646, // alpha = 0.8770471 + 15399, 44592, 15377, 12290, // alpha = 0.9070295 + 15380, 44100, 15370, 11624, // alpha = 0.9375157 + 15362, 43224, 15363, 10750, // alpha = 0.9685059 + 15334, 41268, 15359, 8585, // alpha = 1 + + // Cos (theta) = 0.1229529 + 19742, 51434, 21651, 22838, // alpha = 0.001 + 19742, 51434, 21651, 22838, // alpha = 0.001 + 19742, 51434, 21651, 22838, // alpha = 0.001007811 + 19742, 51434, 21652, 22838, // alpha = 0.002267574 + 19739, 51435, 21652, 22835, // alpha = 0.004031243 + 19741, 51436, 21652, 22838, // alpha = 0.006298816 + 19741, 51437, 21651, 22839, // alpha = 0.009070295 + 19740, 51437, 21652, 22838, // alpha = 0.01234568 + 19739, 51438, 21651, 22838, // alpha = 0.01612497 + 19740, 51439, 21653, 22839, // alpha = 0.02040816 + 19738, 51439, 21653, 22838, // alpha = 0.02519527 + 19566, 51343, 21536, 22627, // alpha = 0.03048627 + 19357, 51241, 21322, 22328, // alpha = 0.03628118 + 19116, 51096, 21096, 22017, // alpha = 0.04258 + 18918, 50928, 20895, 21761, // alpha = 0.04938272 + 18761, 50779, 20712, 21556, // alpha = 0.05668934 + 18624, 50645, 20550, 21264, // alpha = 0.06449988 + 18506, 50526, 20328, 20979, // alpha = 0.07281432 + 18358, 50418, 20076, 20734, // alpha = 0.08163266 + 18176, 50321, 19853, 20537, // alpha = 0.09095491 + 18014, 50232, 19663, 20265, // alpha = 0.1007811 + 17876, 50127, 19500, 19997, // alpha = 0.1111111 + 17757, 49980, 19264, 19774, // alpha = 0.1219451 + 17642, 49846, 19028, 19582, // alpha = 0.1332829 + 17549, 49724, 18827, 19396, // alpha = 0.1451247 + 17463, 49613, 18656, 19131, // alpha = 0.1574704 + 17367, 49511, 18510, 18906, // alpha = 0.17032 + 17231, 49417, 18337, 18716, // alpha = 0.1836735 + 17107, 49331, 18122, 18552, // alpha = 0.1975309 + 16997, 49251, 17935, 18394, // alpha = 0.2118922 + 16895, 49178, 17774, 18153, // alpha = 0.2267574 + 16814, 49068, 17633, 17955, // alpha = 0.2421265 + 16729, 48942, 17511, 17773, // alpha = 0.2579995 + 16652, 48824, 17402, 17615, // alpha = 0.2743765 + 16581, 48714, 17217, 17477, // alpha = 0.2912573 + 16524, 48611, 17054, 17314, // alpha = 0.308642 + 16463, 48515, 16912, 17101, // alpha = 0.3265306 + 16416, 48424, 16786, 16922, // alpha = 0.3449232 + 16346, 48339, 16676, 16756, // alpha = 0.3638196 + 16260, 48259, 16578, 16612, // alpha = 0.38322 + 16176, 48183, 16491, 16483, // alpha = 0.4031242 + 16107, 48093, 16415, 16356, // alpha = 0.4235324 + 16041, 47956, 16309, 16153, // alpha = 0.4444445 + 15971, 47826, 16188, 15964, // alpha = 0.4658605 + 15919, 47702, 16081, 15804, // alpha = 0.4877803 + 15865, 47584, 15986, 15654, // alpha = 0.5102041 + 15816, 47470, 15901, 15519, // alpha = 0.5331318 + 15775, 47362, 15826, 15401, // alpha = 0.5565634 + 15728, 47259, 15758, 15212, // alpha = 0.5804989 + 15692, 47159, 15699, 15013, // alpha = 0.6049383 + 15656, 47023, 15646, 14827, // alpha = 0.6298816 + 15625, 46839, 15600, 14659, // alpha = 0.6553288 + 15592, 46663, 15558, 14500, // alpha = 0.68128 + 15563, 46493, 15522, 14355, // alpha = 0.7077349 + 15536, 46329, 15490, 14105, // alpha = 0.7346939 + 15510, 46172, 15463, 13854, // alpha = 0.7621567 + 15486, 45960, 15439, 13620, // alpha = 0.7901235 + 15462, 45667, 15419, 13401, // alpha = 0.8185941 + 15440, 45385, 15402, 13078, // alpha = 0.8475687 + 15420, 45114, 15388, 12695, // alpha = 0.8770471 + 15399, 44647, 15378, 12327, // alpha = 0.9070295 + 15379, 44143, 15370, 11679, // alpha = 0.9375157 + 15361, 43283, 15363, 10824, // alpha = 0.9685059 + 15331, 41393, 15359, 8736, // alpha = 1 + + // Cos (theta) = 0.09297051 + 20063, 51821, 22501, 23565, // alpha = 0.001 + 20063, 51821, 22501, 23565, // alpha = 0.001 + 20063, 51821, 22501, 23565, // alpha = 0.001007811 + 20064, 51822, 22501, 23566, // alpha = 0.002267574 + 20062, 51823, 22503, 23565, // alpha = 0.004031243 + 20062, 51824, 22501, 23566, // alpha = 0.006298816 + 20063, 51825, 22505, 23567, // alpha = 0.009070295 + 20060, 51826, 22506, 23566, // alpha = 0.01234568 + 20063, 51827, 22508, 23569, // alpha = 0.01612497 + 20064, 51828, 22508, 23570, // alpha = 0.02040816 + 20061, 51829, 22514, 23569, // alpha = 0.02519527 + 19754, 51640, 22152, 23112, // alpha = 0.03048627 + 19513, 51463, 21839, 22737, // alpha = 0.03628118 + 19243, 51318, 21601, 22426, // alpha = 0.04258 + 18994, 51191, 21329, 22038, // alpha = 0.04938272 + 18806, 50985, 21033, 21749, // alpha = 0.05668934 + 18658, 50808, 20789, 21527, // alpha = 0.06449988 + 18531, 50656, 20588, 21191, // alpha = 0.07281432 + 18411, 50523, 20354, 20900, // alpha = 0.08163266 + 18209, 50406, 20070, 20658, // alpha = 0.09095491 + 18045, 50303, 19831, 20454, // alpha = 0.1007811 + 17903, 50211, 19630, 20144, // alpha = 0.1111111 + 17778, 50080, 19461, 19889, // alpha = 0.1219451 + 17663, 49932, 19186, 19674, // alpha = 0.1332829 + 17566, 49798, 18951, 19500, // alpha = 0.1451247 + 17479, 49676, 18753, 19250, // alpha = 0.1574704 + 17396, 49566, 18588, 19004, // alpha = 0.17032 + 17255, 49466, 18448, 18795, // alpha = 0.1836735 + 17139, 49374, 18221, 18623, // alpha = 0.1975309 + 17025, 49289, 18016, 18472, // alpha = 0.2118922 + 16920, 49212, 17840, 18252, // alpha = 0.2267574 + 16825, 49128, 17688, 18027, // alpha = 0.2421265 + 16739, 48996, 17557, 17834, // alpha = 0.2579995 + 16671, 48873, 17443, 17673, // alpha = 0.2743765 + 16597, 48758, 17280, 17527, // alpha = 0.2912573 + 16530, 48651, 17108, 17389, // alpha = 0.308642 + 16478, 48551, 16956, 17176, // alpha = 0.3265306 + 16420, 48458, 16824, 16977, // alpha = 0.3449232 + 16369, 48370, 16707, 16812, // alpha = 0.3638196 + 16272, 48287, 16605, 16656, // alpha = 0.38322 + 16191, 48208, 16514, 16522, // alpha = 0.4031242 + 16112, 48134, 16434, 16401, // alpha = 0.4235324 + 16047, 48000, 16343, 16210, // alpha = 0.4444445 + 15984, 47867, 16217, 16020, // alpha = 0.4658605 + 15927, 47740, 16105, 15850, // alpha = 0.4877803 + 15876, 47619, 16007, 15698, // alpha = 0.5102041 + 15820, 47503, 15919, 15554, // alpha = 0.5331318 + 15782, 47393, 15841, 15433, // alpha = 0.5565634 + 15736, 47287, 15772, 15272, // alpha = 0.5804989 + 15700, 47185, 15709, 15066, // alpha = 0.6049383 + 15660, 47072, 15655, 14872, // alpha = 0.6298816 + 15627, 46884, 15607, 14696, // alpha = 0.6553288 + 15597, 46704, 15564, 14537, // alpha = 0.68128 + 15567, 46531, 15527, 14386, // alpha = 0.7077349 + 15539, 46364, 15494, 14160, // alpha = 0.7346939 + 15512, 46203, 15465, 13901, // alpha = 0.7621567 + 15488, 46015, 15441, 13663, // alpha = 0.7901235 + 15464, 45716, 15420, 13436, // alpha = 0.8185941 + 15441, 45428, 15403, 13136, // alpha = 0.8475687 + 15420, 45149, 15389, 12742, // alpha = 0.8770471 + 15399, 44706, 15378, 12366, // alpha = 0.9070295 + 15379, 44188, 15370, 11737, // alpha = 0.9375157 + 15360, 43344, 15364, 10904, // alpha = 0.9685059 + 15329, 41527, 15360, 8902, // alpha = 1 + + // Cos (theta) = 0.06248425 + 20626, 52175, 23555, 24425, // alpha = 0.001 + 20626, 52175, 23555, 24425, // alpha = 0.001 + 20626, 52175, 23555, 24425, // alpha = 0.001007811 + 20629, 52176, 23555, 24430, // alpha = 0.002267574 + 20631, 52177, 23556, 24435, // alpha = 0.004031243 + 20630, 52178, 23558, 24435, // alpha = 0.006298816 + 20630, 52180, 23557, 24436, // alpha = 0.009070295 + 20632, 52181, 23561, 24439, // alpha = 0.01234568 + 20629, 52182, 23561, 24435, // alpha = 0.01612497 + 20631, 52183, 23561, 24442, // alpha = 0.02040816 + 20633, 52185, 23561, 24446, // alpha = 0.02519527 + 20130, 51917, 22988, 23819, // alpha = 0.03048627 + 19702, 51676, 22572, 23271, // alpha = 0.03628118 + 19438, 51483, 22087, 22787, // alpha = 0.04258 + 19114, 51326, 21732, 22436, // alpha = 0.04938272 + 18877, 51193, 21462, 22009, // alpha = 0.05668934 + 18700, 50976, 21094, 21703, // alpha = 0.06449988 + 18562, 50791, 20808, 21445, // alpha = 0.07281432 + 18446, 50633, 20579, 21088, // alpha = 0.08163266 + 18258, 50497, 20310, 20804, // alpha = 0.09095491 + 18085, 50378, 20012, 20578, // alpha = 0.1007811 + 17936, 50274, 19767, 20315, // alpha = 0.1111111 + 17807, 50181, 19567, 20022, // alpha = 0.1219451 + 17693, 50022, 19347, 19783, // alpha = 0.1332829 + 17593, 49875, 19076, 19587, // alpha = 0.1451247 + 17503, 49744, 18852, 19390, // alpha = 0.1574704 + 17422, 49625, 18666, 19117, // alpha = 0.17032 + 17291, 49517, 18508, 18888, // alpha = 0.1836735 + 17161, 49419, 18322, 18694, // alpha = 0.1975309 + 17046, 49329, 18098, 18531, // alpha = 0.2118922 + 16938, 49247, 17908, 18348, // alpha = 0.2267574 + 16840, 49172, 17743, 18108, // alpha = 0.2421265 + 16761, 49053, 17602, 17909, // alpha = 0.2579995 + 16679, 48924, 17481, 17730, // alpha = 0.2743765 + 16616, 48805, 17341, 17582, // alpha = 0.2912573 + 16547, 48693, 17159, 17445, // alpha = 0.308642 + 16483, 48590, 17000, 17244, // alpha = 0.3265306 + 16434, 48493, 16860, 17046, // alpha = 0.3449232 + 16378, 48402, 16738, 16862, // alpha = 0.3638196 + 16293, 48316, 16631, 16707, // alpha = 0.38322 + 16201, 48235, 16536, 16562, // alpha = 0.4031242 + 16130, 48159, 16453, 16440, // alpha = 0.4235324 + 16062, 48046, 16376, 16277, // alpha = 0.4444445 + 15998, 47909, 16245, 16079, // alpha = 0.4658605 + 15931, 47779, 16129, 15895, // alpha = 0.4877803 + 15882, 47655, 16026, 15740, // alpha = 0.5102041 + 15829, 47537, 15936, 15593, // alpha = 0.5331318 + 15783, 47424, 15855, 15463, // alpha = 0.5565634 + 15744, 47316, 15783, 15334, // alpha = 0.5804989 + 15703, 47212, 15720, 15117, // alpha = 0.6049383 + 15667, 47113, 15664, 14921, // alpha = 0.6298816 + 15632, 46930, 15614, 14739, // alpha = 0.6553288 + 15600, 46746, 15570, 14572, // alpha = 0.68128 + 15568, 46570, 15531, 14417, // alpha = 0.7077349 + 15542, 46399, 15497, 14219, // alpha = 0.7346939 + 15515, 46235, 15468, 13952, // alpha = 0.7621567 + 15491, 46073, 15443, 13706, // alpha = 0.7901235 + 15465, 45767, 15421, 13473, // alpha = 0.8185941 + 15442, 45472, 15404, 13200, // alpha = 0.8475687 + 15420, 45187, 15389, 12791, // alpha = 0.8770471 + 15399, 44766, 15378, 12407, // alpha = 0.9070295 + 15379, 44234, 15370, 11799, // alpha = 0.9375157 + 15359, 43409, 15364, 10989, // alpha = 0.9685059 + 15326, 41671, 15360, 9082, // alpha = 1 + + // Cos (theta) = 0.03149408 + 21050, 52341, 24663, 25314, // alpha = 0.001 + 21050, 52341, 24663, 25314, // alpha = 0.001 + 21050, 52341, 24663, 25314, // alpha = 0.001007811 + 21053, 52341, 24662, 25318, // alpha = 0.002267574 + 21055, 52342, 24663, 25323, // alpha = 0.004031243 + 21042, 52342, 24664, 25313, // alpha = 0.006298816 + 21051, 52343, 24665, 25323, // alpha = 0.009070295 + 21058, 52343, 24666, 25332, // alpha = 0.01234568 + 21054, 52344, 24672, 25329, // alpha = 0.01612497 + 21053, 52345, 24672, 25331, // alpha = 0.02040816 + 21053, 52345, 24677, 25336, // alpha = 0.02519527 + 20525, 52154, 23915, 24614, // alpha = 0.03048627 + 19933, 51868, 23255, 23836, // alpha = 0.03628118 + 19572, 51639, 22689, 23250, // alpha = 0.04258 + 19248, 51453, 22183, 22749, // alpha = 0.04938272 + 18967, 51300, 21764, 22353, // alpha = 0.05668934 + 18757, 51146, 21460, 21929, // alpha = 0.06449988 + 18605, 50932, 21057, 21633, // alpha = 0.07281432 + 18479, 50750, 20755, 21318, // alpha = 0.08163266 + 18315, 50594, 20522, 20976, // alpha = 0.09095491 + 18133, 50459, 20198, 20708, // alpha = 0.1007811 + 17975, 50342, 19904, 20496, // alpha = 0.1111111 + 17839, 50239, 19671, 20173, // alpha = 0.1219451 + 17720, 50121, 19481, 19901, // alpha = 0.1332829 + 17615, 49960, 19199, 19679, // alpha = 0.1451247 + 17521, 49816, 18948, 19496, // alpha = 0.1574704 + 17438, 49688, 18740, 19234, // alpha = 0.17032 + 17324, 49572, 18568, 18986, // alpha = 0.1836735 + 17201, 49467, 18413, 18781, // alpha = 0.1975309 + 17077, 49372, 18172, 18601, // alpha = 0.2118922 + 16966, 49285, 17968, 18448, // alpha = 0.2267574 + 16868, 49206, 17793, 18206, // alpha = 0.2421265 + 16776, 49113, 17643, 17984, // alpha = 0.2579995 + 16701, 48978, 17514, 17800, // alpha = 0.2743765 + 16624, 48854, 17399, 17632, // alpha = 0.2912573 + 16553, 48738, 17207, 17488, // alpha = 0.308642 + 16499, 48630, 17040, 17329, // alpha = 0.3265306 + 16440, 48529, 16894, 17109, // alpha = 0.3449232 + 16393, 48435, 16767, 16924, // alpha = 0.3638196 + 16301, 48347, 16655, 16753, // alpha = 0.38322 + 16222, 48263, 16558, 16609, // alpha = 0.4031242 + 16144, 48185, 16471, 16479, // alpha = 0.4235324 + 16068, 48094, 16395, 16338, // alpha = 0.4444445 + 16005, 47953, 16271, 16134, // alpha = 0.4658605 + 15945, 47820, 16152, 15949, // alpha = 0.4877803 + 15890, 47693, 16046, 15785, // alpha = 0.5102041 + 15841, 47572, 15952, 15636, // alpha = 0.5331318 + 15791, 47456, 15869, 15499, // alpha = 0.5565634 + 15752, 47346, 15795, 15380, // alpha = 0.5804989 + 15706, 47240, 15729, 15170, // alpha = 0.6049383 + 15673, 47138, 15672, 14971, // alpha = 0.6298816 + 15635, 46978, 15621, 14781, // alpha = 0.6553288 + 15605, 46790, 15575, 14612, // alpha = 0.68128 + 15572, 46610, 15535, 14452, // alpha = 0.7077349 + 15546, 46436, 15500, 14279, // alpha = 0.7346939 + 15516, 46268, 15470, 14003, // alpha = 0.7621567 + 15492, 46106, 15444, 13750, // alpha = 0.7901235 + 15467, 45819, 15423, 13512, // alpha = 0.8185941 + 15442, 45517, 15405, 13264, // alpha = 0.8475687 + 15420, 45225, 15390, 12846, // alpha = 0.8770471 + 15399, 44830, 15379, 12451, // alpha = 0.9070295 + 15378, 44284, 15370, 11867, // alpha = 0.9375157 + 15357, 43478, 15364, 11080, // alpha = 0.9685059 + 15323, 41825, 15360, 9247, // alpha = 1 + + // Cos (theta) = 0.0003754022 + 53938, 52619, 21142, 22677, // alpha = 0.001 + 53938, 52619, 21142, 22677, // alpha = 0.001 + 53938, 52619, 21142, 22677, // alpha = 0.001007811 + 54149, 52619, 21366, 23325, // alpha = 0.002267574 + 54081, 52619, 21232, 23008, // alpha = 0.004031243 + 54200, 52620, 21505, 23607, // alpha = 0.006298816 + 53950, 52621, 21195, 22735, // alpha = 0.009070295 + 54329, 52621, 21569, 23942, // alpha = 0.01234568 + 53965, 52622, 21214, 22785, // alpha = 0.01612497 + 54196, 52622, 21458, 23552, // alpha = 0.02040816 + 54199, 52623, 21465, 23555, // alpha = 0.02519527 + 20705, 52393, 24696, 25237, // alpha = 0.03048627 + 20140, 52165, 23813, 24435, // alpha = 0.03628118 + 19695, 51862, 23105, 23717, // alpha = 0.04258 + 19408, 51625, 22584, 23117, // alpha = 0.04938272 + 19061, 51434, 22037, 22662, // alpha = 0.05668934 + 18840, 51280, 21651, 22235, // alpha = 0.06449988 + 18668, 51103, 21283, 21845, // alpha = 0.07281432 + 18530, 50889, 20910, 21563, // alpha = 0.08163266 + 18396, 50708, 20631, 21197, // alpha = 0.09095491 + 18198, 50553, 20356, 20871, // alpha = 0.1007811 + 18028, 50420, 20023, 20618, // alpha = 0.1111111 + 17881, 50305, 19759, 20359, // alpha = 0.1219451 + 17755, 50204, 19549, 20044, // alpha = 0.1332829 + 17643, 50055, 19302, 19789, // alpha = 0.1451247 + 17545, 49898, 19028, 19583, // alpha = 0.1574704 + 17458, 49758, 18804, 19372, // alpha = 0.17032 + 17350, 49633, 18619, 19092, // alpha = 0.1836735 + 17225, 49521, 18465, 18867, // alpha = 0.1975309 + 17098, 49419, 18239, 18671, // alpha = 0.2118922 + 16991, 49326, 18022, 18509, // alpha = 0.2267574 + 16895, 49242, 17836, 18313, // alpha = 0.2421265 + 16799, 49165, 17680, 18071, // alpha = 0.2579995 + 16716, 49036, 17545, 17868, // alpha = 0.2743765 + 16637, 48906, 17430, 17690, // alpha = 0.2912573 + 16573, 48785, 17250, 17542, // alpha = 0.308642 + 16506, 48672, 17076, 17409, // alpha = 0.3265306 + 16454, 48568, 16925, 17186, // alpha = 0.3449232 + 16398, 48470, 16793, 16982, // alpha = 0.3638196 + 16323, 48378, 16678, 16810, // alpha = 0.38322 + 16243, 48293, 16576, 16659, // alpha = 0.4031242 + 16154, 48212, 16487, 16518, // alpha = 0.4235324 + 16081, 48135, 16409, 16397, // alpha = 0.4444445 + 16021, 47998, 16295, 16200, // alpha = 0.4658605 + 15958, 47861, 16173, 16006, // alpha = 0.4877803 + 15893, 47731, 16063, 15827, // alpha = 0.5102041 + 15852, 47607, 15967, 15680, // alpha = 0.5331318 + 15795, 47489, 15881, 15534, // alpha = 0.5565634 + 15759, 47376, 15805, 15413, // alpha = 0.5804989 + 15713, 47268, 15738, 15230, // alpha = 0.6049383 + 15678, 47165, 15679, 15021, // alpha = 0.6298816 + 15639, 47026, 15626, 14825, // alpha = 0.6553288 + 15609, 46835, 15580, 14653, // alpha = 0.68128 + 15576, 46650, 15539, 14487, // alpha = 0.7077349 + 15548, 46473, 15503, 14338, // alpha = 0.7346939 + 15519, 46302, 15473, 14057, // alpha = 0.7621567 + 15493, 46136, 15446, 13798, // alpha = 0.7901235 + 15468, 45873, 15424, 13552, // alpha = 0.8185941 + 15443, 45564, 15405, 13322, // alpha = 0.8475687 + 15421, 45265, 15390, 12903, // alpha = 0.8770471 + 15399, 44896, 15379, 12496, // alpha = 0.9070295 + 15378, 44335, 15370, 11937, // alpha = 0.9375157 + 15355, 43550, 15364, 11176, // alpha = 0.9685059 + 15320, 41987, 15361, 9352, // alpha = 1 + }; + + // NOTE: Formerly, we needed to also export and create a table for the BRDF's amplitude factor + fresnel coefficient + // but it turns out these 2 factors are actually already precomputed and available in the FGD table corresponding + // to the BRDF_KajiyaKaySpecular BRDF, therefore they are no longer exported... + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_KajiyaKaySpecular.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_KajiyaKaySpecular.cs.meta new file mode 100644 index 00000000..ee8e4567 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_KajiyaKaySpecular.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 88b3449d431767348a2539b2d5060742 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_KajiyaKaySpecular.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Marschner.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Marschner.cs new file mode 100644 index 00000000..7430bb47 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Marschner.cs @@ -0,0 +1,4248 @@ +using UnityEngine; +using System; + +namespace BadDog.Rendering.AreaLight +{ + public partial class LTCAreaLight + { + // [GENERATED CONTENT 31 10月 2025 11:28:30] + // Table contains 3x3 matrix coefficients of M^-1 for the fitting of the BRDF_Marschner BRDF using the LTC technique + // Only the 0,2,4,6 of the 3x3 coefficients are emitted, and they are encoded into FP16 + // From "Real-Time Polygonal-Light Shading with Linearly Transformed Cosines" 2016 (https://eheitzresearch.wordpress.com/415-2/) + // + // The table is accessed via LTCAreaLight.s_LtcMatrixData_BRDF_Marschner[ + 64 * ] // Theta values are along the Y axis, Roughness values are along the X axis + // • roughness = ( / 63 )^2 (the table is indexed by perceptual roughness) + // • cosTheta = 1 - ( / 63 )^2 + // + public static ushort[] s_LtcMatrixData_BRDF_Marschner = new ushort[64 * 64 * 4] + { + // Cos (theta) = 1 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9997481 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9989922 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9977324 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9959688 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9937012 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9909297 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9876543 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.983875 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9795918 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9748048 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9695137 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9637188 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.95742 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9506173 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9433107 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9355001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9271857 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9183673 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9090451 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.8992189 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.8888889 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.8780549 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.866717 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.8548753 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.8425296 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.82968 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.8163265 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.8024691 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.7881078 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.7732427 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.7578735 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.7420005 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.7256235 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.7087427 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.691358 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.6734694 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.6550768 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.6361803 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.61678 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.5968758 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.5764676 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.5555555 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.5341396 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.5122197 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.4897959 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.4668682 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.4434366 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.4195011 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.3950617 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.3701184 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.3446712 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.3187201 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.292265 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.2653061 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.2378433 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.2098765 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.1814059 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.1524313 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.1229529 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.09297051 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.06248425 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.03149408 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.0003754022 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + }; + + // NOTE: Formerly, we needed to also export and create a table for the BRDF's amplitude factor + fresnel coefficient + // but it turns out these 2 factors are actually already precomputed and available in the FGD table corresponding + // to the BRDF_Marschner BRDF, therefore they are no longer exported... + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Marschner.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Marschner.cs.meta new file mode 100644 index 00000000..17b7970b --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Marschner.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5b69d82badd3dc24bb73acfdf1aa56a1 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Marschner.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_OrenNayar.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_OrenNayar.cs new file mode 100644 index 00000000..533ea0fc --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_OrenNayar.cs @@ -0,0 +1,4248 @@ +using UnityEngine; +using System; + +namespace BadDog.Rendering.AreaLight +{ + public partial class LTCAreaLight + { + // [GENERATED CONTENT 31 10月 2025 11:28:53] + // Table contains 3x3 matrix coefficients of M^-1 for the fitting of the BRDF_OrenNayar BRDF using the LTC technique + // Only the 0,2,4,6 of the 3x3 coefficients are emitted, and they are encoded into FP16 + // From "Real-Time Polygonal-Light Shading with Linearly Transformed Cosines" 2016 (https://eheitzresearch.wordpress.com/415-2/) + // + // The table is accessed via LTCAreaLight.s_LtcMatrixData_BRDF_OrenNayar[ + 64 * ] // Theta values are along the Y axis, Roughness values are along the X axis + // • roughness = ( / 63 )^2 (the table is indexed by perceptual roughness) + // • cosTheta = 1 - ( / 63 )^2 + // + public static ushort[] s_LtcMatrixData_BRDF_OrenNayar = new ushort[64 * 64 * 4] + { + // Cos (theta) = 1 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001 + 15360, 0, 15360, 0, // alpha = 0.001007811 + 15360, 0, 15360, 0, // alpha = 0.002267574 + 15360, 0, 15360, 0, // alpha = 0.004031243 + 15360, 0, 15360, 0, // alpha = 0.006298816 + 15360, 0, 15360, 0, // alpha = 0.009070295 + 15360, 0, 15360, 0, // alpha = 0.01234568 + 15360, 0, 15360, 0, // alpha = 0.01612497 + 15360, 0, 15360, 0, // alpha = 0.02040816 + 15360, 0, 15360, 0, // alpha = 0.02519527 + 15360, 0, 15360, 0, // alpha = 0.03048627 + 15360, 0, 15360, 0, // alpha = 0.03628118 + 15360, 0, 15360, 0, // alpha = 0.04258 + 15360, 0, 15360, 0, // alpha = 0.04938272 + 15360, 0, 15360, 0, // alpha = 0.05668934 + 15360, 0, 15360, 0, // alpha = 0.06449988 + 15360, 0, 15360, 0, // alpha = 0.07281432 + 15360, 0, 15360, 0, // alpha = 0.08163266 + 15360, 0, 15360, 0, // alpha = 0.09095491 + 15360, 0, 15360, 0, // alpha = 0.1007811 + 15360, 0, 15360, 0, // alpha = 0.1111111 + 15360, 0, 15360, 0, // alpha = 0.1219451 + 15360, 0, 15360, 0, // alpha = 0.1332829 + 15360, 0, 15360, 0, // alpha = 0.1451247 + 15360, 0, 15360, 0, // alpha = 0.1574704 + 15360, 0, 15360, 0, // alpha = 0.17032 + 15360, 0, 15360, 0, // alpha = 0.1836735 + 15360, 0, 15360, 0, // alpha = 0.1975309 + 15360, 0, 15360, 0, // alpha = 0.2118922 + 15360, 0, 15360, 0, // alpha = 0.2267574 + 15360, 0, 15360, 0, // alpha = 0.2421265 + 15360, 0, 15360, 0, // alpha = 0.2579995 + 15360, 0, 15360, 0, // alpha = 0.2743765 + 15360, 0, 15360, 0, // alpha = 0.2912573 + 15360, 0, 15360, 0, // alpha = 0.308642 + 15360, 0, 15360, 0, // alpha = 0.3265306 + 15360, 0, 15360, 0, // alpha = 0.3449232 + 15360, 0, 15360, 0, // alpha = 0.3638196 + 15360, 0, 15360, 0, // alpha = 0.38322 + 15360, 0, 15360, 0, // alpha = 0.4031242 + 15360, 0, 15360, 0, // alpha = 0.4235324 + 15360, 0, 15360, 0, // alpha = 0.4444445 + 15360, 0, 15360, 0, // alpha = 0.4658605 + 15360, 0, 15360, 0, // alpha = 0.4877803 + 15360, 0, 15360, 0, // alpha = 0.5102041 + 15360, 0, 15360, 0, // alpha = 0.5331318 + 15360, 0, 15360, 0, // alpha = 0.5565634 + 15360, 0, 15360, 0, // alpha = 0.5804989 + 15360, 0, 15360, 0, // alpha = 0.6049383 + 15360, 0, 15360, 0, // alpha = 0.6298816 + 15360, 0, 15360, 0, // alpha = 0.6553288 + 15360, 0, 15360, 0, // alpha = 0.68128 + 15360, 0, 15360, 0, // alpha = 0.7077349 + 15360, 0, 15360, 0, // alpha = 0.7346939 + 15360, 0, 15360, 0, // alpha = 0.7621567 + 15360, 0, 15360, 0, // alpha = 0.7901235 + 15360, 0, 15360, 0, // alpha = 0.8185941 + 15360, 0, 15360, 0, // alpha = 0.8475687 + 15360, 0, 15360, 0, // alpha = 0.8770471 + 15360, 0, 15360, 0, // alpha = 0.9070295 + 15360, 0, 15360, 0, // alpha = 0.9375157 + 15360, 0, 15360, 0, // alpha = 0.9685059 + 15360, 0, 15360, 0, // alpha = 1 + + // Cos (theta) = 0.9997481 + 15360, 2, 15360, 32770, // alpha = 0.001 + 15360, 2, 15360, 32770, // alpha = 0.001 + 15360, 2, 15360, 32770, // alpha = 0.001007811 + 15360, 5, 15360, 32775, // alpha = 0.002267574 + 15360, 15, 15360, 32788, // alpha = 0.004031243 + 15360, 35, 15360, 32816, // alpha = 0.006298816 + 15360, 72, 15360, 32868, // alpha = 0.009070295 + 15360, 133, 15360, 32950, // alpha = 0.01234568 + 15360, 225, 15360, 33080, // alpha = 0.01612497 + 15360, 359, 15360, 33264, // alpha = 0.02040816 + 15360, 545, 15360, 33520, // alpha = 0.02519527 + 15360, 791, 15360, 33856, // alpha = 0.03048627 + 15360, 1110, 15360, 34295, // alpha = 0.03628118 + 15360, 1510, 15360, 34834, // alpha = 0.04258 + 15360, 2001, 15360, 35165, // alpha = 0.04938272 + 15360, 2319, 15360, 35574, // alpha = 0.05668934 + 15360, 2665, 15360, 35946, // alpha = 0.06449988 + 15360, 3062, 15360, 36219, // alpha = 0.07281432 + 15360, 3292, 15360, 36528, // alpha = 0.08163266 + 15359, 3542, 15360, 36869, // alpha = 0.09095491 + 15359, 3814, 15360, 37057, // alpha = 0.1007811 + 15359, 4102, 15360, 37260, // alpha = 0.1111111 + 15359, 4257, 15360, 37474, // alpha = 0.1219451 + 15359, 4420, 15360, 37698, // alpha = 0.1332829 + 15359, 4588, 15360, 37908, // alpha = 0.1451247 + 15359, 4760, 15360, 38026, // alpha = 0.1574704 + 15359, 4933, 15360, 38147, // alpha = 0.17032 + 15359, 5108, 15360, 38266, // alpha = 0.1836735 + 15359, 5201, 15360, 38385, // alpha = 0.1975309 + 15358, 5287, 15360, 38506, // alpha = 0.2118922 + 15358, 5372, 15360, 38622, // alpha = 0.2267574 + 15358, 5456, 15360, 38738, // alpha = 0.2421265 + 15358, 5538, 15360, 38851, // alpha = 0.2579995 + 15358, 5619, 15360, 38937, // alpha = 0.2743765 + 15358, 5697, 15360, 38992, // alpha = 0.2912573 + 15358, 5774, 15360, 39044, // alpha = 0.308642 + 15358, 5850, 15360, 39097, // alpha = 0.3265306 + 15358, 5924, 15360, 39147, // alpha = 0.3449232 + 15357, 5996, 15360, 39197, // alpha = 0.3638196 + 15357, 6066, 15360, 39247, // alpha = 0.38322 + 15357, 6135, 15360, 39293, // alpha = 0.4031242 + 15357, 6174, 15360, 39341, // alpha = 0.4235324 + 15357, 6207, 15360, 39386, // alpha = 0.4444445 + 15357, 6239, 15360, 39431, // alpha = 0.4658605 + 15357, 6271, 15360, 39473, // alpha = 0.4877803 + 15357, 6302, 15360, 39516, // alpha = 0.5102041 + 15357, 6332, 15360, 39559, // alpha = 0.5331318 + 15357, 6362, 15360, 39600, // alpha = 0.5565634 + 15357, 6390, 15360, 39640, // alpha = 0.5804989 + 15357, 6419, 15360, 39678, // alpha = 0.6049383 + 15356, 6446, 15360, 39715, // alpha = 0.6298816 + 15356, 6472, 15360, 39752, // alpha = 0.6553288 + 15356, 6498, 15360, 39788, // alpha = 0.68128 + 15356, 6523, 15360, 39822, // alpha = 0.7077349 + 15356, 6547, 15360, 39855, // alpha = 0.7346939 + 15356, 6570, 15360, 39889, // alpha = 0.7621567 + 15356, 6593, 15360, 39920, // alpha = 0.7901235 + 15356, 6614, 15360, 39943, // alpha = 0.8185941 + 15356, 6635, 15360, 39957, // alpha = 0.8475687 + 15356, 6655, 15360, 39970, // alpha = 0.8770471 + 15356, 6675, 15360, 39984, // alpha = 0.9070295 + 15356, 6693, 15360, 39996, // alpha = 0.9375157 + 15356, 6711, 15360, 40009, // alpha = 0.9685059 + 15356, 6728, 15360, 40020, // alpha = 1 + + // Cos (theta) = 0.9989922 + 15360, 3, 15360, 32771, // alpha = 0.001 + 15360, 3, 15360, 32771, // alpha = 0.001 + 15360, 3, 15360, 32771, // alpha = 0.001007811 + 15360, 9, 15360, 32781, // alpha = 0.002267574 + 15360, 29, 15360, 32807, // alpha = 0.004031243 + 15360, 70, 15360, 32864, // alpha = 0.006298816 + 15360, 144, 15360, 32966, // alpha = 0.009070295 + 15360, 265, 15360, 33131, // alpha = 0.01234568 + 15360, 451, 15360, 33389, // alpha = 0.01612497 + 15360, 719, 15360, 33758, // alpha = 0.02040816 + 15360, 1089, 15360, 34268, // alpha = 0.02519527 + 15360, 1583, 15360, 34883, // alpha = 0.03048627 + 15360, 2134, 15360, 35319, // alpha = 0.03628118 + 15360, 2535, 15360, 35857, // alpha = 0.04258 + 15360, 3026, 15360, 36195, // alpha = 0.04938272 + 15360, 3343, 15360, 36598, // alpha = 0.05668934 + 15359, 3689, 15360, 36971, // alpha = 0.06449988 + 15359, 4087, 15360, 37246, // alpha = 0.07281432 + 15359, 4316, 15360, 37554, // alpha = 0.08163266 + 15359, 4566, 15360, 37893, // alpha = 0.09095491 + 15359, 4839, 15360, 38082, // alpha = 0.1007811 + 15359, 5126, 15360, 38284, // alpha = 0.1111111 + 15358, 5281, 15360, 38499, // alpha = 0.1219451 + 15358, 5444, 15360, 38723, // alpha = 0.1332829 + 15358, 5612, 15360, 38932, // alpha = 0.1451247 + 15358, 5783, 15360, 39050, // alpha = 0.1574704 + 15358, 5957, 15360, 39171, // alpha = 0.17032 + 15357, 6131, 15360, 39289, // alpha = 0.1836735 + 15357, 6224, 15360, 39410, // alpha = 0.1975309 + 15357, 6310, 15360, 39529, // alpha = 0.2118922 + 15357, 6395, 15360, 39645, // alpha = 0.2267574 + 15356, 6479, 15360, 39760, // alpha = 0.2421265 + 15356, 6561, 15360, 39874, // alpha = 0.2579995 + 15356, 6641, 15360, 39960, // alpha = 0.2743765 + 15356, 6720, 15360, 40015, // alpha = 0.2912573 + 15356, 6797, 15360, 40068, // alpha = 0.308642 + 15355, 6872, 15360, 40119, // alpha = 0.3265306 + 15355, 6945, 15360, 40171, // alpha = 0.3449232 + 15355, 7017, 15360, 40220, // alpha = 0.3638196 + 15355, 7088, 15360, 40269, // alpha = 0.38322 + 15355, 7157, 15360, 40317, // alpha = 0.4031242 + 15354, 7196, 15360, 40363, // alpha = 0.4235324 + 15354, 7229, 15360, 40409, // alpha = 0.4444445 + 15354, 7261, 15360, 40455, // alpha = 0.4658605 + 15354, 7293, 15360, 40496, // alpha = 0.4877803 + 15354, 7324, 15360, 40540, // alpha = 0.5102041 + 15354, 7354, 15360, 40581, // alpha = 0.5331318 + 15353, 7383, 15360, 40623, // alpha = 0.5565634 + 15353, 7412, 15360, 40662, // alpha = 0.5804989 + 15353, 7440, 15360, 40700, // alpha = 0.6049383 + 15353, 7467, 15360, 40738, // alpha = 0.6298816 + 15353, 7494, 15360, 40775, // alpha = 0.6553288 + 15353, 7519, 15360, 40810, // alpha = 0.68128 + 15353, 7544, 15360, 40844, // alpha = 0.7077349 + 15353, 7568, 15360, 40876, // alpha = 0.7346939 + 15352, 7591, 15360, 40908, // alpha = 0.7621567 + 15352, 7613, 15360, 40939, // alpha = 0.7901235 + 15352, 7635, 15360, 40964, // alpha = 0.8185941 + 15352, 7656, 15360, 40978, // alpha = 0.8475687 + 15352, 7676, 15360, 40993, // alpha = 0.8770471 + 15352, 7695, 15360, 41006, // alpha = 0.9070295 + 15352, 7713, 15360, 41019, // alpha = 0.9375157 + 15352, 7731, 15360, 41031, // alpha = 0.9685059 + 15352, 7748, 15360, 41043, // alpha = 1 + + // Cos (theta) = 0.9977324 + 15360, 5, 15360, 32774, // alpha = 0.001 + 15360, 5, 15360, 32774, // alpha = 0.001 + 15360, 5, 15360, 32774, // alpha = 0.001007811 + 15360, 14, 15360, 32787, // alpha = 0.002267574 + 15360, 43, 15360, 32826, // alpha = 0.004031243 + 15360, 104, 15360, 32910, // alpha = 0.006298816 + 15360, 215, 15360, 33062, // alpha = 0.009070295 + 15360, 398, 15360, 33314, // alpha = 0.01234568 + 15360, 676, 15360, 33694, // alpha = 0.01612497 + 15360, 1079, 15360, 34260, // alpha = 0.02040816 + 15360, 1635, 15360, 34917, // alpha = 0.02519527 + 15360, 2212, 15360, 35430, // alpha = 0.03048627 + 15360, 2691, 15360, 35969, // alpha = 0.03628118 + 15360, 3182, 15360, 36378, // alpha = 0.04258 + 15359, 3551, 15360, 36876, // alpha = 0.04938272 + 15359, 3993, 15360, 37178, // alpha = 0.05668934 + 15359, 4304, 15360, 37536, // alpha = 0.06449988 + 15359, 4602, 15360, 37917, // alpha = 0.07281432 + 15359, 4940, 15360, 38152, // alpha = 0.08163266 + 15358, 5217, 15360, 38409, // alpha = 0.09095491 + 15358, 5422, 15360, 38691, // alpha = 0.1007811 + 15358, 5642, 15360, 38953, // alpha = 0.1111111 + 15358, 5875, 15360, 39113, // alpha = 0.1219451 + 15357, 6118, 15360, 39282, // alpha = 0.1332829 + 15357, 6257, 15360, 39456, // alpha = 0.1451247 + 15357, 6386, 15360, 39632, // alpha = 0.1574704 + 15356, 6516, 15360, 39812, // alpha = 0.17032 + 15356, 6646, 15360, 39964, // alpha = 0.1836735 + 15356, 6776, 15360, 40054, // alpha = 0.1975309 + 15355, 6905, 15360, 40143, // alpha = 0.2118922 + 15355, 7033, 15360, 40232, // alpha = 0.2267574 + 15355, 7158, 15360, 40317, // alpha = 0.2421265 + 15354, 7224, 15360, 40403, // alpha = 0.2579995 + 15354, 7284, 15360, 40485, // alpha = 0.2743765 + 15354, 7343, 15360, 40567, // alpha = 0.2912573 + 15353, 7401, 15360, 40647, // alpha = 0.308642 + 15353, 7457, 15360, 40723, // alpha = 0.3265306 + 15353, 7512, 15360, 40800, // alpha = 0.3449232 + 15353, 7566, 15360, 40875, // alpha = 0.3638196 + 15352, 7618, 15360, 40947, // alpha = 0.38322 + 15352, 7670, 15360, 40989, // alpha = 0.4031242 + 15352, 7720, 15360, 41025, // alpha = 0.4235324 + 15351, 7770, 15360, 41058, // alpha = 0.4444445 + 15351, 7818, 15360, 41091, // alpha = 0.4658605 + 15351, 7865, 15360, 41125, // alpha = 0.4877803 + 15351, 7911, 15360, 41156, // alpha = 0.5102041 + 15351, 7957, 15360, 41187, // alpha = 0.5331318 + 15350, 8000, 15360, 41218, // alpha = 0.5565634 + 15350, 8043, 15360, 41247, // alpha = 0.5804989 + 15350, 8085, 15360, 41277, // alpha = 0.6049383 + 15350, 8126, 15360, 41304, // alpha = 0.6298816 + 15349, 8165, 15360, 41332, // alpha = 0.6553288 + 15349, 8198, 15360, 41358, // alpha = 0.68128 + 15349, 8216, 15360, 41384, // alpha = 0.7077349 + 15349, 8234, 15360, 41409, // alpha = 0.7346939 + 15349, 8251, 15360, 41432, // alpha = 0.7621567 + 15349, 8268, 15360, 41456, // alpha = 0.7901235 + 15348, 8284, 15360, 41478, // alpha = 0.8185941 + 15348, 8300, 15360, 41499, // alpha = 0.8475687 + 15348, 8315, 15360, 41519, // alpha = 0.8770471 + 15348, 8329, 15360, 41539, // alpha = 0.9070295 + 15348, 8343, 15360, 41559, // alpha = 0.9375157 + 15348, 8356, 15360, 41577, // alpha = 0.9685059 + 15348, 8368, 15360, 41593, // alpha = 1 + + // Cos (theta) = 0.9959688 + 15360, 6, 15360, 32775, // alpha = 0.001 + 15360, 6, 15360, 32775, // alpha = 0.001 + 15360, 6, 15360, 32775, // alpha = 0.001007811 + 15360, 18, 15360, 32793, // alpha = 0.002267574 + 15360, 57, 15360, 32846, // alpha = 0.004031243 + 15360, 139, 15360, 32961, // alpha = 0.006298816 + 15360, 287, 15360, 33162, // alpha = 0.009070295 + 15360, 531, 15360, 33501, // alpha = 0.01234568 + 15360, 903, 15360, 34010, // alpha = 0.01612497 + 15360, 1440, 15360, 34752, // alpha = 0.02040816 + 15360, 2116, 15360, 35297, // alpha = 0.02519527 + 15360, 2610, 15360, 35909, // alpha = 0.03048627 + 15360, 3161, 15360, 36347, // alpha = 0.03628118 + 15359, 3562, 15360, 36882, // alpha = 0.04258 + 15359, 4054, 15360, 37222, // alpha = 0.04938272 + 15359, 4370, 15360, 37630, // alpha = 0.05668934 + 15359, 4716, 15360, 37997, // alpha = 0.06449988 + 15359, 5115, 15360, 38271, // alpha = 0.07281432 + 15358, 5342, 15360, 38580, // alpha = 0.08163266 + 15358, 5592, 15360, 38919, // alpha = 0.09095491 + 15358, 5865, 15360, 39107, // alpha = 0.1007811 + 15357, 6151, 15360, 39308, // alpha = 0.1111111 + 15357, 6307, 15360, 39524, // alpha = 0.1219451 + 15356, 6469, 15360, 39748, // alpha = 0.1332829 + 15356, 6637, 15360, 39957, // alpha = 0.1451247 + 15356, 6808, 15360, 40075, // alpha = 0.1574704 + 15355, 6982, 15360, 40196, // alpha = 0.17032 + 15355, 7156, 15360, 40317, // alpha = 0.1836735 + 15354, 7249, 15360, 40436, // alpha = 0.1975309 + 15354, 7334, 15360, 40554, // alpha = 0.2118922 + 15353, 7419, 15360, 40672, // alpha = 0.2267574 + 15353, 7503, 15360, 40787, // alpha = 0.2421265 + 15352, 7584, 15360, 40900, // alpha = 0.2579995 + 15352, 7664, 15360, 40985, // alpha = 0.2743765 + 15352, 7743, 15360, 41039, // alpha = 0.2912573 + 15351, 7819, 15360, 41093, // alpha = 0.308642 + 15351, 7894, 15360, 41145, // alpha = 0.3265306 + 15350, 7967, 15360, 41195, // alpha = 0.3449232 + 15350, 8039, 15360, 41244, // alpha = 0.3638196 + 15350, 8109, 15360, 41292, // alpha = 0.38322 + 15349, 8177, 15360, 41341, // alpha = 0.4031242 + 15349, 8218, 15360, 41385, // alpha = 0.4235324 + 15349, 8251, 15360, 41433, // alpha = 0.4444445 + 15348, 8283, 15360, 41477, // alpha = 0.4658605 + 15348, 8315, 15360, 41521, // alpha = 0.4877803 + 15348, 8345, 15360, 41563, // alpha = 0.5102041 + 15348, 8375, 15360, 41603, // alpha = 0.5331318 + 15347, 8404, 15360, 41645, // alpha = 0.5565634 + 15347, 8433, 15360, 41685, // alpha = 0.5804989 + 15347, 8461, 15360, 41723, // alpha = 0.6049383 + 15346, 8488, 15360, 41761, // alpha = 0.6298816 + 15346, 8514, 15360, 41797, // alpha = 0.6553288 + 15346, 8539, 15360, 41832, // alpha = 0.68128 + 15346, 8564, 15360, 41865, // alpha = 0.7077349 + 15345, 8587, 15360, 41900, // alpha = 0.7346939 + 15345, 8610, 15360, 41931, // alpha = 0.7621567 + 15345, 8633, 15360, 41960, // alpha = 0.7901235 + 15345, 8654, 15360, 41988, // alpha = 0.8185941 + 15345, 8674, 15360, 42001, // alpha = 0.8475687 + 15344, 8694, 15360, 42015, // alpha = 0.8770471 + 15344, 8713, 15360, 42029, // alpha = 0.9070295 + 15344, 8732, 15360, 42042, // alpha = 0.9375157 + 15344, 8749, 15360, 42054, // alpha = 0.9685059 + 15344, 8766, 15360, 42065, // alpha = 1 + + // Cos (theta) = 0.9937012 + 15360, 8, 15360, 32777, // alpha = 0.001 + 15360, 8, 15360, 32777, // alpha = 0.001 + 15360, 8, 15360, 32777, // alpha = 0.001007811 + 15360, 23, 15360, 32800, // alpha = 0.002267574 + 15360, 72, 15360, 32865, // alpha = 0.004031243 + 15360, 174, 15360, 33007, // alpha = 0.006298816 + 15360, 360, 15360, 33265, // alpha = 0.009070295 + 15360, 665, 15360, 33685, // alpha = 0.01234568 + 15360, 1130, 15360, 34327, // alpha = 0.01612497 + 15360, 1803, 15360, 35033, // alpha = 0.02040816 + 15360, 2391, 15360, 35672, // alpha = 0.02519527 + 15360, 3010, 15360, 36181, // alpha = 0.03048627 + 15360, 3441, 15360, 36736, // alpha = 0.03628118 + 15359, 3944, 15360, 37145, // alpha = 0.04258 + 15359, 4328, 15360, 37570, // alpha = 0.04938272 + 15359, 4697, 15360, 37983, // alpha = 0.05668934 + 15359, 5125, 15360, 38282, // alpha = 0.06449988 + 15358, 5374, 15360, 38627, // alpha = 0.07281432 + 15358, 5656, 15360, 38963, // alpha = 0.08163266 + 15357, 5969, 15360, 39179, // alpha = 0.09095491 + 15357, 6227, 15360, 39414, // alpha = 0.1007811 + 15357, 6411, 15360, 39667, // alpha = 0.1111111 + 15356, 6605, 15360, 39936, // alpha = 0.1219451 + 15356, 6808, 15360, 40075, // alpha = 0.1332829 + 15355, 7018, 15360, 40221, // alpha = 0.1451247 + 15354, 7200, 15360, 40368, // alpha = 0.1574704 + 15354, 7308, 15360, 40518, // alpha = 0.17032 + 15353, 7417, 15360, 40667, // alpha = 0.1836735 + 15353, 7526, 15360, 40819, // alpha = 0.1975309 + 15352, 7633, 15360, 40963, // alpha = 0.2118922 + 15352, 7739, 15360, 41035, // alpha = 0.2267574 + 15351, 7843, 15360, 41109, // alpha = 0.2421265 + 15351, 7945, 15360, 41179, // alpha = 0.2579995 + 15350, 8045, 15360, 41248, // alpha = 0.2743765 + 15350, 8143, 15360, 41316, // alpha = 0.2912573 + 15349, 8215, 15360, 41380, // alpha = 0.308642 + 15349, 8262, 15360, 41447, // alpha = 0.3265306 + 15348, 8307, 15360, 41510, // alpha = 0.3449232 + 15348, 8352, 15360, 41573, // alpha = 0.3638196 + 15347, 8396, 15360, 41634, // alpha = 0.38322 + 15347, 8439, 15360, 41692, // alpha = 0.4031242 + 15346, 8480, 15360, 41751, // alpha = 0.4235324 + 15346, 8521, 15360, 41806, // alpha = 0.4444445 + 15346, 8561, 15360, 41863, // alpha = 0.4658605 + 15345, 8600, 15360, 41917, // alpha = 0.4877803 + 15345, 8639, 15360, 41971, // alpha = 0.5102041 + 15345, 8676, 15360, 42002, // alpha = 0.5331318 + 15344, 8712, 15360, 42028, // alpha = 0.5565634 + 15344, 8748, 15360, 42052, // alpha = 0.5804989 + 15344, 8782, 15360, 42077, // alpha = 0.6049383 + 15343, 8816, 15360, 42101, // alpha = 0.6298816 + 15343, 8849, 15360, 42122, // alpha = 0.6553288 + 15343, 8880, 15360, 42146, // alpha = 0.68128 + 15342, 8911, 15360, 42165, // alpha = 0.7077349 + 15342, 8940, 15360, 42186, // alpha = 0.7346939 + 15342, 8969, 15360, 42207, // alpha = 0.7621567 + 15342, 8997, 15360, 42226, // alpha = 0.7901235 + 15341, 9023, 15360, 42243, // alpha = 0.8185941 + 15341, 9049, 15360, 42261, // alpha = 0.8475687 + 15341, 9073, 15360, 42279, // alpha = 0.8770471 + 15341, 9097, 15360, 42297, // alpha = 0.9070295 + 15340, 9120, 15360, 42311, // alpha = 0.9375157 + 15340, 9142, 15360, 42326, // alpha = 0.9685059 + 15340, 9162, 15360, 42342, // alpha = 1 + + // Cos (theta) = 0.9909297 + 15360, 9, 15360, 32780, // alpha = 0.001 + 15360, 9, 15360, 32780, // alpha = 0.001 + 15360, 9, 15360, 32780, // alpha = 0.001007811 + 15360, 28, 15360, 32807, // alpha = 0.002267574 + 15360, 86, 15360, 32884, // alpha = 0.004031243 + 15360, 209, 15360, 33057, // alpha = 0.006298816 + 15360, 432, 15360, 33363, // alpha = 0.009070295 + 15360, 799, 15360, 33867, // alpha = 0.01234568 + 15360, 1359, 15360, 34639, // alpha = 0.01612497 + 15360, 2108, 15360, 35286, // alpha = 0.02040816 + 15360, 2667, 15360, 35948, // alpha = 0.02519527 + 15360, 3242, 15360, 36461, // alpha = 0.03048627 + 15359, 3723, 15360, 36994, // alpha = 0.03628118 + 15359, 4212, 15360, 37411, // alpha = 0.04258 + 15359, 4582, 15360, 37904, // alpha = 0.04938272 + 15359, 5026, 15360, 38210, // alpha = 0.05668934 + 15358, 5333, 15360, 38569, // alpha = 0.06449988 + 15358, 5633, 15360, 38946, // alpha = 0.07281432 + 15357, 5971, 15360, 39180, // alpha = 0.08163266 + 15357, 6246, 15360, 39440, // alpha = 0.09095491 + 15356, 6451, 15360, 39723, // alpha = 0.1007811 + 15356, 6671, 15360, 39981, // alpha = 0.1111111 + 15355, 6905, 15360, 40144, // alpha = 0.1219451 + 15355, 7149, 15360, 40311, // alpha = 0.1332829 + 15354, 7284, 15360, 40485, // alpha = 0.1451247 + 15353, 7413, 15360, 40663, // alpha = 0.1574704 + 15353, 7543, 15360, 40842, // alpha = 0.17032 + 15352, 7674, 15360, 40992, // alpha = 0.1836735 + 15351, 7804, 15360, 41082, // alpha = 0.1975309 + 15351, 7932, 15360, 41170, // alpha = 0.2118922 + 15350, 8059, 15360, 41258, // alpha = 0.2267574 + 15349, 8184, 15360, 41344, // alpha = 0.2421265 + 15349, 8249, 15360, 41430, // alpha = 0.2579995 + 15348, 8309, 15360, 41513, // alpha = 0.2743765 + 15348, 8368, 15360, 41594, // alpha = 0.2912573 + 15347, 8425, 15360, 41674, // alpha = 0.308642 + 15346, 8481, 15360, 41751, // alpha = 0.3265306 + 15346, 8536, 15360, 41828, // alpha = 0.3449232 + 15345, 8589, 15360, 41902, // alpha = 0.3638196 + 15345, 8642, 15360, 41973, // alpha = 0.38322 + 15344, 8693, 15360, 42014, // alpha = 0.4031242 + 15344, 8743, 15360, 42050, // alpha = 0.4235324 + 15343, 8792, 15360, 42084, // alpha = 0.4444445 + 15343, 8840, 15360, 42116, // alpha = 0.4658605 + 15343, 8887, 15360, 42149, // alpha = 0.4877803 + 15342, 8932, 15360, 42181, // alpha = 0.5102041 + 15342, 8977, 15360, 42212, // alpha = 0.5331318 + 15341, 9021, 15360, 42242, // alpha = 0.5565634 + 15341, 9063, 15360, 42273, // alpha = 0.5804989 + 15341, 9105, 15360, 42300, // alpha = 0.6049383 + 15340, 9145, 15360, 42329, // alpha = 0.6298816 + 15340, 9184, 15360, 42356, // alpha = 0.6553288 + 15339, 9219, 15360, 42384, // alpha = 0.68128 + 15339, 9237, 15360, 42407, // alpha = 0.7077349 + 15339, 9255, 15360, 42433, // alpha = 0.7346939 + 15338, 9272, 15360, 42456, // alpha = 0.7621567 + 15338, 9288, 15360, 42478, // alpha = 0.7901235 + 15338, 9304, 15360, 42503, // alpha = 0.8185941 + 15338, 9320, 15360, 42523, // alpha = 0.8475687 + 15337, 9334, 15360, 42544, // alpha = 0.8770471 + 15337, 9348, 15360, 42562, // alpha = 0.9070295 + 15337, 9362, 15360, 42581, // alpha = 0.9375157 + 15337, 9375, 15360, 42600, // alpha = 0.9685059 + 15336, 9387, 15360, 42616, // alpha = 1 + + // Cos (theta) = 0.9876543 + 15360, 10, 15360, 32782, // alpha = 0.001 + 15360, 10, 15360, 32782, // alpha = 0.001 + 15360, 10, 15360, 32782, // alpha = 0.001007811 + 15360, 32, 15360, 32812, // alpha = 0.002267574 + 15360, 100, 15360, 32907, // alpha = 0.004031243 + 15360, 244, 15360, 33103, // alpha = 0.006298816 + 15360, 506, 15360, 33461, // alpha = 0.009070295 + 15360, 935, 15360, 34056, // alpha = 0.01234568 + 15360, 1590, 15360, 34885, // alpha = 0.01612497 + 15360, 2292, 15360, 35537, // alpha = 0.02040816 + 15360, 2946, 15360, 36139, // alpha = 0.02519527 + 15360, 3444, 15360, 36737, // alpha = 0.03048627 + 15359, 4007, 15360, 37189, // alpha = 0.03628118 + 15359, 4405, 15360, 37678, // alpha = 0.04258 + 15359, 4838, 15360, 38080, // alpha = 0.04938272 + 15358, 5238, 15360, 38439, // alpha = 0.05668934 + 15358, 5543, 15360, 38858, // alpha = 0.06449988 + 15358, 5893, 15360, 39126, // alpha = 0.07281432 + 15357, 6216, 15360, 39400, // alpha = 0.08163266 + 15356, 6436, 15360, 39703, // alpha = 0.09095491 + 15356, 6676, 15360, 39984, // alpha = 0.1007811 + 15355, 6933, 15360, 40162, // alpha = 0.1111111 + 15354, 7187, 15360, 40351, // alpha = 0.1219451 + 15354, 7330, 15360, 40549, // alpha = 0.1332829 + 15353, 7477, 15360, 40750, // alpha = 0.1451247 + 15352, 7627, 15360, 40957, // alpha = 0.1574704 + 15351, 7779, 15360, 41066, // alpha = 0.17032 + 15351, 7931, 15360, 41171, // alpha = 0.1836735 + 15350, 8083, 15360, 41275, // alpha = 0.1975309 + 15349, 8213, 15360, 41379, // alpha = 0.2118922 + 15348, 8287, 15360, 41481, // alpha = 0.2267574 + 15348, 8360, 15360, 41581, // alpha = 0.2421265 + 15347, 8431, 15360, 41682, // alpha = 0.2579995 + 15346, 8501, 15360, 41778, // alpha = 0.2743765 + 15346, 8569, 15360, 41872, // alpha = 0.2912573 + 15345, 8636, 15360, 41967, // alpha = 0.308642 + 15344, 8701, 15360, 42020, // alpha = 0.3265306 + 15344, 8765, 15360, 42064, // alpha = 0.3449232 + 15343, 8827, 15360, 42108, // alpha = 0.3638196 + 15343, 8888, 15360, 42149, // alpha = 0.38322 + 15342, 8948, 15360, 42191, // alpha = 0.4031242 + 15341, 9006, 15360, 42232, // alpha = 0.4235324 + 15341, 9063, 15360, 42271, // alpha = 0.4444445 + 15340, 9119, 15360, 42311, // alpha = 0.4658605 + 15340, 9174, 15360, 42349, // alpha = 0.4877803 + 15339, 9221, 15360, 42385, // alpha = 0.5102041 + 15339, 9247, 15360, 42423, // alpha = 0.5331318 + 15338, 9273, 15360, 42457, // alpha = 0.5565634 + 15338, 9298, 15360, 42492, // alpha = 0.5804989 + 15338, 9322, 15360, 42525, // alpha = 0.6049383 + 15337, 9345, 15360, 42559, // alpha = 0.6298816 + 15337, 9368, 15360, 42591, // alpha = 0.6553288 + 15336, 9390, 15360, 42621, // alpha = 0.68128 + 15336, 9411, 15360, 42651, // alpha = 0.7077349 + 15336, 9432, 15360, 42679, // alpha = 0.7346939 + 15335, 9451, 15360, 42709, // alpha = 0.7621567 + 15335, 9471, 15360, 42732, // alpha = 0.7901235 + 15335, 9489, 15360, 42760, // alpha = 0.8185941 + 15334, 9507, 15360, 42785, // alpha = 0.8475687 + 15334, 9524, 15360, 42807, // alpha = 0.8770471 + 15334, 9541, 15360, 42830, // alpha = 0.9070295 + 15333, 9556, 15360, 42854, // alpha = 0.9375157 + 15333, 9571, 15360, 42875, // alpha = 0.9685059 + 15333, 9586, 15360, 42895, // alpha = 1 + + // Cos (theta) = 0.983875 + 15360, 12, 15360, 32783, // alpha = 0.001 + 15360, 12, 15360, 32783, // alpha = 0.001 + 15360, 12, 15360, 32783, // alpha = 0.001007811 + 15360, 37, 15360, 32819, // alpha = 0.002267574 + 15360, 115, 15360, 32924, // alpha = 0.004031243 + 15360, 280, 15360, 33151, // alpha = 0.006298816 + 15360, 579, 15360, 33564, // alpha = 0.009070295 + 15360, 1071, 15360, 34242, // alpha = 0.01234568 + 15360, 1822, 15360, 35048, // alpha = 0.01612497 + 15360, 2477, 15360, 35794, // alpha = 0.02040816 + 15360, 3149, 15360, 36333, // alpha = 0.02519527 + 15359, 3648, 15360, 36942, // alpha = 0.03048627 + 15359, 4195, 15360, 37387, // alpha = 0.03628118 + 15359, 4599, 15360, 37916, // alpha = 0.04258 + 15359, 5096, 15360, 38258, // alpha = 0.04938272 + 15358, 5405, 15360, 38668, // alpha = 0.05668934 + 15358, 5754, 15360, 39029, // alpha = 0.06449988 + 15357, 6150, 15360, 39307, // alpha = 0.07281432 + 15357, 6376, 15360, 39621, // alpha = 0.08163266 + 15356, 6628, 15360, 39952, // alpha = 0.09095491 + 15355, 6902, 15360, 40140, // alpha = 0.1007811 + 15354, 7183, 15360, 40344, // alpha = 0.1111111 + 15354, 7339, 15360, 40559, // alpha = 0.1219451 + 15353, 7502, 15360, 40787, // alpha = 0.1332829 + 15352, 7670, 15360, 40988, // alpha = 0.1451247 + 15351, 7842, 15360, 41109, // alpha = 0.1574704 + 15350, 8016, 15360, 41228, // alpha = 0.17032 + 15349, 8190, 15360, 41348, // alpha = 0.1836735 + 15348, 8278, 15360, 41470, // alpha = 0.1975309 + 15348, 8364, 15360, 41588, // alpha = 0.2118922 + 15347, 8449, 15360, 41705, // alpha = 0.2267574 + 15346, 8532, 15360, 41821, // alpha = 0.2421265 + 15345, 8613, 15360, 41935, // alpha = 0.2579995 + 15344, 8693, 15360, 42016, // alpha = 0.2743765 + 15344, 8771, 15360, 42069, // alpha = 0.2912573 + 15343, 8848, 15360, 42123, // alpha = 0.308642 + 15342, 8922, 15360, 42174, // alpha = 0.3265306 + 15342, 8995, 15360, 42225, // alpha = 0.3449232 + 15341, 9066, 15360, 42274, // alpha = 0.3638196 + 15340, 9136, 15360, 42323, // alpha = 0.38322 + 15340, 9204, 15360, 42369, // alpha = 0.4031242 + 15339, 9243, 15360, 42417, // alpha = 0.4235324 + 15338, 9276, 15360, 42462, // alpha = 0.4444445 + 15338, 9308, 15360, 42507, // alpha = 0.4658605 + 15337, 9339, 15360, 42548, // alpha = 0.4877803 + 15337, 9369, 15360, 42592, // alpha = 0.5102041 + 15336, 9399, 15360, 42634, // alpha = 0.5331318 + 15336, 9428, 15360, 42673, // alpha = 0.5565634 + 15335, 9456, 15360, 42714, // alpha = 0.5804989 + 15335, 9483, 15360, 42752, // alpha = 0.6049383 + 15334, 9510, 15360, 42790, // alpha = 0.6298816 + 15334, 9536, 15360, 42825, // alpha = 0.6553288 + 15333, 9561, 15360, 42860, // alpha = 0.68128 + 15333, 9585, 15360, 42896, // alpha = 0.7077349 + 15332, 9609, 15360, 42926, // alpha = 0.7346939 + 15332, 9631, 15360, 42957, // alpha = 0.7621567 + 15332, 9653, 15360, 42989, // alpha = 0.7901235 + 15331, 9674, 15360, 43013, // alpha = 0.8185941 + 15331, 9695, 15360, 43028, // alpha = 0.8475687 + 15331, 9714, 15360, 43041, // alpha = 0.8770471 + 15330, 9733, 15360, 43055, // alpha = 0.9070295 + 15330, 9751, 15360, 43067, // alpha = 0.9375157 + 15330, 9768, 15360, 43079, // alpha = 0.9685059 + 15329, 9785, 15360, 43089, // alpha = 1 + + // Cos (theta) = 0.9795918 + 15360, 13, 15360, 32784, // alpha = 0.001 + 15360, 13, 15360, 32784, // alpha = 0.001 + 15360, 13, 15360, 32784, // alpha = 0.001007811 + 15360, 41, 15360, 32825, // alpha = 0.002267574 + 15360, 130, 15360, 32944, // alpha = 0.004031243 + 15360, 316, 15360, 33202, // alpha = 0.006298816 + 15360, 654, 15360, 33669, // alpha = 0.009070295 + 15360, 1209, 15360, 34436, // alpha = 0.01234568 + 15360, 2052, 15360, 35212, // alpha = 0.01612497 + 15360, 2664, 15360, 35950, // alpha = 0.02040816 + 15360, 3291, 15360, 36526, // alpha = 0.02519527 + 15359, 3854, 15360, 37084, // alpha = 0.03048627 + 15359, 4339, 15360, 37584, // alpha = 0.03628118 + 15359, 4796, 15360, 38053, // alpha = 0.04258 + 15358, 5238, 15360, 38436, // alpha = 0.04938272 + 15358, 5573, 15360, 38900, // alpha = 0.05668934 + 15357, 5967, 15360, 39177, // alpha = 0.06449988 + 15357, 6282, 15360, 39490, // alpha = 0.07281432 + 15356, 6538, 15360, 39842, // alpha = 0.08163266 + 15355, 6821, 15360, 40084, // alpha = 0.09095491 + 15355, 7131, 15360, 40299, // alpha = 0.1007811 + 15354, 7316, 15360, 40527, // alpha = 0.1111111 + 15353, 7492, 15360, 40772, // alpha = 0.1219451 + 15352, 7676, 15360, 40993, // alpha = 0.1332829 + 15351, 7865, 15360, 41124, // alpha = 0.1451247 + 15350, 8059, 15360, 41259, // alpha = 0.1574704 + 15349, 8223, 15360, 41394, // alpha = 0.17032 + 15348, 8322, 15360, 41530, // alpha = 0.1836735 + 15347, 8419, 15360, 41665, // alpha = 0.1975309 + 15346, 8516, 15360, 41800, // alpha = 0.2118922 + 15345, 8612, 15360, 41933, // alpha = 0.2267574 + 15344, 8705, 15360, 42023, // alpha = 0.2421265 + 15343, 8797, 15360, 42086, // alpha = 0.2579995 + 15343, 8887, 15360, 42149, // alpha = 0.2743765 + 15342, 8975, 15360, 42210, // alpha = 0.2912573 + 15341, 9061, 15360, 42271, // alpha = 0.308642 + 15340, 9144, 15360, 42328, // alpha = 0.3265306 + 15339, 9221, 15360, 42386, // alpha = 0.3449232 + 15339, 9261, 15360, 42441, // alpha = 0.3638196 + 15338, 9300, 15360, 42496, // alpha = 0.38322 + 15337, 9339, 15360, 42549, // alpha = 0.4031242 + 15337, 9376, 15360, 42602, // alpha = 0.4235324 + 15336, 9413, 15360, 42653, // alpha = 0.4444445 + 15335, 9449, 15360, 42705, // alpha = 0.4658605 + 15335, 9483, 15360, 42752, // alpha = 0.4877803 + 15334, 9518, 15360, 42800, // alpha = 0.5102041 + 15334, 9551, 15360, 42846, // alpha = 0.5331318 + 15333, 9583, 15360, 42891, // alpha = 0.5565634 + 15332, 9615, 15360, 42935, // alpha = 0.5804989 + 15332, 9646, 15360, 42978, // alpha = 0.6049383 + 15331, 9676, 15360, 43014, // alpha = 0.6298816 + 15331, 9705, 15360, 43035, // alpha = 0.6553288 + 15330, 9733, 15360, 43054, // alpha = 0.68128 + 15330, 9760, 15360, 43074, // alpha = 0.7077349 + 15329, 9787, 15360, 43092, // alpha = 0.7346939 + 15329, 9812, 15360, 43111, // alpha = 0.7621567 + 15329, 9837, 15360, 43128, // alpha = 0.7901235 + 15328, 9860, 15360, 43143, // alpha = 0.8185941 + 15328, 9883, 15360, 43159, // alpha = 0.8475687 + 15327, 9905, 15360, 43174, // alpha = 0.8770471 + 15327, 9926, 15360, 43190, // alpha = 0.9070295 + 15327, 9946, 15360, 43204, // alpha = 0.9375157 + 15327, 9965, 15360, 43218, // alpha = 0.9685059 + 15326, 9984, 15360, 43231, // alpha = 1 + + // Cos (theta) = 0.9748048 + 15360, 15, 15360, 32787, // alpha = 0.001 + 15360, 15, 15360, 32787, // alpha = 0.001 + 15360, 15, 15360, 32787, // alpha = 0.001007811 + 15360, 46, 15360, 32831, // alpha = 0.002267574 + 15360, 145, 15360, 32966, // alpha = 0.004031243 + 15360, 352, 15360, 33255, // alpha = 0.006298816 + 15360, 729, 15360, 33772, // alpha = 0.009070295 + 15360, 1348, 15360, 34624, // alpha = 0.01234568 + 15360, 2171, 15360, 35373, // alpha = 0.01612497 + 15360, 2853, 15360, 36072, // alpha = 0.02040816 + 15360, 3434, 15360, 36722, // alpha = 0.02519527 + 15359, 4062, 15360, 37227, // alpha = 0.03048627 + 15359, 4485, 15360, 37785, // alpha = 0.03628118 + 15359, 4994, 15360, 38188, // alpha = 0.04258 + 15358, 5369, 15360, 38619, // alpha = 0.04938272 + 15358, 5743, 15360, 39023, // alpha = 0.05668934 + 15357, 6163, 15360, 39326, // alpha = 0.06449988 + 15357, 6415, 15360, 39673, // alpha = 0.07281432 + 15356, 6700, 15360, 40003, // alpha = 0.08163266 + 15355, 7016, 15360, 40220, // alpha = 0.09095491 + 15354, 7265, 15360, 40457, // alpha = 0.1007811 + 15353, 7450, 15360, 40713, // alpha = 0.1111111 + 15352, 7646, 15360, 40972, // alpha = 0.1219451 + 15351, 7851, 15360, 41114, // alpha = 0.1332829 + 15350, 8062, 15360, 41262, // alpha = 0.1451247 + 15349, 8235, 15360, 41411, // alpha = 0.1574704 + 15348, 8344, 15360, 41561, // alpha = 0.17032 + 15347, 8453, 15360, 41712, // alpha = 0.1836735 + 15346, 8562, 15360, 41863, // alpha = 0.1975309 + 15345, 8670, 15360, 41999, // alpha = 0.2118922 + 15344, 8776, 15360, 42073, // alpha = 0.2267574 + 15343, 8880, 15360, 42145, // alpha = 0.2421265 + 15342, 8982, 15360, 42216, // alpha = 0.2579995 + 15341, 9082, 15360, 42286, // alpha = 0.2743765 + 15340, 9180, 15360, 42353, // alpha = 0.2912573 + 15339, 9246, 15360, 42419, // alpha = 0.308642 + 15338, 9292, 15360, 42485, // alpha = 0.3265306 + 15337, 9338, 15360, 42548, // alpha = 0.3449232 + 15337, 9382, 15360, 42610, // alpha = 0.3638196 + 15336, 9426, 15360, 42671, // alpha = 0.38322 + 15335, 9468, 15360, 42730, // alpha = 0.4031242 + 15334, 9510, 15360, 42789, // alpha = 0.4235324 + 15333, 9550, 15360, 42845, // alpha = 0.4444445 + 15333, 9590, 15360, 42900, // alpha = 0.4658605 + 15332, 9629, 15360, 42955, // alpha = 0.4877803 + 15331, 9667, 15360, 43008, // alpha = 0.5102041 + 15331, 9704, 15360, 43034, // alpha = 0.5331318 + 15330, 9740, 15360, 43060, // alpha = 0.5565634 + 15330, 9775, 15360, 43084, // alpha = 0.5804989 + 15329, 9809, 15360, 43107, // alpha = 0.6049383 + 15329, 9843, 15360, 43132, // alpha = 0.6298816 + 15328, 9875, 15360, 43154, // alpha = 0.6553288 + 15327, 9906, 15360, 43176, // alpha = 0.68128 + 15327, 9936, 15360, 43196, // alpha = 0.7077349 + 15327, 9965, 15360, 43217, // alpha = 0.7346939 + 15326, 9994, 15360, 43236, // alpha = 0.7621567 + 15326, 10021, 15360, 43257, // alpha = 0.7901235 + 15325, 10047, 15360, 43275, // alpha = 0.8185941 + 15325, 10072, 15360, 43292, // alpha = 0.8475687 + 15324, 10097, 15360, 43308, // alpha = 0.8770471 + 15324, 10120, 15360, 43326, // alpha = 0.9070295 + 15324, 10142, 15360, 43343, // alpha = 0.9375157 + 15323, 10164, 15360, 43356, // alpha = 0.9685059 + 15323, 10184, 15360, 43371, // alpha = 1 + + // Cos (theta) = 0.9695137 + 15360, 16, 15360, 32790, // alpha = 0.001 + 15360, 16, 15360, 32790, // alpha = 0.001 + 15360, 16, 15360, 32790, // alpha = 0.001007811 + 15360, 51, 15360, 32839, // alpha = 0.002267574 + 15360, 160, 15360, 32987, // alpha = 0.004031243 + 15360, 389, 15360, 33308, // alpha = 0.006298816 + 15360, 805, 15360, 33868, // alpha = 0.009070295 + 15360, 1489, 15360, 34813, // alpha = 0.01234568 + 15360, 2290, 15360, 35536, // alpha = 0.01612497 + 15360, 3044, 15360, 36206, // alpha = 0.02040816 + 15359, 3579, 15360, 36894, // alpha = 0.02519527 + 15359, 4184, 15360, 37373, // alpha = 0.03048627 + 15359, 4632, 15360, 37939, // alpha = 0.03628118 + 15359, 5157, 15360, 38326, // alpha = 0.04258 + 15358, 5502, 15360, 38800, // alpha = 0.04938272 + 15358, 5915, 15360, 39141, // alpha = 0.05668934 + 15357, 6272, 15360, 39476, // alpha = 0.06449988 + 15356, 6550, 15360, 39860, // alpha = 0.07281432 + 15355, 6865, 15360, 40115, // alpha = 0.08163266 + 15354, 7191, 15360, 40357, // alpha = 0.09095491 + 15353, 7381, 15360, 40620, // alpha = 0.1007811 + 15352, 7586, 15360, 40902, // alpha = 0.1111111 + 15351, 7802, 15360, 41080, // alpha = 0.1219451 + 15350, 8028, 15360, 41238, // alpha = 0.1332829 + 15349, 8227, 15360, 41399, // alpha = 0.1451247 + 15348, 8345, 15360, 41564, // alpha = 0.1574704 + 15347, 8466, 15360, 41730, // alpha = 0.17032 + 15345, 8586, 15360, 41897, // alpha = 0.1836735 + 15344, 8706, 15360, 42024, // alpha = 0.1975309 + 15343, 8825, 15360, 42106, // alpha = 0.2118922 + 15342, 8942, 15360, 42187, // alpha = 0.2267574 + 15341, 9056, 15360, 42267, // alpha = 0.2421265 + 15340, 9169, 15360, 42346, // alpha = 0.2579995 + 15339, 9247, 15360, 42423, // alpha = 0.2743765 + 15338, 9301, 15360, 42497, // alpha = 0.2912573 + 15337, 9354, 15360, 42567, // alpha = 0.308642 + 15336, 9405, 15360, 42642, // alpha = 0.3265306 + 15335, 9455, 15360, 42712, // alpha = 0.3449232 + 15334, 9504, 15360, 42780, // alpha = 0.3638196 + 15333, 9552, 15360, 42844, // alpha = 0.38322 + 15333, 9599, 15360, 42912, // alpha = 0.4031242 + 15332, 9644, 15360, 42978, // alpha = 0.4235324 + 15331, 9689, 15360, 43023, // alpha = 0.4444445 + 15330, 9733, 15360, 43054, // alpha = 0.4658605 + 15330, 9776, 15360, 43084, // alpha = 0.4877803 + 15329, 9817, 15360, 43114, // alpha = 0.5102041 + 15328, 9858, 15360, 43142, // alpha = 0.5331318 + 15328, 9898, 15360, 43170, // alpha = 0.5565634 + 15327, 9936, 15360, 43198, // alpha = 0.5804989 + 15326, 9974, 15360, 43224, // alpha = 0.6049383 + 15326, 10010, 15360, 43248, // alpha = 0.6298816 + 15325, 10046, 15360, 43273, // alpha = 0.6553288 + 15325, 10080, 15360, 43297, // alpha = 0.68128 + 15324, 10113, 15360, 43321, // alpha = 0.7077349 + 15324, 10145, 15360, 43344, // alpha = 0.7346939 + 15323, 10176, 15360, 43366, // alpha = 0.7621567 + 15323, 10206, 15360, 43387, // alpha = 0.7901235 + 15322, 10235, 15360, 43408, // alpha = 0.8185941 + 15322, 10251, 15360, 43425, // alpha = 0.8475687 + 15321, 10265, 15360, 43444, // alpha = 0.8770471 + 15321, 10277, 15360, 43463, // alpha = 0.9070295 + 15321, 10290, 15360, 43481, // alpha = 0.9375157 + 15320, 10301, 15360, 43497, // alpha = 0.9685059 + 15320, 10313, 15360, 43513, // alpha = 1 + + // Cos (theta) = 0.9637188 + 15360, 18, 15360, 32793, // alpha = 0.001 + 15360, 18, 15360, 32793, // alpha = 0.001 + 15360, 18, 15360, 32793, // alpha = 0.001007811 + 15360, 56, 15360, 32845, // alpha = 0.002267574 + 15360, 175, 15360, 33008, // alpha = 0.004031243 + 15360, 426, 15360, 33353, // alpha = 0.006298816 + 15360, 882, 15360, 33984, // alpha = 0.009070295 + 15360, 1631, 15360, 34917, // alpha = 0.01234568 + 15360, 2412, 15360, 35703, // alpha = 0.01612497 + 15360, 3155, 15360, 36341, // alpha = 0.02040816 + 15359, 3726, 15360, 36996, // alpha = 0.02519527 + 15359, 4291, 15360, 37519, // alpha = 0.03048627 + 15359, 4782, 15360, 38040, // alpha = 0.03628118 + 15358, 5259, 15360, 38467, // alpha = 0.04258 + 15358, 5637, 15360, 38950, // alpha = 0.04938272 + 15357, 6089, 15360, 39262, // alpha = 0.05668934 + 15357, 6382, 15360, 39627, // alpha = 0.06449988 + 15356, 6687, 15360, 39992, // alpha = 0.07281432 + 15355, 7032, 15360, 40230, // alpha = 0.08163266 + 15354, 7291, 15360, 40496, // alpha = 0.09095491 + 15353, 7499, 15360, 40781, // alpha = 0.1007811 + 15352, 7723, 15360, 41026, // alpha = 0.1111111 + 15350, 7960, 15360, 41189, // alpha = 0.1219451 + 15349, 8200, 15360, 41360, // alpha = 0.1332829 + 15348, 8327, 15360, 41539, // alpha = 0.1451247 + 15347, 8457, 15360, 41717, // alpha = 0.1574704 + 15345, 8589, 15360, 41900, // alpha = 0.17032 + 15344, 8720, 15360, 42033, // alpha = 0.1836735 + 15343, 8852, 15360, 42126, // alpha = 0.1975309 + 15342, 8981, 15360, 42215, // alpha = 0.2118922 + 15340, 9109, 15360, 42303, // alpha = 0.2267574 + 15339, 9225, 15360, 42390, // alpha = 0.2421265 + 15338, 9287, 15360, 42476, // alpha = 0.2579995 + 15337, 9347, 15360, 42561, // alpha = 0.2743765 + 15336, 9406, 15360, 42643, // alpha = 0.2912573 + 15335, 9463, 15360, 42723, // alpha = 0.308642 + 15334, 9519, 15360, 42801, // alpha = 0.3265306 + 15333, 9574, 15360, 42878, // alpha = 0.3449232 + 15332, 9627, 15360, 42946, // alpha = 0.3638196 + 15331, 9679, 15360, 43017, // alpha = 0.38322 + 15330, 9730, 15360, 43053, // alpha = 0.4031242 + 15330, 9780, 15360, 43088, // alpha = 0.4235324 + 15329, 9829, 15360, 43121, // alpha = 0.4444445 + 15328, 9877, 15360, 43155, // alpha = 0.4658605 + 15327, 9923, 15360, 43187, // alpha = 0.4877803 + 15326, 9969, 15360, 43220, // alpha = 0.5102041 + 15326, 10013, 15360, 43251, // alpha = 0.5331318 + 15325, 10056, 15360, 43281, // alpha = 0.5565634 + 15324, 10098, 15360, 43311, // alpha = 0.5804989 + 15324, 10139, 15360, 43339, // alpha = 0.6049383 + 15323, 10179, 15360, 43366, // alpha = 0.6298816 + 15323, 10218, 15360, 43395, // alpha = 0.6553288 + 15322, 10248, 15360, 43420, // alpha = 0.68128 + 15321, 10266, 15360, 43447, // alpha = 0.7077349 + 15321, 10283, 15360, 43471, // alpha = 0.7346939 + 15320, 10300, 15360, 43495, // alpha = 0.7621567 + 15320, 10316, 15361, 43518, // alpha = 0.7901235 + 15320, 10332, 15360, 43540, // alpha = 0.8185941 + 15319, 10347, 15360, 43562, // alpha = 0.8475687 + 15319, 10362, 15361, 43582, // alpha = 0.8770471 + 15318, 10375, 15360, 43601, // alpha = 0.9070295 + 15318, 10389, 15361, 43620, // alpha = 0.9375157 + 15317, 10402, 15361, 43638, // alpha = 0.9685059 + 15317, 10414, 15361, 43654, // alpha = 1 + + // Cos (theta) = 0.95742 + 15360, 19, 15360, 32794, // alpha = 0.001 + 15360, 19, 15360, 32794, // alpha = 0.001 + 15360, 19, 15360, 32794, // alpha = 0.001007811 + 15360, 61, 15360, 32850, // alpha = 0.002267574 + 15360, 190, 15360, 33030, // alpha = 0.004031243 + 15360, 464, 15360, 33408, // alpha = 0.006298816 + 15360, 961, 15360, 34087, // alpha = 0.009070295 + 15360, 1776, 15360, 35015, // alpha = 0.01234568 + 15360, 2535, 15360, 35857, // alpha = 0.01612497 + 15360, 3253, 15360, 36476, // alpha = 0.02040816 + 15359, 3874, 15360, 37099, // alpha = 0.02519527 + 15359, 4399, 15360, 37669, // alpha = 0.03048627 + 15359, 4933, 15360, 38146, // alpha = 0.03628118 + 15358, 5362, 15360, 38609, // alpha = 0.04258 + 15358, 5773, 15360, 39043, // alpha = 0.04938272 + 15357, 6205, 15360, 39384, // alpha = 0.05668934 + 15356, 6493, 15360, 39782, // alpha = 0.06449988 + 15355, 6825, 15360, 40087, // alpha = 0.07281432 + 15354, 7184, 15360, 40347, // alpha = 0.08163266 + 15353, 7392, 15360, 40634, // alpha = 0.09095491 + 15352, 7619, 15360, 40948, // alpha = 0.1007811 + 15351, 7862, 15360, 41122, // alpha = 0.1111111 + 15350, 8120, 15360, 41301, // alpha = 0.1219451 + 15348, 8290, 15360, 41486, // alpha = 0.1332829 + 15347, 8429, 15360, 41679, // alpha = 0.1451247 + 15346, 8570, 15360, 41874, // alpha = 0.1574704 + 15344, 8713, 15360, 42028, // alpha = 0.17032 + 15343, 8856, 15360, 42128, // alpha = 0.1836735 + 15342, 8999, 15360, 42227, // alpha = 0.1975309 + 15340, 9140, 15360, 42325, // alpha = 0.2118922 + 15339, 9247, 15360, 42422, // alpha = 0.2267574 + 15338, 9315, 15360, 42516, // alpha = 0.2421265 + 15336, 9382, 15360, 42610, // alpha = 0.2579995 + 15335, 9447, 15360, 42701, // alpha = 0.2743765 + 15334, 9511, 15360, 42790, // alpha = 0.2912573 + 15333, 9573, 15360, 42877, // alpha = 0.308642 + 15332, 9634, 15360, 42962, // alpha = 0.3265306 + 15331, 9693, 15360, 43027, // alpha = 0.3449232 + 15330, 9751, 15360, 43067, // alpha = 0.3638196 + 15329, 9808, 15360, 43106, // alpha = 0.38322 + 15328, 9863, 15360, 43146, // alpha = 0.4031242 + 15327, 9917, 15360, 43184, // alpha = 0.4235324 + 15326, 9970, 15360, 43222, // alpha = 0.4444445 + 15326, 10022, 15360, 43258, // alpha = 0.4658605 + 15325, 10072, 15360, 43292, // alpha = 0.4877803 + 15324, 10122, 15360, 43327, // alpha = 0.5102041 + 15323, 10170, 15360, 43361, // alpha = 0.5331318 + 15322, 10217, 15360, 43393, // alpha = 0.5565634 + 15322, 10251, 15360, 43426, // alpha = 0.5804989 + 15321, 10273, 15360, 43457, // alpha = 0.6049383 + 15320, 10295, 15360, 43488, // alpha = 0.6298816 + 15320, 10316, 15360, 43517, // alpha = 0.6553288 + 15319, 10336, 15360, 43546, // alpha = 0.68128 + 15319, 10355, 15361, 43572, // alpha = 0.7077349 + 15318, 10374, 15361, 43600, // alpha = 0.7346939 + 15318, 10393, 15361, 43626, // alpha = 0.7621567 + 15317, 10410, 15361, 43650, // alpha = 0.7901235 + 15316, 10427, 15361, 43673, // alpha = 0.8185941 + 15316, 10444, 15361, 43697, // alpha = 0.8475687 + 15316, 10459, 15361, 43719, // alpha = 0.8770471 + 15315, 10474, 15361, 43741, // alpha = 0.9070295 + 15315, 10489, 15361, 43760, // alpha = 0.9375157 + 15315, 10503, 15361, 43781, // alpha = 0.9685059 + 15314, 10516, 15361, 43801, // alpha = 1 + + // Cos (theta) = 0.9506173 + 15360, 21, 15360, 32796, // alpha = 0.001 + 15360, 21, 15360, 32796, // alpha = 0.001 + 15360, 21, 15360, 32796, // alpha = 0.001007811 + 15360, 66, 15360, 32857, // alpha = 0.002267574 + 15360, 206, 15360, 33052, // alpha = 0.004031243 + 15360, 502, 15360, 33461, // alpha = 0.006298816 + 15360, 1040, 15360, 34203, // alpha = 0.009070295 + 15360, 1923, 15360, 35116, // alpha = 0.01234568 + 15360, 2659, 15360, 35941, // alpha = 0.01612497 + 15360, 3352, 15360, 36609, // alpha = 0.02040816 + 15359, 4025, 15360, 37202, // alpha = 0.02519527 + 15359, 4508, 15360, 37820, // alpha = 0.03048627 + 15359, 5087, 15360, 38252, // alpha = 0.03628118 + 15358, 5467, 15360, 38751, // alpha = 0.04258 + 15358, 5911, 15360, 39139, // alpha = 0.04938272 + 15357, 6294, 15360, 39506, // alpha = 0.05668934 + 15356, 6607, 15360, 39937, // alpha = 0.06449988 + 15355, 6966, 15360, 40185, // alpha = 0.07281432 + 15354, 7270, 15360, 40466, // alpha = 0.08163266 + 15353, 7495, 15360, 40777, // alpha = 0.09095491 + 15352, 7740, 15360, 41038, // alpha = 0.1007811 + 15350, 8003, 15360, 41220, // alpha = 0.1111111 + 15349, 8237, 15360, 41412, // alpha = 0.1219451 + 15347, 8382, 15360, 41616, // alpha = 0.1332829 + 15346, 8532, 15360, 41823, // alpha = 0.1451247 + 15344, 8685, 15360, 42009, // alpha = 0.1574704 + 15343, 8839, 15360, 42117, // alpha = 0.17032 + 15342, 8994, 15360, 42224, // alpha = 0.1836735 + 15340, 9148, 15360, 42330, // alpha = 0.1975309 + 15339, 9258, 15360, 42437, // alpha = 0.2118922 + 15337, 9333, 15360, 42542, // alpha = 0.2267574 + 15336, 9406, 15360, 42645, // alpha = 0.2421265 + 15335, 9478, 15360, 42744, // alpha = 0.2579995 + 15333, 9549, 15360, 42843, // alpha = 0.2743765 + 15332, 9618, 15360, 42940, // alpha = 0.2912573 + 15331, 9685, 15360, 43020, // alpha = 0.308642 + 15330, 9750, 15360, 43066, // alpha = 0.3265306 + 15329, 9814, 15360, 43112, // alpha = 0.3449232 + 15328, 9877, 15360, 43156, // alpha = 0.3638196 + 15327, 9938, 15360, 43199, // alpha = 0.38322 + 15326, 9998, 15360, 43240, // alpha = 0.4031242 + 15325, 10056, 15360, 43282, // alpha = 0.4235324 + 15324, 10113, 15360, 43321, // alpha = 0.4444445 + 15323, 10169, 15360, 43359, // alpha = 0.4658605 + 15322, 10223, 15360, 43398, // alpha = 0.4877803 + 15322, 10258, 15360, 43436, // alpha = 0.5102041 + 15321, 10284, 15360, 43472, // alpha = 0.5331318 + 15320, 10309, 15360, 43507, // alpha = 0.5565634 + 15319, 10334, 15360, 43541, // alpha = 0.5804989 + 15319, 10358, 15360, 43576, // alpha = 0.6049383 + 15318, 10381, 15361, 43609, // alpha = 0.6298816 + 15317, 10403, 15361, 43640, // alpha = 0.6553288 + 15317, 10425, 15361, 43672, // alpha = 0.68128 + 15316, 10446, 15361, 43700, // alpha = 0.7077349 + 15315, 10467, 15361, 43730, // alpha = 0.7346939 + 15315, 10486, 15361, 43758, // alpha = 0.7621567 + 15314, 10505, 15361, 43785, // alpha = 0.7901235 + 15314, 10523, 15361, 43809, // alpha = 0.8185941 + 15313, 10541, 15361, 43836, // alpha = 0.8475687 + 15313, 10558, 15361, 43857, // alpha = 0.8770471 + 15312, 10574, 15361, 43880, // alpha = 0.9070295 + 15312, 10590, 15361, 43903, // alpha = 0.9375157 + 15312, 10605, 15361, 43925, // alpha = 0.9685059 + 15311, 10619, 15361, 43945, // alpha = 1 + + // Cos (theta) = 0.9433107 + 15360, 23, 15360, 32797, // alpha = 0.001 + 15360, 23, 15360, 32797, // alpha = 0.001 + 15360, 23, 15360, 32797, // alpha = 0.001007811 + 15360, 71, 15360, 32867, // alpha = 0.002267574 + 15360, 222, 15360, 33074, // alpha = 0.004031243 + 15360, 541, 15360, 33516, // alpha = 0.006298816 + 15360, 1121, 15360, 34311, // alpha = 0.009070295 + 15360, 2060, 15360, 35216, // alpha = 0.01234568 + 15360, 2786, 15360, 36030, // alpha = 0.01612497 + 15360, 3454, 15360, 36750, // alpha = 0.02040816 + 15359, 4137, 15360, 37304, // alpha = 0.02519527 + 15359, 4620, 15360, 37930, // alpha = 0.03048627 + 15359, 5181, 15360, 38361, // alpha = 0.03628118 + 15358, 5573, 15360, 38900, // alpha = 0.04258 + 15357, 6052, 15360, 39236, // alpha = 0.04938272 + 15357, 6385, 15360, 39633, // alpha = 0.05668934 + 15356, 6722, 15360, 40016, // alpha = 0.06449988 + 15355, 7109, 15360, 40283, // alpha = 0.07281432 + 15354, 7357, 15360, 40586, // alpha = 0.08163266 + 15352, 7599, 15360, 40919, // alpha = 0.09095491 + 15351, 7863, 15360, 41122, // alpha = 0.1007811 + 15350, 8146, 15360, 41319, // alpha = 0.1111111 + 15348, 8319, 15360, 41526, // alpha = 0.1219451 + 15347, 8475, 15360, 41743, // alpha = 0.1332829 + 15345, 8637, 15360, 41968, // alpha = 0.1451247 + 15343, 8801, 15360, 42089, // alpha = 0.1574704 + 15342, 8967, 15360, 42206, // alpha = 0.17032 + 15340, 9134, 15360, 42321, // alpha = 0.1836735 + 15339, 9257, 15360, 42435, // alpha = 0.1975309 + 15337, 9339, 15360, 42550, // alpha = 0.2118922 + 15336, 9420, 15360, 42663, // alpha = 0.2267574 + 15334, 9499, 15360, 42772, // alpha = 0.2421265 + 15333, 9576, 15360, 42881, // alpha = 0.2579995 + 15332, 9652, 15360, 42987, // alpha = 0.2743765 + 15330, 9726, 15360, 43049, // alpha = 0.2912573 + 15329, 9798, 15360, 43100, // alpha = 0.308642 + 15328, 9868, 15360, 43148, // alpha = 0.3265306 + 15327, 9937, 15360, 43198, // alpha = 0.3449232 + 15326, 10004, 15360, 43244, // alpha = 0.3638196 + 15325, 10070, 15360, 43289, // alpha = 0.38322 + 15324, 10134, 15360, 43336, // alpha = 0.4031242 + 15323, 10196, 15360, 43379, // alpha = 0.4235324 + 15322, 10249, 15360, 43422, // alpha = 0.4444445 + 15321, 10279, 15360, 43464, // alpha = 0.4658605 + 15320, 10308, 15360, 43505, // alpha = 0.4877803 + 15319, 10336, 15360, 43545, // alpha = 0.5102041 + 15318, 10364, 15361, 43584, // alpha = 0.5331318 + 15318, 10391, 15361, 43621, // alpha = 0.5565634 + 15317, 10417, 15361, 43659, // alpha = 0.5804989 + 15316, 10443, 15361, 43697, // alpha = 0.6049383 + 15315, 10468, 15361, 43732, // alpha = 0.6298816 + 15315, 10492, 15361, 43766, // alpha = 0.6553288 + 15314, 10515, 15361, 43798, // alpha = 0.68128 + 15313, 10538, 15361, 43830, // alpha = 0.7077349 + 15313, 10560, 15361, 43862, // alpha = 0.7346939 + 15312, 10581, 15361, 43891, // alpha = 0.7621567 + 15312, 10601, 15361, 43921, // alpha = 0.7901235 + 15311, 10621, 15361, 43948, // alpha = 0.8185941 + 15311, 10639, 15361, 43974, // alpha = 0.8475687 + 15310, 10657, 15361, 44000, // alpha = 0.8770471 + 15310, 10675, 15361, 44025, // alpha = 0.9070295 + 15309, 10691, 15361, 44040, // alpha = 0.9375157 + 15309, 10707, 15361, 44051, // alpha = 0.9685059 + 15309, 10723, 15361, 44062, // alpha = 1 + + // Cos (theta) = 0.9355001 + 15360, 24, 15360, 32801, // alpha = 0.001 + 15360, 24, 15360, 32801, // alpha = 0.001 + 15360, 24, 15360, 32801, // alpha = 0.001007811 + 15360, 76, 15360, 32872, // alpha = 0.002267574 + 15360, 238, 15360, 33093, // alpha = 0.004031243 + 15360, 581, 15360, 33564, // alpha = 0.006298816 + 15360, 1203, 15360, 34428, // alpha = 0.009070295 + 15360, 2136, 15360, 35323, // alpha = 0.01234568 + 15360, 2915, 15360, 36119, // alpha = 0.01612497 + 15359, 3557, 15360, 36878, // alpha = 0.02040816 + 15359, 4215, 15360, 37416, // alpha = 0.02519527 + 15359, 4733, 15360, 38009, // alpha = 0.03048627 + 15358, 5261, 15360, 38468, // alpha = 0.03628118 + 15358, 5681, 15360, 38980, // alpha = 0.04258 + 15357, 6170, 15360, 39335, // alpha = 0.04938272 + 15356, 6478, 15360, 39761, // alpha = 0.05668934 + 15355, 6839, 15360, 40097, // alpha = 0.06449988 + 15354, 7211, 15360, 40384, // alpha = 0.07281432 + 15353, 7445, 15360, 40707, // alpha = 0.08163266 + 15352, 7705, 15360, 41013, // alpha = 0.09095491 + 15350, 7988, 15360, 41210, // alpha = 0.1007811 + 15349, 8242, 15360, 41418, // alpha = 0.1111111 + 15347, 8403, 15360, 41642, // alpha = 0.1219451 + 15346, 8570, 15360, 41875, // alpha = 0.1332829 + 15344, 8743, 15360, 42051, // alpha = 0.1451247 + 15342, 8919, 15360, 42172, // alpha = 0.1574704 + 15341, 9097, 15360, 42296, // alpha = 0.17032 + 15339, 9246, 15360, 42419, // alpha = 0.1836735 + 15337, 9334, 15360, 42543, // alpha = 0.1975309 + 15336, 9422, 15360, 42666, // alpha = 0.2118922 + 15334, 9508, 15360, 42787, // alpha = 0.2267574 + 15333, 9593, 15360, 42903, // alpha = 0.2421265 + 15331, 9675, 15360, 43014, // alpha = 0.2579995 + 15330, 9756, 15360, 43071, // alpha = 0.2743765 + 15329, 9835, 15360, 43125, // alpha = 0.2912573 + 15327, 9912, 15360, 43180, // alpha = 0.308642 + 15326, 9988, 15360, 43234, // alpha = 0.3265306 + 15325, 10061, 15360, 43285, // alpha = 0.3449232 + 15324, 10133, 15360, 43334, // alpha = 0.3638196 + 15323, 10203, 15360, 43385, // alpha = 0.38322 + 15322, 10256, 15360, 43433, // alpha = 0.4031242 + 15321, 10289, 15360, 43479, // alpha = 0.4235324 + 15320, 10322, 15360, 43525, // alpha = 0.4444445 + 15319, 10354, 15360, 43571, // alpha = 0.4658605 + 15318, 10385, 15361, 43614, // alpha = 0.4877803 + 15317, 10415, 15361, 43657, // alpha = 0.5102041 + 15316, 10445, 15361, 43698, // alpha = 0.5331318 + 15315, 10474, 15361, 43740, // alpha = 0.5565634 + 15314, 10502, 15361, 43780, // alpha = 0.5804989 + 15314, 10529, 15361, 43818, // alpha = 0.6049383 + 15313, 10556, 15361, 43855, // alpha = 0.6298816 + 15312, 10581, 15361, 43892, // alpha = 0.6553288 + 15312, 10606, 15361, 43927, // alpha = 0.68128 + 15311, 10631, 15361, 43963, // alpha = 0.7077349 + 15310, 10654, 15361, 43994, // alpha = 0.7346939 + 15310, 10676, 15361, 44027, // alpha = 0.7621567 + 15309, 10698, 15361, 44044, // alpha = 0.7901235 + 15309, 10719, 15361, 44059, // alpha = 0.8185941 + 15308, 10739, 15361, 44074, // alpha = 0.8475687 + 15308, 10758, 15361, 44087, // alpha = 0.8770471 + 15307, 10777, 15361, 44100, // alpha = 0.9070295 + 15307, 10794, 15361, 44113, // alpha = 0.9375157 + 15306, 10811, 15361, 44126, // alpha = 0.9685059 + 15306, 10828, 15361, 44136, // alpha = 1 + + // Cos (theta) = 0.9271857 + 15360, 26, 15360, 32802, // alpha = 0.001 + 15360, 26, 15360, 32802, // alpha = 0.001 + 15360, 26, 15360, 32802, // alpha = 0.001007811 + 15360, 81, 15360, 32877, // alpha = 0.002267574 + 15360, 255, 15360, 33120, // alpha = 0.004031243 + 15360, 621, 15360, 33624, // alpha = 0.006298816 + 15360, 1286, 15360, 34537, // alpha = 0.009070295 + 15360, 2213, 15360, 35433, // alpha = 0.01234568 + 15360, 3047, 15360, 36209, // alpha = 0.01612497 + 15359, 3662, 15360, 36951, // alpha = 0.02040816 + 15359, 4295, 15360, 37523, // alpha = 0.02519527 + 15359, 4849, 15360, 38088, // alpha = 0.03048627 + 15358, 5342, 15360, 38581, // alpha = 0.03628118 + 15358, 5791, 15360, 39056, // alpha = 0.04258 + 15357, 6242, 15360, 39435, // alpha = 0.04938272 + 15356, 6572, 15360, 39890, // alpha = 0.05668934 + 15355, 6958, 15360, 40180, // alpha = 0.06449988 + 15354, 7285, 15360, 40487, // alpha = 0.07281432 + 15353, 7535, 15360, 40833, // alpha = 0.08163266 + 15351, 7813, 15360, 41088, // alpha = 0.09095491 + 15350, 8115, 15360, 41298, // alpha = 0.1007811 + 15348, 8316, 15360, 41521, // alpha = 0.1111111 + 15346, 8488, 15360, 41762, // alpha = 0.1219451 + 15345, 8667, 15360, 41997, // alpha = 0.1332829 + 15343, 8851, 15360, 42125, // alpha = 0.1451247 + 15341, 9039, 15360, 42256, // alpha = 0.1574704 + 15339, 9223, 15360, 42388, // alpha = 0.17032 + 15338, 9318, 15360, 42519, // alpha = 0.1836735 + 15336, 9412, 15360, 42652, // alpha = 0.1975309 + 15334, 9506, 15360, 42783, // alpha = 0.2118922 + 15333, 9598, 15360, 42911, // alpha = 0.2267574 + 15331, 9688, 15360, 43023, // alpha = 0.2421265 + 15329, 9776, 15360, 43084, // alpha = 0.2579995 + 15328, 9862, 15360, 43145, // alpha = 0.2743765 + 15327, 9947, 15360, 43204, // alpha = 0.2912573 + 15325, 10029, 15360, 43262, // alpha = 0.308642 + 15324, 10109, 15360, 43318, // alpha = 0.3265306 + 15323, 10187, 15360, 43374, // alpha = 0.3449232 + 15322, 10252, 15360, 43426, // alpha = 0.3638196 + 15321, 10289, 15360, 43481, // alpha = 0.38322 + 15319, 10326, 15360, 43530, // alpha = 0.4031242 + 15318, 10361, 15361, 43582, // alpha = 0.4235324 + 15317, 10396, 15361, 43629, // alpha = 0.4444445 + 15316, 10430, 15361, 43677, // alpha = 0.4658605 + 15316, 10463, 15361, 43724, // alpha = 0.4877803 + 15314, 10495, 15361, 43769, // alpha = 0.5102041 + 15314, 10527, 15361, 43816, // alpha = 0.5331318 + 15313, 10558, 15361, 43858, // alpha = 0.5565634 + 15312, 10588, 15361, 43902, // alpha = 0.5804989 + 15311, 10617, 15361, 43943, // alpha = 0.6049383 + 15311, 10645, 15361, 43982, // alpha = 0.6298816 + 15310, 10672, 15361, 44022, // alpha = 0.6553288 + 15309, 10699, 15361, 44045, // alpha = 0.68128 + 15308, 10724, 15361, 44063, // alpha = 0.7077349 + 15308, 10749, 15361, 44081, // alpha = 0.7346939 + 15307, 10773, 15361, 44098, // alpha = 0.7621567 + 15307, 10796, 15362, 44114, // alpha = 0.7901235 + 15306, 10818, 15361, 44130, // alpha = 0.8185941 + 15306, 10840, 15361, 44145, // alpha = 0.8475687 + 15305, 10860, 15362, 44159, // alpha = 0.8770471 + 15305, 10880, 15362, 44174, // alpha = 0.9070295 + 15304, 10899, 15362, 44187, // alpha = 0.9375157 + 15304, 10917, 15362, 44200, // alpha = 0.9685059 + 15303, 10934, 15362, 44212, // alpha = 1 + + // Cos (theta) = 0.9183673 + 15360, 28, 15360, 32805, // alpha = 0.001 + 15360, 28, 15360, 32805, // alpha = 0.001 + 15360, 28, 15360, 32805, // alpha = 0.001007811 + 15360, 86, 15360, 32887, // alpha = 0.002267574 + 15360, 272, 15360, 33141, // alpha = 0.004031243 + 15360, 662, 15360, 33683, // alpha = 0.006298816 + 15360, 1372, 15360, 34659, // alpha = 0.009070295 + 15360, 2292, 15360, 35538, // alpha = 0.01234568 + 15360, 3127, 15360, 36301, // alpha = 0.01612497 + 15359, 3768, 15360, 37024, // alpha = 0.02040816 + 15359, 4376, 15360, 37637, // alpha = 0.02519527 + 15359, 4966, 15360, 38170, // alpha = 0.03048627 + 15358, 5424, 15360, 38695, // alpha = 0.03628118 + 15358, 5903, 15360, 39134, // alpha = 0.04258 + 15357, 6317, 15360, 39540, // alpha = 0.04938272 + 15356, 6668, 15360, 39979, // alpha = 0.05668934 + 15355, 7079, 15360, 40263, // alpha = 0.06449988 + 15354, 7360, 15360, 40591, // alpha = 0.07281432 + 15352, 7627, 15360, 40958, // alpha = 0.08163266 + 15351, 7923, 15360, 41164, // alpha = 0.09095491 + 15349, 8219, 15360, 41387, // alpha = 0.1007811 + 15347, 8391, 15360, 41627, // alpha = 0.1111111 + 15345, 8574, 15360, 41882, // alpha = 0.1219451 + 15344, 8765, 15360, 42065, // alpha = 0.1332829 + 15342, 8961, 15360, 42201, // alpha = 0.1451247 + 15340, 9162, 15360, 42340, // alpha = 0.1574704 + 15338, 9290, 15360, 42480, // alpha = 0.17032 + 15336, 9391, 15360, 42622, // alpha = 0.1836735 + 15334, 9492, 15360, 42764, // alpha = 0.1975309 + 15333, 9591, 15360, 42902, // alpha = 0.2118922 + 15331, 9689, 15360, 43023, // alpha = 0.2267574 + 15329, 9785, 15360, 43090, // alpha = 0.2421265 + 15328, 9878, 15360, 43158, // alpha = 0.2579995 + 15326, 9970, 15360, 43222, // alpha = 0.2743765 + 15325, 10060, 15360, 43284, // alpha = 0.2912573 + 15323, 10147, 15360, 43344, // alpha = 0.308642 + 15322, 10232, 15360, 43405, // alpha = 0.3265306 + 15321, 10278, 15360, 43464, // alpha = 0.3449232 + 15320, 10318, 15360, 43520, // alpha = 0.3638196 + 15318, 10358, 15360, 43577, // alpha = 0.38322 + 15317, 10397, 15361, 43632, // alpha = 0.4031242 + 15316, 10434, 15361, 43683, // alpha = 0.4235324 + 15315, 10471, 15361, 43735, // alpha = 0.4444445 + 15314, 10507, 15361, 43789, // alpha = 0.4658605 + 15313, 10542, 15361, 43836, // alpha = 0.4877803 + 15312, 10577, 15361, 43886, // alpha = 0.5102041 + 15311, 10610, 15361, 43932, // alpha = 0.5331318 + 15310, 10643, 15361, 43978, // alpha = 0.5565634 + 15310, 10675, 15361, 44025, // alpha = 0.5804989 + 15309, 10705, 15361, 44049, // alpha = 0.6049383 + 15308, 10735, 15361, 44070, // alpha = 0.6298816 + 15307, 10764, 15361, 44092, // alpha = 0.6553288 + 15307, 10792, 15361, 44112, // alpha = 0.68128 + 15306, 10820, 15361, 44131, // alpha = 0.7077349 + 15305, 10846, 15362, 44149, // alpha = 0.7346939 + 15305, 10871, 15362, 44168, // alpha = 0.7621567 + 15304, 10896, 15362, 44185, // alpha = 0.7901235 + 15304, 10919, 15362, 44202, // alpha = 0.8185941 + 15303, 10942, 15362, 44219, // alpha = 0.8475687 + 15303, 10963, 15362, 44234, // alpha = 0.8770471 + 15302, 10984, 15362, 44247, // alpha = 0.9070295 + 15302, 11004, 15362, 44263, // alpha = 0.9375157 + 15301, 11023, 15362, 44276, // alpha = 0.9685059 + 15301, 11042, 15362, 44289, // alpha = 1 + + // Cos (theta) = 0.9090451 + 15360, 29, 15360, 32808, // alpha = 0.001 + 15360, 29, 15360, 32808, // alpha = 0.001 + 15360, 29, 15360, 32808, // alpha = 0.001007811 + 15360, 92, 15360, 32893, // alpha = 0.002267574 + 15360, 289, 15360, 33165, // alpha = 0.004031243 + 15360, 705, 15360, 33737, // alpha = 0.006298816 + 15360, 1459, 15360, 34776, // alpha = 0.009070295 + 15360, 2373, 15360, 35650, // alpha = 0.01234568 + 15360, 3195, 15360, 36398, // alpha = 0.01612497 + 15359, 3878, 15360, 37101, // alpha = 0.02040816 + 15359, 4458, 15360, 37749, // alpha = 0.02519527 + 15359, 5087, 15360, 38251, // alpha = 0.03048627 + 15358, 5509, 15360, 38811, // alpha = 0.03628118 + 15357, 6018, 15360, 39212, // alpha = 0.04258 + 15357, 6392, 15360, 39641, // alpha = 0.04938272 + 15356, 6766, 15360, 40045, // alpha = 0.05668934 + 15354, 7186, 15360, 40349, // alpha = 0.06449988 + 15353, 7437, 15360, 40697, // alpha = 0.07281432 + 15352, 7721, 15360, 41025, // alpha = 0.08163266 + 15350, 8035, 15360, 41241, // alpha = 0.09095491 + 15348, 8285, 15360, 41480, // alpha = 0.1007811 + 15347, 8468, 15360, 41734, // alpha = 0.1111111 + 15345, 8663, 15360, 41994, // alpha = 0.1219451 + 15343, 8865, 15360, 42134, // alpha = 0.1332829 + 15341, 9074, 15360, 42280, // alpha = 0.1451247 + 15339, 9251, 15360, 42427, // alpha = 0.1574704 + 15337, 9358, 15360, 42577, // alpha = 0.17032 + 15335, 9466, 15360, 42727, // alpha = 0.1836735 + 15333, 9572, 15360, 42879, // alpha = 0.1975309 + 15331, 9678, 15360, 43016, // alpha = 0.2118922 + 15329, 9781, 15360, 43089, // alpha = 0.2267574 + 15328, 9883, 15360, 43159, // alpha = 0.2421265 + 15326, 9983, 15360, 43229, // alpha = 0.2579995 + 15324, 10080, 15360, 43298, // alpha = 0.2743765 + 15323, 10175, 15360, 43364, // alpha = 0.2912573 + 15322, 10254, 15360, 43430, // alpha = 0.308642 + 15320, 10299, 15360, 43492, // alpha = 0.3265306 + 15319, 10343, 15360, 43556, // alpha = 0.3449232 + 15318, 10386, 15360, 43616, // alpha = 0.3638196 + 15316, 10428, 15361, 43673, // alpha = 0.38322 + 15315, 10469, 15361, 43732, // alpha = 0.4031242 + 15314, 10509, 15361, 43787, // alpha = 0.4235324 + 15313, 10548, 15361, 43844, // alpha = 0.4444445 + 15312, 10586, 15361, 43899, // alpha = 0.4658605 + 15311, 10623, 15361, 43950, // alpha = 0.4877803 + 15310, 10659, 15361, 44003, // alpha = 0.5102041 + 15309, 10695, 15361, 44043, // alpha = 0.5331318 + 15308, 10729, 15361, 44067, // alpha = 0.5565634 + 15308, 10763, 15361, 44091, // alpha = 0.5804989 + 15307, 10795, 15361, 44114, // alpha = 0.6049383 + 15306, 10827, 15361, 44137, // alpha = 0.6298816 + 15305, 10858, 15362, 44159, // alpha = 0.6553288 + 15304, 10887, 15362, 44180, // alpha = 0.68128 + 15304, 10916, 15362, 44201, // alpha = 0.7077349 + 15303, 10944, 15362, 44219, // alpha = 0.7346939 + 15303, 10971, 15362, 44238, // alpha = 0.7621567 + 15302, 10997, 15362, 44256, // alpha = 0.7901235 + 15301, 11021, 15362, 44274, // alpha = 0.8185941 + 15301, 11045, 15362, 44292, // alpha = 0.8475687 + 15300, 11068, 15362, 44308, // alpha = 0.8770471 + 15300, 11090, 15362, 44324, // alpha = 0.9070295 + 15299, 11111, 15362, 44339, // alpha = 0.9375157 + 15299, 11131, 15362, 44353, // alpha = 0.9685059 + 15298, 11151, 15362, 44367, // alpha = 1 + + // Cos (theta) = 0.8992189 + 15360, 31, 15360, 32809, // alpha = 0.001 + 15360, 31, 15360, 32809, // alpha = 0.001 + 15360, 31, 15360, 32809, // alpha = 0.001007811 + 15360, 97, 15360, 32900, // alpha = 0.002267574 + 15360, 307, 15360, 33190, // alpha = 0.004031243 + 15360, 747, 15360, 33798, // alpha = 0.006298816 + 15360, 1548, 15360, 34857, // alpha = 0.009070295 + 15360, 2455, 15360, 35762, // alpha = 0.01234568 + 15360, 3265, 15360, 36490, // alpha = 0.01612497 + 15359, 3989, 15360, 37178, // alpha = 0.02040816 + 15359, 4543, 15360, 37866, // alpha = 0.02519527 + 15359, 5165, 15360, 38338, // alpha = 0.03048627 + 15358, 5595, 15360, 38921, // alpha = 0.03628118 + 15357, 6135, 15360, 39293, // alpha = 0.04258 + 15356, 6470, 15360, 39748, // alpha = 0.04938272 + 15355, 6866, 15360, 40115, // alpha = 0.05668934 + 15354, 7249, 15360, 40435, // alpha = 0.06449988 + 15353, 7515, 15360, 40805, // alpha = 0.07281432 + 15351, 7816, 15360, 41090, // alpha = 0.08163266 + 15349, 8149, 15360, 41321, // alpha = 0.09095491 + 15348, 8352, 15360, 41572, // alpha = 0.1007811 + 15346, 8547, 15360, 41841, // alpha = 0.1111111 + 15344, 8753, 15360, 42056, // alpha = 0.1219451 + 15342, 8967, 15360, 42205, // alpha = 0.1332829 + 15340, 9188, 15360, 42358, // alpha = 0.1451247 + 15338, 9315, 15360, 42515, // alpha = 0.1574704 + 15336, 9428, 15360, 42674, // alpha = 0.17032 + 15333, 9542, 15360, 42833, // alpha = 0.1836735 + 15331, 9655, 15360, 42992, // alpha = 0.1975309 + 15330, 9766, 15360, 43078, // alpha = 0.2118922 + 15328, 9876, 15360, 43154, // alpha = 0.2267574 + 15326, 9984, 15360, 43230, // alpha = 0.2421265 + 15324, 10089, 15360, 43305, // alpha = 0.2579995 + 15323, 10192, 15360, 43376, // alpha = 0.2743765 + 15321, 10266, 15360, 43445, // alpha = 0.2912573 + 15319, 10315, 15360, 43514, // alpha = 0.308642 + 15318, 10363, 15360, 43581, // alpha = 0.3265306 + 15317, 10409, 15360, 43649, // alpha = 0.3449232 + 15315, 10454, 15361, 43712, // alpha = 0.3638196 + 15314, 10499, 15361, 43774, // alpha = 0.38322 + 15313, 10542, 15361, 43837, // alpha = 0.4031242 + 15312, 10584, 15361, 43895, // alpha = 0.4235324 + 15311, 10626, 15361, 43954, // alpha = 0.4444445 + 15310, 10666, 15361, 44013, // alpha = 0.4658605 + 15309, 10705, 15361, 44049, // alpha = 0.4877803 + 15308, 10744, 15361, 44077, // alpha = 0.5102041 + 15307, 10781, 15361, 44104, // alpha = 0.5331318 + 15306, 10817, 15361, 44129, // alpha = 0.5565634 + 15305, 10853, 15361, 44155, // alpha = 0.5804989 + 15304, 10887, 15362, 44179, // alpha = 0.6049383 + 15304, 10920, 15362, 44202, // alpha = 0.6298816 + 15303, 10953, 15362, 44226, // alpha = 0.6553288 + 15302, 10984, 15362, 44248, // alpha = 0.68128 + 15301, 11014, 15362, 44269, // alpha = 0.7077349 + 15301, 11044, 15362, 44290, // alpha = 0.7346939 + 15300, 11072, 15362, 44310, // alpha = 0.7621567 + 15300, 11099, 15362, 44330, // alpha = 0.7901235 + 15299, 11125, 15362, 44349, // alpha = 0.8185941 + 15298, 11150, 15362, 44366, // alpha = 0.8475687 + 15298, 11174, 15362, 44384, // alpha = 0.8770471 + 15297, 11198, 15362, 44401, // alpha = 0.9070295 + 15297, 11220, 15363, 44418, // alpha = 0.9375157 + 15297, 11241, 15363, 44432, // alpha = 0.9685059 + 15296, 11262, 15363, 44447, // alpha = 1 + + // Cos (theta) = 0.8888889 + 15360, 33, 15360, 32812, // alpha = 0.001 + 15360, 33, 15360, 32812, // alpha = 0.001 + 15360, 33, 15360, 32812, // alpha = 0.001007811 + 15360, 103, 15360, 32910, // alpha = 0.002267574 + 15360, 325, 15360, 33215, // alpha = 0.004031243 + 15360, 791, 15360, 33859, // alpha = 0.006298816 + 15360, 1639, 15360, 34920, // alpha = 0.009070295 + 15360, 2539, 15360, 35857, // alpha = 0.01234568 + 15360, 3337, 15360, 36591, // alpha = 0.01612497 + 15359, 4100, 15360, 37254, // alpha = 0.02040816 + 15359, 4629, 15360, 37937, // alpha = 0.02519527 + 15358, 5228, 15360, 38423, // alpha = 0.03048627 + 15358, 5683, 15360, 38981, // alpha = 0.03628118 + 15357, 6199, 15360, 39374, // alpha = 0.04258 + 15356, 6549, 15360, 39857, // alpha = 0.04938272 + 15355, 6968, 15360, 40186, // alpha = 0.05668934 + 15354, 7314, 15360, 40524, // alpha = 0.06449988 + 15352, 7596, 15360, 40914, // alpha = 0.07281432 + 15351, 7914, 15360, 41157, // alpha = 0.08163266 + 15349, 8229, 15360, 41400, // alpha = 0.09095491 + 15347, 8421, 15360, 41668, // alpha = 0.1007811 + 15345, 8627, 15360, 41953, // alpha = 0.1111111 + 15343, 8845, 15360, 42119, // alpha = 0.1219451 + 15341, 9072, 15360, 42278, // alpha = 0.1332829 + 15338, 9261, 15360, 42441, // alpha = 0.1451247 + 15336, 9379, 15360, 42606, // alpha = 0.1574704 + 15334, 9499, 15360, 42773, // alpha = 0.17032 + 15332, 9620, 15360, 42941, // alpha = 0.1836735 + 15330, 9739, 15360, 43058, // alpha = 0.1975309 + 15328, 9857, 15360, 43140, // alpha = 0.2118922 + 15326, 9972, 15360, 43221, // alpha = 0.2267574 + 15324, 10086, 15360, 43302, // alpha = 0.2421265 + 15322, 10197, 15360, 43379, // alpha = 0.2579995 + 15321, 10273, 15360, 43455, // alpha = 0.2743765 + 15319, 10326, 15360, 43530, // alpha = 0.2912573 + 15318, 10377, 15360, 43603, // alpha = 0.308642 + 15316, 10428, 15360, 43675, // alpha = 0.3265306 + 15315, 10477, 15361, 43744, // alpha = 0.3449232 + 15313, 10525, 15361, 43810, // alpha = 0.3638196 + 15312, 10571, 15361, 43876, // alpha = 0.38322 + 15311, 10617, 15361, 43943, // alpha = 0.4031242 + 15310, 10661, 15361, 44003, // alpha = 0.4235324 + 15309, 10705, 15361, 44048, // alpha = 0.4444445 + 15307, 10747, 15361, 44079, // alpha = 0.4658605 + 15306, 10789, 15361, 44109, // alpha = 0.4877803 + 15306, 10829, 15361, 44138, // alpha = 0.5102041 + 15305, 10868, 15361, 44166, // alpha = 0.5331318 + 15304, 10907, 15362, 44192, // alpha = 0.5565634 + 15303, 10944, 15362, 44220, // alpha = 0.5804989 + 15302, 10980, 15362, 44245, // alpha = 0.6049383 + 15301, 11015, 15362, 44270, // alpha = 0.6298816 + 15300, 11049, 15362, 44294, // alpha = 0.6553288 + 15300, 11082, 15362, 44318, // alpha = 0.68128 + 15299, 11114, 15362, 44341, // alpha = 0.7077349 + 15298, 11145, 15362, 44364, // alpha = 0.7346939 + 15298, 11175, 15362, 44384, // alpha = 0.7621567 + 15297, 11203, 15363, 44404, // alpha = 0.7901235 + 15297, 11231, 15363, 44424, // alpha = 0.8185941 + 15296, 11257, 15363, 44443, // alpha = 0.8475687 + 15296, 11273, 15363, 44461, // alpha = 0.8770471 + 15295, 11285, 15363, 44479, // alpha = 0.9070295 + 15295, 11297, 15363, 44496, // alpha = 0.9375157 + 15294, 11308, 15363, 44511, // alpha = 0.9685059 + 15294, 11319, 15363, 44527, // alpha = 1 + + // Cos (theta) = 0.8780549 + 15360, 35, 15360, 32814, // alpha = 0.001 + 15360, 35, 15360, 32814, // alpha = 0.001 + 15360, 35, 15360, 32814, // alpha = 0.001007811 + 15360, 109, 15360, 32914, // alpha = 0.002267574 + 15360, 343, 15360, 33243, // alpha = 0.004031243 + 15360, 836, 15360, 33917, // alpha = 0.006298816 + 15360, 1732, 15360, 34983, // alpha = 0.009070295 + 15360, 2625, 15360, 35918, // alpha = 0.01234568 + 15360, 3410, 15360, 36689, // alpha = 0.01612497 + 15359, 4158, 15360, 37335, // alpha = 0.02040816 + 15359, 4718, 15360, 37997, // alpha = 0.02519527 + 15358, 5292, 15360, 38510, // alpha = 0.03048627 + 15358, 5773, 15360, 39043, // alpha = 0.03628118 + 15357, 6260, 15360, 39459, // alpha = 0.04258 + 15356, 6630, 15360, 39952, // alpha = 0.04938272 + 15355, 7073, 15360, 40259, // alpha = 0.05668934 + 15353, 7380, 15360, 40616, // alpha = 0.06449988 + 15352, 7678, 15360, 40993, // alpha = 0.07281432 + 15350, 8014, 15360, 41227, // alpha = 0.08163266 + 15348, 8289, 15360, 41484, // alpha = 0.09095491 + 15346, 8492, 15360, 41764, // alpha = 0.1007811 + 15344, 8709, 15360, 42025, // alpha = 0.1111111 + 15342, 8939, 15360, 42185, // alpha = 0.1219451 + 15340, 9178, 15360, 42351, // alpha = 0.1332829 + 15337, 9320, 15360, 42523, // alpha = 0.1451247 + 15335, 9446, 15360, 42697, // alpha = 0.1574704 + 15333, 9572, 15360, 42874, // alpha = 0.17032 + 15331, 9699, 15360, 43030, // alpha = 0.1836735 + 15328, 9825, 15360, 43118, // alpha = 0.1975309 + 15326, 9949, 15360, 43204, // alpha = 0.2118922 + 15324, 10071, 15360, 43290, // alpha = 0.2267574 + 15323, 10191, 15360, 43375, // alpha = 0.2421265 + 15321, 10274, 15360, 43456, // alpha = 0.2579995 + 15319, 10331, 15360, 43538, // alpha = 0.2743765 + 15317, 10387, 15360, 43616, // alpha = 0.2912573 + 15316, 10441, 15360, 43691, // alpha = 0.308642 + 15314, 10494, 15361, 43768, // alpha = 0.3265306 + 15313, 10546, 15361, 43841, // alpha = 0.3449232 + 15311, 10596, 15361, 43912, // alpha = 0.3638196 + 15310, 10645, 15361, 43982, // alpha = 0.38322 + 15309, 10693, 15361, 44040, // alpha = 0.4031242 + 15308, 10740, 15361, 44074, // alpha = 0.4235324 + 15306, 10786, 15361, 44107, // alpha = 0.4444445 + 15305, 10830, 15361, 44137, // alpha = 0.4658605 + 15304, 10874, 15361, 44168, // alpha = 0.4877803 + 15303, 10916, 15361, 44198, // alpha = 0.5102041 + 15302, 10958, 15362, 44227, // alpha = 0.5331318 + 15301, 10998, 15362, 44257, // alpha = 0.5565634 + 15301, 11037, 15362, 44284, // alpha = 0.5804989 + 15300, 11075, 15362, 44313, // alpha = 0.6049383 + 15299, 11112, 15362, 44339, // alpha = 0.6298816 + 15298, 11148, 15362, 44365, // alpha = 0.6553288 + 15298, 11182, 15362, 44390, // alpha = 0.68128 + 15297, 11216, 15362, 44413, // alpha = 0.7077349 + 15296, 11248, 15363, 44437, // alpha = 0.7346939 + 15296, 11272, 15363, 44460, // alpha = 0.7621567 + 15295, 11287, 15363, 44480, // alpha = 0.7901235 + 15295, 11301, 15363, 44500, // alpha = 0.8185941 + 15294, 11315, 15363, 44520, // alpha = 0.8475687 + 15294, 11328, 15363, 44541, // alpha = 0.8770471 + 15293, 11341, 15363, 44558, // alpha = 0.9070295 + 15293, 11353, 15363, 44577, // alpha = 0.9375157 + 15293, 11365, 15363, 44592, // alpha = 0.9685059 + 15292, 11376, 15363, 44610, // alpha = 1 + + // Cos (theta) = 0.866717 + 15360, 37, 15360, 32818, // alpha = 0.001 + 15360, 37, 15360, 32818, // alpha = 0.001 + 15360, 37, 15360, 32818, // alpha = 0.001007811 + 15360, 115, 15360, 32923, // alpha = 0.002267574 + 15360, 362, 15360, 33267, // alpha = 0.004031243 + 15360, 883, 15360, 33984, // alpha = 0.006298816 + 15360, 1827, 15360, 35049, // alpha = 0.009070295 + 15360, 2713, 15360, 35978, // alpha = 0.01234568 + 15360, 3485, 15360, 36792, // alpha = 0.01612497 + 15359, 4218, 15360, 37416, // alpha = 0.02040816 + 15359, 4809, 15360, 38059, // alpha = 0.02519527 + 15358, 5358, 15360, 38597, // alpha = 0.03048627 + 15358, 5865, 15360, 39105, // alpha = 0.03628118 + 15357, 6323, 15360, 39545, // alpha = 0.04258 + 15356, 6713, 15360, 40009, // alpha = 0.04938272 + 15354, 7174, 15360, 40330, // alpha = 0.05668934 + 15353, 7448, 15360, 40708, // alpha = 0.06449988 + 15351, 7762, 15360, 41051, // alpha = 0.07281432 + 15350, 8116, 15360, 41297, // alpha = 0.08163266 + 15348, 8350, 15360, 41568, // alpha = 0.09095491 + 15345, 8564, 15360, 41863, // alpha = 0.1007811 + 15343, 8793, 15360, 42083, // alpha = 0.1111111 + 15341, 9035, 15360, 42251, // alpha = 0.1219451 + 15339, 9252, 15360, 42427, // alpha = 0.1332829 + 15336, 9381, 15360, 42607, // alpha = 0.1451247 + 15334, 9514, 15360, 42791, // alpha = 0.1574704 + 15331, 9647, 15360, 42978, // alpha = 0.17032 + 15329, 9780, 15360, 43086, // alpha = 0.1836735 + 15327, 9912, 15360, 43179, // alpha = 0.1975309 + 15325, 10043, 15360, 43270, // alpha = 0.2118922 + 15323, 10172, 15360, 43361, // alpha = 0.2267574 + 15321, 10269, 15360, 43450, // alpha = 0.2421265 + 15319, 10330, 15360, 43535, // alpha = 0.2579995 + 15317, 10390, 15360, 43620, // alpha = 0.2743765 + 15315, 10449, 15360, 43704, // alpha = 0.2912573 + 15314, 10506, 15361, 43782, // alpha = 0.308642 + 15312, 10562, 15361, 43861, // alpha = 0.3265306 + 15311, 10616, 15361, 43938, // alpha = 0.3449232 + 15309, 10669, 15361, 44013, // alpha = 0.3638196 + 15308, 10720, 15361, 44060, // alpha = 0.38322 + 15307, 10771, 15361, 44095, // alpha = 0.4031242 + 15305, 10820, 15361, 44130, // alpha = 0.4235324 + 15304, 10868, 15361, 44164, // alpha = 0.4444445 + 15303, 10915, 15361, 44198, // alpha = 0.4658605 + 15302, 10961, 15361, 44231, // alpha = 0.4877803 + 15301, 11005, 15362, 44262, // alpha = 0.5102041 + 15300, 11048, 15362, 44293, // alpha = 0.5331318 + 15299, 11091, 15362, 44323, // alpha = 0.5565634 + 15298, 11132, 15362, 44353, // alpha = 0.5804989 + 15297, 11172, 15362, 44381, // alpha = 0.6049383 + 15297, 11210, 15362, 44408, // alpha = 0.6298816 + 15296, 11248, 15362, 44435, // alpha = 0.6553288 + 15295, 11274, 15363, 44461, // alpha = 0.68128 + 15295, 11292, 15363, 44486, // alpha = 0.7077349 + 15294, 11309, 15363, 44511, // alpha = 0.7346939 + 15294, 11325, 15363, 44533, // alpha = 0.7621567 + 15293, 11341, 15363, 44556, // alpha = 0.7901235 + 15293, 11356, 15363, 44578, // alpha = 0.8185941 + 15292, 11370, 15363, 44600, // alpha = 0.8475687 + 15292, 11384, 15363, 44620, // alpha = 0.8770471 + 15291, 11398, 15363, 44639, // alpha = 0.9070295 + 15291, 11411, 15364, 44658, // alpha = 0.9375157 + 15290, 11423, 15364, 44675, // alpha = 0.9685059 + 15290, 11435, 15364, 44693, // alpha = 1 + + // Cos (theta) = 0.8548753 + 15360, 39, 15360, 32822, // alpha = 0.001 + 15360, 39, 15360, 32822, // alpha = 0.001 + 15360, 39, 15360, 32822, // alpha = 0.001007811 + 15360, 121, 15360, 32933, // alpha = 0.002267574 + 15360, 381, 15360, 33291, // alpha = 0.004031243 + 15360, 930, 15360, 34045, // alpha = 0.006298816 + 15360, 1926, 15360, 35113, // alpha = 0.009070295 + 15360, 2804, 15360, 36041, // alpha = 0.01234568 + 15359, 3562, 15360, 36880, // alpha = 0.01612497 + 15359, 4280, 15360, 37499, // alpha = 0.02040816 + 15359, 4902, 15360, 38122, // alpha = 0.02519527 + 15358, 5425, 15360, 38691, // alpha = 0.03048627 + 15357, 5960, 15360, 39169, // alpha = 0.03628118 + 15357, 6388, 15360, 39633, // alpha = 0.04258 + 15355, 6799, 15360, 40067, // alpha = 0.04938272 + 15354, 7229, 15360, 40406, // alpha = 0.05668934 + 15353, 7517, 15360, 40802, // alpha = 0.06449988 + 15351, 7848, 15360, 41109, // alpha = 0.07281432 + 15349, 8207, 15360, 41369, // alpha = 0.08163266 + 15347, 8413, 15360, 41653, // alpha = 0.09095491 + 15345, 8638, 15360, 41965, // alpha = 0.1007811 + 15342, 8879, 15360, 42142, // alpha = 0.1111111 + 15340, 9134, 15360, 42318, // alpha = 0.1219451 + 15337, 9308, 15360, 42503, // alpha = 0.1332829 + 15335, 9444, 15360, 42693, // alpha = 0.1451247 + 15332, 9583, 15359, 42888, // alpha = 0.1574704 + 15330, 9723, 15360, 43046, // alpha = 0.17032 + 15328, 9863, 15360, 43143, // alpha = 0.1836735 + 15325, 10002, 15360, 43241, // alpha = 0.1975309 + 15323, 10140, 15360, 43338, // alpha = 0.2118922 + 15321, 10257, 15360, 43432, // alpha = 0.2267574 + 15319, 10323, 15360, 43525, // alpha = 0.2421265 + 15317, 10388, 15360, 43617, // alpha = 0.2579995 + 15315, 10451, 15360, 43705, // alpha = 0.2743765 + 15313, 10512, 15360, 43791, // alpha = 0.2912573 + 15312, 10572, 15361, 43877, // alpha = 0.308642 + 15310, 10631, 15361, 43958, // alpha = 0.3265306 + 15308, 10688, 15361, 44036, // alpha = 0.3449232 + 15307, 10743, 15361, 44076, // alpha = 0.3638196 + 15306, 10797, 15361, 44113, // alpha = 0.38322 + 15304, 10850, 15361, 44151, // alpha = 0.4031242 + 15303, 10902, 15361, 44188, // alpha = 0.4235324 + 15302, 10952, 15361, 44225, // alpha = 0.4444445 + 15301, 11001, 15362, 44258, // alpha = 0.4658605 + 15300, 11049, 15362, 44292, // alpha = 0.4877803 + 15299, 11096, 15362, 44327, // alpha = 0.5102041 + 15298, 11141, 15362, 44360, // alpha = 0.5331318 + 15297, 11185, 15362, 44391, // alpha = 0.5565634 + 15296, 11229, 15362, 44421, // alpha = 0.5804989 + 15295, 11267, 15362, 44452, // alpha = 0.6049383 + 15295, 11287, 15363, 44481, // alpha = 0.6298816 + 15294, 11307, 15363, 44508, // alpha = 0.6553288 + 15293, 11326, 15363, 44537, // alpha = 0.68128 + 15293, 11344, 15363, 44562, // alpha = 0.7077349 + 15292, 11362, 15363, 44588, // alpha = 0.7346939 + 15291, 11379, 15363, 44612, // alpha = 0.7621567 + 15291, 11396, 15363, 44635, // alpha = 0.7901235 + 15290, 11412, 15364, 44659, // alpha = 0.8185941 + 15290, 11427, 15364, 44681, // alpha = 0.8475687 + 15289, 11441, 15364, 44702, // alpha = 0.8770471 + 15289, 11455, 15364, 44723, // alpha = 0.9070295 + 15289, 11469, 15364, 44741, // alpha = 0.9375157 + 15288, 11482, 15364, 44760, // alpha = 0.9685059 + 15288, 11494, 15364, 44777, // alpha = 1 + + // Cos (theta) = 0.8425296 + 15360, 40, 15360, 32823, // alpha = 0.001 + 15360, 40, 15360, 32823, // alpha = 0.001 + 15360, 40, 15360, 32823, // alpha = 0.001007811 + 15360, 127, 15360, 32941, // alpha = 0.002267574 + 15360, 401, 15360, 33318, // alpha = 0.004031243 + 15360, 978, 15360, 34111, // alpha = 0.006298816 + 15360, 2026, 15360, 35181, // alpha = 0.009070295 + 15360, 2897, 15360, 36101, // alpha = 0.01234568 + 15359, 3641, 15360, 36933, // alpha = 0.01612497 + 15359, 4343, 15360, 37585, // alpha = 0.02040816 + 15359, 4997, 15360, 38185, // alpha = 0.02519527 + 15358, 5495, 15360, 38784, // alpha = 0.03048627 + 15357, 6057, 15360, 39235, // alpha = 0.03628118 + 15356, 6454, 15360, 39721, // alpha = 0.04258 + 15355, 6886, 15360, 40125, // alpha = 0.04938272 + 15354, 7286, 15360, 40481, // alpha = 0.05668934 + 15352, 7589, 15360, 40900, // alpha = 0.06449988 + 15350, 7937, 15360, 41170, // alpha = 0.07281432 + 15348, 8261, 15360, 41440, // alpha = 0.08163266 + 15346, 8478, 15359, 41740, // alpha = 0.09095491 + 15344, 8714, 15359, 42026, // alpha = 0.1007811 + 15341, 8968, 15359, 42202, // alpha = 0.1111111 + 15339, 9226, 15359, 42387, // alpha = 0.1219451 + 15336, 9365, 15359, 42581, // alpha = 0.1332829 + 15334, 9508, 15359, 42781, // alpha = 0.1451247 + 15331, 9654, 15359, 42986, // alpha = 0.1574704 + 15328, 9801, 15360, 43099, // alpha = 0.17032 + 15326, 9948, 15360, 43203, // alpha = 0.1836735 + 15324, 10094, 15360, 43304, // alpha = 0.1975309 + 15321, 10238, 15360, 43406, // alpha = 0.2118922 + 15319, 10310, 15360, 43505, // alpha = 0.2267574 + 15317, 10379, 15360, 43603, // alpha = 0.2421265 + 15315, 10447, 15360, 43699, // alpha = 0.2579995 + 15313, 10513, 15360, 43792, // alpha = 0.2743765 + 15311, 10578, 15360, 43883, // alpha = 0.2912573 + 15310, 10640, 15360, 43972, // alpha = 0.308642 + 15308, 10702, 15361, 44045, // alpha = 0.3265306 + 15306, 10761, 15361, 44087, // alpha = 0.3449232 + 15305, 10819, 15361, 44129, // alpha = 0.3638196 + 15304, 10876, 15361, 44168, // alpha = 0.38322 + 15302, 10931, 15361, 44209, // alpha = 0.4031242 + 15301, 10985, 15361, 44246, // alpha = 0.4235324 + 15300, 11038, 15361, 44283, // alpha = 0.4444445 + 15299, 11089, 15362, 44321, // alpha = 0.4658605 + 15298, 11140, 15362, 44356, // alpha = 0.4877803 + 15297, 11188, 15362, 44391, // alpha = 0.5102041 + 15296, 11236, 15362, 44427, // alpha = 0.5331318 + 15295, 11273, 15362, 44459, // alpha = 0.5565634 + 15294, 11296, 15362, 44491, // alpha = 0.5804989 + 15293, 11317, 15363, 44522, // alpha = 0.6049383 + 15292, 11339, 15363, 44551, // alpha = 0.6298816 + 15292, 11359, 15363, 44582, // alpha = 0.6553288 + 15291, 11379, 15363, 44610, // alpha = 0.68128 + 15291, 11398, 15363, 44639, // alpha = 0.7077349 + 15290, 11417, 15363, 44666, // alpha = 0.7346939 + 15289, 11435, 15364, 44691, // alpha = 0.7621567 + 15289, 11452, 15364, 44715, // alpha = 0.7901235 + 15288, 11468, 15364, 44741, // alpha = 0.8185941 + 15288, 11484, 15364, 44764, // alpha = 0.8475687 + 15288, 11500, 15364, 44785, // alpha = 0.8770471 + 15287, 11514, 15364, 44808, // alpha = 0.9070295 + 15287, 11528, 15364, 44826, // alpha = 0.9375157 + 15287, 11542, 15365, 44846, // alpha = 0.9685059 + 15286, 11555, 15365, 44865, // alpha = 1 + + // Cos (theta) = 0.82968 + 15360, 43, 15360, 32825, // alpha = 0.001 + 15360, 43, 15360, 32825, // alpha = 0.001 + 15360, 43, 15360, 32825, // alpha = 0.001007811 + 15360, 134, 15360, 32952, // alpha = 0.002267574 + 15360, 422, 15360, 33344, // alpha = 0.004031243 + 15360, 1028, 15360, 34178, // alpha = 0.006298816 + 15360, 2089, 15360, 35251, // alpha = 0.009070295 + 15360, 2993, 15360, 36167, // alpha = 0.01234568 + 15359, 3722, 15360, 36989, // alpha = 0.01612497 + 15359, 4407, 15360, 37671, // alpha = 0.02040816 + 15359, 5096, 15360, 38251, // alpha = 0.02519527 + 15358, 5566, 15360, 38880, // alpha = 0.03048627 + 15357, 6151, 15360, 39301, // alpha = 0.03628118 + 15356, 6522, 15360, 39812, // alpha = 0.04258 + 15355, 6976, 15360, 40188, // alpha = 0.04938272 + 15353, 7344, 15360, 40560, // alpha = 0.05668934 + 15352, 7662, 15360, 40978, // alpha = 0.06449988 + 15350, 8028, 15360, 41230, // alpha = 0.07281432 + 15348, 8316, 15360, 41515, // alpha = 0.08163266 + 15346, 8544, 15359, 41829, // alpha = 0.09095491 + 15343, 8792, 15359, 42078, // alpha = 0.1007811 + 15340, 9058, 15359, 42263, // alpha = 0.1111111 + 15338, 9277, 15359, 42459, // alpha = 0.1219451 + 15335, 9424, 15359, 42661, // alpha = 0.1332829 + 15332, 9574, 15359, 42871, // alpha = 0.1451247 + 15330, 9727, 15359, 43046, // alpha = 0.1574704 + 15327, 9881, 15359, 43154, // alpha = 0.17032 + 15324, 10036, 15360, 43261, // alpha = 0.1836735 + 15322, 10189, 15360, 43369, // alpha = 0.1975309 + 15320, 10290, 15360, 43477, // alpha = 0.2118922 + 15317, 10364, 15360, 43579, // alpha = 0.2267574 + 15315, 10437, 15360, 43680, // alpha = 0.2421265 + 15313, 10507, 15360, 43781, // alpha = 0.2579995 + 15311, 10577, 15360, 43881, // alpha = 0.2743765 + 15309, 10644, 15360, 43974, // alpha = 0.2912573 + 15307, 10710, 15360, 44050, // alpha = 0.308642 + 15306, 10774, 15361, 44095, // alpha = 0.3265306 + 15304, 10836, 15361, 44139, // alpha = 0.3449232 + 15303, 10897, 15361, 44183, // alpha = 0.3638196 + 15302, 10957, 15361, 44225, // alpha = 0.38322 + 15300, 11014, 15361, 44268, // alpha = 0.4031242 + 15299, 11071, 15361, 44306, // alpha = 0.4235324 + 15298, 11126, 15362, 44346, // alpha = 0.4444445 + 15296, 11180, 15362, 44385, // alpha = 0.4658605 + 15296, 11232, 15362, 44422, // alpha = 0.4877803 + 15294, 11274, 15362, 44459, // alpha = 0.5102041 + 15294, 11298, 15362, 44493, // alpha = 0.5331318 + 15293, 11323, 15362, 44529, // alpha = 0.5565634 + 15292, 11346, 15363, 44562, // alpha = 0.5804989 + 15291, 11369, 15363, 44595, // alpha = 0.6049383 + 15290, 11391, 15363, 44627, // alpha = 0.6298816 + 15290, 11412, 15363, 44658, // alpha = 0.6553288 + 15289, 11433, 15364, 44689, // alpha = 0.68128 + 15288, 11453, 15364, 44716, // alpha = 0.7077349 + 15288, 11473, 15364, 44744, // alpha = 0.7346939 + 15287, 11491, 15364, 44771, // alpha = 0.7621567 + 15287, 11509, 15364, 44797, // alpha = 0.7901235 + 15287, 11526, 15364, 44823, // alpha = 0.8185941 + 15286, 11543, 15364, 44847, // alpha = 0.8475687 + 15286, 11559, 15364, 44871, // alpha = 0.8770471 + 15285, 11574, 15365, 44891, // alpha = 0.9070295 + 15285, 11589, 15365, 44914, // alpha = 0.9375157 + 15284, 11603, 15365, 44935, // alpha = 0.9685059 + 15285, 11616, 15365, 44955, // alpha = 1 + + // Cos (theta) = 0.8163265 + 15360, 45, 15360, 32830, // alpha = 0.001 + 15360, 45, 15360, 32830, // alpha = 0.001 + 15360, 45, 15360, 32830, // alpha = 0.001007811 + 15360, 140, 15360, 32959, // alpha = 0.002267574 + 15360, 443, 15360, 33378, // alpha = 0.004031243 + 15360, 1080, 15360, 34247, // alpha = 0.006298816 + 15360, 2142, 15360, 35323, // alpha = 0.009070295 + 15360, 3081, 15360, 36231, // alpha = 0.01234568 + 15359, 3806, 15360, 37043, // alpha = 0.01612497 + 15359, 4474, 15360, 37759, // alpha = 0.02040816 + 15359, 5158, 15360, 38318, // alpha = 0.02519527 + 15358, 5639, 15360, 38945, // alpha = 0.03048627 + 15357, 6202, 15360, 39370, // alpha = 0.03628118 + 15356, 6591, 15360, 39907, // alpha = 0.04258 + 15355, 7068, 15360, 40248, // alpha = 0.04938272 + 15353, 7403, 15360, 40639, // alpha = 0.05668934 + 15351, 7737, 15360, 41029, // alpha = 0.06449988 + 15349, 8121, 15360, 41293, // alpha = 0.07281432 + 15347, 8373, 15359, 41591, // alpha = 0.08163266 + 15345, 8612, 15359, 41921, // alpha = 0.09095491 + 15342, 8872, 15359, 42132, // alpha = 0.1007811 + 15339, 9151, 15359, 42326, // alpha = 0.1111111 + 15337, 9331, 15359, 42531, // alpha = 0.1219451 + 15334, 9484, 15359, 42743, // alpha = 0.1332829 + 15331, 9642, 15359, 42962, // alpha = 0.1451247 + 15328, 9802, 15359, 43098, // alpha = 0.1574704 + 15325, 9964, 15359, 43210, // alpha = 0.17032 + 15323, 10125, 15359, 43324, // alpha = 0.1836735 + 15320, 10263, 15360, 43436, // alpha = 0.1975309 + 15318, 10342, 15360, 43548, // alpha = 0.2118922 + 15315, 10419, 15360, 43656, // alpha = 0.2267574 + 15313, 10495, 15360, 43764, // alpha = 0.2421265 + 15311, 10570, 15360, 43868, // alpha = 0.2579995 + 15309, 10642, 15360, 43970, // alpha = 0.2743765 + 15307, 10712, 15360, 44051, // alpha = 0.2912573 + 15305, 10781, 15361, 44100, // alpha = 0.308642 + 15304, 10848, 15361, 44147, // alpha = 0.3265306 + 15302, 10913, 15361, 44192, // alpha = 0.3449232 + 15301, 10977, 15361, 44237, // alpha = 0.3638196 + 15299, 11039, 15361, 44283, // alpha = 0.38322 + 15298, 11099, 15361, 44326, // alpha = 0.4031242 + 15297, 11158, 15362, 44367, // alpha = 0.4235324 + 15295, 11216, 15362, 44410, // alpha = 0.4444445 + 15294, 11268, 15362, 44450, // alpha = 0.4658605 + 15293, 11295, 15362, 44488, // alpha = 0.4877803 + 15292, 11322, 15362, 44526, // alpha = 0.5102041 + 15291, 11348, 15362, 44563, // alpha = 0.5331318 + 15291, 11373, 15363, 44598, // alpha = 0.5565634 + 15290, 11398, 15363, 44636, // alpha = 0.5804989 + 15289, 11421, 15363, 44671, // alpha = 0.6049383 + 15288, 11445, 15363, 44703, // alpha = 0.6298816 + 15288, 11467, 15363, 44735, // alpha = 0.6553288 + 15287, 11489, 15364, 44768, // alpha = 0.68128 + 15286, 11509, 15364, 44798, // alpha = 0.7077349 + 15286, 11530, 15364, 44826, // alpha = 0.7346939 + 15285, 11549, 15364, 44854, // alpha = 0.7621567 + 15285, 11568, 15364, 44883, // alpha = 0.7901235 + 15285, 11586, 15365, 44908, // alpha = 0.8185941 + 15284, 11603, 15365, 44933, // alpha = 0.8475687 + 15284, 11620, 15365, 44957, // alpha = 0.8770471 + 15284, 11636, 15365, 44980, // alpha = 0.9070295 + 15283, 11651, 15365, 45003, // alpha = 0.9375157 + 15283, 11665, 15365, 45024, // alpha = 0.9685059 + 15283, 11679, 15365, 45044, // alpha = 1 + + // Cos (theta) = 0.8024691 + 15360, 47, 15360, 32831, // alpha = 0.001 + 15360, 47, 15360, 32831, // alpha = 0.001 + 15360, 47, 15360, 32831, // alpha = 0.001007811 + 15360, 147, 15360, 32969, // alpha = 0.002267574 + 15360, 464, 15360, 33401, // alpha = 0.004031243 + 15360, 1132, 15360, 34313, // alpha = 0.006298816 + 15360, 2197, 15360, 35397, // alpha = 0.009070295 + 15360, 3132, 15360, 36293, // alpha = 0.01234568 + 15359, 3892, 15360, 37100, // alpha = 0.01612497 + 15359, 4543, 15360, 37851, // alpha = 0.02040816 + 15358, 5210, 15360, 38386, // alpha = 0.02519527 + 15358, 5715, 15360, 38996, // alpha = 0.03048627 + 15357, 6255, 15360, 39441, // alpha = 0.03628118 + 15356, 6663, 15360, 39968, // alpha = 0.04258 + 15354, 7163, 15360, 40310, // alpha = 0.04938272 + 15353, 7465, 15360, 40720, // alpha = 0.05668934 + 15351, 7815, 15360, 41081, // alpha = 0.06449988 + 15349, 8205, 15359, 41357, // alpha = 0.07281432 + 15346, 8431, 15359, 41668, // alpha = 0.08163266 + 15344, 8682, 15359, 41999, // alpha = 0.09095491 + 15341, 8955, 15359, 42188, // alpha = 0.1007811 + 15338, 9231, 15359, 42390, // alpha = 0.1111111 + 15335, 9386, 15359, 42604, // alpha = 0.1219451 + 15332, 9546, 15359, 42827, // alpha = 0.1332829 + 15330, 9711, 15359, 43032, // alpha = 0.1451247 + 15327, 9879, 15359, 43149, // alpha = 0.1574704 + 15324, 10048, 15359, 43267, // alpha = 0.17032 + 15321, 10217, 15359, 43385, // alpha = 0.1836735 + 15318, 10312, 15359, 43502, // alpha = 0.1975309 + 15316, 10395, 15360, 43619, // alpha = 0.2118922 + 15313, 10476, 15360, 43734, // alpha = 0.2267574 + 15311, 10556, 15360, 43844, // alpha = 0.2421265 + 15309, 10633, 15360, 43953, // alpha = 0.2579995 + 15307, 10709, 15360, 44047, // alpha = 0.2743765 + 15305, 10782, 15360, 44099, // alpha = 0.2912573 + 15303, 10854, 15361, 44150, // alpha = 0.308642 + 15301, 10924, 15361, 44199, // alpha = 0.3265306 + 15300, 10992, 15361, 44247, // alpha = 0.3449232 + 15299, 11059, 15361, 44295, // alpha = 0.3638196 + 15297, 11123, 15361, 44342, // alpha = 0.38322 + 15296, 11186, 15361, 44387, // alpha = 0.4031242 + 15294, 11248, 15362, 44429, // alpha = 0.4235324 + 15293, 11286, 15362, 44472, // alpha = 0.4444445 + 15292, 11315, 15362, 44516, // alpha = 0.4658605 + 15291, 11344, 15362, 44557, // alpha = 0.4877803 + 15290, 11372, 15362, 44594, // alpha = 0.5102041 + 15289, 11399, 15363, 44635, // alpha = 0.5331318 + 15288, 11425, 15363, 44672, // alpha = 0.5565634 + 15288, 11450, 15363, 44710, // alpha = 0.5804989 + 15287, 11475, 15363, 44746, // alpha = 0.6049383 + 15286, 11499, 15363, 44780, // alpha = 0.6298816 + 15285, 11523, 15364, 44814, // alpha = 0.6553288 + 15285, 11545, 15364, 44846, // alpha = 0.68128 + 15285, 11567, 15364, 44878, // alpha = 0.7077349 + 15284, 11588, 15364, 44910, // alpha = 0.7346939 + 15284, 11608, 15364, 44939, // alpha = 0.7621567 + 15283, 11628, 15364, 44967, // alpha = 0.7901235 + 15283, 11646, 15365, 44995, // alpha = 0.8185941 + 15282, 11664, 15365, 45021, // alpha = 0.8475687 + 15282, 11682, 15365, 45045, // alpha = 0.8770471 + 15282, 11698, 15365, 45064, // alpha = 0.9070295 + 15282, 11714, 15365, 45076, // alpha = 0.9375157 + 15281, 11729, 15366, 45086, // alpha = 0.9685059 + 15281, 11744, 15366, 45096, // alpha = 1 + + // Cos (theta) = 0.7881078 + 15360, 49, 15360, 32834, // alpha = 0.001 + 15360, 49, 15360, 32834, // alpha = 0.001 + 15360, 49, 15360, 32834, // alpha = 0.001007811 + 15360, 154, 15360, 32980, // alpha = 0.002267574 + 15360, 487, 15360, 33431, // alpha = 0.004031243 + 15360, 1187, 15360, 34383, // alpha = 0.006298816 + 15360, 2253, 15360, 35467, // alpha = 0.009070295 + 15360, 3184, 15360, 36365, // alpha = 0.01234568 + 15359, 3980, 15360, 37155, // alpha = 0.01612497 + 15359, 4613, 15360, 37914, // alpha = 0.02040816 + 15358, 5264, 15360, 38458, // alpha = 0.02519527 + 15358, 5792, 15360, 39044, // alpha = 0.03048627 + 15357, 6309, 15360, 39510, // alpha = 0.03628118 + 15356, 6737, 15360, 40015, // alpha = 0.04258 + 15354, 7214, 15360, 40374, // alpha = 0.04938272 + 15352, 7528, 15360, 40802, // alpha = 0.05668934 + 15350, 7895, 15359, 41133, // alpha = 0.06449988 + 15348, 8254, 15359, 41422, // alpha = 0.07281432 + 15346, 8491, 15359, 41748, // alpha = 0.08163266 + 15343, 8754, 15359, 42047, // alpha = 0.09095491 + 15340, 9039, 15359, 42243, // alpha = 0.1007811 + 15337, 9281, 15359, 42455, // alpha = 0.1111111 + 15334, 9442, 15359, 42678, // alpha = 0.1219451 + 15331, 9610, 15359, 42911, // alpha = 0.1332829 + 15328, 9782, 15359, 43079, // alpha = 0.1451247 + 15325, 9958, 15359, 43202, // alpha = 0.1574704 + 15322, 10135, 15359, 43326, // alpha = 0.17032 + 15319, 10276, 15359, 43448, // alpha = 0.1836735 + 15316, 10363, 15359, 43571, // alpha = 0.1975309 + 15314, 10450, 15359, 43693, // alpha = 0.2118922 + 15311, 10534, 15360, 43812, // alpha = 0.2267574 + 15309, 10617, 15360, 43929, // alpha = 0.2421265 + 15307, 10698, 15360, 44038, // alpha = 0.2579995 + 15305, 10777, 15360, 44092, // alpha = 0.2743765 + 15303, 10854, 15360, 44148, // alpha = 0.2912573 + 15301, 10929, 15360, 44201, // alpha = 0.308642 + 15299, 11002, 15361, 44253, // alpha = 0.3265306 + 15298, 11073, 15361, 44302, // alpha = 0.3449232 + 15296, 11142, 15361, 44353, // alpha = 0.3638196 + 15295, 11210, 15361, 44400, // alpha = 0.38322 + 15293, 11270, 15361, 44447, // alpha = 0.4031242 + 15292, 11302, 15362, 44495, // alpha = 0.4235324 + 15291, 11333, 15362, 44538, // alpha = 0.4444445 + 15290, 11364, 15362, 44583, // alpha = 0.4658605 + 15289, 11393, 15362, 44626, // alpha = 0.4877803 + 15288, 11422, 15363, 44666, // alpha = 0.5102041 + 15287, 11450, 15363, 44707, // alpha = 0.5331318 + 15287, 11478, 15363, 44748, // alpha = 0.5565634 + 15285, 11504, 15363, 44785, // alpha = 0.5804989 + 15285, 11530, 15363, 44824, // alpha = 0.6049383 + 15284, 11555, 15364, 44859, // alpha = 0.6298816 + 15283, 11580, 15364, 44894, // alpha = 0.6553288 + 15283, 11603, 15364, 44928, // alpha = 0.68128 + 15282, 11626, 15364, 44962, // alpha = 0.7077349 + 15282, 11647, 15364, 44995, // alpha = 0.7346939 + 15282, 11669, 15365, 45024, // alpha = 0.7621567 + 15281, 11689, 15365, 45055, // alpha = 0.7901235 + 15281, 11708, 15365, 45069, // alpha = 0.8185941 + 15281, 11727, 15365, 45082, // alpha = 0.8475687 + 15280, 11745, 15366, 45095, // alpha = 0.8770471 + 15280, 11762, 15366, 45109, // alpha = 0.9070295 + 15280, 11779, 15366, 45121, // alpha = 0.9375157 + 15280, 11795, 15366, 45133, // alpha = 0.9685059 + 15280, 11810, 15366, 45145, // alpha = 1 + + // Cos (theta) = 0.7732427 + 15360, 51, 15360, 32839, // alpha = 0.001 + 15360, 51, 15360, 32839, // alpha = 0.001 + 15360, 51, 15360, 32839, // alpha = 0.001007811 + 15360, 162, 15360, 32988, // alpha = 0.002267574 + 15360, 510, 15360, 33460, // alpha = 0.004031243 + 15360, 1243, 15360, 34453, // alpha = 0.006298816 + 15360, 2311, 15360, 35544, // alpha = 0.009070295 + 15360, 3238, 15360, 36433, // alpha = 0.01234568 + 15359, 4071, 15360, 37217, // alpha = 0.01612497 + 15359, 4686, 15360, 37963, // alpha = 0.02040816 + 15358, 5319, 15360, 38529, // alpha = 0.02519527 + 15358, 5872, 15360, 39097, // alpha = 0.03048627 + 15357, 6365, 15360, 39582, // alpha = 0.03628118 + 15355, 6813, 15360, 40065, // alpha = 0.04258 + 15354, 7265, 15360, 40439, // alpha = 0.04938272 + 15352, 7593, 15359, 40884, // alpha = 0.05668934 + 15350, 7977, 15359, 41186, // alpha = 0.06449988 + 15348, 8305, 15359, 41488, // alpha = 0.07281432 + 15345, 8553, 15359, 41828, // alpha = 0.08163266 + 15342, 8828, 15359, 42095, // alpha = 0.09095491 + 15339, 9126, 15359, 42299, // alpha = 0.1007811 + 15336, 9331, 15359, 42522, // alpha = 0.1111111 + 15333, 9500, 15359, 42753, // alpha = 0.1219451 + 15330, 9675, 15359, 42996, // alpha = 0.1332829 + 15327, 9856, 15359, 43127, // alpha = 0.1451247 + 15323, 10039, 15359, 43256, // alpha = 0.1574704 + 15320, 10224, 15359, 43385, // alpha = 0.17032 + 15317, 10324, 15359, 43513, // alpha = 0.1836735 + 15315, 10415, 15359, 43641, // alpha = 0.1975309 + 15312, 10506, 15359, 43769, // alpha = 0.2118922 + 15309, 10594, 15359, 43891, // alpha = 0.2267574 + 15307, 10681, 15360, 44014, // alpha = 0.2421265 + 15305, 10765, 15360, 44082, // alpha = 0.2579995 + 15302, 10848, 15360, 44140, // alpha = 0.2743765 + 15300, 10928, 15360, 44198, // alpha = 0.2912573 + 15299, 11006, 15360, 44253, // alpha = 0.308642 + 15297, 11082, 15361, 44306, // alpha = 0.3265306 + 15295, 11156, 15361, 44359, // alpha = 0.3449232 + 15294, 11228, 15361, 44410, // alpha = 0.3638196 + 15292, 11281, 15361, 44462, // alpha = 0.38322 + 15291, 11315, 15361, 44511, // alpha = 0.4031242 + 15290, 11349, 15362, 44555, // alpha = 0.4235324 + 15289, 11381, 15362, 44604, // alpha = 0.4444445 + 15287, 11413, 15362, 44649, // alpha = 0.4658605 + 15287, 11444, 15362, 44696, // alpha = 0.4877803 + 15286, 11474, 15363, 44739, // alpha = 0.5102041 + 15285, 11504, 15363, 44781, // alpha = 0.5331318 + 15284, 11532, 15363, 44821, // alpha = 0.5565634 + 15283, 11560, 15363, 44862, // alpha = 0.5804989 + 15282, 11587, 15364, 44901, // alpha = 0.6049383 + 15282, 11613, 15364, 44939, // alpha = 0.6298816 + 15282, 11638, 15364, 44977, // alpha = 0.6553288 + 15281, 11662, 15364, 45011, // alpha = 0.68128 + 15281, 11686, 15365, 45047, // alpha = 0.7077349 + 15280, 11708, 15365, 45068, // alpha = 0.7346939 + 15280, 11730, 15365, 45084, // alpha = 0.7621567 + 15280, 11751, 15365, 45100, // alpha = 0.7901235 + 15279, 11772, 15365, 45115, // alpha = 0.8185941 + 15279, 11791, 15366, 45128, // alpha = 0.8475687 + 15279, 11810, 15366, 45142, // alpha = 0.8770471 + 15279, 11828, 15366, 45155, // alpha = 0.9070295 + 15278, 11845, 15366, 45168, // alpha = 0.9375157 + 15279, 11861, 15366, 45181, // alpha = 0.9685059 + 15278, 11877, 15367, 45192, // alpha = 1 + + // Cos (theta) = 0.7578735 + 15360, 54, 15360, 32840, // alpha = 0.001 + 15360, 54, 15360, 32840, // alpha = 0.001 + 15360, 54, 15360, 32840, // alpha = 0.001007811 + 15360, 169, 15360, 32997, // alpha = 0.002267574 + 15360, 533, 15360, 33491, // alpha = 0.004031243 + 15360, 1300, 15360, 34530, // alpha = 0.006298816 + 15360, 2370, 15360, 35617, // alpha = 0.009070295 + 15360, 3293, 15360, 36503, // alpha = 0.01234568 + 15359, 4131, 15360, 37278, // alpha = 0.01612497 + 15359, 4761, 15360, 38008, // alpha = 0.02040816 + 15358, 5375, 15360, 38600, // alpha = 0.02519527 + 15357, 5954, 15360, 39149, // alpha = 0.03048627 + 15356, 6423, 15360, 39657, // alpha = 0.03628118 + 15355, 6891, 15360, 40115, // alpha = 0.04258 + 15353, 7316, 15360, 40506, // alpha = 0.04938272 + 15352, 7659, 15359, 40966, // alpha = 0.05668934 + 15349, 8061, 15359, 41239, // alpha = 0.06449988 + 15347, 8357, 15359, 41554, // alpha = 0.07281432 + 15344, 8617, 15359, 41910, // alpha = 0.08163266 + 15341, 8904, 15359, 42144, // alpha = 0.09095491 + 15338, 9216, 15359, 42359, // alpha = 0.1007811 + 15335, 9383, 15359, 42589, // alpha = 0.1111111 + 15332, 9559, 15359, 42834, // alpha = 0.1219451 + 15328, 9743, 15358, 43047, // alpha = 0.1332829 + 15325, 9931, 15358, 43177, // alpha = 0.1451247 + 15322, 10123, 15358, 43310, // alpha = 0.1574704 + 15319, 10278, 15359, 43445, // alpha = 0.17032 + 15315, 10374, 15359, 43578, // alpha = 0.1836735 + 15313, 10469, 15359, 43712, // alpha = 0.1975309 + 15310, 10563, 15359, 43844, // alpha = 0.2118922 + 15307, 10656, 15359, 43973, // alpha = 0.2267574 + 15305, 10746, 15360, 44066, // alpha = 0.2421265 + 15302, 10834, 15360, 44128, // alpha = 0.2579995 + 15300, 10920, 15360, 44189, // alpha = 0.2743765 + 15298, 11003, 15360, 44249, // alpha = 0.2912573 + 15296, 11085, 15360, 44306, // alpha = 0.308642 + 15295, 11164, 15361, 44362, // alpha = 0.3265306 + 15293, 11241, 15361, 44418, // alpha = 0.3449232 + 15291, 11290, 15361, 44470, // alpha = 0.3638196 + 15290, 11327, 15361, 44524, // alpha = 0.38322 + 15289, 11362, 15361, 44573, // alpha = 0.4031242 + 15288, 11397, 15362, 44624, // alpha = 0.4235324 + 15286, 11431, 15362, 44672, // alpha = 0.4444445 + 15285, 11464, 15362, 44721, // alpha = 0.4658605 + 15284, 11496, 15363, 44766, // alpha = 0.4877803 + 15284, 11528, 15363, 44812, // alpha = 0.5102041 + 15282, 11558, 15363, 44856, // alpha = 0.5331318 + 15282, 11588, 15363, 44899, // alpha = 0.5565634 + 15281, 11616, 15363, 44940, // alpha = 0.5804989 + 15281, 11644, 15364, 44982, // alpha = 0.6049383 + 15280, 11671, 15364, 45021, // alpha = 0.6298816 + 15280, 11698, 15364, 45057, // alpha = 0.6553288 + 15279, 11723, 15364, 45077, // alpha = 0.68128 + 15279, 11747, 15365, 45095, // alpha = 0.7077349 + 15279, 11771, 15365, 45113, // alpha = 0.7346939 + 15278, 11794, 15365, 45129, // alpha = 0.7621567 + 15278, 11816, 15365, 45144, // alpha = 0.7901235 + 15278, 11837, 15366, 45161, // alpha = 0.8185941 + 15277, 11857, 15366, 45176, // alpha = 0.8475687 + 15277, 11876, 15366, 45190, // alpha = 0.8770471 + 15277, 11895, 15366, 45204, // alpha = 0.9070295 + 15277, 11913, 15367, 45217, // alpha = 0.9375157 + 15277, 11930, 15367, 45230, // alpha = 0.9685059 + 15277, 11946, 15367, 45242, // alpha = 1 + + // Cos (theta) = 0.7420005 + 15360, 56, 15360, 32842, // alpha = 0.001 + 15360, 56, 15360, 32842, // alpha = 0.001 + 15360, 56, 15360, 32842, // alpha = 0.001007811 + 15360, 177, 15360, 33006, // alpha = 0.002267574 + 15360, 558, 15360, 33521, // alpha = 0.004031243 + 15360, 1360, 15360, 34606, // alpha = 0.006298816 + 15360, 2432, 15360, 35696, // alpha = 0.009070295 + 15360, 3350, 15360, 36579, // alpha = 0.01234568 + 15359, 4179, 15360, 37337, // alpha = 0.01612497 + 15359, 4838, 15360, 38058, // alpha = 0.02040816 + 15358, 5434, 15360, 38674, // alpha = 0.02519527 + 15357, 6039, 15360, 39203, // alpha = 0.03048627 + 15356, 6482, 15360, 39732, // alpha = 0.03628118 + 15355, 6972, 15360, 40165, // alpha = 0.04258 + 15353, 7370, 15359, 40573, // alpha = 0.04938272 + 15351, 7728, 15359, 41010, // alpha = 0.05668934 + 15349, 8148, 15359, 41295, // alpha = 0.06449988 + 15346, 8411, 15359, 41622, // alpha = 0.07281432 + 15343, 8682, 15359, 41988, // alpha = 0.08163266 + 15340, 8982, 15359, 42193, // alpha = 0.09095491 + 15337, 9262, 15359, 42417, // alpha = 0.1007811 + 15334, 9437, 15358, 42656, // alpha = 0.1111111 + 15330, 9621, 15358, 42911, // alpha = 0.1219451 + 15327, 9812, 15358, 43091, // alpha = 0.1332829 + 15323, 10009, 15358, 43228, // alpha = 0.1451247 + 15320, 10209, 15358, 43366, // alpha = 0.1574704 + 15317, 10325, 15358, 43506, // alpha = 0.17032 + 15314, 10425, 15358, 43646, // alpha = 0.1836735 + 15311, 10525, 15359, 43784, // alpha = 0.1975309 + 15308, 10623, 15359, 43922, // alpha = 0.2118922 + 15305, 10719, 15359, 44044, // alpha = 0.2267574 + 15302, 10813, 15359, 44111, // alpha = 0.2421265 + 15300, 10905, 15359, 44175, // alpha = 0.2579995 + 15298, 10994, 15360, 44239, // alpha = 0.2743765 + 15296, 11081, 15360, 44300, // alpha = 0.2912573 + 15294, 11166, 15360, 44360, // alpha = 0.308642 + 15292, 11248, 15360, 44420, // alpha = 0.3265306 + 15290, 11296, 15361, 44476, // alpha = 0.3449232 + 15289, 11335, 15361, 44532, // alpha = 0.3638196 + 15288, 11373, 15361, 44586, // alpha = 0.38322 + 15286, 11410, 15361, 44639, // alpha = 0.4031242 + 15285, 11447, 15362, 44692, // alpha = 0.4235324 + 15284, 11482, 15362, 44743, // alpha = 0.4444445 + 15283, 11516, 15362, 44791, // alpha = 0.4658605 + 15282, 11550, 15362, 44840, // alpha = 0.4877803 + 15281, 11582, 15363, 44889, // alpha = 0.5102041 + 15281, 11614, 15363, 44934, // alpha = 0.5331318 + 15280, 11645, 15363, 44977, // alpha = 0.5565634 + 15279, 11674, 15364, 45024, // alpha = 0.5804989 + 15279, 11704, 15364, 45060, // alpha = 0.6049383 + 15278, 11732, 15364, 45080, // alpha = 0.6298816 + 15278, 11759, 15364, 45101, // alpha = 0.6553288 + 15278, 11785, 15365, 45120, // alpha = 0.68128 + 15277, 11811, 15365, 45138, // alpha = 0.7077349 + 15277, 11835, 15365, 45157, // alpha = 0.7346939 + 15276, 11859, 15366, 45174, // alpha = 0.7621567 + 15276, 11881, 15366, 45191, // alpha = 0.7901235 + 15276, 11903, 15366, 45207, // alpha = 0.8185941 + 15276, 11924, 15366, 45223, // alpha = 0.8475687 + 15276, 11944, 15366, 45238, // alpha = 0.8770471 + 15276, 11964, 15366, 45254, // alpha = 0.9070295 + 15276, 11982, 15367, 45266, // alpha = 0.9375157 + 15276, 12000, 15367, 45278, // alpha = 0.9685059 + 15276, 12017, 15367, 45292, // alpha = 1 + + // Cos (theta) = 0.7256235 + 15360, 59, 15360, 32845, // alpha = 0.001 + 15360, 59, 15360, 32845, // alpha = 0.001 + 15360, 59, 15360, 32845, // alpha = 0.001007811 + 15360, 185, 15360, 33017, // alpha = 0.002267574 + 15360, 583, 15360, 33549, // alpha = 0.004031243 + 15360, 1421, 15360, 34686, // alpha = 0.006298816 + 15360, 2495, 15360, 35776, // alpha = 0.009070295 + 15360, 3408, 15360, 36648, // alpha = 0.01234568 + 15359, 4229, 15360, 37399, // alpha = 0.01612497 + 15359, 4917, 15360, 38108, // alpha = 0.02040816 + 15358, 5494, 15360, 38748, // alpha = 0.02519527 + 15357, 6126, 15360, 39258, // alpha = 0.03048627 + 15356, 6543, 15360, 39807, // alpha = 0.03628118 + 15354, 7055, 15360, 40217, // alpha = 0.04258 + 15353, 7425, 15359, 40641, // alpha = 0.04938272 + 15351, 7799, 15359, 41054, // alpha = 0.05668934 + 15348, 8215, 15359, 41350, // alpha = 0.06449988 + 15346, 8466, 15359, 41692, // alpha = 0.07281432 + 15343, 8749, 15359, 42030, // alpha = 0.08163266 + 15339, 9063, 15358, 42244, // alpha = 0.09095491 + 15336, 9309, 15358, 42476, // alpha = 0.1007811 + 15333, 9492, 15358, 42726, // alpha = 0.1111111 + 15329, 9684, 15358, 42991, // alpha = 0.1219451 + 15325, 9883, 15358, 43135, // alpha = 0.1332829 + 15322, 10088, 15358, 43278, // alpha = 0.1451247 + 15318, 10268, 15358, 43422, // alpha = 0.1574704 + 15315, 10373, 15358, 43568, // alpha = 0.17032 + 15311, 10478, 15358, 43714, // alpha = 0.1836735 + 15308, 10581, 15358, 43857, // alpha = 0.1975309 + 15305, 10683, 15358, 44002, // alpha = 0.2118922 + 15303, 10784, 15358, 44087, // alpha = 0.2267574 + 15300, 10881, 15359, 44155, // alpha = 0.2421265 + 15298, 10977, 15359, 44223, // alpha = 0.2579995 + 15295, 11070, 15359, 44288, // alpha = 0.2743765 + 15293, 11161, 15360, 44353, // alpha = 0.2912573 + 15291, 11249, 15360, 44415, // alpha = 0.308642 + 15290, 11299, 15360, 44476, // alpha = 0.3265306 + 15288, 11341, 15361, 44536, // alpha = 0.3449232 + 15287, 11382, 15361, 44594, // alpha = 0.3638196 + 15285, 11421, 15361, 44649, // alpha = 0.38322 + 15284, 11460, 15361, 44706, // alpha = 0.4031242 + 15283, 11497, 15362, 44760, // alpha = 0.4235324 + 15281, 11534, 15362, 44811, // alpha = 0.4444445 + 15281, 11570, 15362, 44865, // alpha = 0.4658605 + 15280, 11604, 15363, 44915, // alpha = 0.4877803 + 15279, 11638, 15363, 44964, // alpha = 0.5102041 + 15278, 11671, 15363, 45011, // alpha = 0.5331318 + 15278, 11703, 15363, 45057, // alpha = 0.5565634 + 15277, 11734, 15364, 45079, // alpha = 0.5804989 + 15277, 11764, 15364, 45102, // alpha = 0.6049383 + 15276, 11793, 15364, 45124, // alpha = 0.6298816 + 15276, 11821, 15365, 45144, // alpha = 0.6553288 + 15275, 11849, 15365, 45165, // alpha = 0.68128 + 15275, 11875, 15365, 45184, // alpha = 0.7077349 + 15275, 11901, 15365, 45203, // alpha = 0.7346939 + 15275, 11925, 15366, 45221, // alpha = 0.7621567 + 15275, 11949, 15366, 45238, // alpha = 0.7901235 + 15275, 11971, 15366, 45256, // alpha = 0.8185941 + 15275, 11993, 15367, 45272, // alpha = 0.8475687 + 15275, 12014, 15367, 45287, // alpha = 0.8770471 + 15275, 12034, 15367, 45302, // alpha = 0.9070295 + 15275, 12053, 15367, 45315, // alpha = 0.9375157 + 15275, 12071, 15367, 45330, // alpha = 0.9685059 + 15275, 12089, 15368, 45344, // alpha = 1 + + // Cos (theta) = 0.7087427 + 15360, 61, 15360, 32849, // alpha = 0.001 + 15360, 61, 15360, 32849, // alpha = 0.001 + 15360, 61, 15360, 32849, // alpha = 0.001007811 + 15360, 193, 15360, 33026, // alpha = 0.002267574 + 15360, 608, 15360, 33585, // alpha = 0.004031243 + 15360, 1484, 15360, 34759, // alpha = 0.006298816 + 15360, 2560, 15360, 35846, // alpha = 0.009070295 + 15359, 3468, 15360, 36724, // alpha = 0.01234568 + 15359, 4280, 15360, 37462, // alpha = 0.01612497 + 15359, 4999, 15360, 38158, // alpha = 0.02040816 + 15358, 5556, 15360, 38821, // alpha = 0.02519527 + 15357, 6180, 15360, 39311, // alpha = 0.03048627 + 15356, 6606, 15360, 39885, // alpha = 0.03628118 + 15354, 7141, 15359, 40270, // alpha = 0.04258 + 15352, 7481, 15359, 40710, // alpha = 0.04938272 + 15350, 7872, 15359, 41098, // alpha = 0.05668934 + 15348, 8261, 15359, 41409, // alpha = 0.06449988 + 15345, 8523, 15359, 41764, // alpha = 0.07281432 + 15342, 8819, 15358, 42074, // alpha = 0.08163266 + 15338, 9146, 15358, 42295, // alpha = 0.09095491 + 15335, 9358, 15358, 42542, // alpha = 0.1007811 + 15331, 9548, 15358, 42797, // alpha = 0.1111111 + 15327, 9748, 15358, 43039, // alpha = 0.1219451 + 15324, 9957, 15358, 43183, // alpha = 0.1332829 + 15320, 10170, 15357, 43331, // alpha = 0.1451247 + 15316, 10314, 15357, 43478, // alpha = 0.1574704 + 15313, 10423, 15357, 43631, // alpha = 0.17032 + 15309, 10532, 15358, 43783, // alpha = 0.1836735 + 15306, 10640, 15358, 43932, // alpha = 0.1975309 + 15303, 10746, 15358, 44056, // alpha = 0.2118922 + 15300, 10850, 15358, 44129, // alpha = 0.2267574 + 15297, 10952, 15358, 44201, // alpha = 0.2421265 + 15295, 11051, 15359, 44271, // alpha = 0.2579995 + 15293, 11148, 15359, 44340, // alpha = 0.2743765 + 15291, 11242, 15360, 44406, // alpha = 0.2912573 + 15289, 11299, 15360, 44470, // alpha = 0.308642 + 15287, 11344, 15360, 44535, // alpha = 0.3265306 + 15285, 11387, 15360, 44596, // alpha = 0.3449232 + 15284, 11429, 15361, 44656, // alpha = 0.3638196 + 15283, 11470, 15361, 44717, // alpha = 0.38322 + 15281, 11510, 15361, 44774, // alpha = 0.4031242 + 15280, 11549, 15361, 44830, // alpha = 0.4235324 + 15280, 11587, 15362, 44883, // alpha = 0.4444445 + 15278, 11624, 15362, 44937, // alpha = 0.4658605 + 15277, 11660, 15362, 44989, // alpha = 0.4877803 + 15277, 11695, 15363, 45041, // alpha = 0.5102041 + 15276, 11730, 15363, 45074, // alpha = 0.5331318 + 15276, 11763, 15363, 45098, // alpha = 0.5565634 + 15275, 11795, 15364, 45122, // alpha = 0.5804989 + 15275, 11826, 15364, 45145, // alpha = 0.6049383 + 15274, 11856, 15364, 45167, // alpha = 0.6298816 + 15274, 11886, 15365, 45188, // alpha = 0.6553288 + 15274, 11914, 15365, 45209, // alpha = 0.68128 + 15274, 11941, 15365, 45230, // alpha = 0.7077349 + 15273, 11968, 15365, 45249, // alpha = 0.7346939 + 15273, 11993, 15366, 45267, // alpha = 0.7621567 + 15273, 12018, 15366, 45286, // alpha = 0.7901235 + 15273, 12041, 15366, 45304, // alpha = 0.8185941 + 15273, 12064, 15367, 45320, // alpha = 0.8475687 + 15273, 12085, 15367, 45336, // alpha = 0.8770471 + 15274, 12106, 15367, 45353, // alpha = 0.9070295 + 15273, 12126, 15368, 45368, // alpha = 0.9375157 + 15274, 12145, 15368, 45382, // alpha = 0.9685059 + 15274, 12163, 15368, 45395, // alpha = 1 + + // Cos (theta) = 0.691358 + 15360, 64, 15360, 32854, // alpha = 0.001 + 15360, 64, 15360, 32854, // alpha = 0.001 + 15360, 64, 15360, 32854, // alpha = 0.001007811 + 15360, 201, 15360, 33039, // alpha = 0.002267574 + 15360, 635, 15360, 33618, // alpha = 0.004031243 + 15360, 1549, 15360, 34827, // alpha = 0.006298816 + 15360, 2628, 15360, 35889, // alpha = 0.009070295 + 15359, 3531, 15360, 36796, // alpha = 0.01234568 + 15359, 4333, 15360, 37526, // alpha = 0.01612497 + 15359, 5083, 15360, 38208, // alpha = 0.02040816 + 15358, 5620, 15360, 38902, // alpha = 0.02519527 + 15357, 6227, 15360, 39368, // alpha = 0.03048627 + 15355, 6671, 15360, 39950, // alpha = 0.03628118 + 15354, 7199, 15359, 40324, // alpha = 0.04258 + 15352, 7540, 15359, 40781, // alpha = 0.04938272 + 15350, 7948, 15359, 41145, // alpha = 0.05668934 + 15347, 8309, 15359, 41465, // alpha = 0.06449988 + 15344, 8582, 15359, 41834, // alpha = 0.07281432 + 15341, 8891, 15358, 42117, // alpha = 0.08163266 + 15337, 9224, 15358, 42346, // alpha = 0.09095491 + 15334, 9409, 15358, 42599, // alpha = 0.1007811 + 15330, 9607, 15358, 42866, // alpha = 0.1111111 + 15326, 9815, 15357, 43080, // alpha = 0.1219451 + 15322, 10032, 15357, 43229, // alpha = 0.1332829 + 15318, 10247, 15357, 43382, // alpha = 0.1451247 + 15314, 10360, 15357, 43538, // alpha = 0.1574704 + 15310, 10474, 15357, 43695, // alpha = 0.17032 + 15307, 10588, 15357, 43852, // alpha = 0.1836735 + 15304, 10700, 15357, 44008, // alpha = 0.1975309 + 15301, 10810, 15358, 44098, // alpha = 0.2118922 + 15298, 10919, 15358, 44174, // alpha = 0.2267574 + 15295, 11025, 15358, 44248, // alpha = 0.2421265 + 15293, 11128, 15358, 44319, // alpha = 0.2579995 + 15290, 11229, 15359, 44391, // alpha = 0.2743765 + 15288, 11295, 15359, 44460, // alpha = 0.2912573 + 15286, 11343, 15360, 44530, // alpha = 0.308642 + 15284, 11389, 15360, 44594, // alpha = 0.3265306 + 15283, 11434, 15360, 44658, // alpha = 0.3449232 + 15281, 11478, 15360, 44721, // alpha = 0.3638196 + 15280, 11521, 15361, 44781, // alpha = 0.38322 + 15279, 11562, 15361, 44843, // alpha = 0.4031242 + 15278, 11603, 15361, 44899, // alpha = 0.4235324 + 15277, 11642, 15362, 44958, // alpha = 0.4444445 + 15276, 11681, 15362, 45011, // alpha = 0.4658605 + 15275, 11718, 15362, 45063, // alpha = 0.4877803 + 15274, 11754, 15363, 45089, // alpha = 0.5102041 + 15274, 11790, 15363, 45114, // alpha = 0.5331318 + 15273, 11824, 15363, 45139, // alpha = 0.5565634 + 15273, 11858, 15364, 45165, // alpha = 0.5804989 + 15273, 11890, 15364, 45189, // alpha = 0.6049383 + 15272, 11921, 15365, 45211, // alpha = 0.6298816 + 15272, 11952, 15365, 45232, // alpha = 0.6553288 + 15272, 11981, 15365, 45255, // alpha = 0.68128 + 15272, 12009, 15366, 45275, // alpha = 0.7077349 + 15272, 12037, 15366, 45297, // alpha = 0.7346939 + 15272, 12063, 15366, 45315, // alpha = 0.7621567 + 15272, 12088, 15366, 45336, // alpha = 0.7901235 + 15272, 12113, 15367, 45352, // alpha = 0.8185941 + 15272, 12136, 15367, 45372, // alpha = 0.8475687 + 15272, 12158, 15367, 45389, // alpha = 0.8770471 + 15273, 12180, 15368, 45404, // alpha = 0.9070295 + 15273, 12200, 15368, 45421, // alpha = 0.9375157 + 15273, 12220, 15368, 45433, // alpha = 0.9685059 + 15270, 12239, 15368, 45448, // alpha = 1 + + // Cos (theta) = 0.6734694 + 15360, 67, 15360, 32855, // alpha = 0.001 + 15360, 67, 15360, 32855, // alpha = 0.001 + 15360, 67, 15360, 32855, // alpha = 0.001007811 + 15360, 210, 15360, 33048, // alpha = 0.002267574 + 15360, 663, 15360, 33645, // alpha = 0.004031243 + 15360, 1616, 15360, 34867, // alpha = 0.006298816 + 15360, 2697, 15360, 35930, // alpha = 0.009070295 + 15359, 3595, 15360, 36870, // alpha = 0.01234568 + 15359, 4388, 15360, 37592, // alpha = 0.01612497 + 15358, 5145, 15360, 38260, // alpha = 0.02040816 + 15358, 5686, 15360, 38947, // alpha = 0.02519527 + 15357, 6274, 15360, 39427, // alpha = 0.03048627 + 15355, 6738, 15359, 39990, // alpha = 0.03628118 + 15354, 7244, 15359, 40378, // alpha = 0.04258 + 15352, 7600, 15359, 40854, // alpha = 0.04938272 + 15349, 8025, 15359, 41192, // alpha = 0.05668934 + 15346, 8358, 15359, 41525, // alpha = 0.06449988 + 15343, 8643, 15358, 41910, // alpha = 0.07281432 + 15340, 8964, 15358, 42160, // alpha = 0.08163266 + 15336, 9268, 15358, 42400, // alpha = 0.09095491 + 15332, 9461, 15357, 42661, // alpha = 0.1007811 + 15328, 9667, 15357, 42941, // alpha = 0.1111111 + 15324, 9884, 15357, 43122, // alpha = 0.1219451 + 15320, 10110, 15357, 43276, // alpha = 0.1332829 + 15316, 10291, 15357, 43435, // alpha = 0.1451247 + 15312, 10409, 15357, 43598, // alpha = 0.1574704 + 15308, 10527, 15357, 43760, // alpha = 0.17032 + 15305, 10645, 15357, 43925, // alpha = 0.1836735 + 15301, 10762, 15357, 44059, // alpha = 0.1975309 + 15298, 10877, 15357, 44138, // alpha = 0.2118922 + 15295, 10989, 15357, 44217, // alpha = 0.2267574 + 15292, 11100, 15358, 44295, // alpha = 0.2421265 + 15290, 11207, 15358, 44369, // alpha = 0.2579995 + 15287, 11288, 15358, 44444, // alpha = 0.2743765 + 15285, 11339, 15359, 44515, // alpha = 0.2912573 + 15283, 11388, 15359, 44585, // alpha = 0.308642 + 15282, 11436, 15360, 44655, // alpha = 0.3265306 + 15280, 11483, 15360, 44721, // alpha = 0.3449232 + 15279, 11528, 15360, 44787, // alpha = 0.3638196 + 15277, 11573, 15361, 44849, // alpha = 0.38322 + 15276, 11616, 15361, 44911, // alpha = 0.4031242 + 15275, 11658, 15362, 44973, // alpha = 0.4235324 + 15275, 11699, 15362, 45033, // alpha = 0.4444445 + 15273, 11739, 15362, 45072, // alpha = 0.4658605 + 15273, 11777, 15362, 45099, // alpha = 0.4877803 + 15272, 11815, 15363, 45128, // alpha = 0.5102041 + 15272, 11852, 15363, 45155, // alpha = 0.5331318 + 15271, 11887, 15363, 45183, // alpha = 0.5565634 + 15271, 11922, 15364, 45207, // alpha = 0.5804989 + 15271, 11955, 15364, 45232, // alpha = 0.6049383 + 15271, 11988, 15365, 45256, // alpha = 0.6298816 + 15271, 12019, 15365, 45280, // alpha = 0.6553288 + 15270, 12050, 15365, 45303, // alpha = 0.68128 + 15271, 12079, 15366, 45324, // alpha = 0.7077349 + 15270, 12107, 15366, 45343, // alpha = 0.7346939 + 15271, 12135, 15366, 45365, // alpha = 0.7621567 + 15271, 12161, 15367, 45386, // alpha = 0.7901235 + 15271, 12186, 15367, 45404, // alpha = 0.8185941 + 15271, 12210, 15367, 45422, // alpha = 0.8475687 + 15268, 12233, 15367, 45438, // alpha = 0.8770471 + 15268, 12255, 15368, 45454, // alpha = 0.9070295 + 15268, 12277, 15368, 45470, // alpha = 0.9375157 + 15269, 12292, 15368, 45485, // alpha = 0.9685059 + 15265, 12302, 15368, 45499, // alpha = 1 + + // Cos (theta) = 0.6550768 + 15360, 69, 15360, 32859, // alpha = 0.001 + 15360, 69, 15360, 32859, // alpha = 0.001 + 15360, 69, 15360, 32859, // alpha = 0.001007811 + 15360, 219, 15360, 33053, // alpha = 0.002267574 + 15360, 691, 15360, 33682, // alpha = 0.004031243 + 15360, 1685, 15360, 34907, // alpha = 0.006298816 + 15360, 2769, 15360, 35971, // alpha = 0.009070295 + 15359, 3661, 15360, 36907, // alpha = 0.01234568 + 15359, 4444, 15360, 37657, // alpha = 0.01612497 + 15358, 5190, 15360, 38314, // alpha = 0.02040816 + 15358, 5753, 15360, 38986, // alpha = 0.02519527 + 15356, 6324, 15360, 39484, // alpha = 0.03048627 + 15355, 6807, 15359, 40030, // alpha = 0.03628118 + 15353, 7291, 15359, 40432, // alpha = 0.04258 + 15351, 7662, 15359, 40925, // alpha = 0.04938272 + 15349, 8105, 15359, 41239, // alpha = 0.05668934 + 15346, 8408, 15358, 41584, // alpha = 0.06449988 + 15342, 8705, 15358, 41981, // alpha = 0.07281432 + 15339, 9040, 15358, 42206, // alpha = 0.08163266 + 15335, 9313, 15357, 42453, // alpha = 0.09095491 + 15331, 9514, 15357, 42724, // alpha = 0.1007811 + 15327, 9729, 15357, 43010, // alpha = 0.1111111 + 15322, 9955, 15357, 43164, // alpha = 0.1219451 + 15318, 10190, 15356, 43324, // alpha = 0.1332829 + 15314, 10336, 15356, 43487, // alpha = 0.1451247 + 15310, 10458, 15356, 43658, // alpha = 0.1574704 + 15306, 10581, 15356, 43826, // alpha = 0.17032 + 15302, 10704, 15356, 43996, // alpha = 0.1836735 + 15299, 10825, 15356, 44097, // alpha = 0.1975309 + 15295, 10945, 15356, 44179, // alpha = 0.2118922 + 15292, 11062, 15357, 44262, // alpha = 0.2267574 + 15290, 11176, 15357, 44342, // alpha = 0.2421265 + 15287, 11276, 15357, 44421, // alpha = 0.2579995 + 15285, 11330, 15358, 44495, // alpha = 0.2743765 + 15283, 11383, 15358, 44572, // alpha = 0.2912573 + 15281, 11434, 15359, 44643, // alpha = 0.308642 + 15279, 11484, 15359, 44716, // alpha = 0.3265306 + 15277, 11533, 15360, 44785, // alpha = 0.3449232 + 15276, 11580, 15360, 44851, // alpha = 0.3638196 + 15275, 11626, 15361, 44918, // alpha = 0.38322 + 15273, 11670, 15361, 44979, // alpha = 0.4031242 + 15273, 11714, 15361, 45044, // alpha = 0.4235324 + 15272, 11756, 15362, 45081, // alpha = 0.4444445 + 15271, 11798, 15362, 45112, // alpha = 0.4658605 + 15271, 11838, 15362, 45140, // alpha = 0.4877803 + 15270, 11877, 15363, 45170, // alpha = 0.5102041 + 15270, 11915, 15363, 45197, // alpha = 0.5331318 + 15269, 11952, 15363, 45227, // alpha = 0.5565634 + 15269, 11988, 15364, 45252, // alpha = 0.5804989 + 15269, 12022, 15364, 45276, // alpha = 0.6049383 + 15269, 12056, 15365, 45301, // alpha = 0.6298816 + 15269, 12088, 15365, 45324, // alpha = 0.6553288 + 15269, 12120, 15365, 45349, // alpha = 0.68128 + 15269, 12150, 15366, 45372, // alpha = 0.7077349 + 15270, 12180, 15366, 45395, // alpha = 0.7346939 + 15269, 12208, 15367, 45416, // alpha = 0.7621567 + 15266, 12235, 15367, 45434, // alpha = 0.7901235 + 15267, 12261, 15367, 45453, // alpha = 0.8185941 + 15267, 12286, 15367, 45472, // alpha = 0.8475687 + 15263, 12299, 15367, 45489, // alpha = 0.8770471 + 15263, 12310, 15367, 45505, // alpha = 0.9070295 + 15263, 12321, 15368, 45520, // alpha = 0.9375157 + 15263, 12332, 15368, 45537, // alpha = 0.9685059 + 15263, 12342, 15368, 45553, // alpha = 1 + + // Cos (theta) = 0.6361803 + 15360, 72, 15360, 32862, // alpha = 0.001 + 15360, 72, 15360, 32862, // alpha = 0.001 + 15360, 72, 15360, 32862, // alpha = 0.001007811 + 15360, 228, 15360, 33067, // alpha = 0.002267574 + 15360, 720, 15360, 33716, // alpha = 0.004031243 + 15360, 1756, 15360, 34948, // alpha = 0.006298816 + 15360, 2842, 15360, 36016, // alpha = 0.009070295 + 15359, 3729, 15360, 36947, // alpha = 0.01234568 + 15359, 4501, 15360, 37723, // alpha = 0.01612497 + 15358, 5236, 15360, 38367, // alpha = 0.02040816 + 15357, 5823, 15360, 39027, // alpha = 0.02519527 + 15356, 6374, 15360, 39543, // alpha = 0.03048627 + 15355, 6878, 15359, 40071, // alpha = 0.03628118 + 15353, 7339, 15359, 40488, // alpha = 0.04258 + 15351, 7725, 15359, 40980, // alpha = 0.04938272 + 15348, 8187, 15359, 41286, // alpha = 0.05668934 + 15345, 8460, 15358, 41644, // alpha = 0.06449988 + 15341, 8770, 15358, 42020, // alpha = 0.07281432 + 15338, 9118, 15358, 42251, // alpha = 0.08163266 + 15334, 9360, 15357, 42507, // alpha = 0.09095491 + 15329, 9569, 15357, 42790, // alpha = 0.1007811 + 15325, 9792, 15356, 43048, // alpha = 0.1111111 + 15321, 10028, 15356, 43207, // alpha = 0.1219451 + 15316, 10256, 15356, 43372, // alpha = 0.1332829 + 15312, 10381, 15356, 43543, // alpha = 0.1451247 + 15307, 10509, 15355, 43715, // alpha = 0.1574704 + 15303, 10637, 15355, 43892, // alpha = 0.17032 + 15299, 10764, 15355, 44050, // alpha = 0.1836735 + 15296, 10890, 15356, 44137, // alpha = 0.1975309 + 15293, 11014, 15356, 44223, // alpha = 0.2118922 + 15290, 11136, 15356, 44307, // alpha = 0.2267574 + 15287, 11255, 15356, 44390, // alpha = 0.2421265 + 15284, 11317, 15357, 44472, // alpha = 0.2579995 + 15282, 11374, 15357, 44551, // alpha = 0.2743765 + 15280, 11428, 15357, 44629, // alpha = 0.2912573 + 15278, 11482, 15358, 44705, // alpha = 0.308642 + 15276, 11533, 15358, 44778, // alpha = 0.3265306 + 15275, 11584, 15359, 44848, // alpha = 0.3449232 + 15273, 11632, 15360, 44920, // alpha = 0.3638196 + 15272, 11680, 15360, 44985, // alpha = 0.38322 + 15271, 11726, 15361, 45052, // alpha = 0.4031242 + 15270, 11772, 15361, 45088, // alpha = 0.4235324 + 15269, 11815, 15361, 45120, // alpha = 0.4444445 + 15269, 11858, 15362, 45152, // alpha = 0.4658605 + 15269, 11900, 15362, 45183, // alpha = 0.4877803 + 15268, 11940, 15362, 45211, // alpha = 0.5102041 + 15268, 11980, 15363, 45240, // alpha = 0.5331318 + 15267, 12018, 15363, 45268, // alpha = 0.5565634 + 15267, 12055, 15364, 45295, // alpha = 0.5804989 + 15267, 12091, 15364, 45323, // alpha = 0.6049383 + 15267, 12126, 15365, 45349, // alpha = 0.6298816 + 15267, 12159, 15365, 45374, // alpha = 0.6553288 + 15268, 12192, 15366, 45399, // alpha = 0.68128 + 15264, 12223, 15365, 45420, // alpha = 0.7077349 + 15264, 12254, 15366, 45442, // alpha = 0.7346939 + 15265, 12283, 15366, 45464, // alpha = 0.7621567 + 15261, 12299, 15366, 45482, // alpha = 0.7901235 + 15261, 12313, 15366, 45503, // alpha = 0.8185941 + 15261, 12326, 15367, 45522, // alpha = 0.8475687 + 15261, 12338, 15367, 45539, // alpha = 0.8770471 + 15261, 12350, 15368, 45557, // alpha = 0.9070295 + 15260, 12361, 15368, 45575, // alpha = 0.9375157 + 15261, 12372, 15368, 45591, // alpha = 0.9685059 + 15259, 12382, 15368, 45605, // alpha = 1 + + // Cos (theta) = 0.61678 + 15360, 75, 15360, 32867, // alpha = 0.001 + 15360, 75, 15360, 32867, // alpha = 0.001 + 15360, 75, 15360, 32867, // alpha = 0.001007811 + 15360, 238, 15360, 33077, // alpha = 0.002267574 + 15360, 750, 15360, 33748, // alpha = 0.004031243 + 15360, 1829, 15360, 34985, // alpha = 0.006298816 + 15360, 2918, 15360, 36059, // alpha = 0.009070295 + 15359, 3799, 15360, 36988, // alpha = 0.01234568 + 15359, 4561, 15360, 37792, // alpha = 0.01612497 + 15358, 5283, 15360, 38422, // alpha = 0.02040816 + 15357, 5895, 15360, 39067, // alpha = 0.02519527 + 15356, 6426, 15359, 39603, // alpha = 0.03048627 + 15354, 6951, 15359, 40113, // alpha = 0.03628118 + 15352, 7389, 15359, 40548, // alpha = 0.04258 + 15350, 7791, 15359, 41017, // alpha = 0.04938272 + 15347, 8232, 15358, 41334, // alpha = 0.05668934 + 15344, 8513, 15358, 41706, // alpha = 0.06449988 + 15341, 8836, 15358, 42057, // alpha = 0.07281432 + 15337, 9198, 15357, 42298, // alpha = 0.08163266 + 15332, 9408, 15357, 42563, // alpha = 0.09095491 + 15328, 9625, 15356, 42853, // alpha = 0.1007811 + 15323, 9858, 15356, 43085, // alpha = 0.1111111 + 15318, 10102, 15356, 43250, // alpha = 0.1219451 + 15314, 10298, 15355, 43420, // alpha = 0.1332829 + 15309, 10429, 15355, 43597, // alpha = 0.1451247 + 15305, 10561, 15355, 43778, // alpha = 0.1574704 + 15301, 10694, 15355, 43958, // alpha = 0.17032 + 15297, 10826, 15355, 44086, // alpha = 0.1836735 + 15293, 10957, 15355, 44176, // alpha = 0.1975309 + 15290, 11086, 15355, 44266, // alpha = 0.2118922 + 15287, 11212, 15355, 44352, // alpha = 0.2267574 + 15284, 11300, 15356, 44439, // alpha = 0.2421265 + 15281, 11360, 15356, 44523, // alpha = 0.2579995 + 15279, 11418, 15357, 44605, // alpha = 0.2743765 + 15277, 11475, 15357, 44686, // alpha = 0.2912573 + 15275, 11530, 15357, 44764, // alpha = 0.308642 + 15273, 11584, 15358, 44840, // alpha = 0.3265306 + 15272, 11636, 15358, 44915, // alpha = 0.3449232 + 15270, 11687, 15359, 44988, // alpha = 0.3638196 + 15269, 11736, 15360, 45056, // alpha = 0.38322 + 15268, 11784, 15360, 45090, // alpha = 0.4031242 + 15268, 11831, 15361, 45125, // alpha = 0.4235324 + 15267, 11876, 15361, 45160, // alpha = 0.4444445 + 15266, 11921, 15361, 45191, // alpha = 0.4658605 + 15266, 11964, 15362, 45221, // alpha = 0.4877803 + 15266, 12006, 15363, 45252, // alpha = 0.5102041 + 15265, 12046, 15363, 45283, // alpha = 0.5331318 + 15266, 12086, 15363, 45312, // alpha = 0.5565634 + 15265, 12124, 15364, 45341, // alpha = 0.5804989 + 15266, 12161, 15364, 45369, // alpha = 0.6049383 + 15266, 12197, 15365, 45397, // alpha = 0.6298816 + 15262, 12232, 15365, 45419, // alpha = 0.6553288 + 15262, 12266, 15365, 45444, // alpha = 0.68128 + 15259, 12293, 15365, 45466, // alpha = 0.7077349 + 15259, 12309, 15365, 45489, // alpha = 0.7346939 + 15259, 12324, 15366, 45510, // alpha = 0.7621567 + 15259, 12338, 15366, 45534, // alpha = 0.7901235 + 15259, 12352, 15367, 45552, // alpha = 0.8185941 + 15259, 12366, 15367, 45574, // alpha = 0.8475687 + 15256, 12378, 15367, 45589, // alpha = 0.8770471 + 15256, 12391, 15367, 45609, // alpha = 0.9070295 + 15256, 12402, 15368, 45628, // alpha = 0.9375157 + 15256, 12413, 15368, 45645, // alpha = 0.9685059 + 15256, 12424, 15368, 45661, // alpha = 1 + + // Cos (theta) = 0.5968758 + 15360, 78, 15360, 32870, // alpha = 0.001 + 15360, 78, 15360, 32870, // alpha = 0.001 + 15360, 78, 15360, 32870, // alpha = 0.001007811 + 15360, 248, 15360, 33090, // alpha = 0.002267574 + 15360, 781, 15360, 33789, // alpha = 0.004031243 + 15360, 1905, 15360, 35031, // alpha = 0.006298816 + 15360, 2996, 15360, 36102, // alpha = 0.009070295 + 15359, 3871, 15360, 37029, // alpha = 0.01234568 + 15359, 4623, 15360, 37863, // alpha = 0.01612497 + 15358, 5332, 15360, 38476, // alpha = 0.02040816 + 15357, 5969, 15360, 39110, // alpha = 0.02519527 + 15356, 6480, 15359, 39663, // alpha = 0.03048627 + 15354, 7027, 15359, 40157, // alpha = 0.03628118 + 15352, 7440, 15359, 40605, // alpha = 0.04258 + 15350, 7859, 15359, 41055, // alpha = 0.04938272 + 15347, 8276, 15358, 41383, // alpha = 0.05668934 + 15343, 8568, 15358, 41766, // alpha = 0.06449988 + 15340, 8904, 15357, 42096, // alpha = 0.07281432 + 15335, 9249, 15357, 42345, // alpha = 0.08163266 + 15331, 9457, 15356, 42619, // alpha = 0.09095491 + 15326, 9683, 15356, 42918, // alpha = 0.1007811 + 15321, 9925, 15356, 43122, // alpha = 0.1111111 + 15316, 10180, 15355, 43293, // alpha = 0.1219451 + 15312, 10342, 15355, 43469, // alpha = 0.1332829 + 15307, 10477, 15355, 43650, // alpha = 0.1451247 + 15302, 10615, 15354, 43837, // alpha = 0.1574704 + 15298, 10753, 15354, 44025, // alpha = 0.17032 + 15294, 10890, 15354, 44124, // alpha = 0.1836735 + 15290, 11026, 15354, 44216, // alpha = 0.1975309 + 15287, 11160, 15354, 44309, // alpha = 0.2118922 + 15283, 11278, 15354, 44399, // alpha = 0.2267574 + 15281, 11341, 15355, 44489, // alpha = 0.2421265 + 15278, 11404, 15355, 44577, // alpha = 0.2579995 + 15276, 11464, 15355, 44660, // alpha = 0.2743765 + 15273, 11523, 15356, 44742, // alpha = 0.2912573 + 15272, 11580, 15357, 44823, // alpha = 0.308642 + 15270, 11636, 15357, 44903, // alpha = 0.3265306 + 15269, 11690, 15358, 44980, // alpha = 0.3449232 + 15267, 11743, 15359, 45055, // alpha = 0.3638196 + 15266, 11794, 15360, 45092, // alpha = 0.38322 + 15266, 11843, 15360, 45128, // alpha = 0.4031242 + 15265, 11892, 15361, 45164, // alpha = 0.4235324 + 15264, 11939, 15361, 45198, // alpha = 0.4444445 + 15264, 11985, 15361, 45233, // alpha = 0.4658605 + 15264, 12029, 15362, 45264, // alpha = 0.4877803 + 15263, 12073, 15362, 45297, // alpha = 0.5102041 + 15263, 12115, 15363, 45330, // alpha = 0.5331318 + 15264, 12156, 15363, 45357, // alpha = 0.5565634 + 15264, 12195, 15364, 45389, // alpha = 0.5804989 + 15260, 12234, 15363, 45413, // alpha = 0.6049383 + 15260, 12271, 15364, 45443, // alpha = 0.6298816 + 15257, 12297, 15364, 45465, // alpha = 0.6553288 + 15257, 12315, 15365, 45489, // alpha = 0.68128 + 15257, 12332, 15365, 45518, // alpha = 0.7077349 + 15256, 12348, 15365, 45541, // alpha = 0.7346939 + 15256, 12363, 15366, 45563, // alpha = 0.7621567 + 15253, 12378, 15366, 45583, // alpha = 0.7901235 + 15253, 12393, 15366, 45604, // alpha = 0.8185941 + 15253, 12406, 15366, 45626, // alpha = 0.8475687 + 15254, 12420, 15367, 45645, // alpha = 0.8770471 + 15254, 12432, 15367, 45665, // alpha = 0.9070295 + 15253, 12444, 15368, 45683, // alpha = 0.9375157 + 15253, 12456, 15368, 45701, // alpha = 0.9685059 + 15254, 12467, 15369, 45717, // alpha = 1 + + // Cos (theta) = 0.5764676 + 15360, 82, 15360, 32873, // alpha = 0.001 + 15360, 82, 15360, 32873, // alpha = 0.001 + 15360, 82, 15360, 32873, // alpha = 0.001007811 + 15360, 258, 15360, 33100, // alpha = 0.002267574 + 15360, 813, 15360, 33826, // alpha = 0.004031243 + 15360, 1982, 15360, 35078, // alpha = 0.006298816 + 15360, 3074, 15360, 36148, // alpha = 0.009070295 + 15359, 3945, 15360, 37071, // alpha = 0.01234568 + 15359, 4686, 15360, 37911, // alpha = 0.01612497 + 15358, 5383, 15360, 38533, // alpha = 0.02040816 + 15357, 6045, 15360, 39152, // alpha = 0.02519527 + 15356, 6536, 15359, 39725, // alpha = 0.03048627 + 15354, 7104, 15359, 40199, // alpha = 0.03628118 + 15352, 7492, 15359, 40660, // alpha = 0.04258 + 15349, 7928, 15358, 41094, // alpha = 0.04938272 + 15346, 8320, 15358, 41431, // alpha = 0.05668934 + 15342, 8625, 15358, 41830, // alpha = 0.06449988 + 15338, 8974, 15357, 42135, // alpha = 0.07281432 + 15334, 9291, 15357, 42390, // alpha = 0.08163266 + 15329, 9508, 15356, 42675, // alpha = 0.09095491 + 15324, 9743, 15355, 42983, // alpha = 0.1007811 + 15319, 9994, 15355, 43161, // alpha = 0.1111111 + 15314, 10249, 15354, 43335, // alpha = 0.1219451 + 15309, 10387, 15354, 43520, // alpha = 0.1332829 + 15304, 10527, 15354, 43707, // alpha = 0.1451247 + 15300, 10670, 15353, 43900, // alpha = 0.1574704 + 15295, 10813, 15353, 44063, // alpha = 0.17032 + 15291, 10956, 15353, 44160, // alpha = 0.1836735 + 15287, 11097, 15353, 44256, // alpha = 0.1975309 + 15284, 11236, 15354, 44353, // alpha = 0.2118922 + 15280, 11318, 15354, 44446, // alpha = 0.2267574 + 15278, 11384, 15354, 44539, // alpha = 0.2421265 + 15275, 11449, 15354, 44628, // alpha = 0.2579995 + 15273, 11511, 15355, 44719, // alpha = 0.2743765 + 15270, 11572, 15355, 44801, // alpha = 0.2912573 + 15269, 11632, 15356, 44886, // alpha = 0.308642 + 15267, 11689, 15357, 44968, // alpha = 0.3265306 + 15266, 11745, 15358, 45047, // alpha = 0.3449232 + 15264, 11800, 15358, 45090, // alpha = 0.3638196 + 15263, 11852, 15359, 45129, // alpha = 0.38322 + 15263, 11904, 15360, 45165, // alpha = 0.4031242 + 15263, 11954, 15360, 45203, // alpha = 0.4235324 + 15262, 12003, 15361, 45238, // alpha = 0.4444445 + 15262, 12050, 15361, 45272, // alpha = 0.4658605 + 15262, 12096, 15362, 45306, // alpha = 0.4877803 + 15261, 12141, 15362, 45341, // alpha = 0.5102041 + 15261, 12185, 15363, 45371, // alpha = 0.5331318 + 15258, 12227, 15362, 45402, // alpha = 0.5565634 + 15258, 12268, 15363, 45432, // alpha = 0.5804989 + 15254, 12298, 15363, 45457, // alpha = 0.6049383 + 15254, 12317, 15363, 45486, // alpha = 0.6298816 + 15254, 12336, 15364, 45513, // alpha = 0.6553288 + 15254, 12354, 15365, 45541, // alpha = 0.68128 + 15254, 12371, 15365, 45567, // alpha = 0.7077349 + 15251, 12388, 15365, 45587, // alpha = 0.7346939 + 15250, 12404, 15365, 45611, // alpha = 0.7621567 + 15251, 12419, 15366, 45637, // alpha = 0.7901235 + 15251, 12434, 15366, 45658, // alpha = 0.8185941 + 15251, 12448, 15367, 45678, // alpha = 0.8475687 + 15251, 12462, 15367, 45699, // alpha = 0.8770471 + 15251, 12475, 15368, 45719, // alpha = 0.9070295 + 15251, 12487, 15368, 45738, // alpha = 0.9375157 + 15251, 12499, 15368, 45756, // alpha = 0.9685059 + 15252, 12511, 15369, 45774, // alpha = 1 + + // Cos (theta) = 0.5555555 + 15360, 85, 15360, 32877, // alpha = 0.001 + 15360, 85, 15360, 32877, // alpha = 0.001 + 15360, 85, 15360, 32877, // alpha = 0.001007811 + 15360, 268, 15360, 33113, // alpha = 0.002267574 + 15360, 845, 15360, 33854, // alpha = 0.004031243 + 15360, 2055, 15360, 35120, // alpha = 0.006298816 + 15360, 3115, 15360, 36195, // alpha = 0.009070295 + 15359, 4021, 15360, 37111, // alpha = 0.01234568 + 15359, 4750, 15360, 37946, // alpha = 0.01612497 + 15358, 5434, 15360, 38588, // alpha = 0.02040816 + 15357, 6123, 15360, 39195, // alpha = 0.02519527 + 15355, 6592, 15359, 39786, // alpha = 0.03048627 + 15354, 7176, 15359, 40244, // alpha = 0.03628118 + 15351, 7546, 15359, 40720, // alpha = 0.04258 + 15348, 7999, 15358, 41133, // alpha = 0.04938272 + 15345, 8366, 15358, 41483, // alpha = 0.05668934 + 15342, 8683, 15357, 41891, // alpha = 0.06449988 + 15337, 9046, 15357, 42173, // alpha = 0.07281432 + 15333, 9335, 15356, 42438, // alpha = 0.08163266 + 15328, 9560, 15356, 42730, // alpha = 0.09095491 + 15323, 9804, 15355, 43028, // alpha = 0.1007811 + 15317, 10065, 15354, 43198, // alpha = 0.1111111 + 15312, 10290, 15354, 43379, // alpha = 0.1219451 + 15307, 10432, 15353, 43568, // alpha = 0.1332829 + 15302, 10578, 15353, 43763, // alpha = 0.1451247 + 15297, 10726, 15353, 43959, // alpha = 0.1574704 + 15292, 10875, 15353, 44097, // alpha = 0.17032 + 15288, 11023, 15352, 44197, // alpha = 0.1836735 + 15284, 11169, 15352, 44297, // alpha = 0.1975309 + 15281, 11289, 15353, 44396, // alpha = 0.2118922 + 15277, 11359, 15353, 44494, // alpha = 0.2267574 + 15274, 11428, 15353, 44590, // alpha = 0.2421265 + 15271, 11495, 15354, 44680, // alpha = 0.2579995 + 15269, 11560, 15354, 44773, // alpha = 0.2743765 + 15267, 11623, 15355, 44861, // alpha = 0.2912573 + 15266, 11684, 15355, 44948, // alpha = 0.308642 + 15264, 11744, 15356, 45033, // alpha = 0.3265306 + 15263, 11802, 15356, 45084, // alpha = 0.3449232 + 15261, 11858, 15358, 45126, // alpha = 0.3638196 + 15261, 11913, 15358, 45165, // alpha = 0.38322 + 15260, 11966, 15359, 45202, // alpha = 0.4031242 + 15260, 12018, 15360, 45242, // alpha = 0.4235324 + 15259, 12068, 15360, 45279, // alpha = 0.4444445 + 15259, 12117, 15361, 45314, // alpha = 0.4658605 + 15259, 12165, 15361, 45349, // alpha = 0.4877803 + 15256, 12211, 15362, 45381, // alpha = 0.5102041 + 15256, 12256, 15362, 45414, // alpha = 0.5331318 + 15252, 12294, 15362, 45443, // alpha = 0.5565634 + 15252, 12315, 15362, 45475, // alpha = 0.5804989 + 15252, 12335, 15363, 45505, // alpha = 0.6049383 + 15251, 12355, 15364, 45535, // alpha = 0.6298816 + 15248, 12375, 15363, 45559, // alpha = 0.6553288 + 15248, 12393, 15364, 45587, // alpha = 0.68128 + 15247, 12411, 15364, 45614, // alpha = 0.7077349 + 15248, 12428, 15365, 45640, // alpha = 0.7346939 + 15248, 12445, 15365, 45665, // alpha = 0.7621567 + 15248, 12461, 15366, 45689, // alpha = 0.7901235 + 15248, 12476, 15367, 45712, // alpha = 0.8185941 + 15248, 12491, 15367, 45734, // alpha = 0.8475687 + 15248, 12505, 15368, 45755, // alpha = 0.8770471 + 15249, 12518, 15368, 45775, // alpha = 0.9070295 + 15246, 12531, 15368, 45791, // alpha = 0.9375157 + 15247, 12543, 15368, 45809, // alpha = 0.9685059 + 15246, 12555, 15369, 45828, // alpha = 1 + + // Cos (theta) = 0.5341396 + 15360, 88, 15360, 32880, // alpha = 0.001 + 15360, 88, 15360, 32880, // alpha = 0.001 + 15360, 88, 15360, 32880, // alpha = 0.001007811 + 15360, 279, 15360, 33123, // alpha = 0.002267574 + 15360, 879, 15360, 33889, // alpha = 0.004031243 + 15360, 2096, 15360, 35162, // alpha = 0.006298816 + 15360, 3158, 15360, 36237, // alpha = 0.009070295 + 15359, 4098, 15360, 37151, // alpha = 0.01234568 + 15359, 4817, 15360, 37981, // alpha = 0.01612497 + 15358, 5487, 15360, 38644, // alpha = 0.02040816 + 15357, 6174, 15359, 39237, // alpha = 0.02519527 + 15355, 6651, 15359, 39846, // alpha = 0.03048627 + 15353, 7217, 15359, 40285, // alpha = 0.03628118 + 15351, 7602, 15359, 40779, // alpha = 0.04258 + 15348, 8073, 15358, 41171, // alpha = 0.04938272 + 15344, 8414, 15358, 41532, // alpha = 0.05668934 + 15341, 8743, 15357, 41955, // alpha = 0.06449988 + 15336, 9120, 15356, 42211, // alpha = 0.07281432 + 15331, 9380, 15356, 42484, // alpha = 0.08163266 + 15326, 9613, 15355, 42785, // alpha = 0.09095491 + 15321, 9867, 15354, 43062, // alpha = 0.1007811 + 15315, 10138, 15354, 43238, // alpha = 0.1111111 + 15310, 10332, 15353, 43423, // alpha = 0.1219451 + 15304, 10479, 15353, 43617, // alpha = 0.1332829 + 15299, 10631, 15352, 43817, // alpha = 0.1451247 + 15294, 10785, 15352, 44021, // alpha = 0.1574704 + 15289, 10939, 15352, 44130, // alpha = 0.17032 + 15284, 11092, 15352, 44235, // alpha = 0.1836735 + 15281, 11244, 15351, 44337, // alpha = 0.1975309 + 15277, 11328, 15352, 44440, // alpha = 0.2118922 + 15274, 11401, 15352, 44540, // alpha = 0.2267574 + 15271, 11472, 15352, 44638, // alpha = 0.2421265 + 15268, 11542, 15353, 44734, // alpha = 0.2579995 + 15266, 11609, 15353, 44829, // alpha = 0.2743765 + 15264, 11674, 15353, 44920, // alpha = 0.2912573 + 15262, 11738, 15354, 45011, // alpha = 0.308642 + 15261, 11800, 15355, 45077, // alpha = 0.3265306 + 15260, 11859, 15356, 45119, // alpha = 0.3449232 + 15259, 11918, 15357, 45161, // alpha = 0.3638196 + 15258, 11974, 15358, 45202, // alpha = 0.38322 + 15258, 12029, 15359, 45243, // alpha = 0.4031242 + 15257, 12083, 15360, 45282, // alpha = 0.4235324 + 15257, 12135, 15360, 45318, // alpha = 0.4444445 + 15257, 12186, 15361, 45358, // alpha = 0.4658605 + 15253, 12235, 15361, 45390, // alpha = 0.4877803 + 15249, 12283, 15361, 45421, // alpha = 0.5102041 + 15249, 12309, 15361, 45454, // alpha = 0.5331318 + 15249, 12331, 15362, 45488, // alpha = 0.5565634 + 15248, 12353, 15362, 45520, // alpha = 0.5804989 + 15245, 12374, 15362, 45549, // alpha = 0.6049383 + 15245, 12395, 15362, 45578, // alpha = 0.6298816 + 15245, 12415, 15363, 45609, // alpha = 0.6553288 + 15245, 12434, 15364, 45636, // alpha = 0.68128 + 15244, 12452, 15364, 45663, // alpha = 0.7077349 + 15245, 12470, 15365, 45691, // alpha = 0.7346939 + 15245, 12487, 15366, 45717, // alpha = 0.7621567 + 15245, 12503, 15366, 45740, // alpha = 0.7901235 + 15245, 12519, 15367, 45765, // alpha = 0.8185941 + 15243, 12534, 15366, 45785, // alpha = 0.8475687 + 15243, 12549, 15367, 45806, // alpha = 0.8770471 + 15243, 12563, 15367, 45828, // alpha = 0.9070295 + 15243, 12576, 15368, 45848, // alpha = 0.9375157 + 15244, 12589, 15368, 45870, // alpha = 0.9685059 + 15244, 12601, 15369, 45887, // alpha = 1 + + // Cos (theta) = 0.5122197 + 15360, 92, 15360, 32884, // alpha = 0.001 + 15360, 92, 15360, 32884, // alpha = 0.001 + 15360, 92, 15360, 32884, // alpha = 0.001007811 + 15360, 289, 15360, 33134, // alpha = 0.002267574 + 15360, 913, 15360, 33926, // alpha = 0.004031243 + 15360, 2138, 15360, 35208, // alpha = 0.006298816 + 15360, 3201, 15360, 36280, // alpha = 0.009070295 + 15359, 4138, 15360, 37195, // alpha = 0.01234568 + 15359, 4886, 15360, 38018, // alpha = 0.01612497 + 15358, 5542, 15360, 38703, // alpha = 0.02040816 + 15356, 6215, 15359, 39279, // alpha = 0.02519527 + 15355, 6711, 15359, 39910, // alpha = 0.03048627 + 15353, 7259, 15359, 40329, // alpha = 0.03628118 + 15350, 7659, 15358, 40838, // alpha = 0.04258 + 15347, 8148, 15358, 41210, // alpha = 0.04938272 + 15344, 8463, 15357, 41581, // alpha = 0.05668934 + 15340, 8804, 15357, 42001, // alpha = 0.06449988 + 15335, 9196, 15356, 42250, // alpha = 0.07281432 + 15330, 9426, 15355, 42531, // alpha = 0.08163266 + 15324, 9669, 15354, 42841, // alpha = 0.09095491 + 15319, 9932, 15354, 43095, // alpha = 0.1007811 + 15313, 10213, 15353, 43277, // alpha = 0.1111111 + 15307, 10375, 15352, 43468, // alpha = 0.1219451 + 15301, 10528, 15352, 43665, // alpha = 0.1332829 + 15296, 10685, 15351, 43873, // alpha = 0.1451247 + 15290, 10844, 15351, 44057, // alpha = 0.1574704 + 15285, 11004, 15351, 44164, // alpha = 0.17032 + 15281, 11163, 15351, 44271, // alpha = 0.1836735 + 15277, 11292, 15350, 44379, // alpha = 0.1975309 + 15273, 11369, 15351, 44483, // alpha = 0.2118922 + 15270, 11445, 15351, 44589, // alpha = 0.2267574 + 15267, 11519, 15351, 44688, // alpha = 0.2421265 + 15264, 11590, 15352, 44789, // alpha = 0.2579995 + 15262, 11660, 15352, 44886, // alpha = 0.2743765 + 15261, 11728, 15353, 44980, // alpha = 0.2912573 + 15259, 11793, 15353, 45065, // alpha = 0.308642 + 15258, 11857, 15354, 45111, // alpha = 0.3265306 + 15256, 11919, 15355, 45154, // alpha = 0.3449232 + 15256, 11979, 15356, 45197, // alpha = 0.3638196 + 15255, 12038, 15357, 45241, // alpha = 0.38322 + 15254, 12095, 15357, 45282, // alpha = 0.4031242 + 15255, 12150, 15359, 45322, // alpha = 0.4235324 + 15255, 12204, 15360, 45361, // alpha = 0.4444445 + 15251, 12256, 15360, 45396, // alpha = 0.4658605 + 15247, 12298, 15359, 45429, // alpha = 0.4877803 + 15246, 12322, 15360, 45465, // alpha = 0.5102041 + 15246, 12346, 15361, 45501, // alpha = 0.5331318 + 15242, 12370, 15361, 45529, // alpha = 0.5565634 + 15242, 12392, 15362, 45564, // alpha = 0.5804989 + 15242, 12414, 15362, 45596, // alpha = 0.6049383 + 15241, 12435, 15363, 45628, // alpha = 0.6298816 + 15241, 12456, 15363, 45657, // alpha = 0.6553288 + 15242, 12475, 15364, 45689, // alpha = 0.68128 + 15241, 12494, 15364, 45713, // alpha = 0.7077349 + 15242, 12513, 15365, 45743, // alpha = 0.7346939 + 15239, 12530, 15365, 45767, // alpha = 0.7621567 + 15239, 12547, 15366, 45793, // alpha = 0.7901235 + 15239, 12564, 15366, 45817, // alpha = 0.8185941 + 15239, 12579, 15366, 45839, // alpha = 0.8475687 + 15240, 12594, 15367, 45864, // alpha = 0.8770471 + 15240, 12609, 15367, 45885, // alpha = 0.9070295 + 15241, 12622, 15368, 45905, // alpha = 0.9375157 + 15242, 12635, 15369, 45927, // alpha = 0.9685059 + 15242, 12648, 15369, 45945, // alpha = 1 + + // Cos (theta) = 0.4897959 + 15360, 95, 15360, 32890, // alpha = 0.001 + 15360, 95, 15360, 32890, // alpha = 0.001 + 15360, 95, 15360, 32890, // alpha = 0.001007811 + 15360, 301, 15360, 33145, // alpha = 0.002267574 + 15360, 949, 15360, 33963, // alpha = 0.004031243 + 15360, 2181, 15360, 35246, // alpha = 0.006298816 + 15360, 3246, 15360, 36324, // alpha = 0.009070295 + 15359, 4180, 15360, 37235, // alpha = 0.01234568 + 15358, 4956, 15360, 38050, // alpha = 0.01612497 + 15358, 5598, 15360, 38757, // alpha = 0.02040816 + 15356, 6258, 15359, 39321, // alpha = 0.02519527 + 15355, 6772, 15359, 39952, // alpha = 0.03048627 + 15352, 7302, 15359, 40371, // alpha = 0.03628118 + 15350, 7717, 15358, 40895, // alpha = 0.04258 + 15347, 8209, 15358, 41248, // alpha = 0.04938272 + 15343, 8512, 15357, 41632, // alpha = 0.05668934 + 15338, 8867, 15356, 42032, // alpha = 0.06449988 + 15333, 9245, 15355, 42288, // alpha = 0.07281432 + 15328, 9473, 15355, 42578, // alpha = 0.08163266 + 15322, 9725, 15354, 42898, // alpha = 0.09095491 + 15316, 9998, 15353, 43127, // alpha = 0.1007811 + 15310, 10265, 15352, 43313, // alpha = 0.1111111 + 15304, 10418, 15351, 43508, // alpha = 0.1219451 + 15298, 10577, 15351, 43715, // alpha = 0.1332829 + 15292, 10740, 15350, 43928, // alpha = 0.1451247 + 15287, 10905, 15350, 44088, // alpha = 0.1574704 + 15282, 11071, 15350, 44195, // alpha = 0.17032 + 15277, 11236, 15350, 44306, // alpha = 0.1836735 + 15273, 11331, 15350, 44417, // alpha = 0.1975309 + 15269, 11411, 15350, 44525, // alpha = 0.2118922 + 15266, 11489, 15350, 44635, // alpha = 0.2267574 + 15263, 11566, 15350, 44740, // alpha = 0.2421265 + 15261, 11640, 15351, 44843, // alpha = 0.2579995 + 15259, 11712, 15351, 44944, // alpha = 0.2743765 + 15257, 11782, 15352, 45040, // alpha = 0.2912573 + 15255, 11850, 15352, 45097, // alpha = 0.308642 + 15254, 11916, 15353, 45143, // alpha = 0.3265306 + 15253, 11980, 15354, 45188, // alpha = 0.3449232 + 15253, 12042, 15355, 45233, // alpha = 0.3638196 + 15252, 12102, 15357, 45277, // alpha = 0.38322 + 15252, 12161, 15357, 45319, // alpha = 0.4031242 + 15248, 12218, 15357, 45357, // alpha = 0.4235324 + 15248, 12274, 15358, 45399, // alpha = 0.4444445 + 15243, 12308, 15357, 45433, // alpha = 0.4658605 + 15243, 12334, 15359, 45471, // alpha = 0.4877803 + 15243, 12360, 15360, 45508, // alpha = 0.5102041 + 15238, 12385, 15360, 45543, // alpha = 0.5331318 + 15238, 12409, 15361, 45577, // alpha = 0.5565634 + 15238, 12432, 15361, 45610, // alpha = 0.5804989 + 15238, 12454, 15362, 45643, // alpha = 0.6049383 + 15238, 12476, 15363, 45676, // alpha = 0.6298816 + 15238, 12497, 15363, 45707, // alpha = 0.6553288 + 15239, 12518, 15364, 45738, // alpha = 0.68128 + 15236, 12537, 15364, 45764, // alpha = 0.7077349 + 15236, 12556, 15364, 45791, // alpha = 0.7346939 + 15235, 12575, 15365, 45818, // alpha = 0.7621567 + 15236, 12592, 15366, 45845, // alpha = 0.7901235 + 15237, 12609, 15366, 45874, // alpha = 0.8185941 + 15237, 12625, 15366, 45897, // alpha = 0.8475687 + 15238, 12640, 15368, 45919, // alpha = 0.8770471 + 15238, 12655, 15368, 45943, // alpha = 0.9070295 + 15238, 12669, 15368, 45965, // alpha = 0.9375157 + 15239, 12683, 15369, 45985, // alpha = 0.9685059 + 15239, 12696, 15370, 46005, // alpha = 1 + + // Cos (theta) = 0.4668682 + 15360, 99, 15360, 32893, // alpha = 0.001 + 15360, 99, 15360, 32893, // alpha = 0.001 + 15360, 99, 15360, 32893, // alpha = 0.001007811 + 15360, 312, 15360, 33159, // alpha = 0.002267574 + 15360, 985, 15360, 33993, // alpha = 0.004031243 + 15360, 2225, 15360, 35289, // alpha = 0.006298816 + 15359, 3292, 15360, 36368, // alpha = 0.009070295 + 15359, 4222, 15360, 37275, // alpha = 0.01234568 + 15358, 5027, 15360, 38084, // alpha = 0.01612497 + 15357, 5655, 15359, 38809, // alpha = 0.02040816 + 15356, 6301, 15359, 39362, // alpha = 0.02519527 + 15354, 6835, 15359, 39982, // alpha = 0.03048627 + 15352, 7346, 15358, 40413, // alpha = 0.03628118 + 15349, 7777, 15358, 40951, // alpha = 0.04258 + 15346, 8248, 15357, 41285, // alpha = 0.04938272 + 15342, 8563, 15357, 41681, // alpha = 0.05668934 + 15337, 8931, 15356, 42062, // alpha = 0.06449988 + 15332, 9284, 15355, 42326, // alpha = 0.07281432 + 15326, 9521, 15354, 42625, // alpha = 0.08163266 + 15320, 9782, 15353, 42953, // alpha = 0.09095491 + 15314, 10066, 15352, 43159, // alpha = 0.1007811 + 15308, 10304, 15351, 43350, // alpha = 0.1111111 + 15301, 10463, 15351, 43550, // alpha = 0.1219451 + 15295, 10628, 15350, 43764, // alpha = 0.1332829 + 15289, 10796, 15349, 43979, // alpha = 0.1451247 + 15283, 10967, 15349, 44119, // alpha = 0.1574704 + 15278, 11139, 15348, 44230, // alpha = 0.17032 + 15273, 11287, 15348, 44344, // alpha = 0.1836735 + 15269, 11371, 15348, 44456, // alpha = 0.1975309 + 15265, 11454, 15348, 44567, // alpha = 0.2118922 + 15262, 11534, 15349, 44682, // alpha = 0.2267574 + 15260, 11613, 15349, 44790, // alpha = 0.2421265 + 15257, 11690, 15349, 44895, // alpha = 0.2579995 + 15255, 11765, 15350, 45001, // alpha = 0.2743765 + 15253, 11837, 15350, 45078, // alpha = 0.2912573 + 15252, 11907, 15351, 45127, // alpha = 0.308642 + 15251, 11975, 15352, 45177, // alpha = 0.3265306 + 15250, 12041, 15353, 45224, // alpha = 0.3449232 + 15250, 12106, 15354, 45270, // alpha = 0.3638196 + 15249, 12168, 15355, 45316, // alpha = 0.38322 + 15245, 12229, 15354, 45355, // alpha = 0.4031242 + 15241, 12288, 15355, 45395, // alpha = 0.4235324 + 15240, 12317, 15356, 45434, // alpha = 0.4444445 + 15240, 12345, 15357, 45475, // alpha = 0.4658605 + 15235, 12372, 15356, 45508, // alpha = 0.4877803 + 15235, 12398, 15358, 45547, // alpha = 0.5102041 + 15235, 12424, 15359, 45587, // alpha = 0.5331318 + 15234, 12448, 15360, 45621, // alpha = 0.5565634 + 15235, 12472, 15361, 45656, // alpha = 0.5804989 + 15234, 12496, 15361, 45692, // alpha = 0.6049383 + 15231, 12518, 15361, 45721, // alpha = 0.6298816 + 15232, 12540, 15363, 45753, // alpha = 0.6553288 + 15231, 12561, 15363, 45784, // alpha = 0.68128 + 15231, 12581, 15363, 45812, // alpha = 0.7077349 + 15232, 12601, 15364, 45842, // alpha = 0.7346939 + 15232, 12619, 15365, 45872, // alpha = 0.7621567 + 15233, 12637, 15366, 45898, // alpha = 0.7901235 + 15233, 12655, 15366, 45924, // alpha = 0.8185941 + 15234, 12671, 15366, 45952, // alpha = 0.8475687 + 15234, 12687, 15367, 45974, // alpha = 0.8770471 + 15235, 12702, 15368, 45999, // alpha = 0.9070295 + 15236, 12717, 15369, 46021, // alpha = 0.9375157 + 15237, 12731, 15369, 46044, // alpha = 0.9685059 + 15237, 12744, 15370, 46065, // alpha = 1 + + // Cos (theta) = 0.4434366 + 15360, 102, 15360, 32897, // alpha = 0.001 + 15360, 102, 15360, 32897, // alpha = 0.001 + 15360, 102, 15360, 32897, // alpha = 0.001007811 + 15360, 324, 15360, 33167, // alpha = 0.002267574 + 15360, 1022, 15360, 34028, // alpha = 0.004031243 + 15360, 2270, 15360, 35333, // alpha = 0.006298816 + 15359, 3339, 15360, 36411, // alpha = 0.009070295 + 15359, 4265, 15360, 37316, // alpha = 0.01234568 + 15358, 5101, 15360, 38119, // alpha = 0.01612497 + 15357, 5714, 15359, 38863, // alpha = 0.02040816 + 15356, 6345, 15359, 39404, // alpha = 0.02519527 + 15354, 6900, 15359, 40013, // alpha = 0.03048627 + 15352, 7391, 15358, 40454, // alpha = 0.03628118 + 15349, 7838, 15358, 40985, // alpha = 0.04258 + 15345, 8289, 15357, 41323, // alpha = 0.04938272 + 15341, 8615, 15356, 41727, // alpha = 0.05668934 + 15336, 8997, 15355, 42093, // alpha = 0.06449988 + 15331, 9325, 15354, 42364, // alpha = 0.07281432 + 15325, 9571, 15353, 42670, // alpha = 0.08163266 + 15318, 9842, 15352, 43006, // alpha = 0.09095491 + 15312, 10135, 15351, 43191, // alpha = 0.1007811 + 15305, 10344, 15350, 43387, // alpha = 0.1111111 + 15298, 10509, 15349, 43595, // alpha = 0.1219451 + 15292, 10680, 15348, 43810, // alpha = 0.1332829 + 15285, 10855, 15348, 44032, // alpha = 0.1451247 + 15279, 11032, 15347, 44147, // alpha = 0.1574704 + 15274, 11209, 15347, 44262, // alpha = 0.17032 + 15269, 11325, 15347, 44379, // alpha = 0.1836735 + 15265, 11412, 15347, 44494, // alpha = 0.1975309 + 15261, 11497, 15347, 44612, // alpha = 0.2118922 + 15258, 11581, 15347, 44724, // alpha = 0.2267574 + 15256, 11663, 15348, 44840, // alpha = 0.2421265 + 15253, 11742, 15348, 44947, // alpha = 0.2579995 + 15251, 11819, 15349, 45056, // alpha = 0.2743765 + 15249, 11894, 15349, 45109, // alpha = 0.2912573 + 15248, 11966, 15350, 45159, // alpha = 0.308642 + 15248, 12037, 15351, 45209, // alpha = 0.3265306 + 15247, 12105, 15352, 45259, // alpha = 0.3449232 + 15247, 12172, 15353, 45306, // alpha = 0.3638196 + 15242, 12236, 15353, 45348, // alpha = 0.38322 + 15237, 12293, 15352, 45390, // alpha = 0.4031242 + 15237, 12324, 15354, 45431, // alpha = 0.4235324 + 15236, 12353, 15355, 45477, // alpha = 0.4444445 + 15231, 12382, 15354, 45512, // alpha = 0.4658605 + 15231, 12410, 15356, 45551, // alpha = 0.4877803 + 15231, 12437, 15358, 45591, // alpha = 0.5102041 + 15230, 12464, 15358, 45630, // alpha = 0.5331318 + 15230, 12489, 15359, 45666, // alpha = 0.5565634 + 15227, 12514, 15360, 45699, // alpha = 0.5804989 + 15228, 12538, 15361, 45736, // alpha = 0.6049383 + 15228, 12561, 15361, 45766, // alpha = 0.6298816 + 15228, 12584, 15362, 45802, // alpha = 0.6553288 + 15228, 12605, 15363, 45835, // alpha = 0.68128 + 15228, 12626, 15364, 45864, // alpha = 0.7077349 + 15229, 12646, 15365, 45896, // alpha = 0.7346939 + 15229, 12666, 15365, 45926, // alpha = 0.7621567 + 15230, 12684, 15366, 45955, // alpha = 0.7901235 + 15231, 12702, 15366, 45981, // alpha = 0.8185941 + 15231, 12719, 15366, 46009, // alpha = 0.8475687 + 15232, 12735, 15367, 46033, // alpha = 0.8770471 + 15233, 12751, 15368, 46056, // alpha = 0.9070295 + 15234, 12766, 15368, 46080, // alpha = 0.9375157 + 15235, 12780, 15369, 46091, // alpha = 0.9685059 + 15233, 12794, 15369, 46099, // alpha = 1 + + // Cos (theta) = 0.4195011 + 15360, 106, 15360, 32896, // alpha = 0.001 + 15360, 106, 15360, 32896, // alpha = 0.001 + 15360, 106, 15360, 32896, // alpha = 0.001007811 + 15360, 336, 15360, 33178, // alpha = 0.002267574 + 15360, 1060, 15360, 34062, // alpha = 0.004031243 + 15360, 2317, 15360, 35377, // alpha = 0.006298816 + 15359, 3387, 15360, 36456, // alpha = 0.009070295 + 15359, 4309, 15360, 37355, // alpha = 0.01234568 + 15358, 5148, 15360, 38152, // alpha = 0.01612497 + 15357, 5774, 15359, 38915, // alpha = 0.02040816 + 15356, 6391, 15359, 39444, // alpha = 0.02519527 + 15354, 6966, 15359, 40042, // alpha = 0.03048627 + 15351, 7437, 15358, 40495, // alpha = 0.03628118 + 15348, 7901, 15357, 41012, // alpha = 0.04258 + 15344, 8330, 15357, 41360, // alpha = 0.04938272 + 15340, 8669, 15356, 41776, // alpha = 0.05668934 + 15335, 9065, 15355, 42123, // alpha = 0.06449988 + 15329, 9367, 15354, 42401, // alpha = 0.07281432 + 15323, 9621, 15352, 42715, // alpha = 0.08163266 + 15316, 9902, 15351, 43035, // alpha = 0.09095491 + 15309, 10206, 15350, 43222, // alpha = 0.1007811 + 15302, 10386, 15349, 43424, // alpha = 0.1111111 + 15295, 10556, 15348, 43637, // alpha = 0.1219451 + 15288, 10733, 15347, 43857, // alpha = 0.1332829 + 15281, 10914, 15346, 44059, // alpha = 0.1451247 + 15275, 11097, 15346, 44176, // alpha = 0.1574704 + 15270, 11272, 15345, 44295, // alpha = 0.17032 + 15265, 11364, 15345, 44414, // alpha = 0.1836735 + 15261, 11454, 15346, 44532, // alpha = 0.1975309 + 15257, 11542, 15346, 44652, // alpha = 0.2118922 + 15254, 11629, 15346, 44769, // alpha = 0.2267574 + 15251, 11713, 15346, 44890, // alpha = 0.2421265 + 15249, 11795, 15347, 45002, // alpha = 0.2579995 + 15247, 11875, 15347, 45084, // alpha = 0.2743765 + 15246, 11952, 15348, 45137, // alpha = 0.2912573 + 15245, 12027, 15349, 45191, // alpha = 0.308642 + 15245, 12100, 15350, 45244, // alpha = 0.3265306 + 15244, 12170, 15351, 45295, // alpha = 0.3449232 + 15239, 12239, 15351, 45340, // alpha = 0.3638196 + 15233, 12297, 15350, 45378, // alpha = 0.38322 + 15233, 12329, 15351, 45427, // alpha = 0.4031242 + 15229, 12360, 15351, 45467, // alpha = 0.4235324 + 15227, 12391, 15352, 45510, // alpha = 0.4444445 + 15227, 12421, 15354, 45554, // alpha = 0.4658605 + 15227, 12449, 15355, 45595, // alpha = 0.4877803 + 15227, 12478, 15357, 45634, // alpha = 0.5102041 + 15226, 12505, 15359, 45672, // alpha = 0.5331318 + 15223, 12531, 15358, 45708, // alpha = 0.5565634 + 15223, 12557, 15359, 45744, // alpha = 0.5804989 + 15224, 12581, 15361, 45782, // alpha = 0.6049383 + 15223, 12605, 15361, 45817, // alpha = 0.6298816 + 15224, 12628, 15362, 45853, // alpha = 0.6553288 + 15224, 12651, 15363, 45883, // alpha = 0.68128 + 15224, 12672, 15363, 45918, // alpha = 0.7077349 + 15225, 12693, 15364, 45950, // alpha = 0.7346939 + 15226, 12713, 15365, 45977, // alpha = 0.7621567 + 15227, 12732, 15365, 46011, // alpha = 0.7901235 + 15227, 12750, 15366, 46036, // alpha = 0.8185941 + 15229, 12768, 15366, 46063, // alpha = 0.8475687 + 15230, 12785, 15367, 46085, // alpha = 0.8770471 + 15228, 12801, 15367, 46096, // alpha = 0.9070295 + 15229, 12816, 15368, 46108, // alpha = 0.9375157 + 15230, 12831, 15369, 46120, // alpha = 0.9685059 + 15231, 12845, 15369, 46131, // alpha = 1 + + // Cos (theta) = 0.3950617 + 15360, 110, 15360, 32900, // alpha = 0.001 + 15360, 110, 15360, 32900, // alpha = 0.001 + 15360, 110, 15360, 32900, // alpha = 0.001007811 + 15360, 348, 15360, 33191, // alpha = 0.002267574 + 15360, 1098, 15360, 34097, // alpha = 0.004031243 + 15360, 2363, 15360, 35409, // alpha = 0.006298816 + 15359, 3435, 15360, 36495, // alpha = 0.009070295 + 15359, 4354, 15360, 37393, // alpha = 0.01234568 + 15358, 5186, 15360, 38184, // alpha = 0.01612497 + 15357, 5834, 15359, 38941, // alpha = 0.02040816 + 15355, 6437, 15359, 39482, // alpha = 0.02519527 + 15353, 7032, 15359, 40070, // alpha = 0.03048627 + 15351, 7484, 15358, 40535, // alpha = 0.03628118 + 15348, 7964, 15357, 41039, // alpha = 0.04258 + 15344, 8372, 15356, 41396, // alpha = 0.04938272 + 15339, 8723, 15355, 41821, // alpha = 0.05668934 + 15334, 9132, 15354, 42152, // alpha = 0.06449988 + 15328, 9409, 15353, 42438, // alpha = 0.07281432 + 15321, 9672, 15352, 42758, // alpha = 0.08163266 + 15314, 9963, 15350, 43061, // alpha = 0.09095491 + 15307, 10259, 15349, 43254, // alpha = 0.1007811 + 15299, 10427, 15348, 43460, // alpha = 0.1111111 + 15292, 10603, 15346, 43675, // alpha = 0.1219451 + 15284, 10786, 15345, 43902, // alpha = 0.1332829 + 15277, 10973, 15345, 44084, // alpha = 0.1451247 + 15271, 11163, 15344, 44203, // alpha = 0.1574704 + 15265, 11308, 15344, 44323, // alpha = 0.17032 + 15260, 11403, 15344, 44445, // alpha = 0.1836735 + 15256, 11496, 15344, 44569, // alpha = 0.1975309 + 15252, 11587, 15344, 44691, // alpha = 0.2118922 + 15249, 11677, 15345, 44811, // alpha = 0.2267574 + 15247, 11764, 15345, 44932, // alpha = 0.2421265 + 15245, 11848, 15345, 45055, // alpha = 0.2579995 + 15243, 11930, 15346, 45110, // alpha = 0.2743765 + 15243, 12010, 15347, 45168, // alpha = 0.2912573 + 15242, 12088, 15348, 45223, // alpha = 0.308642 + 15242, 12163, 15349, 45275, // alpha = 0.3265306 + 15236, 12235, 15348, 45323, // alpha = 0.3449232 + 15230, 12297, 15347, 45367, // alpha = 0.3638196 + 15229, 12331, 15349, 45416, // alpha = 0.38322 + 15225, 12365, 15348, 45459, // alpha = 0.4031242 + 15223, 12397, 15350, 45503, // alpha = 0.4235324 + 15223, 12429, 15351, 45549, // alpha = 0.4444445 + 15223, 12459, 15353, 45592, // alpha = 0.4658605 + 15222, 12489, 15354, 45635, // alpha = 0.4877803 + 15219, 12518, 15354, 45670, // alpha = 0.5102041 + 15218, 12546, 15356, 45714, // alpha = 0.5331318 + 15218, 12573, 15357, 45751, // alpha = 0.5565634 + 15218, 12599, 15358, 45790, // alpha = 0.5804989 + 15219, 12625, 15360, 45827, // alpha = 0.6049383 + 15219, 12649, 15360, 45866, // alpha = 0.6298816 + 15220, 12673, 15361, 45903, // alpha = 0.6553288 + 15221, 12696, 15362, 45935, // alpha = 0.68128 + 15222, 12718, 15363, 45970, // alpha = 0.7077349 + 15222, 12740, 15364, 46000, // alpha = 0.7346939 + 15224, 12760, 15365, 46032, // alpha = 0.7621567 + 15225, 12780, 15365, 46060, // alpha = 0.7901235 + 15223, 12799, 15365, 46084, // alpha = 0.8185941 + 15224, 12817, 15366, 46098, // alpha = 0.8475687 + 15224, 12834, 15367, 46112, // alpha = 0.8770471 + 15225, 12851, 15368, 46124, // alpha = 0.9070295 + 15227, 12867, 15368, 46137, // alpha = 0.9375157 + 15228, 12882, 15369, 46149, // alpha = 0.9685059 + 15229, 12896, 15369, 46161, // alpha = 1 + + // Cos (theta) = 0.3701184 + 15360, 114, 15360, 32904, // alpha = 0.001 + 15360, 114, 15360, 32904, // alpha = 0.001 + 15360, 114, 15360, 32904, // alpha = 0.001007811 + 15360, 361, 15360, 33199, // alpha = 0.002267574 + 15360, 1138, 15360, 34135, // alpha = 0.004031243 + 15360, 2412, 15360, 35453, // alpha = 0.006298816 + 15359, 3485, 15360, 36537, // alpha = 0.009070295 + 15359, 4401, 15360, 37431, // alpha = 0.01234568 + 15358, 5226, 15360, 38217, // alpha = 0.01612497 + 15357, 5898, 15359, 38968, // alpha = 0.02040816 + 15355, 6485, 15359, 39523, // alpha = 0.02519527 + 15353, 7102, 15358, 40099, // alpha = 0.03048627 + 15350, 7532, 15358, 40577, // alpha = 0.03628118 + 15347, 8030, 15357, 41067, // alpha = 0.04258 + 15343, 8416, 15356, 41432, // alpha = 0.04938272 + 15338, 8779, 15355, 41868, // alpha = 0.05668934 + 15332, 9203, 15354, 42182, // alpha = 0.06449988 + 15326, 9453, 15352, 42474, // alpha = 0.07281432 + 15319, 9726, 15351, 42804, // alpha = 0.08163266 + 15312, 10026, 15349, 43087, // alpha = 0.09095491 + 15304, 10296, 15348, 43285, // alpha = 0.1007811 + 15296, 10470, 15346, 43496, // alpha = 0.1111111 + 15288, 10653, 15345, 43719, // alpha = 0.1219451 + 15280, 10842, 15344, 43951, // alpha = 0.1332829 + 15273, 11036, 15343, 44109, // alpha = 0.1451247 + 15267, 11231, 15342, 44232, // alpha = 0.1574704 + 15260, 11346, 15342, 44354, // alpha = 0.17032 + 15255, 11443, 15342, 44478, // alpha = 0.1836735 + 15251, 11540, 15342, 44604, // alpha = 0.1975309 + 15248, 11634, 15343, 44730, // alpha = 0.2118922 + 15245, 11727, 15343, 44855, // alpha = 0.2267574 + 15243, 11817, 15344, 44982, // alpha = 0.2421265 + 15241, 11904, 15344, 45080, // alpha = 0.2579995 + 15239, 11989, 15345, 45139, // alpha = 0.2743765 + 15239, 12071, 15345, 45198, // alpha = 0.2912573 + 15238, 12151, 15347, 45253, // alpha = 0.308642 + 15233, 12228, 15346, 45303, // alpha = 0.3265306 + 15227, 12296, 15345, 45350, // alpha = 0.3449232 + 15226, 12332, 15346, 45403, // alpha = 0.3638196 + 15220, 12368, 15345, 45447, // alpha = 0.38322 + 15219, 12402, 15347, 45495, // alpha = 0.4031242 + 15219, 12435, 15348, 45543, // alpha = 0.4235324 + 15218, 12468, 15350, 45586, // alpha = 0.4444445 + 15218, 12499, 15352, 45634, // alpha = 0.4658605 + 15213, 12530, 15351, 45672, // alpha = 0.4877803 + 15214, 12560, 15354, 45715, // alpha = 0.5102041 + 15213, 12589, 15354, 45754, // alpha = 0.5331318 + 15214, 12617, 15357, 45798, // alpha = 0.5565634 + 15214, 12644, 15358, 45835, // alpha = 0.5804989 + 15215, 12670, 15360, 45878, // alpha = 0.6049383 + 15216, 12696, 15361, 45912, // alpha = 0.6298816 + 15216, 12720, 15361, 45950, // alpha = 0.6553288 + 15217, 12744, 15362, 45986, // alpha = 0.68128 + 15218, 12766, 15363, 46020, // alpha = 0.7077349 + 15218, 12788, 15363, 46052, // alpha = 0.7346939 + 15218, 12810, 15364, 46082, // alpha = 0.7621567 + 15220, 12830, 15365, 46097, // alpha = 0.7901235 + 15221, 12849, 15366, 46113, // alpha = 0.8185941 + 15222, 12868, 15366, 46128, // alpha = 0.8475687 + 15223, 12886, 15367, 46141, // alpha = 0.8770471 + 15224, 12903, 15367, 46156, // alpha = 0.9070295 + 15225, 12919, 15368, 46167, // alpha = 0.9375157 + 15227, 12935, 15369, 46180, // alpha = 0.9685059 + 15228, 12950, 15369, 46192, // alpha = 1 + + // Cos (theta) = 0.3446712 + 15360, 118, 15360, 32907, // alpha = 0.001 + 15360, 118, 15360, 32907, // alpha = 0.001 + 15360, 118, 15360, 32907, // alpha = 0.001007811 + 15360, 373, 15360, 33209, // alpha = 0.002267574 + 15360, 1178, 15360, 34166, // alpha = 0.004031243 + 15360, 2460, 15360, 35490, // alpha = 0.006298816 + 15359, 3535, 15360, 36576, // alpha = 0.009070295 + 15359, 4447, 15360, 37466, // alpha = 0.01234568 + 15358, 5265, 15359, 38248, // alpha = 0.01612497 + 15357, 5960, 15359, 38991, // alpha = 0.02040816 + 15355, 6532, 15359, 39559, // alpha = 0.02519527 + 15353, 7169, 15358, 40127, // alpha = 0.03048627 + 15350, 7581, 15358, 40614, // alpha = 0.03628118 + 15346, 8096, 15357, 41092, // alpha = 0.04258 + 15342, 8459, 15356, 41467, // alpha = 0.04938272 + 15337, 8835, 15355, 41912, // alpha = 0.05668934 + 15331, 9245, 15353, 42210, // alpha = 0.06449988 + 15325, 9496, 15352, 42509, // alpha = 0.07281432 + 15317, 9778, 15350, 42846, // alpha = 0.08163266 + 15310, 10089, 15348, 43112, // alpha = 0.09095491 + 15302, 10333, 15347, 43315, // alpha = 0.1007811 + 15293, 10513, 15345, 43530, // alpha = 0.1111111 + 15285, 10702, 15343, 43756, // alpha = 0.1219451 + 15277, 10897, 15342, 43993, // alpha = 0.1332829 + 15269, 11097, 15341, 44134, // alpha = 0.1451247 + 15262, 11282, 15340, 44258, // alpha = 0.1574704 + 15256, 11383, 15340, 44384, // alpha = 0.17032 + 15251, 11484, 15340, 44510, // alpha = 0.1836735 + 15246, 11583, 15340, 44637, // alpha = 0.1975309 + 15243, 11681, 15341, 44766, // alpha = 0.2118922 + 15240, 11776, 15342, 44896, // alpha = 0.2267574 + 15238, 11869, 15342, 45025, // alpha = 0.2421265 + 15237, 11959, 15342, 45104, // alpha = 0.2579995 + 15236, 12047, 15343, 45165, // alpha = 0.2743765 + 15235, 12131, 15344, 45225, // alpha = 0.2912573 + 15229, 12214, 15343, 45278, // alpha = 0.308642 + 15223, 12291, 15342, 45328, // alpha = 0.3265306 + 15222, 12329, 15344, 45382, // alpha = 0.3449232 + 15216, 12367, 15344, 45428, // alpha = 0.3638196 + 15214, 12404, 15345, 45478, // alpha = 0.38322 + 15214, 12439, 15346, 45529, // alpha = 0.4031242 + 15214, 12473, 15348, 45576, // alpha = 0.4235324 + 15209, 12507, 15348, 45621, // alpha = 0.4444445 + 15208, 12539, 15349, 45666, // alpha = 0.4658605 + 15209, 12571, 15350, 45712, // alpha = 0.4877803 + 15209, 12602, 15353, 45752, // alpha = 0.5102041 + 15209, 12631, 15354, 45801, // alpha = 0.5331318 + 15210, 12660, 15356, 45842, // alpha = 0.5565634 + 15211, 12688, 15358, 45883, // alpha = 0.5804989 + 15212, 12715, 15359, 45923, // alpha = 0.6049383 + 15213, 12741, 15360, 45962, // alpha = 0.6298816 + 15213, 12766, 15361, 45998, // alpha = 0.6553288 + 15212, 12791, 15361, 46033, // alpha = 0.68128 + 15213, 12814, 15362, 46068, // alpha = 0.7077349 + 15214, 12837, 15363, 46091, // alpha = 0.7346939 + 15216, 12858, 15364, 46109, // alpha = 0.7621567 + 15217, 12879, 15364, 46125, // alpha = 0.7901235 + 15218, 12899, 15365, 46140, // alpha = 0.8185941 + 15220, 12918, 15366, 46156, // alpha = 0.8475687 + 15221, 12937, 15367, 46170, // alpha = 0.8770471 + 15223, 12954, 15368, 46183, // alpha = 0.9070295 + 15216, 12971, 15367, 46191, // alpha = 0.9375157 + 15217, 12987, 15368, 46204, // alpha = 0.9685059 + 15219, 13003, 15368, 46217, // alpha = 1 + + // Cos (theta) = 0.3187201 + 15360, 122, 15360, 32909, // alpha = 0.001 + 15360, 122, 15360, 32909, // alpha = 0.001 + 15360, 122, 15360, 32909, // alpha = 0.001007811 + 15360, 386, 15360, 33218, // alpha = 0.002267574 + 15360, 1219, 15360, 34191, // alpha = 0.004031243 + 15360, 2510, 15360, 35532, // alpha = 0.006298816 + 15359, 3587, 15360, 36615, // alpha = 0.009070295 + 15359, 4494, 15360, 37504, // alpha = 0.01234568 + 15358, 5306, 15359, 38279, // alpha = 0.01612497 + 15357, 6025, 15359, 39017, // alpha = 0.02040816 + 15355, 6581, 15359, 39597, // alpha = 0.02519527 + 15353, 7205, 15358, 40154, // alpha = 0.03048627 + 15350, 7630, 15357, 40652, // alpha = 0.03628118 + 15346, 8163, 15356, 41119, // alpha = 0.04258 + 15341, 8503, 15355, 41501, // alpha = 0.04938272 + 15336, 8892, 15354, 41958, // alpha = 0.05668934 + 15330, 9281, 15353, 42237, // alpha = 0.06449988 + 15323, 9541, 15351, 42544, // alpha = 0.07281432 + 15316, 9833, 15349, 42887, // alpha = 0.08163266 + 15308, 10154, 15347, 43138, // alpha = 0.09095491 + 15299, 10371, 15346, 43344, // alpha = 0.1007811 + 15290, 10557, 15344, 43565, // alpha = 0.1111111 + 15281, 10752, 15342, 43797, // alpha = 0.1219451 + 15273, 10954, 15340, 44035, // alpha = 0.1332829 + 15265, 11161, 15339, 44158, // alpha = 0.1451247 + 15257, 11317, 15338, 44284, // alpha = 0.1574704 + 15251, 11421, 15338, 44414, // alpha = 0.17032 + 15245, 11525, 15338, 44541, // alpha = 0.1836735 + 15241, 11628, 15338, 44672, // alpha = 0.1975309 + 15237, 11729, 15339, 44803, // alpha = 0.2118922 + 15235, 11827, 15340, 44934, // alpha = 0.2267574 + 15234, 11923, 15340, 45062, // alpha = 0.2421265 + 15233, 12016, 15341, 45127, // alpha = 0.2579995 + 15232, 12106, 15343, 45192, // alpha = 0.2743765 + 15225, 12193, 15341, 45245, // alpha = 0.2912573 + 15219, 12278, 15340, 45298, // alpha = 0.308642 + 15218, 12324, 15341, 45356, // alpha = 0.3265306 + 15211, 12364, 15341, 45405, // alpha = 0.3449232 + 15210, 12403, 15342, 45459, // alpha = 0.3638196 + 15209, 12440, 15343, 45512, // alpha = 0.38322 + 15208, 12477, 15345, 45562, // alpha = 0.4031242 + 15204, 12512, 15344, 45608, // alpha = 0.4235324 + 15203, 12547, 15346, 45656, // alpha = 0.4444445 + 15204, 12580, 15348, 45703, // alpha = 0.4658605 + 15204, 12613, 15349, 45752, // alpha = 0.4877803 + 15204, 12644, 15351, 45796, // alpha = 0.5102041 + 15205, 12675, 15354, 45840, // alpha = 0.5331318 + 15205, 12705, 15355, 45886, // alpha = 0.5565634 + 15207, 12733, 15357, 45927, // alpha = 0.5804989 + 15208, 12761, 15359, 45970, // alpha = 0.6049383 + 15206, 12788, 15359, 46003, // alpha = 0.6298816 + 15207, 12814, 15360, 46045, // alpha = 0.6553288 + 15210, 12839, 15361, 46082, // alpha = 0.68128 + 15211, 12863, 15362, 46100, // alpha = 0.7077349 + 15212, 12886, 15363, 46116, // alpha = 0.7346939 + 15214, 12909, 15364, 46135, // alpha = 0.7621567 + 15215, 12930, 15364, 46152, // alpha = 0.7901235 + 15218, 12951, 15366, 46167, // alpha = 0.8185941 + 15210, 12970, 15364, 46178, // alpha = 0.8475687 + 15211, 12989, 15365, 46195, // alpha = 0.8770471 + 15213, 13007, 15366, 46206, // alpha = 0.9070295 + 15205, 13025, 15365, 46214, // alpha = 0.9375157 + 15207, 13041, 15365, 46227, // alpha = 0.9685059 + 15208, 13057, 15366, 46240, // alpha = 1 + + // Cos (theta) = 0.292265 + 15360, 126, 15360, 32913, // alpha = 0.001 + 15360, 126, 15360, 32913, // alpha = 0.001 + 15360, 126, 15360, 32913, // alpha = 0.001007811 + 15360, 399, 15360, 33230, // alpha = 0.002267574 + 15360, 1260, 15360, 34222, // alpha = 0.004031243 + 15360, 2561, 15360, 35565, // alpha = 0.006298816 + 15359, 3639, 15360, 36652, // alpha = 0.009070295 + 15359, 4543, 15360, 37539, // alpha = 0.01234568 + 15358, 5347, 15359, 38309, // alpha = 0.01612497 + 15356, 6091, 15359, 39039, // alpha = 0.02040816 + 15355, 6631, 15359, 39633, // alpha = 0.02519527 + 15352, 7241, 15358, 40178, // alpha = 0.03048627 + 15349, 7681, 15357, 40688, // alpha = 0.03628118 + 15345, 8212, 15356, 41143, // alpha = 0.04258 + 15341, 8549, 15355, 41533, // alpha = 0.04938272 + 15335, 8950, 15354, 41992, // alpha = 0.05668934 + 15329, 9318, 15352, 42265, // alpha = 0.06449988 + 15322, 9586, 15350, 42577, // alpha = 0.07281432 + 15314, 9888, 15348, 42929, // alpha = 0.08163266 + 15305, 10220, 15346, 43163, // alpha = 0.09095491 + 15296, 10410, 15344, 43374, // alpha = 0.1007811 + 15287, 10602, 15342, 43598, // alpha = 0.1111111 + 15278, 10803, 15340, 43835, // alpha = 0.1219451 + 15269, 11012, 15339, 44056, // alpha = 0.1332829 + 15261, 11225, 15337, 44183, // alpha = 0.1451247 + 15253, 11352, 15336, 44312, // alpha = 0.1574704 + 15246, 11460, 15335, 44441, // alpha = 0.17032 + 15240, 11568, 15335, 44573, // alpha = 0.1836735 + 15236, 11674, 15336, 44703, // alpha = 0.1975309 + 15233, 11777, 15337, 44838, // alpha = 0.2118922 + 15231, 11879, 15338, 44973, // alpha = 0.2267574 + 15230, 11977, 15339, 45081, // alpha = 0.2421265 + 15229, 12073, 15340, 45150, // alpha = 0.2579995 + 15229, 12166, 15341, 45217, // alpha = 0.2743765 + 15214, 12257, 15337, 45261, // alpha = 0.2912573 + 15213, 12316, 15338, 45325, // alpha = 0.308642 + 15206, 12358, 15337, 45378, // alpha = 0.3265306 + 15205, 12400, 15339, 45432, // alpha = 0.3449232 + 15204, 12439, 15340, 45491, // alpha = 0.3638196 + 15203, 12478, 15342, 45544, // alpha = 0.38322 + 15198, 12516, 15342, 45589, // alpha = 0.4031242 + 15198, 12552, 15343, 45640, // alpha = 0.4235324 + 15198, 12588, 15345, 45691, // alpha = 0.4444445 + 15198, 12622, 15347, 45742, // alpha = 0.4658605 + 15198, 12656, 15349, 45788, // alpha = 0.4877803 + 15200, 12688, 15350, 45835, // alpha = 0.5102041 + 15200, 12720, 15352, 45884, // alpha = 0.5331318 + 15202, 12750, 15354, 45928, // alpha = 0.5565634 + 15200, 12780, 15355, 45968, // alpha = 0.5804989 + 15202, 12808, 15357, 46009, // alpha = 0.6049383 + 15204, 12836, 15359, 46050, // alpha = 0.6298816 + 15205, 12863, 15360, 46086, // alpha = 0.6553288 + 15207, 12888, 15361, 46106, // alpha = 0.68128 + 15209, 12913, 15362, 46125, // alpha = 0.7077349 + 15211, 12937, 15364, 46143, // alpha = 0.7346939 + 15203, 12960, 15362, 46156, // alpha = 0.7621567 + 15205, 12982, 15363, 46173, // alpha = 0.7901235 + 15206, 13003, 15364, 46189, // alpha = 0.8185941 + 15198, 13024, 15362, 46199, // alpha = 0.8475687 + 15200, 13043, 15363, 46211, // alpha = 0.8770471 + 15201, 13061, 15364, 46230, // alpha = 0.9070295 + 15202, 13079, 15365, 46241, // alpha = 0.9375157 + 15204, 13096, 15366, 46256, // alpha = 0.9685059 + 15205, 13112, 15366, 46269, // alpha = 1 + + // Cos (theta) = 0.2653061 + 15360, 130, 15360, 32916, // alpha = 0.001 + 15360, 130, 15360, 32916, // alpha = 0.001 + 15360, 130, 15360, 32916, // alpha = 0.001007811 + 15360, 412, 15360, 33240, // alpha = 0.002267574 + 15360, 1301, 15360, 34251, // alpha = 0.004031243 + 15360, 2611, 15360, 35604, // alpha = 0.006298816 + 15359, 3691, 15360, 36689, // alpha = 0.009070295 + 15359, 4591, 15360, 37573, // alpha = 0.01234568 + 15358, 5388, 15359, 38338, // alpha = 0.01612497 + 15356, 6150, 15359, 39063, // alpha = 0.02040816 + 15354, 6680, 15358, 39669, // alpha = 0.02519527 + 15352, 7277, 15358, 40205, // alpha = 0.03048627 + 15349, 7731, 15357, 40724, // alpha = 0.03628118 + 15345, 8246, 15356, 41167, // alpha = 0.04258 + 15340, 8594, 15355, 41565, // alpha = 0.04938272 + 15334, 9009, 15353, 42012, // alpha = 0.05668934 + 15328, 9355, 15351, 42291, // alpha = 0.06449988 + 15320, 9632, 15349, 42609, // alpha = 0.07281432 + 15312, 9943, 15347, 42968, // alpha = 0.08163266 + 15303, 10263, 15345, 43186, // alpha = 0.09095491 + 15294, 10449, 15343, 43400, // alpha = 0.1007811 + 15285, 10647, 15341, 43630, // alpha = 0.1111111 + 15275, 10854, 15339, 43870, // alpha = 0.1219451 + 15265, 11070, 15337, 44077, // alpha = 0.1332829 + 15256, 11277, 15335, 44206, // alpha = 0.1451247 + 15248, 11388, 15334, 44337, // alpha = 0.1574704 + 15241, 11499, 15334, 44470, // alpha = 0.17032 + 15235, 11610, 15333, 44601, // alpha = 0.1836735 + 15231, 11719, 15334, 44734, // alpha = 0.1975309 + 15227, 11826, 15335, 44872, // alpha = 0.2118922 + 15226, 11930, 15336, 45010, // alpha = 0.2267574 + 15225, 12032, 15338, 45101, // alpha = 0.2421265 + 15226, 12131, 15338, 45172, // alpha = 0.2579995 + 15218, 12227, 15337, 45230, // alpha = 0.2743765 + 15209, 12304, 15335, 45287, // alpha = 0.2912573 + 15200, 12349, 15334, 45337, // alpha = 0.308642 + 15199, 12392, 15335, 45396, // alpha = 0.3265306 + 15199, 12435, 15337, 45459, // alpha = 0.3449232 + 15198, 12476, 15339, 45516, // alpha = 0.3638196 + 15192, 12516, 15338, 45567, // alpha = 0.38322 + 15192, 12554, 15340, 45619, // alpha = 0.4031242 + 15192, 12592, 15342, 45673, // alpha = 0.4235324 + 15192, 12628, 15343, 45725, // alpha = 0.4444445 + 15193, 12664, 15345, 45776, // alpha = 0.4658605 + 15194, 12698, 15347, 45826, // alpha = 0.4877803 + 15196, 12732, 15349, 45875, // alpha = 0.5102041 + 15194, 12764, 15351, 45919, // alpha = 0.5331318 + 15195, 12795, 15352, 45966, // alpha = 0.5565634 + 15198, 12826, 15355, 46011, // alpha = 0.5804989 + 15199, 12855, 15356, 46053, // alpha = 0.6049383 + 15202, 12884, 15359, 46089, // alpha = 0.6298816 + 15203, 12911, 15360, 46109, // alpha = 0.6553288 + 15205, 12938, 15361, 46130, // alpha = 0.68128 + 15197, 12963, 15359, 46144, // alpha = 0.7077349 + 15198, 12988, 15361, 46162, // alpha = 0.7346939 + 15190, 13011, 15359, 46173, // alpha = 0.7621567 + 15192, 13034, 15361, 46191, // alpha = 0.7901235 + 15194, 13056, 15362, 46209, // alpha = 0.8185941 + 15196, 13076, 15363, 46225, // alpha = 0.8475687 + 15197, 13096, 15364, 46241, // alpha = 0.8770471 + 15199, 13115, 15365, 46256, // alpha = 0.9070295 + 15200, 13134, 15365, 46271, // alpha = 0.9375157 + 15202, 13151, 15366, 46285, // alpha = 0.9685059 + 15194, 13168, 15366, 46291, // alpha = 1 + + // Cos (theta) = 0.2378433 + 15360, 134, 15360, 32920, // alpha = 0.001 + 15360, 134, 15360, 32920, // alpha = 0.001 + 15360, 134, 15360, 32920, // alpha = 0.001007811 + 15360, 425, 15360, 33243, // alpha = 0.002267574 + 15360, 1343, 15360, 34277, // alpha = 0.004031243 + 15360, 2662, 15360, 35633, // alpha = 0.006298816 + 15359, 3744, 15360, 36729, // alpha = 0.009070295 + 15359, 4640, 15360, 37605, // alpha = 0.01234568 + 15358, 5429, 15359, 38365, // alpha = 0.01612497 + 15356, 6183, 15359, 39084, // alpha = 0.02040816 + 15354, 6730, 15358, 39701, // alpha = 0.02519527 + 15352, 7313, 15358, 40228, // alpha = 0.03048627 + 15348, 7782, 15357, 40758, // alpha = 0.03628118 + 15344, 8281, 15356, 41189, // alpha = 0.04258 + 15339, 8639, 15354, 41595, // alpha = 0.04938272 + 15334, 9068, 15353, 42031, // alpha = 0.05668934 + 15327, 9392, 15351, 42315, // alpha = 0.06449988 + 15319, 9678, 15349, 42639, // alpha = 0.07281432 + 15311, 9999, 15347, 43005, // alpha = 0.08163266 + 15301, 10296, 15344, 43207, // alpha = 0.09095491 + 15292, 10488, 15342, 43427, // alpha = 0.1007811 + 15281, 10692, 15339, 43661, // alpha = 0.1111111 + 15271, 10906, 15337, 43906, // alpha = 0.1219451 + 15262, 11128, 15335, 44097, // alpha = 0.1332829 + 15252, 11309, 15334, 44227, // alpha = 0.1451247 + 15244, 11424, 15332, 44361, // alpha = 0.1574704 + 15236, 11539, 15331, 44495, // alpha = 0.17032 + 15231, 11653, 15331, 44632, // alpha = 0.1836735 + 15226, 11765, 15331, 44769, // alpha = 0.1975309 + 15223, 11875, 15333, 44904, // alpha = 0.2118922 + 15222, 11983, 15334, 45045, // alpha = 0.2267574 + 15222, 12088, 15337, 45120, // alpha = 0.2421265 + 15213, 12189, 15334, 45183, // alpha = 0.2579995 + 15203, 12288, 15331, 45242, // alpha = 0.2743765 + 15204, 12336, 15334, 45306, // alpha = 0.2912573 + 15193, 12382, 15331, 45355, // alpha = 0.308642 + 15192, 12427, 15333, 45420, // alpha = 0.3265306 + 15192, 12471, 15336, 45481, // alpha = 0.3449232 + 15184, 12513, 15334, 45532, // alpha = 0.3638196 + 15185, 12554, 15336, 45589, // alpha = 0.38322 + 15185, 12594, 15338, 45646, // alpha = 0.4031242 + 15186, 12632, 15340, 45705, // alpha = 0.4235324 + 15187, 12670, 15343, 45756, // alpha = 0.4444445 + 15188, 12706, 15344, 45809, // alpha = 0.4658605 + 15190, 12742, 15347, 45863, // alpha = 0.4877803 + 15188, 12776, 15347, 45907, // alpha = 0.5102041 + 15191, 12809, 15350, 45961, // alpha = 0.5331318 + 15192, 12841, 15352, 46006, // alpha = 0.5565634 + 15195, 12873, 15355, 46052, // alpha = 0.5804989 + 15196, 12903, 15357, 46089, // alpha = 0.6049383 + 15199, 12932, 15358, 46111, // alpha = 0.6298816 + 15191, 12960, 15356, 46126, // alpha = 0.6553288 + 15193, 12988, 15358, 46146, // alpha = 0.68128 + 15183, 13014, 15355, 46159, // alpha = 0.7077349 + 15185, 13039, 15358, 46179, // alpha = 0.7346939 + 15187, 13063, 15360, 46198, // alpha = 0.7621567 + 15189, 13086, 15362, 46216, // alpha = 0.7901235 + 15190, 13109, 15362, 46235, // alpha = 0.8185941 + 15193, 13130, 15363, 46251, // alpha = 0.8475687 + 15196, 13151, 15365, 46266, // alpha = 0.8770471 + 15188, 13170, 15363, 46275, // alpha = 0.9070295 + 15189, 13189, 15364, 46290, // alpha = 0.9375157 + 15191, 13207, 15365, 46304, // alpha = 0.9685059 + 15192, 13224, 15365, 46319, // alpha = 1 + + // Cos (theta) = 0.2098765 + 15360, 139, 15360, 32923, // alpha = 0.001 + 15360, 139, 15360, 32923, // alpha = 0.001 + 15360, 139, 15360, 32923, // alpha = 0.001007811 + 15360, 440, 15360, 33257, // alpha = 0.002267574 + 15360, 1389, 15360, 34305, // alpha = 0.004031243 + 15360, 2718, 15360, 35672, // alpha = 0.006298816 + 15359, 3802, 15360, 36763, // alpha = 0.009070295 + 15359, 4693, 15360, 37638, // alpha = 0.01234568 + 15358, 5474, 15359, 38393, // alpha = 0.01612497 + 15356, 6219, 15359, 39108, // alpha = 0.02040816 + 15354, 6785, 15358, 39736, // alpha = 0.02519527 + 15351, 7352, 15357, 40255, // alpha = 0.03048627 + 15348, 7837, 15356, 40794, // alpha = 0.03628118 + 15344, 8318, 15355, 41215, // alpha = 0.04258 + 15339, 8689, 15354, 41628, // alpha = 0.04938272 + 15333, 9131, 15352, 42052, // alpha = 0.05668934 + 15326, 9432, 15350, 42340, // alpha = 0.06449988 + 15318, 9728, 15348, 42672, // alpha = 0.07281432 + 15309, 10059, 15346, 43026, // alpha = 0.08163266 + 15299, 10332, 15343, 43231, // alpha = 0.09095491 + 15289, 10530, 15341, 43453, // alpha = 0.1007811 + 15279, 10741, 15338, 43692, // alpha = 0.1111111 + 15268, 10962, 15336, 43943, // alpha = 0.1219451 + 15258, 11191, 15333, 44118, // alpha = 0.1332829 + 15248, 11345, 15331, 44251, // alpha = 0.1451247 + 15239, 11463, 15330, 44388, // alpha = 0.1574704 + 15231, 11581, 15329, 44524, // alpha = 0.17032 + 15225, 11699, 15329, 44662, // alpha = 0.1836735 + 15221, 11815, 15329, 44801, // alpha = 0.1975309 + 15219, 11929, 15331, 44941, // alpha = 0.2118922 + 15218, 12040, 15333, 45069, // alpha = 0.2267574 + 15219, 12148, 15336, 45143, // alpha = 0.2421265 + 15199, 12253, 15327, 45194, // alpha = 0.2579995 + 15198, 12321, 15330, 45261, // alpha = 0.2743765 + 15186, 12370, 15326, 45316, // alpha = 0.2912573 + 15186, 12418, 15330, 45380, // alpha = 0.308642 + 15184, 12464, 15331, 45442, // alpha = 0.3265306 + 15176, 12509, 15329, 45493, // alpha = 0.3449232 + 15177, 12553, 15333, 45555, // alpha = 0.3638196 + 15177, 12595, 15335, 45615, // alpha = 0.38322 + 15178, 12636, 15337, 45673, // alpha = 0.4031242 + 15180, 12676, 15340, 45731, // alpha = 0.4235324 + 15182, 12715, 15342, 45789, // alpha = 0.4444445 + 15180, 12752, 15343, 45837, // alpha = 0.4658605 + 15182, 12788, 15344, 45894, // alpha = 0.4877803 + 15184, 12824, 15347, 45953, // alpha = 0.5102041 + 15187, 12858, 15350, 46000, // alpha = 0.5331318 + 15190, 12891, 15351, 46046, // alpha = 0.5565634 + 15193, 12924, 15354, 46087, // alpha = 0.5804989 + 15184, 12955, 15352, 46105, // alpha = 0.6049383 + 15186, 12985, 15354, 46128, // alpha = 0.6298816 + 15176, 13014, 15350, 46143, // alpha = 0.6553288 + 15178, 13042, 15353, 46163, // alpha = 0.68128 + 15179, 13069, 15356, 46184, // alpha = 0.7077349 + 15181, 13095, 15357, 46203, // alpha = 0.7346939 + 15185, 13120, 15360, 46224, // alpha = 0.7621567 + 15186, 13143, 15362, 46243, // alpha = 0.7901235 + 15178, 13166, 15360, 46255, // alpha = 0.8185941 + 15181, 13188, 15362, 46271, // alpha = 0.8475687 + 15182, 13210, 15363, 46287, // alpha = 0.8770471 + 15184, 13230, 15363, 46303, // alpha = 0.9070295 + 15187, 13249, 15365, 46318, // alpha = 0.9375157 + 15189, 13267, 15366, 46333, // alpha = 0.9685059 + 15189, 13285, 15366, 46347, // alpha = 1 + + // Cos (theta) = 0.1814059 + 15360, 143, 15360, 32923, // alpha = 0.001 + 15360, 143, 15360, 32923, // alpha = 0.001 + 15360, 143, 15360, 32923, // alpha = 0.001007811 + 15360, 451, 15360, 33264, // alpha = 0.002267574 + 15360, 1425, 15360, 34325, // alpha = 0.004031243 + 15360, 2762, 15360, 35696, // alpha = 0.006298816 + 15359, 3848, 15360, 36787, // alpha = 0.009070295 + 15359, 4736, 15360, 37661, // alpha = 0.01234568 + 15358, 5511, 15359, 38414, // alpha = 0.01612497 + 15356, 6248, 15359, 39123, // alpha = 0.02040816 + 15354, 6828, 15358, 39761, // alpha = 0.02519527 + 15351, 7384, 15357, 40271, // alpha = 0.03048627 + 15348, 7882, 15356, 40817, // alpha = 0.03628118 + 15344, 8348, 15355, 41231, // alpha = 0.04258 + 15338, 8729, 15354, 41651, // alpha = 0.04938272 + 15332, 9183, 15352, 42068, // alpha = 0.05668934 + 15325, 9465, 15350, 42360, // alpha = 0.06449988 + 15317, 9768, 15347, 42697, // alpha = 0.07281432 + 15307, 10108, 15345, 43042, // alpha = 0.08163266 + 15297, 10362, 15342, 43249, // alpha = 0.09095491 + 15287, 10564, 15340, 43474, // alpha = 0.1007811 + 15276, 10781, 15337, 43716, // alpha = 0.1111111 + 15266, 11008, 15334, 43971, // alpha = 0.1219451 + 15255, 11242, 15332, 44132, // alpha = 0.1332829 + 15245, 11373, 15330, 44269, // alpha = 0.1451247 + 15236, 11495, 15328, 44405, // alpha = 0.1574704 + 15228, 11616, 15327, 44546, // alpha = 0.17032 + 15221, 11736, 15327, 44686, // alpha = 0.1836735 + 15217, 11855, 15327, 44826, // alpha = 0.1975309 + 15216, 11972, 15330, 44966, // alpha = 0.2118922 + 15217, 12086, 15333, 45083, // alpha = 0.2267574 + 15208, 12196, 15330, 45149, // alpha = 0.2421265 + 15195, 12296, 15327, 45209, // alpha = 0.2579995 + 15182, 12348, 15323, 45267, // alpha = 0.2743765 + 15179, 12398, 15325, 45332, // alpha = 0.2912573 + 15178, 12447, 15327, 45394, // alpha = 0.308642 + 15170, 12495, 15326, 45447, // alpha = 0.3265306 + 15170, 12541, 15328, 45509, // alpha = 0.3449232 + 15171, 12585, 15332, 45566, // alpha = 0.3638196 + 15172, 12628, 15335, 45631, // alpha = 0.38322 + 15173, 12670, 15337, 45694, // alpha = 0.4031242 + 15176, 12711, 15340, 45751, // alpha = 0.4235324 + 15173, 12751, 15340, 45807, // alpha = 0.4444445 + 15177, 12789, 15343, 45869, // alpha = 0.4658605 + 15180, 12826, 15345, 45921, // alpha = 0.4877803 + 15183, 12863, 15348, 45977, // alpha = 0.5102041 + 15187, 12898, 15350, 46033, // alpha = 0.5331318 + 15191, 12932, 15354, 46081, // alpha = 0.5565634 + 15180, 12965, 15350, 46099, // alpha = 0.5804989 + 15167, 12996, 15346, 46114, // alpha = 0.6049383 + 15169, 13027, 15349, 46136, // alpha = 0.6298816 + 15171, 13057, 15351, 46161, // alpha = 0.6553288 + 15174, 13086, 15354, 46182, // alpha = 0.68128 + 15177, 13113, 15356, 46202, // alpha = 0.7077349 + 15169, 13140, 15354, 46217, // alpha = 0.7346939 + 15171, 13165, 15357, 46234, // alpha = 0.7621567 + 15174, 13190, 15360, 46254, // alpha = 0.7901235 + 15175, 13213, 15361, 46273, // alpha = 0.8185941 + 15178, 13236, 15362, 46290, // alpha = 0.8475687 + 15181, 13257, 15363, 46308, // alpha = 0.8770471 + 15182, 13278, 15364, 46323, // alpha = 0.9070295 + 15185, 13297, 15365, 46339, // alpha = 0.9375157 + 15186, 13314, 15366, 46354, // alpha = 0.9685059 + 15189, 13323, 15367, 46370, // alpha = 1 + + // Cos (theta) = 0.1524313 + 15360, 147, 15360, 32926, // alpha = 0.001 + 15360, 147, 15360, 32926, // alpha = 0.001 + 15360, 147, 15360, 32926, // alpha = 0.001007811 + 15360, 466, 15360, 33271, // alpha = 0.002267574 + 15360, 1472, 15360, 34357, // alpha = 0.004031243 + 15360, 2820, 15360, 35727, // alpha = 0.006298816 + 15359, 3907, 15360, 36816, // alpha = 0.009070295 + 15359, 4791, 15360, 37693, // alpha = 0.01234568 + 15357, 5558, 15359, 38438, // alpha = 0.01612497 + 15356, 6285, 15359, 39142, // alpha = 0.02040816 + 15354, 6885, 15358, 39791, // alpha = 0.02519527 + 15351, 7425, 15357, 40293, // alpha = 0.03048627 + 15348, 7939, 15356, 40849, // alpha = 0.03628118 + 15343, 8387, 15355, 41252, // alpha = 0.04258 + 15338, 8780, 15353, 41677, // alpha = 0.04938272 + 15332, 9233, 15351, 42085, // alpha = 0.05668934 + 15324, 9507, 15349, 42383, // alpha = 0.06449988 + 15316, 9820, 15347, 42723, // alpha = 0.07281432 + 15306, 10171, 15344, 43057, // alpha = 0.08163266 + 15296, 10399, 15341, 43269, // alpha = 0.09095491 + 15285, 10609, 15339, 43499, // alpha = 0.1007811 + 15274, 10832, 15336, 43745, // alpha = 0.1111111 + 15262, 11066, 15333, 44002, // alpha = 0.1219451 + 15251, 11286, 15330, 44151, // alpha = 0.1332829 + 15241, 11410, 15328, 44288, // alpha = 0.1451247 + 15232, 11535, 15326, 44429, // alpha = 0.1574704 + 15224, 11661, 15325, 44570, // alpha = 0.17032 + 15219, 11785, 15325, 44710, // alpha = 0.1836735 + 15216, 11908, 15326, 44852, // alpha = 0.1975309 + 15215, 12028, 15330, 44996, // alpha = 0.2118922 + 15217, 12145, 15334, 45103, // alpha = 0.2267574 + 15192, 12259, 15322, 45158, // alpha = 0.2421265 + 15191, 12329, 15324, 45232, // alpha = 0.2579995 + 15177, 12383, 15321, 45283, // alpha = 0.2743765 + 15176, 12435, 15324, 45352, // alpha = 0.2912573 + 15165, 12485, 15322, 45406, // alpha = 0.308642 + 15163, 12534, 15324, 45467, // alpha = 0.3265306 + 15163, 12581, 15326, 45526, // alpha = 0.3449232 + 15165, 12627, 15331, 45591, // alpha = 0.3638196 + 15167, 12672, 15333, 45653, // alpha = 0.38322 + 15170, 12715, 15336, 45718, // alpha = 0.4031242 + 15168, 12757, 15337, 45773, // alpha = 0.4235324 + 15172, 12798, 15340, 45834, // alpha = 0.4444445 + 15177, 12837, 15344, 45895, // alpha = 0.4658605 + 15182, 12876, 15347, 45958, // alpha = 0.4877803 + 15186, 12913, 15350, 46013, // alpha = 0.5102041 + 15172, 12949, 15345, 46051, // alpha = 0.5331318 + 15158, 12984, 15339, 46077, // alpha = 0.5565634 + 15162, 13018, 15343, 46105, // alpha = 0.5804989 + 15165, 13051, 15348, 46133, // alpha = 0.6049383 + 15169, 13082, 15350, 46156, // alpha = 0.6298816 + 15172, 13113, 15353, 46179, // alpha = 0.6553288 + 15162, 13143, 15349, 46193, // alpha = 0.68128 + 15164, 13171, 15353, 46214, // alpha = 0.7077349 + 15167, 13198, 15354, 46237, // alpha = 0.7346939 + 15171, 13224, 15359, 46256, // alpha = 0.7621567 + 15173, 13250, 15360, 46276, // alpha = 0.7901235 + 15174, 13274, 15361, 46296, // alpha = 0.8185941 + 15177, 13297, 15362, 46313, // alpha = 0.8475687 + 15181, 13316, 15363, 46333, // alpha = 0.8770471 + 15182, 13326, 15365, 46349, // alpha = 0.9070295 + 15186, 13336, 15366, 46365, // alpha = 0.9375157 + 15190, 13346, 15367, 46383, // alpha = 0.9685059 + 15192, 13355, 15368, 46397, // alpha = 1 + + // Cos (theta) = 0.1229529 + 15360, 154, 15360, 32931, // alpha = 0.001 + 15360, 154, 15360, 32931, // alpha = 0.001 + 15360, 154, 15360, 32931, // alpha = 0.001007811 + 15360, 486, 15360, 33281, // alpha = 0.002267574 + 15360, 1534, 15360, 34387, // alpha = 0.004031243 + 15360, 2895, 15360, 35768, // alpha = 0.006298816 + 15359, 3985, 15360, 36860, // alpha = 0.009070295 + 15358, 4863, 15359, 37728, // alpha = 0.01234568 + 15357, 5619, 15359, 38471, // alpha = 0.01612497 + 15356, 6334, 15359, 39170, // alpha = 0.02040816 + 15354, 6959, 15358, 39830, // alpha = 0.02519527 + 15351, 7479, 15357, 40322, // alpha = 0.03048627 + 15347, 8014, 15356, 40889, // alpha = 0.03628118 + 15342, 8438, 15354, 41279, // alpha = 0.04258 + 15337, 8848, 15353, 41712, // alpha = 0.04938272 + 15330, 9276, 15351, 42107, // alpha = 0.05668934 + 15323, 9561, 15348, 42411, // alpha = 0.06449988 + 15314, 9887, 15346, 42757, // alpha = 0.07281432 + 15305, 10247, 15343, 43078, // alpha = 0.08163266 + 15294, 10448, 15340, 43293, // alpha = 0.09095491 + 15283, 10666, 15337, 43527, // alpha = 0.1007811 + 15271, 10899, 15334, 43778, // alpha = 0.1111111 + 15259, 11143, 15331, 44037, // alpha = 0.1219451 + 15247, 11329, 15328, 44174, // alpha = 0.1332829 + 15236, 11458, 15325, 44314, // alpha = 0.1451247 + 15225, 11589, 15323, 44457, // alpha = 0.1574704 + 15218, 11719, 15321, 44601, // alpha = 0.17032 + 15213, 11848, 15322, 44745, // alpha = 0.1836735 + 15212, 11976, 15324, 44890, // alpha = 0.1975309 + 15215, 12101, 15329, 45039, // alpha = 0.2118922 + 15205, 12222, 15326, 45118, // alpha = 0.2267574 + 15187, 12315, 15320, 45182, // alpha = 0.2421265 + 15171, 12372, 15316, 45245, // alpha = 0.2579995 + 15167, 12428, 15318, 45311, // alpha = 0.2743765 + 15157, 12482, 15315, 45371, // alpha = 0.2912573 + 15155, 12534, 15317, 45431, // alpha = 0.308642 + 15155, 12585, 15321, 45494, // alpha = 0.3265306 + 15157, 12634, 15325, 45556, // alpha = 0.3449232 + 15161, 12682, 15329, 45624, // alpha = 0.3638196 + 15163, 12728, 15333, 45686, // alpha = 0.38322 + 15162, 12773, 15334, 45746, // alpha = 0.4031242 + 15166, 12817, 15338, 45810, // alpha = 0.4235324 + 15171, 12859, 15340, 45883, // alpha = 0.4444445 + 15178, 12900, 15345, 45942, // alpha = 0.4658605 + 15164, 12940, 15340, 45980, // alpha = 0.4877803 + 15148, 12979, 15333, 46009, // alpha = 0.5102041 + 15151, 13016, 15336, 46068, // alpha = 0.5331318 + 15157, 13053, 15342, 46104, // alpha = 0.5565634 + 15161, 13088, 15345, 46131, // alpha = 0.5804989 + 15146, 13122, 15340, 46144, // alpha = 0.6049383 + 15151, 13155, 15344, 46170, // alpha = 0.6298816 + 15155, 13186, 15347, 46195, // alpha = 0.6553288 + 15157, 13217, 15349, 46221, // alpha = 0.68128 + 15159, 13246, 15353, 46241, // alpha = 0.7077349 + 15164, 13275, 15356, 46262, // alpha = 0.7346939 + 15170, 13302, 15359, 46288, // alpha = 0.7621567 + 15174, 13320, 15362, 46307, // alpha = 0.7901235 + 15179, 13333, 15362, 46328, // alpha = 0.8185941 + 15184, 13345, 15364, 46347, // alpha = 0.8475687 + 15189, 13356, 15366, 46367, // alpha = 0.8770471 + 15181, 13367, 15365, 46378, // alpha = 0.9070295 + 15186, 13378, 15366, 46396, // alpha = 0.9375157 + 15169, 13388, 15363, 46399, // alpha = 0.9685059 + 15171, 13397, 15364, 46416, // alpha = 1 + + // Cos (theta) = 0.09297051 + 15360, 154, 15360, 32929, // alpha = 0.001 + 15360, 154, 15360, 32929, // alpha = 0.001 + 15360, 154, 15360, 32929, // alpha = 0.001007811 + 15360, 487, 15360, 33279, // alpha = 0.002267574 + 15360, 1539, 15360, 34389, // alpha = 0.004031243 + 15360, 2901, 15360, 35770, // alpha = 0.006298816 + 15359, 3991, 15360, 36866, // alpha = 0.009070295 + 15358, 4868, 15359, 37737, // alpha = 0.01234568 + 15357, 5624, 15359, 38476, // alpha = 0.01612497 + 15356, 6338, 15359, 39175, // alpha = 0.02040816 + 15354, 6965, 15358, 39837, // alpha = 0.02519527 + 15351, 7483, 15357, 40328, // alpha = 0.03048627 + 15347, 8020, 15356, 40896, // alpha = 0.03628118 + 15342, 8442, 15354, 41284, // alpha = 0.04258 + 15337, 8853, 15352, 41721, // alpha = 0.04938272 + 15330, 9280, 15350, 42113, // alpha = 0.05668934 + 15322, 9566, 15348, 42416, // alpha = 0.06449988 + 15313, 9893, 15345, 42766, // alpha = 0.07281432 + 15303, 10250, 15342, 43083, // alpha = 0.08163266 + 15292, 10452, 15339, 43300, // alpha = 0.09095491 + 15281, 10671, 15336, 43534, // alpha = 0.1007811 + 15269, 10904, 15333, 43785, // alpha = 0.1111111 + 15257, 11149, 15330, 44041, // alpha = 0.1219451 + 15245, 11333, 15327, 44177, // alpha = 0.1332829 + 15233, 11462, 15324, 44318, // alpha = 0.1451247 + 15222, 11593, 15322, 44462, // alpha = 0.1574704 + 15213, 11723, 15320, 44606, // alpha = 0.17032 + 15208, 11853, 15320, 44751, // alpha = 0.1836735 + 15207, 11981, 15322, 44899, // alpha = 0.1975309 + 15210, 12106, 15327, 45054, // alpha = 0.2118922 + 15185, 12228, 15315, 45115, // alpha = 0.2267574 + 15184, 12318, 15317, 45187, // alpha = 0.2421265 + 15166, 12375, 15312, 45252, // alpha = 0.2579995 + 15161, 12431, 15314, 45316, // alpha = 0.2743765 + 15147, 12486, 15311, 45374, // alpha = 0.2912573 + 15144, 12538, 15313, 45435, // alpha = 0.308642 + 15143, 12589, 15316, 45499, // alpha = 0.3265306 + 15142, 12638, 15318, 45560, // alpha = 0.3449232 + 15146, 12686, 15323, 45622, // alpha = 0.3638196 + 15146, 12733, 15324, 45681, // alpha = 0.38322 + 15153, 12778, 15330, 45748, // alpha = 0.4031242 + 15159, 12821, 15334, 45815, // alpha = 0.4235324 + 15168, 12864, 15341, 45889, // alpha = 0.4444445 + 15177, 12905, 15345, 45958, // alpha = 0.4658605 + 15159, 12945, 15339, 45988, // alpha = 0.4877803 + 15133, 12984, 15327, 46013, // alpha = 0.5102041 + 15137, 13021, 15331, 46072, // alpha = 0.5331318 + 15143, 13058, 15337, 46106, // alpha = 0.5565634 + 15147, 13093, 15338, 46135, // alpha = 0.5804989 + 15132, 13127, 15332, 46147, // alpha = 0.6049383 + 15138, 13160, 15336, 46173, // alpha = 0.6298816 + 15144, 13192, 15343, 46200, // alpha = 0.6553288 + 15151, 13222, 15348, 46227, // alpha = 0.68128 + 15150, 13252, 15349, 46249, // alpha = 0.7077349 + 15156, 13280, 15354, 46272, // alpha = 0.7346939 + 15162, 13308, 15358, 46294, // alpha = 0.7621567 + 15168, 13323, 15361, 46318, // alpha = 0.7901235 + 15174, 13335, 15363, 46338, // alpha = 0.8185941 + 15180, 13347, 15365, 46358, // alpha = 0.8475687 + 15185, 13359, 15366, 46379, // alpha = 0.8770471 + 15149, 13370, 15358, 46376, // alpha = 0.9070295 + 15154, 13381, 15360, 46389, // alpha = 0.9375157 + 15158, 13391, 15361, 46408, // alpha = 0.9685059 + 15159, 13400, 15363, 46423, // alpha = 1 + + // Cos (theta) = 0.06248425 + 15360, 154, 15360, 32932, // alpha = 0.001 + 15360, 154, 15360, 32932, // alpha = 0.001 + 15360, 154, 15360, 32932, // alpha = 0.001007811 + 15360, 489, 15360, 33283, // alpha = 0.002267574 + 15360, 1543, 15360, 34395, // alpha = 0.004031243 + 15360, 2905, 15360, 35777, // alpha = 0.006298816 + 15359, 3996, 15360, 36867, // alpha = 0.009070295 + 15358, 4873, 15359, 37741, // alpha = 0.01234568 + 15357, 5627, 15359, 38481, // alpha = 0.01612497 + 15356, 6341, 15359, 39177, // alpha = 0.02040816 + 15354, 6969, 15358, 39840, // alpha = 0.02519527 + 15351, 7486, 15357, 40331, // alpha = 0.03048627 + 15347, 8025, 15356, 40900, // alpha = 0.03628118 + 15342, 8445, 15354, 41287, // alpha = 0.04258 + 15336, 8857, 15352, 41724, // alpha = 0.04938272 + 15330, 9282, 15350, 42115, // alpha = 0.05668934 + 15322, 9569, 15348, 42421, // alpha = 0.06449988 + 15313, 9897, 15345, 42770, // alpha = 0.07281432 + 15303, 10252, 15342, 43086, // alpha = 0.08163266 + 15292, 10455, 15339, 43303, // alpha = 0.09095491 + 15280, 10674, 15336, 43539, // alpha = 0.1007811 + 15267, 10908, 15332, 43792, // alpha = 0.1111111 + 15253, 11153, 15329, 44044, // alpha = 0.1219451 + 15241, 11335, 15325, 44182, // alpha = 0.1332829 + 15230, 11465, 15322, 44322, // alpha = 0.1451247 + 15218, 11596, 15320, 44465, // alpha = 0.1574704 + 15207, 11727, 15318, 44611, // alpha = 0.17032 + 15202, 11857, 15317, 44755, // alpha = 0.1836735 + 15202, 11985, 15319, 44907, // alpha = 0.1975309 + 15212, 12110, 15328, 45058, // alpha = 0.2118922 + 15182, 12233, 15313, 45122, // alpha = 0.2267574 + 15183, 12320, 15318, 45193, // alpha = 0.2421265 + 15156, 12378, 15309, 45253, // alpha = 0.2579995 + 15153, 12434, 15311, 45320, // alpha = 0.2743765 + 15138, 12488, 15307, 45377, // alpha = 0.2912573 + 15131, 12541, 15307, 45440, // alpha = 0.308642 + 15129, 12592, 15310, 45500, // alpha = 0.3265306 + 15131, 12641, 15313, 45561, // alpha = 0.3449232 + 15132, 12689, 15316, 45624, // alpha = 0.3638196 + 15130, 12736, 15317, 45682, // alpha = 0.38322 + 15140, 12781, 15325, 45750, // alpha = 0.4031242 + 15152, 12824, 15333, 45827, // alpha = 0.4235324 + 15165, 12867, 15340, 45898, // alpha = 0.4444445 + 15174, 12908, 15345, 45971, // alpha = 0.4658605 + 15151, 12948, 15335, 46002, // alpha = 0.4877803 + 15119, 12987, 15318, 46009, // alpha = 0.5102041 + 15127, 13025, 15324, 46076, // alpha = 0.5331318 + 15130, 13061, 15329, 46108, // alpha = 0.5565634 + 15106, 13097, 15319, 46113, // alpha = 0.5804989 + 15113, 13131, 15326, 46143, // alpha = 0.6049383 + 15122, 13164, 15332, 46171, // alpha = 0.6298816 + 15129, 13196, 15339, 46201, // alpha = 0.6553288 + 15132, 13226, 15343, 46227, // alpha = 0.68128 + 15141, 13256, 15349, 46253, // alpha = 0.7077349 + 15144, 13284, 15351, 46276, // alpha = 0.7346939 + 15152, 13312, 15356, 46301, // alpha = 0.7621567 + 15161, 13325, 15361, 46324, // alpha = 0.7901235 + 15166, 13337, 15362, 46345, // alpha = 0.8185941 + 15175, 13350, 15364, 46367, // alpha = 0.8475687 + 15166, 13361, 15362, 46381, // alpha = 0.8770471 + 15142, 13372, 15353, 46379, // alpha = 0.9070295 + 15148, 13383, 15357, 46396, // alpha = 0.9375157 + 15154, 13393, 15361, 46414, // alpha = 0.9685059 + 15112, 13402, 15341, 46419, // alpha = 1 + + // Cos (theta) = 0.03149408 + 15360, 155, 15360, 32932, // alpha = 0.001 + 15360, 155, 15360, 32932, // alpha = 0.001 + 15360, 155, 15360, 32932, // alpha = 0.001007811 + 15360, 489, 15360, 33285, // alpha = 0.002267574 + 15360, 1545, 15360, 34398, // alpha = 0.004031243 + 15360, 2908, 15360, 35781, // alpha = 0.006298816 + 15359, 3999, 15360, 36869, // alpha = 0.009070295 + 15358, 4875, 15359, 37745, // alpha = 0.01234568 + 15357, 5629, 15359, 38483, // alpha = 0.01612497 + 15356, 6343, 15359, 39179, // alpha = 0.02040816 + 15354, 6972, 15358, 39845, // alpha = 0.02519527 + 15351, 7488, 15357, 40333, // alpha = 0.03048627 + 15347, 8027, 15356, 40903, // alpha = 0.03628118 + 15342, 8447, 15354, 41289, // alpha = 0.04258 + 15336, 8859, 15352, 41727, // alpha = 0.04938272 + 15330, 9284, 15350, 42117, // alpha = 0.05668934 + 15322, 9571, 15348, 42423, // alpha = 0.06449988 + 15313, 9899, 15345, 42772, // alpha = 0.07281432 + 15303, 10254, 15342, 43088, // alpha = 0.08163266 + 15291, 10457, 15339, 43305, // alpha = 0.09095491 + 15279, 10676, 15336, 43542, // alpha = 0.1007811 + 15267, 10910, 15333, 43794, // alpha = 0.1111111 + 15254, 11156, 15329, 44046, // alpha = 0.1219451 + 15240, 11337, 15326, 44184, // alpha = 0.1332829 + 15226, 11467, 15323, 44325, // alpha = 0.1451247 + 15212, 11598, 15320, 44468, // alpha = 0.1574704 + 15198, 11729, 15315, 44612, // alpha = 0.17032 + 15189, 11859, 15313, 44756, // alpha = 0.1836735 + 15191, 11987, 15314, 44903, // alpha = 0.1975309 + 15209, 12113, 15324, 45062, // alpha = 0.2118922 + 15178, 12235, 15310, 45122, // alpha = 0.2267574 + 15188, 12321, 15318, 45201, // alpha = 0.2421265 + 15155, 12379, 15307, 45256, // alpha = 0.2579995 + 15158, 12435, 15312, 45325, // alpha = 0.2743765 + 15133, 12490, 15305, 45382, // alpha = 0.2912573 + 15124, 12543, 15305, 45441, // alpha = 0.308642 + 15118, 12594, 15307, 45503, // alpha = 0.3265306 + 15116, 12643, 15308, 45564, // alpha = 0.3449232 + 15100, 12691, 15305, 45616, // alpha = 0.3638196 + 15105, 12738, 15307, 45676, // alpha = 0.38322 + 15111, 12783, 15311, 45738, // alpha = 0.4031242 + 15134, 12826, 15324, 45812, // alpha = 0.4235324 + 15158, 12869, 15337, 45901, // alpha = 0.4444445 + 15181, 12910, 15348, 45987, // alpha = 0.4658605 + 15160, 12950, 15339, 46023, // alpha = 0.4877803 + 15103, 12989, 15312, 46009, // alpha = 0.5102041 + 15119, 13027, 15321, 46081, // alpha = 0.5331318 + 15135, 13063, 15334, 46120, // alpha = 0.5565634 + 15083, 13099, 15309, 46109, // alpha = 0.5804989 + 15078, 13133, 15309, 46132, // alpha = 0.6049383 + 15081, 13166, 15313, 46155, // alpha = 0.6298816 + 15093, 13198, 15320, 46186, // alpha = 0.6553288 + 15105, 13229, 15327, 46216, // alpha = 0.68128 + 15118, 13258, 15335, 46247, // alpha = 0.7077349 + 15131, 13287, 15345, 46277, // alpha = 0.7346939 + 15144, 13313, 15353, 46305, // alpha = 0.7621567 + 15157, 13326, 15360, 46331, // alpha = 0.7901235 + 15169, 13339, 15363, 46356, // alpha = 0.8185941 + 15181, 13351, 15366, 46379, // alpha = 0.8475687 + 15168, 13362, 15362, 46384, // alpha = 0.8770471 + 15137, 13373, 15350, 46386, // alpha = 0.9070295 + 15146, 13384, 15357, 46409, // alpha = 0.9375157 + 15156, 13394, 15363, 46423, // alpha = 0.9685059 + 15083, 13404, 15321, 46396, // alpha = 1 + + // Cos (theta) = 0.0003754022 + 15360, 155, 15360, 32932, // alpha = 0.001 + 15360, 155, 15360, 32932, // alpha = 0.001 + 15360, 155, 15360, 32932, // alpha = 0.001007811 + 15360, 490, 15360, 33285, // alpha = 0.002267574 + 15360, 1546, 15360, 34398, // alpha = 0.004031243 + 15360, 2909, 15360, 35781, // alpha = 0.006298816 + 15359, 4000, 15360, 36870, // alpha = 0.009070295 + 15358, 4876, 15359, 37746, // alpha = 0.01234568 + 15357, 5630, 15359, 38485, // alpha = 0.01612497 + 15356, 6343, 15359, 39179, // alpha = 0.02040816 + 15354, 6973, 15358, 39846, // alpha = 0.02519527 + 15351, 7489, 15357, 40333, // alpha = 0.03048627 + 15347, 8028, 15356, 40904, // alpha = 0.03628118 + 15342, 8448, 15354, 41290, // alpha = 0.04258 + 15336, 8860, 15352, 41729, // alpha = 0.04938272 + 15330, 9284, 15350, 42117, // alpha = 0.05668934 + 15322, 9572, 15348, 42424, // alpha = 0.06449988 + 15313, 9900, 15345, 42773, // alpha = 0.07281432 + 15303, 10254, 15342, 43089, // alpha = 0.08163266 + 15291, 10457, 15339, 43306, // alpha = 0.09095491 + 15279, 10677, 15336, 43543, // alpha = 0.1007811 + 15267, 10911, 15332, 43795, // alpha = 0.1111111 + 15254, 11157, 15329, 44047, // alpha = 0.1219451 + 15240, 11337, 15326, 44184, // alpha = 0.1332829 + 15226, 11467, 15323, 44326, // alpha = 0.1451247 + 15212, 11598, 15320, 44468, // alpha = 0.1574704 + 15199, 11729, 15317, 44612, // alpha = 0.17032 + 15185, 11860, 15315, 44756, // alpha = 0.1836735 + 15172, 11988, 15312, 44898, // alpha = 0.1975309 + 15166, 12114, 15310, 45040, // alpha = 0.2118922 + 15164, 12236, 15304, 45121, // alpha = 0.2267574 + 15167, 12322, 15307, 45195, // alpha = 0.2421265 + 15148, 12380, 15301, 45257, // alpha = 0.2579995 + 15138, 12436, 15300, 45321, // alpha = 0.2743765 + 15131, 12490, 15303, 45382, // alpha = 0.2912573 + 15122, 12543, 15301, 45446, // alpha = 0.308642 + 15114, 12594, 15301, 45503, // alpha = 0.3265306 + 15104, 12644, 15300, 45562, // alpha = 0.3449232 + 15112, 12692, 15309, 45624, // alpha = 0.3638196 + 15089, 12738, 15305, 45668, // alpha = 0.38322 + 15081, 12783, 15305, 45721, // alpha = 0.4031242 + 15074, 12827, 15305, 45772, // alpha = 0.4235324 + 15116, 12870, 15322, 45863, // alpha = 0.4444445 + 15162, 12911, 15347, 45969, // alpha = 0.4658605 + 15134, 12951, 15327, 46003, // alpha = 0.4877803 + 15075, 12990, 15297, 45991, // alpha = 0.5102041 + 15068, 13028, 15296, 46037, // alpha = 0.5331318 + 15104, 13064, 15312, 46104, // alpha = 0.5565634 + 15070, 13100, 15297, 46111, // alpha = 0.5804989 + 15064, 13134, 15303, 46129, // alpha = 0.6049383 + 15060, 13167, 15305, 46151, // alpha = 0.6298816 + 15055, 13199, 15306, 46169, // alpha = 0.6553288 + 15050, 13229, 15306, 46189, // alpha = 0.68128 + 15053, 13259, 15311, 46213, // alpha = 0.7077349 + 15077, 13288, 15323, 46251, // alpha = 0.7346939 + 15101, 13313, 15338, 46288, // alpha = 0.7621567 + 15124, 13327, 15354, 46320, // alpha = 0.7901235 + 15111, 13339, 15345, 46330, // alpha = 0.8185941 + 15131, 13351, 15358, 46359, // alpha = 0.8475687 + 15151, 13363, 15355, 46375, // alpha = 0.8770471 + 15099, 13374, 15332, 46370, // alpha = 0.9070295 + 15116, 13384, 15343, 46397, // alpha = 0.9375157 + 15132, 13394, 15355, 46410, // alpha = 0.9685059 + 15055, 13404, 15307, 46389, // alpha = 1 + }; + + // NOTE: Formerly, we needed to also export and create a table for the BRDF's amplitude factor + fresnel coefficient + // but it turns out these 2 factors are actually already precomputed and available in the FGD table corresponding + // to the BRDF_OrenNayar BRDF, therefore they are no longer exported... + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_OrenNayar.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_OrenNayar.cs.meta new file mode 100644 index 00000000..0005a5f4 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_OrenNayar.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0119dd4c2903cc34f9ed4e249d71c6f7 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_OrenNayar.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Ward.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Ward.cs new file mode 100644 index 00000000..08e46fa0 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Ward.cs @@ -0,0 +1,4248 @@ +using UnityEngine; +using System; + +namespace BadDog.Rendering.AreaLight +{ + public partial class LTCAreaLight + { + // [GENERATED CONTENT 31 10月 2025 11:29:23] + // Table contains 3x3 matrix coefficients of M^-1 for the fitting of the BRDF_Ward BRDF using the LTC technique + // Only the 0,2,4,6 of the 3x3 coefficients are emitted, and they are encoded into FP16 + // From "Real-Time Polygonal-Light Shading with Linearly Transformed Cosines" 2016 (https://eheitzresearch.wordpress.com/415-2/) + // + // The table is accessed via LTCAreaLight.s_LtcMatrixData_BRDF_Ward[ + 64 * ] // Theta values are along the Y axis, Roughness values are along the X axis + // • roughness = ( / 63 )^2 (the table is indexed by perceptual roughness) + // • cosTheta = 1 - ( / 63 )^2 + // + public static ushort[] s_LtcMatrixData_BRDF_Ward = new ushort[64 * 64 * 4] + { + // Cos (theta) = 1 + 23591, 0, 23591, 0, // alpha = 0.001 + 23591, 0, 23591, 0, // alpha = 0.001 + 23591, 0, 23591, 0, // alpha = 0.001007811 + 23412, 0, 23412, 0, // alpha = 0.002267574 + 22577, 0, 22577, 0, // alpha = 0.004031243 + 21849, 0, 21849, 0, // alpha = 0.006298816 + 21362, 0, 21362, 0, // alpha = 0.009070295 + 20856, 0, 20856, 0, // alpha = 0.01234568 + 20527, 0, 20527, 0, // alpha = 0.01612497 + 20127, 0, 20127, 0, // alpha = 0.02040816 + 19805, 0, 19805, 0, // alpha = 0.02519527 + 19566, 0, 19566, 0, // alpha = 0.03048627 + 19315, 0, 19315, 0, // alpha = 0.03628118 + 19034, 0, 19034, 0, // alpha = 0.04258 + 18810, 0, 18810, 0, // alpha = 0.04938272 + 18630, 0, 18630, 0, // alpha = 0.05668934 + 18482, 0, 18482, 0, // alpha = 0.06449988 + 18288, 0, 18288, 0, // alpha = 0.07281432 + 18083, 0, 18083, 0, // alpha = 0.08163266 + 17910, 0, 17910, 0, // alpha = 0.09095491 + 17763, 0, 17763, 0, // alpha = 0.1007811 + 17636, 0, 17636, 0, // alpha = 0.1111111 + 17526, 0, 17526, 0, // alpha = 0.1219451 + 17431, 0, 17431, 0, // alpha = 0.1332829 + 17286, 0, 17286, 0, // alpha = 0.1451247 + 17139, 0, 17139, 0, // alpha = 0.1574704 + 17008, 0, 17008, 0, // alpha = 0.17032 + 16892, 0, 16892, 0, // alpha = 0.1836735 + 16789, 0, 16789, 0, // alpha = 0.1975309 + 16696, 0, 16696, 0, // alpha = 0.2118922 + 16612, 0, 16612, 0, // alpha = 0.2267574 + 16537, 0, 16537, 0, // alpha = 0.2421265 + 16469, 0, 16469, 0, // alpha = 0.2579995 + 16408, 0, 16408, 0, // alpha = 0.2743765 + 16319, 0, 16319, 0, // alpha = 0.2912573 + 16218, 0, 16218, 0, // alpha = 0.308642 + 16125, 0, 16125, 0, // alpha = 0.3265306 + 16040, 0, 16040, 0, // alpha = 0.3449232 + 15961, 0, 15961, 0, // alpha = 0.3638196 + 15890, 0, 15890, 0, // alpha = 0.38322 + 15826, 0, 15826, 0, // alpha = 0.4031242 + 15765, 0, 15765, 0, // alpha = 0.4235324 + 15710, 0, 15710, 0, // alpha = 0.4444445 + 15660, 0, 15660, 0, // alpha = 0.4658605 + 15613, 0, 15613, 0, // alpha = 0.4877803 + 15569, 0, 15569, 0, // alpha = 0.5102041 + 15528, 0, 15528, 0, // alpha = 0.5331318 + 15491, 0, 15491, 0, // alpha = 0.5565634 + 15456, 0, 15456, 0, // alpha = 0.5804989 + 15425, 0, 15425, 0, // alpha = 0.6049383 + 15397, 0, 15397, 0, // alpha = 0.6298816 + 15371, 0, 15371, 0, // alpha = 0.6553288 + 15334, 0, 15334, 0, // alpha = 0.68128 + 15290, 0, 15290, 0, // alpha = 0.7077349 + 15250, 0, 15250, 0, // alpha = 0.7346939 + 15213, 0, 15213, 0, // alpha = 0.7621567 + 15178, 0, 15178, 0, // alpha = 0.7901235 + 15146, 0, 15146, 0, // alpha = 0.8185941 + 15117, 0, 15117, 0, // alpha = 0.8475687 + 15090, 0, 15090, 0, // alpha = 0.8770471 + 15064, 0, 15064, 0, // alpha = 0.9070295 + 15040, 0, 15040, 0, // alpha = 0.9375157 + 15019, 0, 15019, 0, // alpha = 0.9685059 + 14999, 0, 14999, 0, // alpha = 1 + + // Cos (theta) = 0.9997481 + 23591, 42431, 23591, 17911, // alpha = 0.001 + 23591, 42431, 23591, 17911, // alpha = 0.001 + 23591, 42431, 23591, 17911, // alpha = 0.001007811 + 23412, 42431, 23413, 17755, // alpha = 0.002267574 + 22577, 42431, 22577, 16902, // alpha = 0.004031243 + 21849, 42431, 21850, 16303, // alpha = 0.006298816 + 21362, 42431, 21363, 15705, // alpha = 0.009070295 + 20855, 42431, 20856, 15323, // alpha = 0.01234568 + 20529, 42431, 20529, 14854, // alpha = 0.01612497 + 20126, 42431, 20127, 14528, // alpha = 0.02040816 + 19804, 42430, 19805, 14259, // alpha = 0.02519527 + 19566, 42430, 19567, 13917, // alpha = 0.03048627 + 19315, 42429, 19316, 13657, // alpha = 0.03628118 + 19033, 42429, 19035, 13455, // alpha = 0.04258 + 18810, 42428, 18811, 13279, // alpha = 0.04938272 + 18630, 42427, 18631, 13018, // alpha = 0.05668934 + 18482, 42425, 18483, 12807, // alpha = 0.06449988 + 18289, 42424, 18289, 12634, // alpha = 0.07281432 + 18083, 42422, 18085, 12483, // alpha = 0.08163266 + 17910, 42419, 17912, 12364, // alpha = 0.09095491 + 17763, 42416, 17764, 12216, // alpha = 0.1007811 + 17636, 42413, 17637, 12034, // alpha = 0.1111111 + 17526, 42409, 17527, 11878, // alpha = 0.1219451 + 17431, 42404, 17431, 11741, // alpha = 0.1332829 + 17286, 42399, 17288, 11624, // alpha = 0.1451247 + 17139, 42393, 17139, 11510, // alpha = 0.1574704 + 17008, 42386, 17009, 11416, // alpha = 0.17032 + 16893, 42378, 16892, 11336, // alpha = 0.1836735 + 16788, 42369, 16789, 11265, // alpha = 0.1975309 + 16695, 42359, 16696, 11109, // alpha = 0.2118922 + 16611, 42347, 16613, 10990, // alpha = 0.2267574 + 16538, 42334, 16538, 10886, // alpha = 0.2421265 + 16469, 42318, 16470, 10780, // alpha = 0.2579995 + 16407, 42301, 16408, 10688, // alpha = 0.2743765 + 16319, 42282, 16320, 10601, // alpha = 0.2912573 + 16217, 42260, 16219, 10524, // alpha = 0.308642 + 16124, 42235, 16125, 10453, // alpha = 0.3265306 + 16039, 42207, 16040, 10383, // alpha = 0.3449232 + 15962, 42176, 15963, 10307, // alpha = 0.3638196 + 15890, 42140, 15891, 10249, // alpha = 0.38322 + 15825, 42100, 15826, 10149, // alpha = 0.4031242 + 15766, 42055, 15766, 10044, // alpha = 0.4235324 + 15711, 42004, 15711, 9925, // alpha = 0.4444445 + 15659, 41912, 15660, 9815, // alpha = 0.4658605 + 15613, 41828, 15613, 9699, // alpha = 0.4877803 + 15569, 41778, 15569, 9623, // alpha = 0.5102041 + 15528, 41635, 15528, 9518, // alpha = 0.5331318 + 15491, 41475, 15491, 9418, // alpha = 0.5565634 + 15456, 41433, 15457, 9332, // alpha = 0.5804989 + 15425, 41266, 15425, 9239, // alpha = 0.6049383 + 15397, 41174, 15397, 9093, // alpha = 0.6298816 + 15371, 41023, 15371, 8923, // alpha = 0.6553288 + 15334, 40945, 15334, 8787, // alpha = 0.68128 + 15291, 40630, 15291, 8613, // alpha = 0.7077349 + 15250, 40434, 15250, 8448, // alpha = 0.7346939 + 15213, 40257, 15213, 8329, // alpha = 0.7621567 + 15178, 40000, 15178, 8157, // alpha = 0.7901235 + 15146, 39609, 15147, 7895, // alpha = 0.8185941 + 15117, 39309, 15117, 7643, // alpha = 0.8475687 + 15089, 38943, 15090, 7404, // alpha = 0.8770471 + 15064, 38137, 15064, 7183, // alpha = 0.9070295 + 15041, 36749, 15041, 6754, // alpha = 0.9375157 + 15019, 1574, 15019, 6270, // alpha = 0.9685059 + 14999, 4334, 14999, 5886, // alpha = 1 + + // Cos (theta) = 0.9989922 + 23591, 43456, 23593, 18936, // alpha = 0.001 + 23591, 43456, 23593, 18936, // alpha = 0.001 + 23591, 43456, 23593, 18936, // alpha = 0.001007811 + 23411, 43456, 23415, 18779, // alpha = 0.002267574 + 22577, 43456, 22578, 17926, // alpha = 0.004031243 + 21849, 43456, 21851, 17328, // alpha = 0.006298816 + 21361, 43456, 21364, 16729, // alpha = 0.009070295 + 20858, 43456, 20859, 16352, // alpha = 0.01234568 + 20529, 43456, 20532, 15878, // alpha = 0.01612497 + 20127, 43456, 20131, 15555, // alpha = 0.02040816 + 19805, 43455, 19808, 15286, // alpha = 0.02519527 + 19567, 43455, 19570, 14944, // alpha = 0.03048627 + 19316, 43454, 19321, 14683, // alpha = 0.03628118 + 19034, 43454, 19037, 14481, // alpha = 0.04258 + 18811, 43453, 18813, 14304, // alpha = 0.04938272 + 18630, 43452, 18633, 14046, // alpha = 0.05668934 + 18483, 43450, 18485, 13834, // alpha = 0.06449988 + 18289, 43448, 18293, 13657, // alpha = 0.07281432 + 18085, 43446, 18088, 13510, // alpha = 0.08163266 + 17911, 43444, 17914, 13385, // alpha = 0.09095491 + 17764, 43441, 17766, 13244, // alpha = 0.1007811 + 17637, 43438, 17640, 13064, // alpha = 0.1111111 + 17527, 43434, 17530, 12903, // alpha = 0.1219451 + 17431, 43429, 17434, 12765, // alpha = 0.1332829 + 17287, 43424, 17290, 12644, // alpha = 0.1451247 + 17139, 43418, 17143, 12540, // alpha = 0.1574704 + 17009, 43411, 17012, 12442, // alpha = 0.17032 + 16892, 43403, 16896, 12361, // alpha = 0.1836735 + 16789, 43394, 16792, 12283, // alpha = 0.1975309 + 16696, 43383, 16699, 12147, // alpha = 0.2118922 + 16613, 43371, 16616, 12024, // alpha = 0.2267574 + 16537, 43358, 16539, 11906, // alpha = 0.2421265 + 16469, 43343, 16472, 11801, // alpha = 0.2579995 + 16408, 43326, 16410, 11713, // alpha = 0.2743765 + 16320, 43306, 16323, 11625, // alpha = 0.2912573 + 16219, 43284, 16221, 11548, // alpha = 0.308642 + 16126, 43259, 16128, 11476, // alpha = 0.3265306 + 16040, 43231, 16043, 11403, // alpha = 0.3449232 + 15963, 43200, 15965, 11336, // alpha = 0.3638196 + 15891, 43164, 15893, 11276, // alpha = 0.38322 + 15826, 43124, 15828, 11176, // alpha = 0.4031242 + 15766, 43079, 15768, 11053, // alpha = 0.4235324 + 15711, 43028, 15713, 10934, // alpha = 0.4444445 + 15660, 42935, 15662, 10838, // alpha = 0.4658605 + 15613, 42861, 15614, 10739, // alpha = 0.4877803 + 15569, 42799, 15571, 10644, // alpha = 0.5102041 + 15529, 42659, 15530, 10538, // alpha = 0.5331318 + 15491, 42519, 15492, 10442, // alpha = 0.5565634 + 15457, 42429, 15458, 10354, // alpha = 0.5804989 + 15425, 42299, 15426, 10263, // alpha = 0.6049383 + 15397, 42185, 15398, 10122, // alpha = 0.6298816 + 15371, 42074, 15372, 9943, // alpha = 0.6553288 + 15334, 41907, 15335, 9793, // alpha = 0.68128 + 15291, 41699, 15291, 9643, // alpha = 0.7077349 + 15250, 41471, 15251, 9486, // alpha = 0.7346939 + 15213, 41232, 15213, 9337, // alpha = 0.7621567 + 15179, 41040, 15180, 9176, // alpha = 0.7901235 + 15146, 40722, 15147, 8939, // alpha = 0.8185941 + 15117, 40300, 15117, 8658, // alpha = 0.8475687 + 15090, 39872, 15090, 8422, // alpha = 0.8770471 + 15064, 39182, 15064, 8152, // alpha = 0.9070295 + 15041, 38096, 15041, 7779, // alpha = 0.9375157 + 15019, 2372, 15019, 7318, // alpha = 0.9685059 + 14999, 5603, 14999, 6869, // alpha = 1 + + // Cos (theta) = 0.9977324 + 23590, 44113, 23595, 19578, // alpha = 0.001 + 23590, 44113, 23595, 19578, // alpha = 0.001 + 23590, 44113, 23594, 19578, // alpha = 0.001007811 + 23410, 44113, 23418, 19460, // alpha = 0.002267574 + 22576, 44113, 22581, 18565, // alpha = 0.004031243 + 21853, 44113, 21862, 17866, // alpha = 0.006298816 + 21366, 44113, 21374, 17415, // alpha = 0.009070295 + 20857, 44113, 20862, 16872, // alpha = 0.01234568 + 20529, 44113, 20535, 16518, // alpha = 0.01612497 + 20129, 44113, 20135, 16168, // alpha = 0.02040816 + 19806, 44113, 19812, 15819, // alpha = 0.02519527 + 19568, 44112, 19573, 15562, // alpha = 0.03048627 + 19317, 44112, 19326, 15366, // alpha = 0.03628118 + 19035, 44111, 19043, 15068, // alpha = 0.04258 + 18812, 44111, 18818, 14826, // alpha = 0.04938272 + 18631, 44110, 18637, 14631, // alpha = 0.05668934 + 18483, 44109, 18488, 14472, // alpha = 0.06449988 + 18291, 44107, 18298, 14340, // alpha = 0.07281432 + 18086, 44106, 18093, 14125, // alpha = 0.08163266 + 17912, 44104, 17919, 13935, // alpha = 0.09095491 + 17765, 44102, 17771, 13776, // alpha = 0.1007811 + 17638, 44099, 17643, 13640, // alpha = 0.1111111 + 17528, 44096, 17533, 13522, // alpha = 0.1219451 + 17432, 44093, 17437, 13417, // alpha = 0.1332829 + 17289, 44089, 17296, 13326, // alpha = 0.1451247 + 17141, 44084, 17149, 13180, // alpha = 0.1574704 + 17010, 44079, 17017, 13038, // alpha = 0.17032 + 16894, 44073, 16900, 12912, // alpha = 0.1836735 + 16790, 44066, 16796, 12799, // alpha = 0.1975309 + 16697, 44058, 16703, 12692, // alpha = 0.2118922 + 16613, 44049, 16619, 12602, // alpha = 0.2267574 + 16538, 44039, 16543, 12515, // alpha = 0.2421265 + 16470, 44024, 16475, 12439, // alpha = 0.2579995 + 16409, 43998, 16413, 12370, // alpha = 0.2743765 + 16321, 43968, 16330, 12305, // alpha = 0.2912573 + 16219, 43935, 16226, 12207, // alpha = 0.308642 + 16127, 43898, 16132, 12091, // alpha = 0.3265306 + 16042, 43856, 16048, 11987, // alpha = 0.3449232 + 15963, 43808, 15969, 11888, // alpha = 0.3638196 + 15893, 43754, 15897, 11793, // alpha = 0.38322 + 15827, 43694, 15832, 11705, // alpha = 0.4031242 + 15767, 43626, 15771, 11621, // alpha = 0.4235324 + 15712, 43550, 15716, 11535, // alpha = 0.4444445 + 15660, 43471, 15664, 11455, // alpha = 0.4658605 + 15613, 43412, 15617, 11381, // alpha = 0.4877803 + 15570, 43350, 15573, 11310, // alpha = 0.5102041 + 15530, 43257, 15532, 11204, // alpha = 0.5331318 + 15492, 43164, 15494, 11054, // alpha = 0.5565634 + 15457, 43078, 15459, 10925, // alpha = 0.5804989 + 15426, 42987, 15428, 10795, // alpha = 0.6049383 + 15397, 42790, 15399, 10654, // alpha = 0.6298816 + 15372, 42628, 15373, 10547, // alpha = 0.6553288 + 15335, 42447, 15337, 10411, // alpha = 0.68128 + 15291, 42277, 15293, 10293, // alpha = 0.7077349 + 15251, 42107, 15252, 10125, // alpha = 0.7346939 + 15214, 41923, 15215, 9911, // alpha = 0.7621567 + 15179, 41589, 15180, 9700, // alpha = 0.7901235 + 15147, 41271, 15148, 9512, // alpha = 0.8185941 + 15118, 40988, 15118, 9324, // alpha = 0.8475687 + 15091, 40451, 15091, 9065, // alpha = 0.8770471 + 15065, 39838, 15065, 8702, // alpha = 0.9070295 + 15041, 38623, 15041, 8392, // alpha = 0.9375157 + 15020, 2707, 15019, 7964, // alpha = 0.9685059 + 14999, 6181, 14999, 7341, // alpha = 1 + + // Cos (theta) = 0.9959688 + 23589, 44484, 23598, 19961, // alpha = 0.001 + 23589, 44484, 23598, 19961, // alpha = 0.001 + 23589, 44484, 23598, 19961, // alpha = 0.001007811 + 23408, 44484, 23423, 19804, // alpha = 0.002267574 + 22579, 44484, 22586, 18957, // alpha = 0.004031243 + 21853, 44484, 21869, 18362, // alpha = 0.006298816 + 21366, 44483, 21380, 17760, // alpha = 0.009070295 + 20863, 44483, 20869, 17387, // alpha = 0.01234568 + 20530, 44483, 20538, 16908, // alpha = 0.01612497 + 20131, 44483, 20144, 16584, // alpha = 0.02040816 + 19808, 44483, 19818, 16319, // alpha = 0.02519527 + 19569, 44482, 19578, 15974, // alpha = 0.03048627 + 19320, 44482, 19335, 15713, // alpha = 0.03628118 + 19037, 44481, 19050, 15510, // alpha = 0.04258 + 18814, 44480, 18824, 15337, // alpha = 0.04938272 + 18632, 44479, 18642, 15075, // alpha = 0.05668934 + 18485, 44477, 18493, 14863, // alpha = 0.06449988 + 18292, 44476, 18308, 14686, // alpha = 0.07281432 + 18087, 44474, 18101, 14539, // alpha = 0.08163266 + 17915, 44471, 17926, 14414, // alpha = 0.09095491 + 17766, 44468, 17777, 14277, // alpha = 0.1007811 + 17640, 44465, 17649, 14096, // alpha = 0.1111111 + 17529, 44461, 17538, 13935, // alpha = 0.1219451 + 17433, 44456, 17441, 13798, // alpha = 0.1332829 + 17290, 44451, 17305, 13676, // alpha = 0.1451247 + 17142, 44445, 17155, 13567, // alpha = 0.1574704 + 17011, 44438, 17024, 13471, // alpha = 0.17032 + 16895, 44429, 16907, 13388, // alpha = 0.1836735 + 16791, 44420, 16802, 13309, // alpha = 0.1975309 + 16699, 44410, 16708, 13173, // alpha = 0.2118922 + 16615, 44398, 16624, 13055, // alpha = 0.2267574 + 16539, 44384, 16548, 12940, // alpha = 0.2421265 + 16471, 44369, 16479, 12838, // alpha = 0.2579995 + 16409, 44351, 16417, 12742, // alpha = 0.2743765 + 16323, 44332, 16337, 12656, // alpha = 0.2912573 + 16221, 44310, 16234, 12574, // alpha = 0.308642 + 16128, 44284, 16139, 12504, // alpha = 0.3265306 + 16043, 44256, 16053, 12431, // alpha = 0.3449232 + 15965, 44224, 15974, 12364, // alpha = 0.3638196 + 15895, 44188, 15904, 12303, // alpha = 0.38322 + 15828, 44148, 15837, 12199, // alpha = 0.4031242 + 15769, 44103, 15776, 12088, // alpha = 0.4235324 + 15713, 44052, 15720, 11971, // alpha = 0.4444445 + 15662, 43976, 15668, 11866, // alpha = 0.4658605 + 15614, 43889, 15620, 11766, // alpha = 0.4877803 + 15571, 43794, 15576, 11667, // alpha = 0.5102041 + 15530, 43687, 15535, 11570, // alpha = 0.5331318 + 15493, 43564, 15497, 11473, // alpha = 0.5565634 + 15458, 43441, 15462, 11377, // alpha = 0.5804989 + 15427, 43331, 15430, 11293, // alpha = 0.6049383 + 15398, 43214, 15401, 11141, // alpha = 0.6298816 + 15372, 43091, 15374, 10971, // alpha = 0.6553288 + 15336, 42957, 15340, 10816, // alpha = 0.68128 + 15293, 42719, 15296, 10665, // alpha = 0.7077349 + 15252, 42501, 15254, 10510, // alpha = 0.7346939 + 15214, 42274, 15217, 10365, // alpha = 0.7621567 + 15180, 42065, 15182, 10209, // alpha = 0.7901235 + 15148, 41750, 15149, 9954, // alpha = 0.8185941 + 15118, 41342, 15119, 9704, // alpha = 0.8475687 + 15091, 40952, 15091, 9453, // alpha = 0.8770471 + 15066, 40231, 15066, 9226, // alpha = 0.9070295 + 15042, 39128, 15042, 8804, // alpha = 0.9375157 + 15020, 2842, 15019, 8380, // alpha = 0.9685059 + 14999, 6525, 14999, 7827, // alpha = 1 + + // Cos (theta) = 0.9937012 + 23588, 44856, 23601, 20345, // alpha = 0.001 + 23588, 44856, 23601, 20345, // alpha = 0.001 + 23588, 44856, 23601, 20344, // alpha = 0.001007811 + 23406, 44856, 23430, 20148, // alpha = 0.002267574 + 22578, 44856, 22594, 19347, // alpha = 0.004031243 + 21858, 44856, 21876, 18651, // alpha = 0.006298816 + 21368, 44856, 21391, 18109, // alpha = 0.009070295 + 20862, 44855, 20878, 17652, // alpha = 0.01234568 + 20531, 44855, 20546, 17300, // alpha = 0.01612497 + 20132, 44855, 20152, 16894, // alpha = 0.02040816 + 19809, 44854, 19827, 16602, // alpha = 0.02519527 + 19571, 44854, 19585, 16388, // alpha = 0.03048627 + 19322, 44853, 19346, 16063, // alpha = 0.03628118 + 19039, 44852, 19060, 15807, // alpha = 0.04258 + 18814, 44851, 18833, 15605, // alpha = 0.04938272 + 18634, 44850, 18649, 15442, // alpha = 0.05668934 + 18486, 44848, 18499, 15257, // alpha = 0.06449988 + 18295, 44846, 18319, 15035, // alpha = 0.07281432 + 18091, 44843, 18110, 14850, // alpha = 0.08163266 + 17915, 44840, 17935, 14692, // alpha = 0.09095491 + 17768, 44836, 17786, 14559, // alpha = 0.1007811 + 17641, 44832, 17657, 14445, // alpha = 0.1111111 + 17530, 44827, 17545, 14344, // alpha = 0.1219451 + 17434, 44821, 17447, 14179, // alpha = 0.1332829 + 17293, 44814, 17318, 14027, // alpha = 0.1451247 + 17146, 44806, 17167, 13892, // alpha = 0.1574704 + 17013, 44797, 17034, 13772, // alpha = 0.17032 + 16897, 44787, 16916, 13667, // alpha = 0.1836735 + 16793, 44776, 16810, 13570, // alpha = 0.1975309 + 16701, 44762, 16716, 13485, // alpha = 0.2118922 + 16617, 44747, 16631, 13408, // alpha = 0.2267574 + 16541, 44730, 16555, 13338, // alpha = 0.2421265 + 16472, 44711, 16485, 13234, // alpha = 0.2579995 + 16411, 44689, 16423, 13119, // alpha = 0.2743765 + 16326, 44664, 16348, 13010, // alpha = 0.2912573 + 16225, 44636, 16244, 12909, // alpha = 0.308642 + 16131, 44605, 16149, 12817, // alpha = 0.3265306 + 16045, 44569, 16062, 12726, // alpha = 0.3449232 + 15967, 44529, 15982, 12644, // alpha = 0.3638196 + 15896, 44484, 15910, 12565, // alpha = 0.38322 + 15830, 44433, 15843, 12491, // alpha = 0.4031242 + 15770, 44376, 15782, 12420, // alpha = 0.4235324 + 15715, 44314, 15725, 12350, // alpha = 0.4444445 + 15663, 44257, 15673, 12279, // alpha = 0.4658605 + 15616, 44199, 15624, 12153, // alpha = 0.4877803 + 15572, 44135, 15580, 12027, // alpha = 0.5102041 + 15532, 44071, 15538, 11907, // alpha = 0.5331318 + 15494, 43964, 15500, 11785, // alpha = 0.5565634 + 15459, 43812, 15464, 11671, // alpha = 0.5804989 + 15428, 43664, 15432, 11556, // alpha = 0.6049383 + 15399, 43525, 15403, 11449, // alpha = 0.6298816 + 15373, 43373, 15376, 11341, // alpha = 0.6553288 + 15338, 43229, 15343, 11217, // alpha = 0.68128 + 15294, 43086, 15299, 11029, // alpha = 0.7077349 + 15254, 42889, 15257, 10840, // alpha = 0.7346939 + 15216, 42614, 15219, 10656, // alpha = 0.7621567 + 15181, 42354, 15183, 10485, // alpha = 0.7901235 + 15149, 42090, 15151, 10321, // alpha = 0.8185941 + 15119, 41704, 15120, 10080, // alpha = 0.8475687 + 15092, 41238, 15093, 9778, // alpha = 0.8770471 + 15066, 40587, 15067, 9510, // alpha = 0.9070295 + 15043, 39465, 15043, 9228, // alpha = 0.9375157 + 15020, 2264, 15020, 8693, // alpha = 0.9685059 + 15000, 6821, 15000, 8199, // alpha = 1 + + // Cos (theta) = 0.9909297 + 23587, 45143, 23605, 20605, // alpha = 0.001 + 23587, 45143, 23605, 20605, // alpha = 0.001 + 23587, 45143, 23605, 20605, // alpha = 0.001007811 + 23403, 45143, 23438, 20486, // alpha = 0.002267574 + 22579, 45143, 22602, 19599, // alpha = 0.004031243 + 21857, 45143, 21882, 18901, // alpha = 0.006298816 + 21370, 45143, 21409, 18446, // alpha = 0.009070295 + 20864, 45143, 20890, 17911, // alpha = 0.01234568 + 20532, 45143, 20554, 17552, // alpha = 0.01612497 + 20132, 45142, 20168, 17205, // alpha = 0.02040816 + 19811, 45142, 19838, 16856, // alpha = 0.02519527 + 19573, 45142, 19594, 16597, // alpha = 0.03048627 + 19324, 45141, 19359, 16399, // alpha = 0.03628118 + 19042, 45141, 19072, 16109, // alpha = 0.04258 + 18817, 45140, 18843, 15865, // alpha = 0.04938272 + 18637, 45139, 18658, 15668, // alpha = 0.05668934 + 18488, 45138, 18508, 15507, // alpha = 0.06449988 + 18297, 45137, 18333, 15373, // alpha = 0.07281432 + 18092, 45135, 18124, 15164, // alpha = 0.08163266 + 17918, 45133, 17947, 14975, // alpha = 0.09095491 + 17770, 45131, 17796, 14815, // alpha = 0.1007811 + 17643, 45128, 17665, 14677, // alpha = 0.1111111 + 17532, 45125, 17553, 14556, // alpha = 0.1219451 + 17436, 45122, 17455, 14451, // alpha = 0.1332829 + 17296, 45118, 17331, 14359, // alpha = 0.1451247 + 17148, 45113, 17180, 14220, // alpha = 0.1574704 + 17017, 45108, 17045, 14076, // alpha = 0.17032 + 16900, 45101, 16926, 13947, // alpha = 0.1836735 + 16795, 45094, 16820, 13834, // alpha = 0.1975309 + 16702, 45086, 16725, 13731, // alpha = 0.2118922 + 16618, 45077, 16640, 13636, // alpha = 0.2267574 + 16543, 45067, 16562, 13551, // alpha = 0.2421265 + 16475, 45054, 16493, 13476, // alpha = 0.2579995 + 16412, 45028, 16429, 13404, // alpha = 0.2743765 + 16329, 44998, 16361, 13338, // alpha = 0.2912573 + 16226, 44964, 16255, 13242, // alpha = 0.308642 + 16133, 44926, 16160, 13132, // alpha = 0.3265306 + 16048, 44883, 16072, 13024, // alpha = 0.3449232 + 15970, 44834, 15992, 12923, // alpha = 0.3638196 + 15898, 44780, 15918, 12831, // alpha = 0.38322 + 15833, 44719, 15851, 12741, // alpha = 0.4031242 + 15772, 44650, 15789, 12654, // alpha = 0.4235324 + 15716, 44580, 15731, 12571, // alpha = 0.4444445 + 15665, 44510, 15679, 12490, // alpha = 0.4658605 + 15618, 44437, 15630, 12413, // alpha = 0.4877803 + 15574, 44359, 15585, 12339, // alpha = 0.5102041 + 15533, 44282, 15543, 12245, // alpha = 0.5331318 + 15496, 44199, 15504, 12102, // alpha = 0.5565634 + 15461, 44108, 15468, 11957, // alpha = 0.5804989 + 15429, 44004, 15435, 11824, // alpha = 0.6049383 + 15400, 43830, 15406, 11693, // alpha = 0.6298816 + 15374, 43659, 15379, 11569, // alpha = 0.6553288 + 15340, 43482, 15348, 11445, // alpha = 0.68128 + 15295, 43315, 15302, 11330, // alpha = 0.7077349 + 15255, 43143, 15260, 11166, // alpha = 0.7346939 + 15217, 42956, 15222, 10955, // alpha = 0.7621567 + 15183, 42635, 15186, 10745, // alpha = 0.7901235 + 15150, 42334, 15153, 10549, // alpha = 0.8185941 + 15120, 42036, 15122, 10361, // alpha = 0.8475687 + 15093, 41505, 15094, 10105, // alpha = 0.8770471 + 15067, 40960, 15067, 9759, // alpha = 0.9070295 + 15043, 39882, 15044, 9443, // alpha = 0.9375157 + 15021, 1362, 15021, 9039, // alpha = 0.9685059 + 15000, 7082, 15001, 8465, // alpha = 1 + + // Cos (theta) = 0.9876543 + 23585, 45331, 23612, 20797, // alpha = 0.001 + 23585, 45331, 23612, 20797, // alpha = 0.001 + 23585, 45331, 23612, 20797, // alpha = 0.001007811 + 23401, 45331, 23447, 20660, // alpha = 0.002267574 + 22580, 45331, 22612, 19797, // alpha = 0.004031243 + 21860, 45331, 21894, 19159, // alpha = 0.006298816 + 21373, 45331, 21422, 18624, // alpha = 0.009070295 + 20867, 45331, 20903, 18174, // alpha = 0.01234568 + 20536, 45331, 20563, 17755, // alpha = 0.01612497 + 20139, 45331, 20180, 17467, // alpha = 0.02040816 + 19814, 45330, 19848, 17114, // alpha = 0.02519527 + 19574, 45330, 19603, 16809, // alpha = 0.03048627 + 19328, 45330, 19377, 16578, // alpha = 0.03628118 + 19045, 45329, 19086, 16399, // alpha = 0.04258 + 18820, 45328, 18855, 16128, // alpha = 0.04938272 + 18638, 45327, 18669, 15897, // alpha = 0.05668934 + 18490, 45326, 18517, 15709, // alpha = 0.06449988 + 18302, 45324, 18349, 15552, // alpha = 0.07281432 + 18096, 45322, 18139, 15421, // alpha = 0.08163266 + 17921, 45320, 17960, 15260, // alpha = 0.09095491 + 17773, 45317, 17808, 15072, // alpha = 0.1007811 + 17645, 45314, 17676, 14911, // alpha = 0.1111111 + 17534, 45311, 17563, 14769, // alpha = 0.1219451 + 17438, 45306, 17464, 14646, // alpha = 0.1332829 + 17300, 45301, 17347, 14539, // alpha = 0.1451247 + 17151, 45296, 17195, 14444, // alpha = 0.1574704 + 17020, 45289, 17059, 14360, // alpha = 0.17032 + 16902, 45282, 16939, 14232, // alpha = 0.1836735 + 16798, 45274, 16833, 14097, // alpha = 0.1975309 + 16705, 45264, 16736, 13977, // alpha = 0.2118922 + 16621, 45254, 16649, 13869, // alpha = 0.2267574 + 16545, 45241, 16571, 13767, // alpha = 0.2421265 + 16476, 45227, 16501, 13678, // alpha = 0.2579995 + 16414, 45212, 16437, 13595, // alpha = 0.2743765 + 16333, 45194, 16375, 13519, // alpha = 0.2912573 + 16230, 45174, 16269, 13447, // alpha = 0.308642 + 16136, 45152, 16172, 13380, // alpha = 0.3265306 + 16051, 45126, 16085, 13319, // alpha = 0.3449232 + 15973, 45098, 16003, 13211, // alpha = 0.3638196 + 15901, 45066, 15929, 13099, // alpha = 0.38322 + 15835, 45004, 15860, 12993, // alpha = 0.4031242 + 15774, 44924, 15798, 12892, // alpha = 0.4235324 + 15719, 44845, 15740, 12796, // alpha = 0.4444445 + 15667, 44763, 15687, 12700, // alpha = 0.4658605 + 15620, 44674, 15637, 12610, // alpha = 0.4877803 + 15576, 44585, 15591, 12522, // alpha = 0.5102041 + 15535, 44492, 15548, 12437, // alpha = 0.5331318 + 15497, 44398, 15509, 12354, // alpha = 0.5565634 + 15462, 44295, 15473, 12254, // alpha = 0.5804989 + 15430, 44189, 15439, 12091, // alpha = 0.6049383 + 15402, 44087, 15409, 11941, // alpha = 0.6298816 + 15375, 43943, 15381, 11800, // alpha = 0.6553288 + 15342, 43736, 15353, 11654, // alpha = 0.68128 + 15297, 43539, 15307, 11517, // alpha = 0.7077349 + 15257, 43346, 15264, 11384, // alpha = 0.7346939 + 15219, 43154, 15225, 11253, // alpha = 0.7621567 + 15184, 42933, 15189, 11015, // alpha = 0.7901235 + 15152, 42571, 15156, 10774, // alpha = 0.8185941 + 15122, 42222, 15125, 10554, // alpha = 0.8475687 + 15094, 41808, 15096, 10350, // alpha = 0.8770471 + 15068, 41160, 15069, 10049, // alpha = 0.9070295 + 15044, 40125, 15045, 9663, // alpha = 0.9375157 + 15022, 35075, 15022, 9299, // alpha = 0.9685059 + 15001, 7241, 15001, 8695, // alpha = 1 + + // Cos (theta) = 0.983875 + 23584, 45521, 23619, 20992, // alpha = 0.001 + 23584, 45521, 23619, 20992, // alpha = 0.001 + 23583, 45521, 23619, 20990, // alpha = 0.001007811 + 23418, 45521, 23477, 20848, // alpha = 0.002267574 + 22585, 45521, 22623, 20004, // alpha = 0.004031243 + 21863, 45521, 21908, 19420, // alpha = 0.006298816 + 21378, 45521, 21442, 18805, // alpha = 0.009070295 + 20868, 45521, 20916, 18435, // alpha = 0.01234568 + 20537, 45521, 20575, 17956, // alpha = 0.01612497 + 20143, 45521, 20199, 17628, // alpha = 0.02040816 + 19818, 45520, 19863, 17376, // alpha = 0.02519527 + 19577, 45520, 19615, 17026, // alpha = 0.03048627 + 19334, 45519, 19395, 16760, // alpha = 0.03628118 + 19048, 45518, 19102, 16552, // alpha = 0.04258 + 18823, 45517, 18868, 16389, // alpha = 0.04938272 + 18641, 45516, 18681, 16129, // alpha = 0.05668934 + 18492, 45515, 18528, 15911, // alpha = 0.06449988 + 18306, 45513, 18368, 15732, // alpha = 0.07281432 + 18099, 45511, 18154, 15583, // alpha = 0.08163266 + 17925, 45508, 17975, 15456, // alpha = 0.09095491 + 17776, 45505, 17822, 15333, // alpha = 0.1007811 + 17648, 45501, 17689, 15148, // alpha = 0.1111111 + 17537, 45497, 17574, 14987, // alpha = 0.1219451 + 17441, 45492, 17474, 14846, // alpha = 0.1332829 + 17304, 45487, 17364, 14721, // alpha = 0.1451247 + 17154, 45480, 17212, 14611, // alpha = 0.1574704 + 17024, 45473, 17074, 14516, // alpha = 0.17032 + 16906, 45464, 16954, 14429, // alpha = 0.1836735 + 16801, 45454, 16845, 14352, // alpha = 0.1975309 + 16707, 45443, 16749, 14228, // alpha = 0.2118922 + 16623, 45431, 16661, 14101, // alpha = 0.2267574 + 16547, 45417, 16583, 13987, // alpha = 0.2421265 + 16479, 45401, 16512, 13883, // alpha = 0.2579995 + 16416, 45383, 16447, 13787, // alpha = 0.2743765 + 16337, 45362, 16388, 13701, // alpha = 0.2912573 + 16233, 45339, 16285, 13618, // alpha = 0.308642 + 16140, 45313, 16187, 13543, // alpha = 0.3265306 + 16054, 45284, 16099, 13471, // alpha = 0.3449232 + 15976, 45251, 16017, 13405, // alpha = 0.3638196 + 15904, 45214, 15941, 13341, // alpha = 0.38322 + 15838, 45173, 15872, 13248, // alpha = 0.4031242 + 15777, 45129, 15808, 13130, // alpha = 0.4235324 + 15721, 45084, 15749, 13018, // alpha = 0.4444445 + 15670, 45016, 15694, 12910, // alpha = 0.4658605 + 15622, 44914, 15645, 12806, // alpha = 0.4877803 + 15577, 44811, 15597, 12705, // alpha = 0.5102041 + 15537, 44703, 15555, 12606, // alpha = 0.5331318 + 15499, 44595, 15515, 12513, // alpha = 0.5565634 + 15464, 44483, 15477, 12417, // alpha = 0.5804989 + 15432, 44362, 15444, 12326, // alpha = 0.6049383 + 15403, 44243, 15413, 12188, // alpha = 0.6298816 + 15377, 44129, 15385, 12025, // alpha = 0.6553288 + 15345, 44001, 15359, 11861, // alpha = 0.68128 + 15300, 43767, 15312, 11706, // alpha = 0.7077349 + 15259, 43549, 15268, 11556, // alpha = 0.7346939 + 15221, 43328, 15229, 11411, // alpha = 0.7621567 + 15186, 43119, 15192, 11272, // alpha = 0.7901235 + 15154, 42820, 15158, 11009, // alpha = 0.8185941 + 15124, 42430, 15127, 10760, // alpha = 0.8475687 + 15096, 42042, 15098, 10516, // alpha = 0.8770471 + 15070, 41368, 15071, 10290, // alpha = 0.9070295 + 15045, 40363, 15046, 9893, // alpha = 0.9375157 + 15023, 36551, 15023, 9465, // alpha = 0.9685059 + 15002, 7322, 15002, 8903, // alpha = 1 + + // Cos (theta) = 0.9795918 + 23604, 45713, 23650, 21223, // alpha = 0.001 + 23604, 45713, 23650, 21223, // alpha = 0.001 + 23591, 45713, 23663, 21200, // alpha = 0.001007811 + 23437, 45713, 23512, 21043, // alpha = 0.002267574 + 22585, 45713, 22627, 20206, // alpha = 0.004031243 + 21866, 45713, 21927, 19569, // alpha = 0.006298816 + 21384, 45713, 21463, 18991, // alpha = 0.009070295 + 20874, 45713, 20931, 18572, // alpha = 0.01234568 + 20541, 45712, 20586, 18165, // alpha = 0.01612497 + 20146, 45712, 20219, 17790, // alpha = 0.02040816 + 19821, 45712, 19879, 17524, // alpha = 0.02519527 + 19580, 45711, 19628, 17244, // alpha = 0.03048627 + 19337, 45710, 19420, 16943, // alpha = 0.03628118 + 19053, 45710, 19122, 16710, // alpha = 0.04258 + 18827, 45708, 18886, 16524, // alpha = 0.04938272 + 18644, 45707, 18694, 16365, // alpha = 0.05668934 + 18495, 45705, 18540, 16119, // alpha = 0.06449988 + 18310, 45703, 18391, 15916, // alpha = 0.07281432 + 18102, 45701, 18175, 15746, // alpha = 0.08163266 + 17929, 45698, 17992, 15603, // alpha = 0.09095491 + 17779, 45694, 17837, 15479, // alpha = 0.1007811 + 17652, 45690, 17703, 15375, // alpha = 0.1111111 + 17540, 45685, 17587, 15206, // alpha = 0.1219451 + 17443, 45680, 17486, 15047, // alpha = 0.1332829 + 17309, 45673, 17388, 14907, // alpha = 0.1451247 + 17160, 45666, 17232, 14783, // alpha = 0.1574704 + 17027, 45657, 17094, 14673, // alpha = 0.17032 + 16910, 45647, 16971, 14576, // alpha = 0.1836735 + 16805, 45636, 16861, 14489, // alpha = 0.1975309 + 16710, 45624, 16762, 14409, // alpha = 0.2118922 + 16626, 45609, 16675, 14338, // alpha = 0.2267574 + 16550, 45593, 16595, 14212, // alpha = 0.2421265 + 16481, 45575, 16523, 14092, // alpha = 0.2579995 + 16419, 45554, 16457, 13986, // alpha = 0.2743765 + 16341, 45531, 16398, 13884, // alpha = 0.2912573 + 16238, 45505, 16303, 13793, // alpha = 0.308642 + 16144, 45475, 16205, 13705, // alpha = 0.3265306 + 16057, 45442, 16114, 13625, // alpha = 0.3449232 + 15979, 45404, 16032, 13550, // alpha = 0.3638196 + 15907, 45362, 15955, 13476, // alpha = 0.38322 + 15841, 45316, 15885, 13407, // alpha = 0.4031242 + 15780, 45268, 15819, 13343, // alpha = 0.4235324 + 15724, 45217, 15759, 13247, // alpha = 0.4444445 + 15672, 45162, 15704, 13125, // alpha = 0.4658605 + 15624, 45105, 15653, 13006, // alpha = 0.4877803 + 15580, 45036, 15605, 12892, // alpha = 0.5102041 + 15540, 44916, 15562, 12782, // alpha = 0.5331318 + 15501, 44793, 15521, 12671, // alpha = 0.5565634 + 15467, 44668, 15483, 12568, // alpha = 0.5804989 + 15434, 44538, 15449, 12466, // alpha = 0.6049383 + 15404, 44403, 15417, 12366, // alpha = 0.6298816 + 15378, 44272, 15389, 12256, // alpha = 0.6553288 + 15348, 44145, 15363, 12074, // alpha = 0.68128 + 15303, 44003, 15318, 11894, // alpha = 0.7077349 + 15262, 43752, 15274, 11728, // alpha = 0.7346939 + 15223, 43513, 15233, 11563, // alpha = 0.7621567 + 15188, 43271, 15196, 11405, // alpha = 0.7901235 + 15156, 43044, 15162, 11255, // alpha = 0.8185941 + 15125, 42626, 15130, 10968, // alpha = 0.8475687 + 15097, 42205, 15100, 10693, // alpha = 0.8770471 + 15071, 41598, 15073, 10431, // alpha = 0.9070295 + 15046, 40630, 15048, 10124, // alpha = 0.9375157 + 15024, 37580, 15024, 9641, // alpha = 0.9685059 + 15003, 7387, 15003, 9177, // alpha = 1 + + // Cos (theta) = 0.9748048 + 23613, 45907, 23670, 21442, // alpha = 0.001 + 23613, 45907, 23670, 21442, // alpha = 0.001 + 23605, 45907, 23663, 21428, // alpha = 0.001007811 + 23424, 45907, 23530, 21213, // alpha = 0.002267574 + 22592, 45907, 22648, 20423, // alpha = 0.004031243 + 21873, 45906, 21945, 19707, // alpha = 0.006298816 + 21389, 45906, 21486, 19178, // alpha = 0.009070295 + 20877, 45906, 20952, 18708, // alpha = 0.01234568 + 20543, 45906, 20600, 18373, // alpha = 0.01612497 + 20153, 45906, 20241, 17959, // alpha = 0.02040816 + 19826, 45905, 19896, 17659, // alpha = 0.02519527 + 19583, 45905, 19643, 17437, // alpha = 0.03048627 + 19343, 45904, 19444, 17130, // alpha = 0.03628118 + 19057, 45903, 19142, 16869, // alpha = 0.04258 + 18830, 45902, 18904, 16662, // alpha = 0.04938272 + 18647, 45900, 18712, 16494, // alpha = 0.05668934 + 18498, 45898, 18555, 16330, // alpha = 0.06449988 + 18315, 45896, 18416, 16102, // alpha = 0.07281432 + 18109, 45893, 18197, 15914, // alpha = 0.08163266 + 17932, 45889, 18013, 15752, // alpha = 0.09095491 + 17783, 45885, 17855, 15615, // alpha = 0.1007811 + 17655, 45881, 17719, 15497, // alpha = 0.1111111 + 17543, 45875, 17603, 15394, // alpha = 0.1219451 + 17446, 45869, 17500, 15251, // alpha = 0.1332829 + 17314, 45861, 17411, 15094, // alpha = 0.1451247 + 17165, 45853, 17254, 14958, // alpha = 0.1574704 + 17032, 45843, 17115, 14834, // alpha = 0.17032 + 16914, 45832, 16991, 14724, // alpha = 0.1836735 + 16809, 45820, 16879, 14627, // alpha = 0.1975309 + 16714, 45805, 16780, 14539, // alpha = 0.2118922 + 16630, 45789, 16690, 14458, // alpha = 0.2267574 + 16553, 45771, 16610, 14386, // alpha = 0.2421265 + 16484, 45750, 16536, 14303, // alpha = 0.2579995 + 16422, 45727, 16470, 14183, // alpha = 0.2743765 + 16345, 45701, 16409, 14071, // alpha = 0.2912573 + 16242, 45671, 16325, 13967, // alpha = 0.308642 + 16148, 45638, 16225, 13872, // alpha = 0.3265306 + 16062, 45600, 16132, 13783, // alpha = 0.3449232 + 15984, 45558, 16048, 13697, // alpha = 0.3638196 + 15911, 45511, 15970, 13617, // alpha = 0.38322 + 15845, 45460, 15899, 13538, // alpha = 0.4031242 + 15784, 45407, 15833, 13465, // alpha = 0.4235324 + 15728, 45350, 15771, 13395, // alpha = 0.4444445 + 15675, 45289, 15715, 13327, // alpha = 0.4658605 + 15628, 45226, 15663, 13211, // alpha = 0.4877803 + 15583, 45160, 15614, 13080, // alpha = 0.5102041 + 15542, 45093, 15569, 12956, // alpha = 0.5331318 + 15504, 44993, 15528, 12835, // alpha = 0.5565634 + 15469, 44854, 15490, 12718, // alpha = 0.5804989 + 15437, 44712, 15455, 12606, // alpha = 0.6049383 + 15407, 44564, 15423, 12495, // alpha = 0.6298816 + 15380, 44418, 15393, 12388, // alpha = 0.6553288 + 15351, 44276, 15367, 12285, // alpha = 0.68128 + 15306, 44137, 15325, 12090, // alpha = 0.7077349 + 15265, 43961, 15279, 11901, // alpha = 0.7346939 + 15227, 43692, 15238, 11721, // alpha = 0.7621567 + 15191, 43430, 15200, 11547, // alpha = 0.7901235 + 15158, 43172, 15165, 11379, // alpha = 0.8185941 + 15127, 42846, 15133, 11174, // alpha = 0.8475687 + 15099, 42372, 15103, 10874, // alpha = 0.8770471 + 15073, 41835, 15075, 10582, // alpha = 0.9070295 + 15048, 40954, 15049, 10297, // alpha = 0.9375157 + 15025, 38228, 15026, 9834, // alpha = 0.9685059 + 15004, 7406, 15004, 9331, // alpha = 1 + + // Cos (theta) = 0.9695137 + 23610, 46091, 23679, 21574, // alpha = 0.001 + 23610, 46091, 23679, 21574, // alpha = 0.001 + 23610, 46091, 23679, 21574, // alpha = 0.001007811 + 23436, 46091, 23557, 21410, // alpha = 0.002267574 + 22595, 46091, 22658, 20559, // alpha = 0.004031243 + 21874, 46091, 21965, 19841, // alpha = 0.006298816 + 21393, 46091, 21512, 19367, // alpha = 0.009070295 + 20881, 46091, 20972, 18848, // alpha = 0.01234568 + 20547, 46091, 20617, 18511, // alpha = 0.01612497 + 20156, 46091, 20266, 18127, // alpha = 0.02040816 + 19828, 46090, 19918, 17795, // alpha = 0.02519527 + 19587, 46090, 19659, 17552, // alpha = 0.03048627 + 19349, 46090, 19465, 17322, // alpha = 0.03628118 + 19062, 46089, 19168, 17032, // alpha = 0.04258 + 18835, 46088, 18925, 16802, // alpha = 0.04938272 + 18652, 46087, 18731, 16617, // alpha = 0.05668934 + 18502, 46086, 18570, 16465, // alpha = 0.06449988 + 18321, 46085, 18438, 16293, // alpha = 0.07281432 + 18113, 46083, 18223, 16082, // alpha = 0.08163266 + 17938, 46082, 18035, 15905, // alpha = 0.09095491 + 17788, 46078, 17876, 15753, // alpha = 0.1007811 + 17658, 46073, 17738, 15622, // alpha = 0.1111111 + 17546, 46067, 17618, 15507, // alpha = 0.1219451 + 17449, 46060, 17515, 15410, // alpha = 0.1332829 + 17320, 46052, 17424, 15286, // alpha = 0.1451247 + 17170, 46042, 17280, 15133, // alpha = 0.1574704 + 17036, 46031, 17139, 14996, // alpha = 0.17032 + 16918, 46019, 17012, 14877, // alpha = 0.1836735 + 16813, 46005, 16899, 14768, // alpha = 0.1975309 + 16718, 45989, 16799, 14669, // alpha = 0.2118922 + 16633, 45971, 16708, 14581, // alpha = 0.2267574 + 16557, 45950, 16625, 14501, // alpha = 0.2421265 + 16488, 45927, 16551, 14429, // alpha = 0.2579995 + 16425, 45901, 16483, 14361, // alpha = 0.2743765 + 16352, 45871, 16422, 14261, // alpha = 0.2912573 + 16247, 45838, 16349, 14146, // alpha = 0.308642 + 16153, 45801, 16247, 14042, // alpha = 0.3265306 + 16067, 45759, 16153, 13941, // alpha = 0.3449232 + 15988, 45712, 16067, 13846, // alpha = 0.3638196 + 15916, 45660, 15988, 13757, // alpha = 0.38322 + 15848, 45605, 15914, 13671, // alpha = 0.4031242 + 15788, 45546, 15847, 13590, // alpha = 0.4235324 + 15731, 45483, 15784, 13511, // alpha = 0.4444445 + 15679, 45416, 15727, 13437, // alpha = 0.4658605 + 15631, 45346, 15673, 13363, // alpha = 0.4877803 + 15585, 45274, 15624, 13271, // alpha = 0.5102041 + 15545, 45200, 15578, 13136, // alpha = 0.5331318 + 15507, 45124, 15536, 13000, // alpha = 0.5565634 + 15471, 45040, 15496, 12871, // alpha = 0.5804989 + 15439, 44886, 15461, 12747, // alpha = 0.6049383 + 15410, 44729, 15428, 12626, // alpha = 0.6298816 + 15382, 44566, 15398, 12508, // alpha = 0.6553288 + 15355, 44408, 15371, 12397, // alpha = 0.68128 + 15310, 44255, 15332, 12288, // alpha = 0.7077349 + 15268, 44105, 15287, 12081, // alpha = 0.7346939 + 15229, 43879, 15244, 11883, // alpha = 0.7621567 + 15193, 43594, 15205, 11689, // alpha = 0.7901235 + 15160, 43310, 15169, 11505, // alpha = 0.8185941 + 15130, 43037, 15136, 11329, // alpha = 0.8475687 + 15101, 42539, 15105, 11057, // alpha = 0.8770471 + 15074, 42046, 15077, 10738, // alpha = 0.9070295 + 15050, 41133, 15052, 10434, // alpha = 0.9375157 + 15026, 38932, 15028, 10052, // alpha = 0.9685059 + 15005, 7431, 15005, 9491, // alpha = 1 + + // Cos (theta) = 0.9637188 + 23607, 46190, 23690, 21675, // alpha = 0.001 + 23607, 46190, 23690, 21675, // alpha = 0.001 + 23607, 46190, 23690, 21675, // alpha = 0.001007811 + 23438, 46190, 23571, 21551, // alpha = 0.002267574 + 22597, 46190, 22684, 20667, // alpha = 0.004031243 + 21878, 46190, 21986, 19981, // alpha = 0.006298816 + 21402, 46190, 21528, 19510, // alpha = 0.009070295 + 20886, 46190, 20995, 18992, // alpha = 0.01234568 + 20551, 46190, 20635, 18621, // alpha = 0.01612497 + 20163, 46190, 20294, 18302, // alpha = 0.02040816 + 19833, 46190, 19941, 17937, // alpha = 0.02519527 + 19590, 46189, 19679, 17667, // alpha = 0.03048627 + 19356, 46189, 19480, 17463, // alpha = 0.03628118 + 19069, 46188, 19195, 17200, // alpha = 0.04258 + 18841, 46187, 18949, 16947, // alpha = 0.04938272 + 18656, 46186, 18751, 16742, // alpha = 0.05668934 + 18505, 46185, 18588, 16575, // alpha = 0.06449988 + 18329, 46184, 18454, 16436, // alpha = 0.07281432 + 18119, 46182, 18252, 16257, // alpha = 0.08163266 + 17944, 46180, 18061, 16062, // alpha = 0.09095491 + 17793, 46177, 17898, 15894, // alpha = 0.1007811 + 17663, 46174, 17758, 15751, // alpha = 0.1111111 + 17551, 46171, 17638, 15625, // alpha = 0.1219451 + 17452, 46167, 17532, 15516, // alpha = 0.1332829 + 17327, 46162, 17440, 15421, // alpha = 0.1451247 + 17175, 46157, 17310, 15314, // alpha = 0.1574704 + 17042, 46151, 17164, 15164, // alpha = 0.17032 + 16922, 46144, 17037, 15029, // alpha = 0.1836735 + 16818, 46136, 16922, 14912, // alpha = 0.1975309 + 16722, 46127, 16819, 14804, // alpha = 0.2118922 + 16637, 46117, 16726, 14708, // alpha = 0.2267574 + 16561, 46105, 16643, 14620, // alpha = 0.2421265 + 16491, 46092, 16568, 14539, // alpha = 0.2579995 + 16428, 46076, 16499, 14464, // alpha = 0.2743765 + 16358, 46043, 16436, 14396, // alpha = 0.2912573 + 16254, 46006, 16375, 14330, // alpha = 0.308642 + 16160, 45965, 16271, 14213, // alpha = 0.3265306 + 16071, 45919, 16175, 14102, // alpha = 0.3449232 + 15994, 45867, 16087, 13999, // alpha = 0.3638196 + 15920, 45810, 16007, 13901, // alpha = 0.38322 + 15853, 45750, 15932, 13805, // alpha = 0.4031242 + 15791, 45686, 15863, 13716, // alpha = 0.4235324 + 15736, 45616, 15800, 13629, // alpha = 0.4444445 + 15683, 45544, 15740, 13547, // alpha = 0.4658605 + 15634, 45468, 15686, 13467, // alpha = 0.4877803 + 15589, 45389, 15635, 13389, // alpha = 0.5102041 + 15548, 45308, 15588, 13314, // alpha = 0.5331318 + 15510, 45225, 15545, 13168, // alpha = 0.5565634 + 15474, 45142, 15505, 13029, // alpha = 0.5804989 + 15442, 45058, 15468, 12891, // alpha = 0.6049383 + 15412, 44892, 15435, 12758, // alpha = 0.6298816 + 15385, 44718, 15404, 12632, // alpha = 0.6553288 + 15360, 44545, 15376, 12508, // alpha = 0.68128 + 15314, 44378, 15340, 12391, // alpha = 0.7077349 + 15271, 44213, 15294, 12262, // alpha = 0.7346939 + 15233, 44051, 15251, 12043, // alpha = 0.7621567 + 15197, 43755, 15210, 11832, // alpha = 0.7901235 + 15163, 43455, 15174, 11633, // alpha = 0.8185941 + 15133, 43155, 15140, 11441, // alpha = 0.8475687 + 15103, 42736, 15109, 11250, // alpha = 0.8770471 + 15077, 42176, 15080, 10900, // alpha = 0.9070295 + 15052, 41328, 15054, 10569, // alpha = 0.9375157 + 15028, 39361, 15029, 10250, // alpha = 0.9685059 + 15006, 7366, 15006, 9647, // alpha = 1 + + // Cos (theta) = 0.95742 + 23609, 46291, 23711, 21784, // alpha = 0.001 + 23609, 46291, 23711, 21784, // alpha = 0.001 + 23626, 46291, 23700, 21804, // alpha = 0.001007811 + 23450, 46291, 23595, 21654, // alpha = 0.002267574 + 22602, 46291, 22693, 20781, // alpha = 0.004031243 + 21886, 46291, 22014, 20128, // alpha = 0.006298816 + 21409, 46291, 21546, 19610, // alpha = 0.009070295 + 20891, 46291, 21020, 19139, // alpha = 0.01234568 + 20554, 46291, 20653, 18733, // alpha = 0.01612497 + 20169, 46290, 20326, 18455, // alpha = 0.02040816 + 19839, 46290, 19965, 18081, // alpha = 0.02519527 + 19594, 46290, 19700, 17786, // alpha = 0.03048627 + 19362, 46289, 19499, 17562, // alpha = 0.03628118 + 19073, 46288, 19225, 17368, // alpha = 0.04258 + 18846, 46288, 18975, 17093, // alpha = 0.04938272 + 18660, 46286, 18773, 16869, // alpha = 0.05668934 + 18508, 46285, 18609, 16686, // alpha = 0.06449988 + 18336, 46283, 18472, 16536, // alpha = 0.07281432 + 18127, 46281, 18282, 16410, // alpha = 0.08163266 + 17949, 46279, 18089, 16221, // alpha = 0.09095491 + 17797, 46276, 17923, 16038, // alpha = 0.1007811 + 17667, 46273, 17781, 15881, // alpha = 0.1111111 + 17555, 46269, 17658, 15745, // alpha = 0.1219451 + 17457, 46265, 17551, 15625, // alpha = 0.1332829 + 17334, 46259, 17458, 15522, // alpha = 0.1451247 + 17181, 46253, 17341, 15429, // alpha = 0.1574704 + 17047, 46247, 17193, 15335, // alpha = 0.17032 + 16928, 46239, 17063, 15190, // alpha = 0.1836735 + 16822, 46230, 16946, 15059, // alpha = 0.1975309 + 16727, 46220, 16841, 14942, // alpha = 0.2118922 + 16641, 46209, 16747, 14835, // alpha = 0.2267574 + 16565, 46197, 16662, 14740, // alpha = 0.2421265 + 16494, 46182, 16586, 14650, // alpha = 0.2579995 + 16432, 46166, 16516, 14570, // alpha = 0.2743765 + 16365, 46148, 16452, 14495, // alpha = 0.2912573 + 16260, 46128, 16394, 14426, // alpha = 0.308642 + 16165, 46105, 16298, 14362, // alpha = 0.3265306 + 16078, 46079, 16200, 14268, // alpha = 0.3449232 + 15998, 46022, 16111, 14153, // alpha = 0.3638196 + 15925, 45961, 16027, 14045, // alpha = 0.38322 + 15857, 45896, 15951, 13942, // alpha = 0.4031242 + 15797, 45825, 15881, 13846, // alpha = 0.4235324 + 15739, 45751, 15815, 13752, // alpha = 0.4444445 + 15687, 45672, 15755, 13660, // alpha = 0.4658605 + 15638, 45590, 15699, 13572, // alpha = 0.4877803 + 15593, 45504, 15647, 13488, // alpha = 0.5102041 + 15551, 45416, 15599, 13405, // alpha = 0.5331318 + 15513, 45327, 15555, 13326, // alpha = 0.5565634 + 15477, 45237, 15514, 13186, // alpha = 0.5804989 + 15445, 45146, 15476, 13037, // alpha = 0.6049383 + 15415, 45055, 15441, 12891, // alpha = 0.6298816 + 15388, 44871, 15410, 12756, // alpha = 0.6553288 + 15362, 44684, 15381, 12621, // alpha = 0.68128 + 15318, 44501, 15350, 12491, // alpha = 0.7077349 + 15276, 44324, 15301, 12368, // alpha = 0.7346939 + 15236, 44152, 15257, 12215, // alpha = 0.7621567 + 15200, 43927, 15216, 11982, // alpha = 0.7901235 + 15166, 43598, 15179, 11764, // alpha = 0.8185941 + 15135, 43279, 15145, 11557, // alpha = 0.8475687 + 15106, 42929, 15112, 11358, // alpha = 0.8770471 + 15079, 42337, 15083, 11066, // alpha = 0.9070295 + 15053, 41528, 15056, 10704, // alpha = 0.9375157 + 15030, 39829, 15031, 10352, // alpha = 0.9685059 + 15008, 7242, 15009, 9814, // alpha = 1 + + // Cos (theta) = 0.9506173 + 23614, 46393, 23735, 21898, // alpha = 0.001 + 23614, 46393, 23735, 21898, // alpha = 0.001 + 23614, 46393, 23734, 21898, // alpha = 0.001007811 + 23450, 46393, 23606, 21751, // alpha = 0.002267574 + 22598, 46393, 22718, 20885, // alpha = 0.004031243 + 21889, 46393, 22038, 20271, // alpha = 0.006298816 + 21421, 46393, 21563, 19715, // alpha = 0.009070295 + 20898, 46393, 21050, 19291, // alpha = 0.01234568 + 20558, 46393, 20676, 18848, // alpha = 0.01612497 + 20175, 46393, 20359, 18546, // alpha = 0.02040816 + 19844, 46392, 19995, 18228, // alpha = 0.02519527 + 19599, 46392, 19723, 17908, // alpha = 0.03048627 + 19370, 46391, 19517, 17665, // alpha = 0.03628118 + 19080, 46390, 19258, 17475, // alpha = 0.04258 + 18851, 46389, 19004, 17243, // alpha = 0.04938272 + 18665, 46388, 18799, 17001, // alpha = 0.05668934 + 18513, 46387, 18631, 16802, // alpha = 0.06449988 + 18345, 46385, 18490, 16639, // alpha = 0.07281432 + 18133, 46382, 18317, 16500, // alpha = 0.08163266 + 17955, 46380, 18120, 16385, // alpha = 0.09095491 + 17804, 46377, 17952, 16187, // alpha = 0.1007811 + 17672, 46373, 17807, 16014, // alpha = 0.1111111 + 17560, 46369, 17682, 15867, // alpha = 0.1219451 + 17461, 46364, 17573, 15738, // alpha = 0.1332829 + 17341, 46358, 17477, 15625, // alpha = 0.1451247 + 17188, 46352, 17375, 15524, // alpha = 0.1574704 + 17055, 46344, 17227, 15436, // alpha = 0.17032 + 16934, 46336, 17093, 15352, // alpha = 0.1836735 + 16829, 46326, 16974, 15210, // alpha = 0.1975309 + 16733, 46315, 16867, 15083, // alpha = 0.2118922 + 16646, 46303, 16771, 14967, // alpha = 0.2267574 + 16569, 46289, 16685, 14862, // alpha = 0.2421265 + 16499, 46273, 16606, 14767, // alpha = 0.2579995 + 16436, 46255, 16534, 14678, // alpha = 0.2743765 + 16372, 46235, 16469, 14596, // alpha = 0.2912573 + 16267, 46213, 16410, 14522, // alpha = 0.308642 + 16171, 46188, 16326, 14451, // alpha = 0.3265306 + 16089, 46160, 16226, 14386, // alpha = 0.3449232 + 16005, 46129, 16135, 14311, // alpha = 0.3638196 + 15931, 46096, 16051, 14194, // alpha = 0.38322 + 15863, 46042, 15972, 14083, // alpha = 0.4031242 + 15801, 45965, 15900, 13977, // alpha = 0.4235324 + 15744, 45885, 15833, 13874, // alpha = 0.4444445 + 15691, 45800, 15771, 13774, // alpha = 0.4658605 + 15642, 45711, 15713, 13681, // alpha = 0.4877803 + 15597, 45620, 15660, 13589, // alpha = 0.5102041 + 15556, 45525, 15611, 13500, // alpha = 0.5331318 + 15517, 45429, 15565, 13413, // alpha = 0.5565634 + 15481, 45332, 15523, 13330, // alpha = 0.5804989 + 15448, 45235, 15484, 13185, // alpha = 0.6049383 + 15418, 45138, 15449, 13032, // alpha = 0.6298816 + 15391, 45024, 15417, 12883, // alpha = 0.6553288 + 15365, 44826, 15387, 12737, // alpha = 0.68128 + 15324, 44628, 15360, 12598, // alpha = 0.7077349 + 15281, 44437, 15311, 12463, // alpha = 0.7346939 + 15241, 44252, 15264, 12335, // alpha = 0.7621567 + 15204, 44070, 15223, 12139, // alpha = 0.7901235 + 15170, 43749, 15184, 11901, // alpha = 0.8185941 + 15138, 43406, 15149, 11676, // alpha = 0.8475687 + 15109, 43073, 15117, 11458, // alpha = 0.8770471 + 15081, 42498, 15086, 11240, // alpha = 0.9070295 + 15055, 41767, 15058, 10845, // alpha = 0.9375157 + 15032, 40224, 15033, 10470, // alpha = 0.9685059 + 15009, 7135, 15010, 9981, // alpha = 1 + + // Cos (theta) = 0.9433107 + 23628, 46497, 23765, 22029, // alpha = 0.001 + 23628, 46497, 23765, 22029, // alpha = 0.001 + 23629, 46497, 23765, 22029, // alpha = 0.001007811 + 23471, 46497, 23636, 21865, // alpha = 0.002267574 + 22609, 46497, 22741, 21010, // alpha = 0.004031243 + 21898, 46497, 22072, 20428, // alpha = 0.006298816 + 21427, 46497, 21583, 19819, // alpha = 0.009070295 + 20902, 46497, 21082, 19443, // alpha = 0.01234568 + 20562, 46497, 20702, 18965, // alpha = 0.01612497 + 20183, 46496, 20399, 18640, // alpha = 0.02040816 + 19850, 46496, 20026, 18380, // alpha = 0.02519527 + 19604, 46496, 19750, 18034, // alpha = 0.03048627 + 19379, 46495, 19540, 17771, // alpha = 0.03628118 + 19087, 46494, 19294, 17565, // alpha = 0.04258 + 18856, 46493, 19035, 17397, // alpha = 0.04938272 + 18670, 46491, 18826, 17136, // alpha = 0.05668934 + 18518, 46490, 18654, 16920, // alpha = 0.06449988 + 18352, 46488, 18512, 16745, // alpha = 0.07281432 + 18140, 46485, 18354, 16595, // alpha = 0.08163266 + 17962, 46482, 18153, 16469, // alpha = 0.09095491 + 17809, 46479, 17982, 16337, // alpha = 0.1007811 + 17677, 46475, 17835, 16152, // alpha = 0.1111111 + 17564, 46470, 17707, 15993, // alpha = 0.1219451 + 17466, 46465, 17595, 15853, // alpha = 0.1332829 + 17350, 46458, 17497, 15730, // alpha = 0.1451247 + 17197, 46451, 17411, 15622, // alpha = 0.1574704 + 17062, 46443, 17262, 15526, // alpha = 0.17032 + 16941, 46433, 17127, 15439, // alpha = 0.1836735 + 16834, 46423, 17004, 15362, // alpha = 0.1975309 + 16737, 46411, 16896, 15225, // alpha = 0.2118922 + 16652, 46397, 16798, 15102, // alpha = 0.2267574 + 16574, 46382, 16708, 14987, // alpha = 0.2421265 + 16504, 46364, 16628, 14884, // alpha = 0.2579995 + 16441, 46345, 16555, 14789, // alpha = 0.2743765 + 16381, 46323, 16488, 14701, // alpha = 0.2912573 + 16275, 46299, 16427, 14618, // alpha = 0.308642 + 16179, 46271, 16359, 14542, // alpha = 0.3265306 + 16091, 46240, 16256, 14471, // alpha = 0.3449232 + 16010, 46208, 16163, 14404, // alpha = 0.3638196 + 15937, 46172, 16075, 14341, // alpha = 0.38322 + 15869, 46134, 15995, 14226, // alpha = 0.4031242 + 15807, 46093, 15921, 14110, // alpha = 0.4235324 + 15749, 46019, 15852, 13999, // alpha = 0.4444445 + 15696, 45929, 15788, 13892, // alpha = 0.4658605 + 15647, 45834, 15730, 13790, // alpha = 0.4877803 + 15601, 45736, 15675, 13689, // alpha = 0.5102041 + 15560, 45635, 15625, 13594, // alpha = 0.5331318 + 15520, 45532, 15577, 13501, // alpha = 0.5565634 + 15484, 45429, 15534, 13411, // alpha = 0.5804989 + 15452, 45324, 15494, 13325, // alpha = 0.6049383 + 15421, 45220, 15457, 13172, // alpha = 0.6298816 + 15394, 45117, 15424, 13010, // alpha = 0.6553288 + 15368, 44971, 15393, 12856, // alpha = 0.68128 + 15328, 44760, 15366, 12706, // alpha = 0.7077349 + 15285, 44553, 15320, 12561, // alpha = 0.7346939 + 15245, 44353, 15273, 12425, // alpha = 0.7621567 + 15208, 44161, 15231, 12292, // alpha = 0.7901235 + 15174, 43910, 15191, 12043, // alpha = 0.8185941 + 15142, 43542, 15154, 11799, // alpha = 0.8475687 + 15112, 43188, 15121, 11572, // alpha = 0.8770471 + 15084, 42668, 15090, 11344, // alpha = 0.9070295 + 15058, 42016, 15061, 10999, // alpha = 0.9375157 + 15034, 40560, 15036, 10600, // alpha = 0.9685059 + 15012, 6708, 15011, 10184, // alpha = 1 + + // Cos (theta) = 0.9355001 + 23625, 46603, 23781, 22137, // alpha = 0.001 + 23625, 46603, 23781, 22137, // alpha = 0.001 + 23625, 46603, 23780, 22137, // alpha = 0.001007811 + 23485, 46603, 23660, 21976, // alpha = 0.002267574 + 22620, 46603, 22777, 21142, // alpha = 0.004031243 + 21903, 46603, 22107, 20531, // alpha = 0.006298816 + 21431, 46603, 21611, 19924, // alpha = 0.009070295 + 20911, 46603, 21117, 19531, // alpha = 0.01234568 + 20570, 46602, 20728, 19092, // alpha = 0.01612497 + 20192, 46602, 20442, 18737, // alpha = 0.02040816 + 19858, 46602, 20061, 18485, // alpha = 0.02519527 + 19609, 46601, 19779, 18162, // alpha = 0.03048627 + 19387, 46600, 19563, 17879, // alpha = 0.03628118 + 19095, 46599, 19335, 17658, // alpha = 0.04258 + 18863, 46598, 19071, 17482, // alpha = 0.04938272 + 18676, 46597, 18856, 17274, // alpha = 0.05668934 + 18523, 46595, 18681, 17044, // alpha = 0.06449988 + 18360, 46592, 18536, 16852, // alpha = 0.07281432 + 18149, 46590, 18397, 16692, // alpha = 0.08163266 + 17969, 46586, 18192, 16556, // alpha = 0.09095491 + 17816, 46583, 18016, 16440, // alpha = 0.1007811 + 17684, 46578, 17866, 16295, // alpha = 0.1111111 + 17569, 46573, 17735, 16122, // alpha = 0.1219451 + 17471, 46567, 17621, 15972, // alpha = 0.1332829 + 17358, 46560, 17520, 15838, // alpha = 0.1451247 + 17205, 46552, 17432, 15722, // alpha = 0.1574704 + 17069, 46543, 17301, 15618, // alpha = 0.17032 + 16948, 46533, 17161, 15526, // alpha = 0.1836735 + 16841, 46521, 17037, 15442, // alpha = 0.1975309 + 16744, 46508, 16925, 15367, // alpha = 0.2118922 + 16657, 46493, 16826, 15240, // alpha = 0.2267574 + 16579, 46476, 16734, 15117, // alpha = 0.2421265 + 16509, 46457, 16652, 15005, // alpha = 0.2579995 + 16445, 46436, 16577, 14903, // alpha = 0.2743765 + 16387, 46412, 16509, 14807, // alpha = 0.2912573 + 16281, 46385, 16446, 14718, // alpha = 0.308642 + 16186, 46355, 16389, 14636, // alpha = 0.3265306 + 16097, 46322, 16290, 14560, // alpha = 0.3449232 + 16017, 46287, 16192, 14487, // alpha = 0.3638196 + 15942, 46249, 16104, 14418, // alpha = 0.38322 + 15875, 46207, 16020, 14353, // alpha = 0.4031242 + 15812, 46164, 15945, 14246, // alpha = 0.4235324 + 15755, 46117, 15873, 14126, // alpha = 0.4444445 + 15701, 46058, 15807, 14012, // alpha = 0.4658605 + 15652, 45957, 15746, 13901, // alpha = 0.4877803 + 15606, 45852, 15690, 13796, // alpha = 0.5102041 + 15564, 45745, 15639, 13692, // alpha = 0.5331318 + 15525, 45636, 15589, 13592, // alpha = 0.5565634 + 15489, 45526, 15545, 13496, // alpha = 0.5804989 + 15455, 45415, 15503, 13403, // alpha = 0.6049383 + 15425, 45304, 15466, 13313, // alpha = 0.6298816 + 15397, 45194, 15432, 13143, // alpha = 0.6553288 + 15371, 45085, 15401, 12975, // alpha = 0.68128 + 15335, 44896, 15372, 12817, // alpha = 0.7077349 + 15291, 44675, 15332, 12663, // alpha = 0.7346939 + 15250, 44462, 15282, 12515, // alpha = 0.7621567 + 15213, 44256, 15238, 12372, // alpha = 0.7901235 + 15178, 44055, 15197, 12190, // alpha = 0.8185941 + 15145, 43680, 15160, 11928, // alpha = 0.8475687 + 15115, 43303, 15125, 11678, // alpha = 0.8770471 + 15087, 42872, 15094, 11444, // alpha = 0.9070295 + 15061, 42154, 15065, 11170, // alpha = 0.9375157 + 15036, 40969, 15038, 10730, // alpha = 0.9685059 + 15013, 6221, 15013, 10318, // alpha = 1 + + // Cos (theta) = 0.9271857 + 23640, 46711, 23816, 22276, // alpha = 0.001 + 23640, 46711, 23816, 22276, // alpha = 0.001 + 23640, 46711, 23817, 22278, // alpha = 0.001007811 + 23480, 46711, 23701, 22076, // alpha = 0.002267574 + 22626, 46711, 22804, 21269, // alpha = 0.004031243 + 21911, 46711, 22144, 20612, // alpha = 0.006298816 + 21447, 46711, 21635, 20041, // alpha = 0.009070295 + 20917, 46711, 21158, 19613, // alpha = 0.01234568 + 20573, 46710, 20759, 19213, // alpha = 0.01612497 + 20201, 46710, 20484, 18837, // alpha = 0.02040816 + 19865, 46709, 20097, 18566, // alpha = 0.02519527 + 19615, 46709, 19809, 18296, // alpha = 0.03048627 + 19398, 46708, 19588, 17991, // alpha = 0.03628118 + 19103, 46707, 19379, 17753, // alpha = 0.04258 + 18870, 46706, 19108, 17565, // alpha = 0.04938272 + 18683, 46704, 18889, 17413, // alpha = 0.05668934 + 18529, 46702, 18710, 17170, // alpha = 0.06449988 + 18370, 46699, 18562, 16964, // alpha = 0.07281432 + 18157, 46696, 18437, 16791, // alpha = 0.08163266 + 17977, 46693, 18232, 16645, // alpha = 0.09095491 + 17822, 46688, 18053, 16519, // alpha = 0.1007811 + 17690, 46683, 17899, 16413, // alpha = 0.1111111 + 17575, 46678, 17764, 16256, // alpha = 0.1219451 + 17475, 46671, 17648, 16093, // alpha = 0.1332829 + 17369, 46663, 17545, 15951, // alpha = 0.1451247 + 17214, 46655, 17456, 15825, // alpha = 0.1574704 + 17077, 46645, 17343, 15713, // alpha = 0.17032 + 16955, 46633, 17200, 15613, // alpha = 0.1836735 + 16848, 46621, 17073, 15525, // alpha = 0.1975309 + 16751, 46606, 16959, 15444, // alpha = 0.2118922 + 16663, 46590, 16855, 15371, // alpha = 0.2267574 + 16585, 46571, 16762, 15250, // alpha = 0.2421265 + 16514, 46550, 16677, 15130, // alpha = 0.2579995 + 16450, 46527, 16601, 15019, // alpha = 0.2743765 + 16390, 46501, 16531, 14916, // alpha = 0.2912573 + 16292, 46472, 16467, 14821, // alpha = 0.308642 + 16195, 46439, 16408, 14733, // alpha = 0.3265306 + 16106, 46404, 16325, 14649, // alpha = 0.3449232 + 16024, 46366, 16226, 14572, // alpha = 0.3638196 + 15950, 46325, 16132, 14499, // alpha = 0.38322 + 15881, 46281, 16048, 14427, // alpha = 0.4031242 + 15819, 46234, 15969, 14362, // alpha = 0.4235324 + 15760, 46185, 15896, 14256, // alpha = 0.4444445 + 15707, 46134, 15828, 14137, // alpha = 0.4658605 + 15657, 46080, 15766, 14016, // alpha = 0.4877803 + 15611, 45969, 15706, 13901, // alpha = 0.5102041 + 15568, 45856, 15653, 13791, // alpha = 0.5331318 + 15529, 45740, 15603, 13684, // alpha = 0.5565634 + 15493, 45624, 15558, 13582, // alpha = 0.5804989 + 15459, 45507, 15514, 13482, // alpha = 0.6049383 + 15428, 45390, 15476, 13387, // alpha = 0.6298816 + 15400, 45273, 15441, 13277, // alpha = 0.6553288 + 15374, 45158, 15408, 13100, // alpha = 0.68128 + 15341, 45030, 15379, 12931, // alpha = 0.7077349 + 15297, 44800, 15342, 12767, // alpha = 0.7346939 + 15255, 44572, 15292, 12608, // alpha = 0.7621567 + 15217, 44352, 15246, 12457, // alpha = 0.7901235 + 15182, 44141, 15204, 12314, // alpha = 0.8185941 + 15150, 43837, 15167, 12062, // alpha = 0.8475687 + 15119, 43426, 15130, 11796, // alpha = 0.8770471 + 15091, 43039, 15098, 11542, // alpha = 0.9070295 + 15063, 42321, 15068, 11302, // alpha = 0.9375157 + 15039, 41209, 15041, 10872, // alpha = 0.9685059 + 15016, 5146, 15016, 10431, // alpha = 1 + + // Cos (theta) = 0.9183673 + 23638, 46821, 23866, 22394, // alpha = 0.001 + 23638, 46821, 23866, 22394, // alpha = 0.001 + 23645, 46821, 23856, 22405, // alpha = 0.001007811 + 23520, 46821, 23720, 22218, // alpha = 0.002267574 + 22631, 46821, 22844, 21398, // alpha = 0.004031243 + 21920, 46821, 22181, 20697, // alpha = 0.006298816 + 21456, 46821, 21664, 20155, // alpha = 0.009070295 + 20926, 46821, 21195, 19699, // alpha = 0.01234568 + 20580, 46820, 20791, 19345, // alpha = 0.01612497 + 20209, 46820, 20509, 18939, // alpha = 0.02040816 + 19871, 46819, 20140, 18648, // alpha = 0.02519527 + 19621, 46819, 19843, 18433, // alpha = 0.03048627 + 19409, 46818, 19617, 18108, // alpha = 0.03628118 + 19112, 46817, 19428, 17852, // alpha = 0.04258 + 18879, 46815, 19150, 17651, // alpha = 0.04938272 + 18689, 46813, 18926, 17487, // alpha = 0.05668934 + 18536, 46811, 18742, 17302, // alpha = 0.06449988 + 18381, 46808, 18590, 17079, // alpha = 0.07281432 + 18166, 46805, 18463, 16893, // alpha = 0.08163266 + 17984, 46801, 18277, 16736, // alpha = 0.09095491 + 17830, 46796, 18093, 16604, // alpha = 0.1007811 + 17697, 46791, 17934, 16488, // alpha = 0.1111111 + 17582, 46785, 17797, 16389, // alpha = 0.1219451 + 17481, 46777, 17678, 16219, // alpha = 0.1332829 + 17378, 46769, 17573, 16066, // alpha = 0.1451247 + 17223, 46759, 17481, 15931, // alpha = 0.1574704 + 17085, 46748, 17389, 15811, // alpha = 0.17032 + 16963, 46736, 17246, 15705, // alpha = 0.1836735 + 16855, 46722, 17113, 15609, // alpha = 0.1975309 + 16757, 46706, 16996, 15522, // alpha = 0.2118922 + 16670, 46688, 16889, 15444, // alpha = 0.2267574 + 16591, 46668, 16794, 15374, // alpha = 0.2421265 + 16519, 46645, 16707, 15257, // alpha = 0.2579995 + 16454, 46620, 16628, 15138, // alpha = 0.2743765 + 16395, 46591, 16555, 15028, // alpha = 0.2912573 + 16301, 46560, 16489, 14926, // alpha = 0.308642 + 16203, 46524, 16429, 14830, // alpha = 0.3265306 + 16113, 46487, 16362, 14743, // alpha = 0.3449232 + 16032, 46446, 16261, 14658, // alpha = 0.3638196 + 15956, 46402, 16165, 14579, // alpha = 0.38322 + 15888, 46355, 16077, 14504, // alpha = 0.4031242 + 15824, 46306, 15996, 14432, // alpha = 0.4235324 + 15767, 46253, 15920, 14365, // alpha = 0.4444445 + 15712, 46199, 15851, 14260, // alpha = 0.4658605 + 15662, 46142, 15786, 14132, // alpha = 0.4877803 + 15617, 46084, 15726, 14012, // alpha = 0.5102041 + 15573, 45968, 15670, 13893, // alpha = 0.5331318 + 15534, 45846, 15618, 13780, // alpha = 0.5565634 + 15498, 45723, 15571, 13669, // alpha = 0.5804989 + 15464, 45600, 15527, 13563, // alpha = 0.6049383 + 15432, 45476, 15487, 13460, // alpha = 0.6298816 + 15404, 45353, 15450, 13362, // alpha = 0.6553288 + 15378, 45231, 15416, 13227, // alpha = 0.68128 + 15348, 45111, 15386, 13048, // alpha = 0.7077349 + 15303, 44929, 15355, 12876, // alpha = 0.7346939 + 15261, 44689, 15303, 12707, // alpha = 0.7621567 + 15222, 44455, 15256, 12544, // alpha = 0.7901235 + 15187, 44229, 15213, 12390, // alpha = 0.8185941 + 15154, 43989, 15173, 12203, // alpha = 0.8475687 + 15123, 43566, 15136, 11919, // alpha = 0.8770471 + 15094, 43149, 15103, 11650, // alpha = 0.9070295 + 15067, 42501, 15072, 11391, // alpha = 0.9375157 + 15042, 41478, 15044, 11031, // alpha = 0.9685059 + 15018, 36835, 15018, 10556, // alpha = 1 + + // Cos (theta) = 0.9090451 + 23651, 46934, 23887, 22533, // alpha = 0.001 + 23651, 46934, 23887, 22533, // alpha = 0.001 + 23656, 46934, 23877, 22538, // alpha = 0.001007811 + 23498, 46934, 23757, 22308, // alpha = 0.002267574 + 22634, 46934, 22883, 21516, // alpha = 0.004031243 + 21922, 46933, 22238, 20778, // alpha = 0.006298816 + 21467, 46933, 21694, 20276, // alpha = 0.009070295 + 20933, 46933, 21244, 19786, // alpha = 0.01234568 + 20586, 46933, 20824, 19468, // alpha = 0.01612497 + 20219, 46932, 20538, 19046, // alpha = 0.02040816 + 19880, 46932, 20184, 18736, // alpha = 0.02519527 + 19628, 46931, 19878, 18505, // alpha = 0.03048627 + 19419, 46930, 19649, 18228, // alpha = 0.03628118 + 19123, 46929, 19468, 17956, // alpha = 0.04258 + 18886, 46927, 19196, 17738, // alpha = 0.04938272 + 18696, 46925, 18965, 17564, // alpha = 0.05668934 + 18540, 46923, 18776, 17421, // alpha = 0.06449988 + 18392, 46919, 18622, 17199, // alpha = 0.07281432 + 18176, 46916, 18490, 17001, // alpha = 0.08163266 + 17993, 46911, 18327, 16832, // alpha = 0.09095491 + 17838, 46906, 18138, 16690, // alpha = 0.1007811 + 17705, 46900, 17976, 16567, // alpha = 0.1111111 + 17587, 46893, 17834, 16459, // alpha = 0.1219451 + 17487, 46885, 17712, 16349, // alpha = 0.1332829 + 17389, 46876, 17603, 16186, // alpha = 0.1451247 + 17232, 46866, 17509, 16041, // alpha = 0.1574704 + 17094, 46854, 17425, 15913, // alpha = 0.17032 + 16972, 46840, 17289, 15799, // alpha = 0.1836735 + 16863, 46825, 17156, 15696, // alpha = 0.1975309 + 16765, 46807, 17034, 15604, // alpha = 0.2118922 + 16677, 46788, 16926, 15521, // alpha = 0.2267574 + 16597, 46766, 16827, 15444, // alpha = 0.2421265 + 16525, 46741, 16737, 15374, // alpha = 0.2579995 + 16460, 46713, 16657, 15261, // alpha = 0.2743765 + 16400, 46682, 16582, 15144, // alpha = 0.2912573 + 16309, 46648, 16514, 15034, // alpha = 0.308642 + 16212, 46610, 16451, 14933, // alpha = 0.3265306 + 16121, 46570, 16394, 14836, // alpha = 0.3449232 + 16040, 46526, 16298, 14747, // alpha = 0.3638196 + 15964, 46480, 16200, 14663, // alpha = 0.38322 + 15895, 46430, 16108, 14582, // alpha = 0.4031242 + 15832, 46377, 16025, 14505, // alpha = 0.4235324 + 15773, 46322, 15947, 14433, // alpha = 0.4444445 + 15719, 46264, 15875, 14363, // alpha = 0.4658605 + 15669, 46205, 15808, 14254, // alpha = 0.4877803 + 15623, 46143, 15746, 14123, // alpha = 0.5102041 + 15579, 46080, 15688, 13998, // alpha = 0.5331318 + 15539, 45953, 15634, 13873, // alpha = 0.5565634 + 15503, 45824, 15585, 13759, // alpha = 0.5804989 + 15468, 45694, 15539, 13646, // alpha = 0.6049383 + 15437, 45564, 15498, 13539, // alpha = 0.6298816 + 15408, 45435, 15459, 13434, // alpha = 0.6553288 + 15381, 45307, 15425, 13333, // alpha = 0.68128 + 15354, 45181, 15393, 13164, // alpha = 0.7077349 + 15310, 45056, 15364, 12983, // alpha = 0.7346939 + 15268, 44809, 15315, 12808, // alpha = 0.7621567 + 15228, 44561, 15266, 12635, // alpha = 0.7901235 + 15192, 44323, 15221, 12472, // alpha = 0.8185941 + 15158, 44094, 15180, 12318, // alpha = 0.8475687 + 15127, 43709, 15142, 12044, // alpha = 0.8770471 + 15098, 43267, 15108, 11761, // alpha = 0.9070295 + 15071, 42695, 15077, 11488, // alpha = 0.9375157 + 15045, 41787, 15047, 11187, // alpha = 0.9685059 + 15021, 39027, 15021, 10689, // alpha = 1 + + // Cos (theta) = 0.8992189 + 23654, 47049, 23908, 22600, // alpha = 0.001 + 23654, 47049, 23908, 22600, // alpha = 0.001 + 23672, 47049, 23907, 22618, // alpha = 0.001007811 + 23517, 47049, 23775, 22439, // alpha = 0.002267574 + 22641, 47049, 22911, 21587, // alpha = 0.004031243 + 21935, 47049, 22277, 20872, // alpha = 0.006298816 + 21474, 47049, 21729, 20395, // alpha = 0.009070295 + 20941, 47048, 21294, 19877, // alpha = 0.01234568 + 20593, 47048, 20864, 19538, // alpha = 0.01612497 + 20230, 47048, 20567, 19157, // alpha = 0.02040816 + 19889, 47047, 20232, 18826, // alpha = 0.02519527 + 19636, 47046, 19920, 18579, // alpha = 0.03048627 + 19433, 47045, 19682, 18354, // alpha = 0.03628118 + 19132, 47044, 19498, 18061, // alpha = 0.04258 + 18896, 47042, 19245, 17831, // alpha = 0.04938272 + 18703, 47039, 19010, 17643, // alpha = 0.05668934 + 18548, 47037, 18816, 17492, // alpha = 0.06449988 + 18403, 47033, 18655, 17322, // alpha = 0.07281432 + 18186, 47029, 18520, 17111, // alpha = 0.08163266 + 18003, 47025, 18381, 16933, // alpha = 0.09095491 + 17847, 47019, 18185, 16780, // alpha = 0.1007811 + 17711, 47012, 18019, 16648, // alpha = 0.1111111 + 17595, 47005, 17875, 16534, // alpha = 0.1219451 + 17493, 46996, 17748, 16435, // alpha = 0.1332829 + 17400, 46986, 17637, 16310, // alpha = 0.1451247 + 17244, 46974, 17539, 16156, // alpha = 0.1574704 + 17104, 46961, 17451, 16018, // alpha = 0.17032 + 16982, 46946, 17341, 15897, // alpha = 0.1836735 + 16871, 46929, 17202, 15787, // alpha = 0.1975309 + 16772, 46910, 17079, 15687, // alpha = 0.2118922 + 16683, 46889, 16966, 15599, // alpha = 0.2267574 + 16603, 46865, 16863, 15517, // alpha = 0.2421265 + 16531, 46838, 16772, 15443, // alpha = 0.2579995 + 16466, 46808, 16687, 15374, // alpha = 0.2743765 + 16406, 46774, 16611, 15262, // alpha = 0.2912573 + 16319, 46737, 16540, 15146, // alpha = 0.308642 + 16219, 46697, 16476, 15035, // alpha = 0.3265306 + 16131, 46654, 16416, 14935, // alpha = 0.3449232 + 16047, 46607, 16338, 14839, // alpha = 0.3638196 + 15972, 46558, 16238, 14749, // alpha = 0.38322 + 15902, 46505, 16143, 14663, // alpha = 0.4031242 + 15838, 46449, 16056, 14580, // alpha = 0.4235324 + 15780, 46391, 15976, 14503, // alpha = 0.4444445 + 15726, 46330, 15901, 14428, // alpha = 0.4658605 + 15675, 46267, 15831, 14356, // alpha = 0.4877803 + 15628, 46203, 15767, 14239, // alpha = 0.5102041 + 15585, 46137, 15707, 14104, // alpha = 0.5331318 + 15545, 46060, 15651, 13976, // alpha = 0.5565634 + 15507, 45925, 15600, 13851, // alpha = 0.5804989 + 15473, 45789, 15553, 13731, // alpha = 0.6049383 + 15442, 45653, 15510, 13618, // alpha = 0.6298816 + 15412, 45518, 15471, 13506, // alpha = 0.6553288 + 15386, 45384, 15435, 13404, // alpha = 0.68128 + 15361, 45252, 15402, 13290, // alpha = 0.7077349 + 15316, 45121, 15371, 13096, // alpha = 0.7346939 + 15274, 44931, 15328, 12908, // alpha = 0.7621567 + 15235, 44674, 15277, 12731, // alpha = 0.7901235 + 15198, 44422, 15231, 12557, // alpha = 0.8185941 + 15164, 44178, 15189, 12393, // alpha = 0.8475687 + 15132, 43858, 15148, 12173, // alpha = 0.8770471 + 15102, 43405, 15114, 11882, // alpha = 0.9070295 + 15075, 42896, 15081, 11589, // alpha = 0.9375157 + 15049, 42060, 15051, 11315, // alpha = 0.9685059 + 15024, 40002, 15024, 10832, // alpha = 1 + + // Cos (theta) = 0.8888889 + 23665, 47136, 23976, 22676, // alpha = 0.001 + 23665, 47136, 23976, 22676, // alpha = 0.001 + 23660, 47136, 23975, 22671, // alpha = 0.001007811 + 23511, 47136, 23798, 22539, // alpha = 0.002267574 + 22644, 47135, 22951, 21655, // alpha = 0.004031243 + 21940, 47135, 22333, 20961, // alpha = 0.006298816 + 21494, 47135, 21766, 20506, // alpha = 0.009070295 + 20949, 47135, 21350, 19971, // alpha = 0.01234568 + 20599, 47135, 20906, 19611, // alpha = 0.01612497 + 20241, 47135, 20601, 19273, // alpha = 0.02040816 + 19897, 47134, 20285, 18918, // alpha = 0.02519527 + 19644, 47134, 19964, 18657, // alpha = 0.03048627 + 19445, 47133, 19720, 18457, // alpha = 0.03628118 + 19144, 47133, 19529, 18172, // alpha = 0.04258 + 18904, 47132, 19301, 17925, // alpha = 0.04938272 + 18712, 47130, 19056, 17728, // alpha = 0.05668934 + 18555, 47129, 18858, 17565, // alpha = 0.06449988 + 18417, 47127, 18691, 17431, // alpha = 0.07281432 + 18197, 47125, 18553, 17226, // alpha = 0.08163266 + 18014, 47122, 18435, 17036, // alpha = 0.09095491 + 17855, 47119, 18240, 16873, // alpha = 0.1007811 + 17719, 47115, 18067, 16732, // alpha = 0.1111111 + 17602, 47111, 17918, 16610, // alpha = 0.1219451 + 17500, 47106, 17787, 16504, // alpha = 0.1332829 + 17410, 47098, 17673, 16412, // alpha = 0.1451247 + 17255, 47085, 17572, 16274, // alpha = 0.1574704 + 17114, 47071, 17481, 16127, // alpha = 0.17032 + 16991, 47054, 17395, 15998, // alpha = 0.1836735 + 16880, 47036, 17253, 15881, // alpha = 0.1975309 + 16780, 47015, 17125, 15775, // alpha = 0.2118922 + 16692, 46992, 17008, 15680, // alpha = 0.2267574 + 16610, 46966, 16903, 15592, // alpha = 0.2421265 + 16538, 46936, 16809, 15513, // alpha = 0.2579995 + 16472, 46904, 16721, 15441, // alpha = 0.2743765 + 16411, 46867, 16642, 15373, // alpha = 0.2912573 + 16329, 46828, 16569, 15260, // alpha = 0.308642 + 16230, 46785, 16502, 15144, // alpha = 0.3265306 + 16140, 46739, 16440, 15035, // alpha = 0.3449232 + 16058, 46689, 16382, 14934, // alpha = 0.3638196 + 15980, 46636, 16278, 14837, // alpha = 0.38322 + 15910, 46580, 16180, 14744, // alpha = 0.4031242 + 15846, 46521, 16089, 14659, // alpha = 0.4235324 + 15786, 46460, 16006, 14574, // alpha = 0.4444445 + 15732, 46396, 15927, 14495, // alpha = 0.4658605 + 15682, 46330, 15856, 14419, // alpha = 0.4877803 + 15635, 46263, 15789, 14346, // alpha = 0.5102041 + 15591, 46194, 15727, 14214, // alpha = 0.5331318 + 15551, 46124, 15669, 14081, // alpha = 0.5565634 + 15513, 46027, 15616, 13947, // alpha = 0.5804989 + 15479, 45885, 15568, 13820, // alpha = 0.6049383 + 15447, 45744, 15523, 13699, // alpha = 0.6298816 + 15417, 45602, 15482, 13581, // alpha = 0.6553288 + 15390, 45463, 15445, 13471, // alpha = 0.68128 + 15365, 45325, 15410, 13364, // alpha = 0.7077349 + 15324, 45189, 15380, 13213, // alpha = 0.7346939 + 15281, 45054, 15341, 13014, // alpha = 0.7621567 + 15242, 44790, 15289, 12830, // alpha = 0.7901235 + 15204, 44527, 15242, 12646, // alpha = 0.8185941 + 15170, 44271, 15197, 12473, // alpha = 0.8475687 + 15138, 44014, 15157, 12306, // alpha = 0.8770471 + 15107, 43541, 15120, 12007, // alpha = 0.9070295 + 15079, 43079, 15086, 11704, // alpha = 0.9375157 + 15053, 42235, 15055, 11412, // alpha = 0.9685059 + 15028, 40608, 15027, 11000, // alpha = 1 + + // Cos (theta) = 0.8780549 + 23663, 47196, 24002, 22742, // alpha = 0.001 + 23663, 47196, 24002, 22742, // alpha = 0.001 + 23670, 47196, 24016, 22749, // alpha = 0.001007811 + 23557, 47196, 23871, 22626, // alpha = 0.002267574 + 22647, 47196, 23002, 21726, // alpha = 0.004031243 + 21951, 47196, 22396, 21059, // alpha = 0.006298816 + 21503, 47196, 21807, 20572, // alpha = 0.009070295 + 20963, 47196, 21407, 20074, // alpha = 0.01234568 + 20608, 47196, 20951, 19688, // alpha = 0.01612497 + 20252, 47195, 20638, 19391, // alpha = 0.02040816 + 19908, 47195, 20345, 19017, // alpha = 0.02519527 + 19652, 47195, 20013, 18737, // alpha = 0.03048627 + 19457, 47194, 19760, 18525, // alpha = 0.03628118 + 19156, 47193, 19563, 18288, // alpha = 0.04258 + 18915, 47192, 19360, 18026, // alpha = 0.04938272 + 18722, 47191, 19108, 17815, // alpha = 0.05668934 + 18563, 47189, 18902, 17641, // alpha = 0.06449988 + 18429, 47187, 18731, 17497, // alpha = 0.07281432 + 18209, 47184, 18589, 17346, // alpha = 0.08163266 + 18024, 47181, 18468, 17144, // alpha = 0.09095491 + 17865, 47178, 18296, 16970, // alpha = 0.1007811 + 17729, 47174, 18118, 16821, // alpha = 0.1111111 + 17610, 47170, 17963, 16691, // alpha = 0.1219451 + 17507, 47164, 17829, 16578, // alpha = 0.1332829 + 17416, 47158, 17711, 16478, // alpha = 0.1451247 + 17266, 47151, 17608, 16390, // alpha = 0.1574704 + 17126, 47143, 17514, 16243, // alpha = 0.17032 + 17001, 47134, 17432, 16103, // alpha = 0.1836735 + 16889, 47124, 17308, 15977, // alpha = 0.1975309 + 16789, 47113, 17175, 15866, // alpha = 0.2118922 + 16699, 47097, 17056, 15764, // alpha = 0.2267574 + 16618, 47068, 16946, 15671, // alpha = 0.2421265 + 16544, 47036, 16848, 15586, // alpha = 0.2579995 + 16478, 47001, 16757, 15508, // alpha = 0.2743765 + 16418, 46961, 16675, 15436, // alpha = 0.2912573 + 16342, 46919, 16599, 15370, // alpha = 0.308642 + 16241, 46873, 16531, 15256, // alpha = 0.3265306 + 16149, 46824, 16466, 15140, // alpha = 0.3449232 + 16066, 46771, 16407, 15031, // alpha = 0.3638196 + 15989, 46715, 16321, 14928, // alpha = 0.38322 + 15920, 46656, 16219, 14831, // alpha = 0.4031242 + 15853, 46593, 16127, 14737, // alpha = 0.4235324 + 15793, 46529, 16037, 14649, // alpha = 0.4444445 + 15740, 46462, 15958, 14566, // alpha = 0.4658605 + 15688, 46393, 15883, 14484, // alpha = 0.4877803 + 15641, 46323, 15814, 14405, // alpha = 0.5102041 + 15597, 46251, 15749, 14324, // alpha = 0.5331318 + 15557, 46179, 15689, 14182, // alpha = 0.5565634 + 15520, 46105, 15635, 14045, // alpha = 0.5804989 + 15484, 45983, 15584, 13912, // alpha = 0.6049383 + 15452, 45836, 15537, 13783, // alpha = 0.6298816 + 15422, 45689, 15495, 13659, // alpha = 0.6553288 + 15395, 45543, 15456, 13544, // alpha = 0.68128 + 15369, 45399, 15421, 13431, // alpha = 0.7077349 + 15332, 45257, 15388, 13323, // alpha = 0.7346939 + 15288, 45118, 15356, 13127, // alpha = 0.7621567 + 15249, 44908, 15303, 12930, // alpha = 0.7901235 + 15211, 44638, 15252, 12739, // alpha = 0.8185941 + 15175, 44369, 15207, 12556, // alpha = 0.8475687 + 15143, 44109, 15164, 12378, // alpha = 0.8770471 + 15112, 43686, 15127, 12138, // alpha = 0.9070295 + 15084, 43206, 15092, 11819, // alpha = 0.9375157 + 15057, 42461, 15060, 11510, // alpha = 0.9685059 + 15032, 41097, 15031, 11173, // alpha = 1 + + // Cos (theta) = 0.866717 + 23676, 47259, 24070, 22825, // alpha = 0.001 + 23676, 47259, 24070, 22825, // alpha = 0.001 + 23689, 47259, 24075, 22841, // alpha = 0.001007811 + 23557, 47259, 23891, 22688, // alpha = 0.002267574 + 22656, 47259, 23061, 21806, // alpha = 0.004031243 + 21968, 47259, 22457, 21168, // alpha = 0.006298816 + 21511, 47258, 21854, 20642, // alpha = 0.009070295 + 20972, 47258, 21473, 20176, // alpha = 0.01234568 + 20617, 47258, 21000, 19768, // alpha = 0.01612497 + 20266, 47258, 20677, 19487, // alpha = 0.02040816 + 19918, 47257, 20410, 19118, // alpha = 0.02519527 + 19659, 47257, 20066, 18820, // alpha = 0.03048627 + 19464, 47256, 19805, 18596, // alpha = 0.03628118 + 19167, 47255, 19603, 18408, // alpha = 0.04258 + 18925, 47254, 19426, 18129, // alpha = 0.04938272 + 18729, 47252, 19166, 17904, // alpha = 0.05668934 + 18570, 47251, 18954, 17720, // alpha = 0.06449988 + 18437, 47248, 18777, 17567, // alpha = 0.07281432 + 18223, 47246, 18628, 17440, // alpha = 0.08163266 + 18036, 47242, 18503, 17257, // alpha = 0.09095491 + 17876, 47239, 18360, 17073, // alpha = 0.1007811 + 17738, 47234, 18175, 16913, // alpha = 0.1111111 + 17618, 47229, 18017, 16774, // alpha = 0.1219451 + 17515, 47224, 17876, 16654, // alpha = 0.1332829 + 17424, 47217, 17755, 16548, // alpha = 0.1451247 + 17280, 47209, 17646, 16456, // alpha = 0.1574704 + 17137, 47201, 17550, 16360, // alpha = 0.17032 + 17011, 47191, 17465, 16212, // alpha = 0.1836735 + 16898, 47180, 17369, 16079, // alpha = 0.1975309 + 16798, 47168, 17230, 15960, // alpha = 0.2118922 + 16707, 47154, 17106, 15851, // alpha = 0.2267574 + 16626, 47138, 16991, 15753, // alpha = 0.2421265 + 16551, 47121, 16890, 15662, // alpha = 0.2579995 + 16484, 47099, 16797, 15579, // alpha = 0.2743765 + 16424, 47057, 16711, 15502, // alpha = 0.2912573 + 16353, 47012, 16634, 15431, // alpha = 0.308642 + 16252, 46963, 16561, 15365, // alpha = 0.3265306 + 16162, 46910, 16494, 15249, // alpha = 0.3449232 + 16077, 46854, 16433, 15132, // alpha = 0.3638196 + 15997, 46794, 16366, 15019, // alpha = 0.38322 + 15928, 46732, 16262, 14918, // alpha = 0.4031242 + 15863, 46667, 16164, 14820, // alpha = 0.4235324 + 15802, 46599, 16075, 14726, // alpha = 0.4444445 + 15748, 46529, 15991, 14637, // alpha = 0.4658605 + 15695, 46457, 15911, 14550, // alpha = 0.4877803 + 15647, 46384, 15840, 14467, // alpha = 0.5102041 + 15604, 46309, 15772, 14390, // alpha = 0.5331318 + 15562, 46234, 15710, 14293, // alpha = 0.5565634 + 15526, 46157, 15654, 14145, // alpha = 0.5804989 + 15491, 46081, 15601, 14004, // alpha = 0.6049383 + 15458, 45929, 15553, 13871, // alpha = 0.6298816 + 15428, 45777, 15509, 13742, // alpha = 0.6553288 + 15400, 45626, 15468, 13616, // alpha = 0.68128 + 15374, 45476, 15431, 13501, // alpha = 0.7077349 + 15341, 45328, 15398, 13385, // alpha = 0.7346939 + 15296, 45183, 15366, 13242, // alpha = 0.7621567 + 15257, 45026, 15317, 13034, // alpha = 0.7901235 + 15218, 44749, 15265, 12836, // alpha = 0.8185941 + 15182, 44475, 15217, 12643, // alpha = 0.8475687 + 15149, 44201, 15174, 12458, // alpha = 0.8770471 + 15118, 43845, 15134, 12274, // alpha = 0.9070295 + 15089, 43338, 15098, 11942, // alpha = 0.9375157 + 15062, 42701, 15066, 11621, // alpha = 0.9685059 + 15036, 41498, 15035, 11307, // alpha = 1 + + // Cos (theta) = 0.8548753 + 23689, 47323, 24118, 22914, // alpha = 0.001 + 23689, 47323, 24118, 22914, // alpha = 0.001 + 23690, 47323, 24118, 22914, // alpha = 0.001007811 + 23576, 47323, 23961, 22776, // alpha = 0.002267574 + 22673, 47323, 23107, 21900, // alpha = 0.004031243 + 21971, 47323, 22524, 21266, // alpha = 0.006298816 + 21521, 47323, 21899, 20719, // alpha = 0.009070295 + 20983, 47323, 21526, 20285, // alpha = 0.01234568 + 20626, 47322, 21054, 19852, // alpha = 0.01612497 + 20282, 47322, 20719, 19555, // alpha = 0.02040816 + 19929, 47322, 20479, 19225, // alpha = 0.02519527 + 19669, 47321, 20125, 18909, // alpha = 0.03048627 + 19472, 47320, 19854, 18670, // alpha = 0.03628118 + 19181, 47319, 19643, 18484, // alpha = 0.04258 + 18936, 47318, 19476, 18238, // alpha = 0.04938272 + 18738, 47316, 19227, 17997, // alpha = 0.05668934 + 18579, 47314, 19006, 17803, // alpha = 0.06449988 + 18446, 47312, 18824, 17642, // alpha = 0.07281432 + 18236, 47309, 18671, 17506, // alpha = 0.08163266 + 18048, 47305, 18541, 17375, // alpha = 0.09095491 + 17885, 47301, 18429, 17176, // alpha = 0.1007811 + 17747, 47296, 18239, 17007, // alpha = 0.1111111 + 17627, 47291, 18071, 16862, // alpha = 0.1219451 + 17523, 47284, 17928, 16734, // alpha = 0.1332829 + 17431, 47277, 17801, 16621, // alpha = 0.1451247 + 17293, 47269, 17688, 16522, // alpha = 0.1574704 + 17150, 47259, 17589, 16434, // alpha = 0.17032 + 17023, 47249, 17500, 16327, // alpha = 0.1836735 + 16909, 47237, 17421, 16185, // alpha = 0.1975309 + 16807, 47223, 17289, 16057, // alpha = 0.2118922 + 16715, 47208, 17163, 15941, // alpha = 0.2267574 + 16633, 47191, 17045, 15837, // alpha = 0.2421265 + 16559, 47172, 16936, 15740, // alpha = 0.2579995 + 16491, 47151, 16839, 15653, // alpha = 0.2743765 + 16430, 47129, 16750, 15571, // alpha = 0.2912573 + 16365, 47105, 16669, 15496, // alpha = 0.308642 + 16264, 47053, 16594, 15425, // alpha = 0.3265306 + 16171, 46997, 16525, 15359, // alpha = 0.3449232 + 16087, 46937, 16459, 15236, // alpha = 0.3638196 + 16008, 46874, 16400, 15119, // alpha = 0.38322 + 15937, 46808, 16307, 15009, // alpha = 0.4031242 + 15871, 46740, 16206, 14904, // alpha = 0.4235324 + 15811, 46669, 16111, 14804, // alpha = 0.4444445 + 15754, 46596, 16024, 14710, // alpha = 0.4658605 + 15703, 46521, 15943, 14619, // alpha = 0.4877803 + 15655, 46445, 15867, 14532, // alpha = 0.5102041 + 15611, 46368, 15798, 14449, // alpha = 0.5331318 + 15571, 46289, 15734, 14369, // alpha = 0.5565634 + 15532, 46211, 15674, 14247, // alpha = 0.5804989 + 15496, 46131, 15619, 14101, // alpha = 0.6049383 + 15464, 46024, 15569, 13959, // alpha = 0.6298816 + 15433, 45866, 15523, 13822, // alpha = 0.6553288 + 15405, 45709, 15481, 13692, // alpha = 0.68128 + 15379, 45554, 15443, 13570, // alpha = 0.7077349 + 15350, 45402, 15407, 13452, // alpha = 0.7346939 + 15305, 45251, 15375, 13337, // alpha = 0.7621567 + 15264, 45104, 15330, 13142, // alpha = 0.7901235 + 15226, 44864, 15278, 12935, // alpha = 0.8185941 + 15190, 44580, 15229, 12735, // alpha = 0.8475687 + 15156, 44302, 15183, 12541, // alpha = 0.8770471 + 15124, 44019, 15143, 12356, // alpha = 0.9070295 + 15094, 43487, 15105, 12071, // alpha = 0.9375157 + 15067, 42944, 15071, 11735, // alpha = 0.9685059 + 15041, 41948, 15040, 11413, // alpha = 1 + + // Cos (theta) = 0.8425296 + 23704, 47389, 24188, 23008, // alpha = 0.001 + 23704, 47389, 24188, 23008, // alpha = 0.001 + 23705, 47389, 24189, 23009, // alpha = 0.001007811 + 23570, 47389, 23993, 22836, // alpha = 0.002267574 + 22680, 47389, 23160, 21983, // alpha = 0.004031243 + 21981, 47389, 22567, 21375, // alpha = 0.006298816 + 21528, 47389, 21957, 20796, // alpha = 0.009070295 + 20995, 47389, 21563, 20400, // alpha = 0.01234568 + 20635, 47389, 21116, 19939, // alpha = 0.01612497 + 20292, 47388, 20771, 19621, // alpha = 0.02040816 + 19940, 47388, 20519, 19336, // alpha = 0.02519527 + 19679, 47387, 20188, 19002, // alpha = 0.03048627 + 19480, 47386, 19908, 18748, // alpha = 0.03628118 + 19194, 47385, 19688, 18549, // alpha = 0.04258 + 18948, 47384, 19515, 18352, // alpha = 0.04938272 + 18748, 47382, 19295, 18096, // alpha = 0.05668934 + 18587, 47380, 19067, 17890, // alpha = 0.06449988 + 18453, 47377, 18876, 17718, // alpha = 0.07281432 + 18249, 47374, 18717, 17574, // alpha = 0.08163266 + 18060, 47370, 18583, 17453, // alpha = 0.09095491 + 17897, 47365, 18468, 17288, // alpha = 0.1007811 + 17758, 47360, 18304, 17110, // alpha = 0.1111111 + 17637, 47354, 18132, 16953, // alpha = 0.1219451 + 17531, 47347, 17984, 16817, // alpha = 0.1332829 + 17437, 47339, 17850, 16696, // alpha = 0.1451247 + 17307, 47330, 17734, 16593, // alpha = 0.1574704 + 17162, 47319, 17631, 16498, // alpha = 0.17032 + 17035, 47308, 17539, 16415, // alpha = 0.1836735 + 16920, 47295, 17457, 16296, // alpha = 0.1975309 + 16818, 47280, 17357, 16160, // alpha = 0.2118922 + 16724, 47263, 17222, 16036, // alpha = 0.2267574 + 16642, 47245, 17098, 15926, // alpha = 0.2421265 + 16566, 47225, 16988, 15822, // alpha = 0.2579995 + 16499, 47202, 16886, 15729, // alpha = 0.2743765 + 16436, 47178, 16792, 15641, // alpha = 0.2912573 + 16379, 47152, 16707, 15562, // alpha = 0.308642 + 16276, 47124, 16629, 15487, // alpha = 0.3265306 + 16183, 47084, 16557, 15417, // alpha = 0.3449232 + 16098, 47021, 16490, 15343, // alpha = 0.3638196 + 16018, 46955, 16428, 15218, // alpha = 0.38322 + 15947, 46886, 16356, 15103, // alpha = 0.4031242 + 15882, 46814, 16249, 14992, // alpha = 0.4235324 + 15820, 46740, 16152, 14886, // alpha = 0.4444445 + 15763, 46663, 16060, 14785, // alpha = 0.4658605 + 15712, 46586, 15975, 14691, // alpha = 0.4877803 + 15663, 46507, 15897, 14598, // alpha = 0.5102041 + 15618, 46426, 15825, 14510, // alpha = 0.5331318 + 15577, 46345, 15758, 14426, // alpha = 0.5565634 + 15539, 46264, 15695, 14346, // alpha = 0.5804989 + 15502, 46182, 15638, 14199, // alpha = 0.6049383 + 15470, 46100, 15587, 14052, // alpha = 0.6298816 + 15439, 45958, 15539, 13907, // alpha = 0.6553288 + 15411, 45796, 15495, 13774, // alpha = 0.68128 + 15384, 45635, 15455, 13641, // alpha = 0.7077349 + 15359, 45477, 15418, 13518, // alpha = 0.7346939 + 15314, 45321, 15385, 13398, // alpha = 0.7621567 + 15271, 45169, 15348, 13257, // alpha = 0.7901235 + 15233, 44982, 15292, 13039, // alpha = 0.8185941 + 15197, 44691, 15241, 12827, // alpha = 0.8475687 + 15163, 44403, 15195, 12630, // alpha = 0.8770471 + 15131, 44120, 15152, 12436, // alpha = 0.9070295 + 15101, 43650, 15112, 12208, // alpha = 0.9375157 + 15073, 43116, 15077, 11856, // alpha = 0.9685059 + 15047, 42196, 15045, 11521, // alpha = 1 + + // Cos (theta) = 0.82968 + 23702, 47458, 24242, 23084, // alpha = 0.001 + 23702, 47458, 24242, 23084, // alpha = 0.001 + 23703, 47458, 24243, 23085, // alpha = 0.001007811 + 23583, 47458, 24088, 22923, // alpha = 0.002267574 + 22689, 47458, 23226, 22075, // alpha = 0.004031243 + 21995, 47458, 22607, 21495, // alpha = 0.006298816 + 21531, 47458, 22013, 20870, // alpha = 0.009070295 + 21007, 47458, 21607, 20499, // alpha = 0.01234568 + 20644, 47457, 21182, 20030, // alpha = 0.01612497 + 20311, 47457, 20820, 19696, // alpha = 0.02040816 + 19955, 47456, 20560, 19456, // alpha = 0.02519527 + 19689, 47456, 20257, 19099, // alpha = 0.03048627 + 19487, 47455, 19966, 18828, // alpha = 0.03628118 + 19207, 47453, 19738, 18618, // alpha = 0.04258 + 18961, 47452, 19559, 18452, // alpha = 0.04938272 + 18760, 47450, 19372, 18202, // alpha = 0.05668934 + 18597, 47447, 19132, 17982, // alpha = 0.06449988 + 18462, 47444, 18934, 17800, // alpha = 0.07281432 + 18265, 47441, 18769, 17647, // alpha = 0.08163266 + 18073, 47436, 18628, 17517, // alpha = 0.09095491 + 17909, 47431, 18509, 17406, // alpha = 0.1007811 + 17768, 47426, 18378, 17214, // alpha = 0.1111111 + 17646, 47419, 18201, 17048, // alpha = 0.1219451 + 17542, 47411, 18043, 16907, // alpha = 0.1332829 + 17447, 47402, 17908, 16778, // alpha = 0.1451247 + 17322, 47392, 17785, 16667, // alpha = 0.1574704 + 17176, 47381, 17677, 16567, // alpha = 0.17032 + 17047, 47368, 17581, 16478, // alpha = 0.1836735 + 16931, 47354, 17496, 16397, // alpha = 0.1975309 + 16828, 47338, 17418, 16267, // alpha = 0.2118922 + 16735, 47320, 17285, 16136, // alpha = 0.2267574 + 16651, 47300, 17158, 16017, // alpha = 0.2421265 + 16576, 47278, 17041, 15910, // alpha = 0.2579995 + 16506, 47254, 16936, 15807, // alpha = 0.2743765 + 16444, 47228, 16839, 15716, // alpha = 0.2912573 + 16388, 47200, 16749, 15631, // alpha = 0.308642 + 16287, 47170, 16666, 15551, // alpha = 0.3265306 + 16193, 47138, 16591, 15476, // alpha = 0.3449232 + 16108, 47105, 16521, 15407, // alpha = 0.3638196 + 16030, 47036, 16456, 15323, // alpha = 0.38322 + 15955, 46963, 16397, 15197, // alpha = 0.4031242 + 15889, 46888, 16299, 15082, // alpha = 0.4235324 + 15829, 46811, 16195, 14970, // alpha = 0.4444445 + 15772, 46732, 16099, 14864, // alpha = 0.4658605 + 15720, 46651, 16012, 14764, // alpha = 0.4877803 + 15672, 46569, 15930, 14667, // alpha = 0.5102041 + 15627, 46486, 15855, 14575, // alpha = 0.5331318 + 15585, 46402, 15786, 14486, // alpha = 0.5565634 + 15545, 46318, 15720, 14401, // alpha = 0.5804989 + 15509, 46233, 15660, 14302, // alpha = 0.6049383 + 15476, 46149, 15606, 14147, // alpha = 0.6298816 + 15445, 46050, 15556, 13999, // alpha = 0.6553288 + 15417, 45883, 15509, 13855, // alpha = 0.68128 + 15390, 45718, 15467, 13718, // alpha = 0.7077349 + 15365, 45555, 15430, 13588, // alpha = 0.7346939 + 15323, 45394, 15395, 13462, // alpha = 0.7621567 + 15282, 45236, 15363, 13343, // alpha = 0.7901235 + 15241, 45081, 15307, 13147, // alpha = 0.8185941 + 15205, 44803, 15254, 12930, // alpha = 0.8475687 + 15170, 44510, 15206, 12718, // alpha = 0.8770471 + 15138, 44219, 15161, 12519, // alpha = 0.9070295 + 15107, 43834, 15121, 12326, // alpha = 0.9375157 + 15079, 43268, 15084, 11994, // alpha = 0.9685059 + 15052, 42464, 15050, 11638, // alpha = 1 + + // Cos (theta) = 0.8163265 + 23722, 47529, 24338, 23194, // alpha = 0.001 + 23722, 47529, 24338, 23194, // alpha = 0.001 + 23722, 47529, 24336, 23194, // alpha = 0.001007811 + 23582, 47529, 24115, 22995, // alpha = 0.002267574 + 22696, 47529, 23295, 22167, // alpha = 0.004031243 + 22019, 47529, 22654, 21569, // alpha = 0.006298816 + 21546, 47529, 22075, 20964, // alpha = 0.009070295 + 21022, 47529, 21652, 20564, // alpha = 0.01234568 + 20655, 47528, 21253, 20128, // alpha = 0.01612497 + 20326, 47528, 20876, 19772, // alpha = 0.02040816 + 19967, 47527, 20607, 19518, // alpha = 0.02519527 + 19699, 47526, 20333, 19201, // alpha = 0.03048627 + 19498, 47525, 20031, 18916, // alpha = 0.03628118 + 19224, 47524, 19793, 18692, // alpha = 0.04258 + 18974, 47522, 19605, 18515, // alpha = 0.04938272 + 18772, 47520, 19452, 18312, // alpha = 0.05668934 + 18607, 47517, 19203, 18078, // alpha = 0.06449988 + 18471, 47514, 18997, 17885, // alpha = 0.07281432 + 18281, 47510, 18824, 17723, // alpha = 0.08163266 + 18087, 47505, 18679, 17585, // alpha = 0.09095491 + 17921, 47500, 18553, 17467, // alpha = 0.1007811 + 17779, 47493, 18446, 17325, // alpha = 0.1111111 + 17656, 47486, 18273, 17149, // alpha = 0.1219451 + 17550, 47478, 18108, 16998, // alpha = 0.1332829 + 17454, 47468, 17969, 16861, // alpha = 0.1451247 + 17336, 47457, 17840, 16742, // alpha = 0.1574704 + 17189, 47445, 17727, 16637, // alpha = 0.17032 + 17059, 47431, 17628, 16542, // alpha = 0.1836735 + 16943, 47415, 17537, 16458, // alpha = 0.1975309 + 16839, 47397, 17456, 16379, // alpha = 0.2118922 + 16744, 47378, 17358, 16238, // alpha = 0.2267574 + 16660, 47356, 17223, 16113, // alpha = 0.2421265 + 16584, 47332, 17100, 15998, // alpha = 0.2579995 + 16515, 47306, 16989, 15892, // alpha = 0.2743765 + 16451, 47278, 16888, 15792, // alpha = 0.2912573 + 16394, 47248, 16795, 15701, // alpha = 0.308642 + 16300, 47217, 16708, 15616, // alpha = 0.3265306 + 16205, 47183, 16628, 15538, // alpha = 0.3449232 + 16120, 47148, 16555, 15464, // alpha = 0.3638196 + 16040, 47111, 16487, 15395, // alpha = 0.38322 + 15967, 47042, 16424, 15298, // alpha = 0.4031242 + 15899, 46963, 16350, 15174, // alpha = 0.4235324 + 15838, 46883, 16242, 15058, // alpha = 0.4444445 + 15781, 46800, 16141, 14944, // alpha = 0.4658605 + 15728, 46717, 16049, 14838, // alpha = 0.4877803 + 15680, 46631, 15963, 14736, // alpha = 0.5102041 + 15635, 46546, 15886, 14641, // alpha = 0.5331318 + 15592, 46459, 15813, 14547, // alpha = 0.5565634 + 15553, 46373, 15745, 14458, // alpha = 0.5804989 + 15517, 46286, 15682, 14372, // alpha = 0.6049383 + 15483, 46199, 15627, 14246, // alpha = 0.6298816 + 15452, 46113, 15574, 14089, // alpha = 0.6553288 + 15423, 45973, 15526, 13942, // alpha = 0.68128 + 15395, 45803, 15482, 13796, // alpha = 0.7077349 + 15370, 45635, 15442, 13662, // alpha = 0.7346939 + 15333, 45469, 15406, 13530, // alpha = 0.7621567 + 15291, 45306, 15373, 13408, // alpha = 0.7901235 + 15251, 45147, 15324, 13264, // alpha = 0.8185941 + 15213, 44924, 15269, 13033, // alpha = 0.8475687 + 15178, 44618, 15218, 12817, // alpha = 0.8770471 + 15145, 44322, 15172, 12607, // alpha = 0.9070295 + 15115, 44024, 15130, 12408, // alpha = 0.9375157 + 15084, 43446, 15092, 12130, // alpha = 0.9685059 + 15059, 42746, 15056, 11765, // alpha = 1 + + // Cos (theta) = 0.8024691 + 23741, 47603, 24387, 23308, // alpha = 0.001 + 23741, 47603, 24387, 23308, // alpha = 0.001 + 23732, 47603, 24388, 23295, // alpha = 0.001007811 + 23596, 47603, 24215, 23091, // alpha = 0.002267574 + 22707, 47603, 23384, 22269, // alpha = 0.004031243 + 22024, 47603, 22707, 21628, // alpha = 0.006298816 + 21555, 47603, 22143, 21054, // alpha = 0.009070295 + 21034, 47602, 21706, 20629, // alpha = 0.01234568 + 20665, 47602, 21331, 20230, // alpha = 0.01612497 + 20342, 47602, 20938, 19852, // alpha = 0.02040816 + 19980, 47601, 20657, 19583, // alpha = 0.02519527 + 19711, 47600, 20416, 19309, // alpha = 0.03048627 + 19507, 47599, 20099, 19006, // alpha = 0.03628118 + 19241, 47597, 19852, 18770, // alpha = 0.04258 + 18988, 47595, 19658, 18582, // alpha = 0.04938272 + 18784, 47593, 19498, 18428, // alpha = 0.05668934 + 18619, 47590, 19282, 18182, // alpha = 0.06449988 + 18480, 47586, 19066, 17975, // alpha = 0.07281432 + 18298, 47582, 18886, 17803, // alpha = 0.08163266 + 18103, 47577, 18734, 17658, // alpha = 0.09095491 + 17935, 47570, 18603, 17533, // alpha = 0.1007811 + 17792, 47563, 18490, 17425, // alpha = 0.1111111 + 17669, 47555, 18353, 17259, // alpha = 0.1219451 + 17559, 47546, 18185, 17093, // alpha = 0.1332829 + 17463, 47535, 18033, 16949, // alpha = 0.1451247 + 17353, 47523, 17901, 16824, // alpha = 0.1574704 + 17203, 47510, 17784, 16711, // alpha = 0.17032 + 17073, 47494, 17677, 16612, // alpha = 0.1836735 + 16955, 47477, 17583, 16521, // alpha = 0.1975309 + 16850, 47458, 17498, 16440, // alpha = 0.2118922 + 16754, 47437, 17420, 16347, // alpha = 0.2267574 + 16671, 47413, 17292, 16215, // alpha = 0.2421265 + 16593, 47387, 17164, 16091, // alpha = 0.2579995 + 16522, 47359, 17049, 15976, // alpha = 0.2743765 + 16459, 47329, 16942, 15873, // alpha = 0.2912573 + 16401, 47298, 16844, 15776, // alpha = 0.308642 + 16315, 47264, 16752, 15687, // alpha = 0.3265306 + 16218, 47228, 16669, 15602, // alpha = 0.3449232 + 16131, 47191, 16591, 15524, // alpha = 0.3638196 + 16051, 47152, 16520, 15451, // alpha = 0.38322 + 15977, 47112, 16455, 15381, // alpha = 0.4031242 + 15909, 47039, 16394, 15271, // alpha = 0.4235324 + 15848, 46955, 16292, 15148, // alpha = 0.4444445 + 15792, 46869, 16187, 15029, // alpha = 0.4658605 + 15737, 46783, 16090, 14916, // alpha = 0.4877803 + 15688, 46695, 16002, 14809, // alpha = 0.5102041 + 15643, 46606, 15919, 14709, // alpha = 0.5331318 + 15600, 46517, 15842, 14610, // alpha = 0.5565634 + 15561, 46428, 15772, 14516, // alpha = 0.5804989 + 15524, 46338, 15707, 14427, // alpha = 0.6049383 + 15490, 46249, 15648, 14342, // alpha = 0.6298816 + 15459, 46161, 15593, 14187, // alpha = 0.6553288 + 15429, 46065, 15544, 14029, // alpha = 0.68128 + 15402, 45890, 15497, 13880, // alpha = 0.7077349 + 15376, 45717, 15456, 13740, // alpha = 0.7346939 + 15345, 45547, 15418, 13603, // alpha = 0.7621567 + 15300, 45379, 15383, 13471, // alpha = 0.7901235 + 15259, 45214, 15342, 13348, // alpha = 0.8185941 + 15221, 45051, 15284, 13144, // alpha = 0.8475687 + 15187, 44735, 15232, 12921, // alpha = 0.8770471 + 15152, 44427, 15184, 12697, // alpha = 0.9070295 + 15121, 44128, 15140, 12490, // alpha = 0.9375157 + 15092, 43633, 15100, 12286, // alpha = 0.9685059 + 15064, 43047, 15063, 11901, // alpha = 1 + + // Cos (theta) = 0.7881078 + 23729, 47680, 24495, 23380, // alpha = 0.001 + 23729, 47680, 24495, 23380, // alpha = 0.001 + 23730, 47680, 24494, 23382, // alpha = 0.001007811 + 23590, 47680, 24252, 23162, // alpha = 0.002267574 + 22713, 47679, 23469, 22368, // alpha = 0.004031243 + 22035, 47679, 22758, 21694, // alpha = 0.006298816 + 21564, 47679, 22227, 21149, // alpha = 0.009070295 + 21049, 47679, 21762, 20700, // alpha = 0.01234568 + 20674, 47679, 21420, 20335, // alpha = 0.01612497 + 20358, 47678, 21008, 19936, // alpha = 0.02040816 + 19995, 47677, 20715, 19652, // alpha = 0.02519527 + 19723, 47676, 20495, 19424, // alpha = 0.03048627 + 19517, 47675, 20176, 19102, // alpha = 0.03628118 + 19258, 47673, 19916, 18852, // alpha = 0.04258 + 19002, 47671, 19713, 18652, // alpha = 0.04938272 + 18797, 47668, 19548, 18491, // alpha = 0.05668934 + 18630, 47665, 19368, 18289, // alpha = 0.06449988 + 18489, 47661, 19142, 18069, // alpha = 0.07281432 + 18316, 47656, 18954, 17889, // alpha = 0.08163266 + 18117, 47650, 18794, 17732, // alpha = 0.09095491 + 17949, 47644, 18656, 17601, // alpha = 0.1007811 + 17804, 47636, 18539, 17487, // alpha = 0.1111111 + 17680, 47627, 18437, 17369, // alpha = 0.1219451 + 17569, 47617, 18264, 17196, // alpha = 0.1332829 + 17474, 47605, 18106, 17045, // alpha = 0.1451247 + 17370, 47592, 17966, 16910, // alpha = 0.1574704 + 17220, 47577, 17843, 16790, // alpha = 0.17032 + 17086, 47560, 17733, 16683, // alpha = 0.1836735 + 16967, 47541, 17633, 16588, // alpha = 0.1975309 + 16862, 47520, 17544, 16501, // alpha = 0.2118922 + 16766, 47497, 17462, 16423, // alpha = 0.2267574 + 16680, 47471, 17369, 16318, // alpha = 0.2421265 + 16602, 47444, 17234, 16188, // alpha = 0.2579995 + 16532, 47414, 17113, 16068, // alpha = 0.2743765 + 16467, 47382, 16999, 15957, // alpha = 0.2912573 + 16410, 47347, 16895, 15855, // alpha = 0.308642 + 16328, 47311, 16800, 15759, // alpha = 0.3265306 + 16232, 47274, 16712, 15670, // alpha = 0.3449232 + 16145, 47235, 16631, 15587, // alpha = 0.3638196 + 16062, 47194, 16555, 15508, // alpha = 0.38322 + 15990, 47152, 16487, 15436, // alpha = 0.4031242 + 15922, 47110, 16424, 15366, // alpha = 0.4235324 + 15859, 47028, 16344, 15241, // alpha = 0.4444445 + 15800, 46939, 16234, 15117, // alpha = 0.4658605 + 15747, 46849, 16135, 14998, // alpha = 0.4877803 + 15697, 46759, 16041, 14886, // alpha = 0.5102041 + 15651, 46667, 15953, 14778, // alpha = 0.5331318 + 15608, 46576, 15875, 14675, // alpha = 0.5565634 + 15569, 46484, 15801, 14578, // alpha = 0.5804989 + 15533, 46392, 15733, 14485, // alpha = 0.6049383 + 15497, 46300, 15671, 14395, // alpha = 0.6298816 + 15465, 46210, 15614, 14285, // alpha = 0.6553288 + 15435, 46119, 15561, 14121, // alpha = 0.68128 + 15408, 45979, 15514, 13966, // alpha = 0.7077349 + 15382, 45802, 15470, 13818, // alpha = 0.7346939 + 15356, 45627, 15430, 13676, // alpha = 0.7621567 + 15312, 45455, 15394, 13539, // alpha = 0.7901235 + 15269, 45285, 15361, 13411, // alpha = 0.8185941 + 15231, 45119, 15301, 13260, // alpha = 0.8475687 + 15195, 44858, 15247, 13025, // alpha = 0.8770471 + 15161, 44541, 15196, 12798, // alpha = 0.9070295 + 15130, 44231, 15151, 12581, // alpha = 0.9375157 + 15100, 43827, 15109, 12373, // alpha = 0.9685059 + 15072, 43236, 15071, 12055, // alpha = 1 + + // Cos (theta) = 0.7732427 + 23753, 47759, 24591, 23513, // alpha = 0.001 + 23753, 47759, 24591, 23513, // alpha = 0.001 + 23751, 47759, 24592, 23510, // alpha = 0.001007811 + 23620, 47759, 24323, 23294, // alpha = 0.002267574 + 22726, 47759, 23568, 22485, // alpha = 0.004031243 + 22060, 47759, 22820, 21775, // alpha = 0.006298816 + 21576, 47759, 22312, 21254, // alpha = 0.009070295 + 21066, 47759, 21825, 20776, // alpha = 0.01234568 + 20688, 47758, 21511, 20453, // alpha = 0.01612497 + 20383, 47758, 21085, 20032, // alpha = 0.02040816 + 20010, 47757, 20774, 19726, // alpha = 0.02519527 + 19737, 47756, 20545, 19502, // alpha = 0.03048627 + 19528, 47754, 20263, 19205, // alpha = 0.03628118 + 19277, 47752, 19990, 18939, // alpha = 0.04258 + 19018, 47750, 19775, 18727, // alpha = 0.04938272 + 18811, 47747, 19602, 18557, // alpha = 0.05668934 + 18642, 47743, 19459, 18404, // alpha = 0.06449988 + 18500, 47739, 19226, 18170, // alpha = 0.07281432 + 18335, 47734, 19028, 17979, // alpha = 0.08163266 + 18134, 47727, 18860, 17813, // alpha = 0.09095491 + 17964, 47720, 18717, 17673, // alpha = 0.1007811 + 17818, 47711, 18593, 17553, // alpha = 0.1111111 + 17691, 47701, 18485, 17448, // alpha = 0.1219451 + 17579, 47690, 18350, 17302, // alpha = 0.1332829 + 17483, 47677, 18185, 17142, // alpha = 0.1451247 + 17387, 47663, 18037, 16999, // alpha = 0.1574704 + 17235, 47646, 17908, 16872, // alpha = 0.17032 + 17102, 47628, 17792, 16760, // alpha = 0.1836735 + 16981, 47607, 17686, 16657, // alpha = 0.1975309 + 16874, 47584, 17594, 16566, // alpha = 0.2118922 + 16776, 47559, 17508, 16481, // alpha = 0.2267574 + 16688, 47531, 17431, 16405, // alpha = 0.2421265 + 16611, 47501, 17309, 16290, // alpha = 0.2579995 + 16540, 47469, 17179, 16163, // alpha = 0.2743765 + 16475, 47434, 17062, 16043, // alpha = 0.2912573 + 16417, 47398, 16952, 15935, // alpha = 0.308642 + 16344, 47360, 16851, 15835, // alpha = 0.3265306 + 16245, 47320, 16760, 15740, // alpha = 0.3449232 + 16158, 47279, 16673, 15653, // alpha = 0.3638196 + 16075, 47236, 16595, 15568, // alpha = 0.38322 + 16001, 47193, 16522, 15492, // alpha = 0.4031242 + 15932, 47148, 16455, 15418, // alpha = 0.4235324 + 15869, 47101, 16392, 15338, // alpha = 0.4444445 + 15810, 47009, 16287, 15207, // alpha = 0.4658605 + 15758, 46916, 16181, 15084, // alpha = 0.4877803 + 15707, 46823, 16082, 14963, // alpha = 0.5102041 + 15661, 46729, 15993, 14851, // alpha = 0.5331318 + 15617, 46635, 15909, 14743, // alpha = 0.5565634 + 15577, 46541, 15832, 14642, // alpha = 0.5804989 + 15541, 46446, 15761, 14545, // alpha = 0.6049383 + 15505, 46353, 15696, 14451, // alpha = 0.6298816 + 15472, 46259, 15636, 14361, // alpha = 0.6553288 + 15443, 46167, 15581, 14214, // alpha = 0.68128 + 15414, 46070, 15532, 14055, // alpha = 0.7077349 + 15389, 45889, 15486, 13901, // alpha = 0.7346939 + 15364, 45710, 15445, 13752, // alpha = 0.7621567 + 15323, 45534, 15407, 13613, // alpha = 0.7901235 + 15281, 45359, 15372, 13476, // alpha = 0.8185941 + 15241, 45189, 15320, 13348, // alpha = 0.8475687 + 15204, 44988, 15262, 13140, // alpha = 0.8770471 + 15170, 44661, 15211, 12902, // alpha = 0.9070295 + 15138, 44342, 15163, 12677, // alpha = 0.9375157 + 15108, 44031, 15119, 12459, // alpha = 0.9685059 + 15079, 43422, 15079, 12215, // alpha = 1 + + // Cos (theta) = 0.7578735 + 23754, 47843, 24627, 23584, // alpha = 0.001 + 23754, 47843, 24627, 23584, // alpha = 0.001 + 23757, 47843, 24643, 23586, // alpha = 0.001007811 + 23624, 47843, 24450, 23391, // alpha = 0.002267574 + 22742, 47843, 23613, 22570, // alpha = 0.004031243 + 22071, 47843, 22897, 21849, // alpha = 0.006298816 + 21585, 47843, 22403, 21357, // alpha = 0.009070295 + 21082, 47842, 21893, 20855, // alpha = 0.01234568 + 20701, 47842, 21565, 20528, // alpha = 0.01612497 + 20401, 47841, 21169, 20127, // alpha = 0.02040816 + 20026, 47840, 20843, 19804, // alpha = 0.02519527 + 19750, 47839, 20602, 19566, // alpha = 0.03048627 + 19539, 47837, 20357, 19313, // alpha = 0.03628118 + 19295, 47835, 20073, 19031, // alpha = 0.04258 + 19036, 47832, 19845, 18808, // alpha = 0.04938272 + 18825, 47829, 19662, 18626, // alpha = 0.05668934 + 18654, 47825, 19512, 18479, // alpha = 0.06449988 + 18511, 47820, 19319, 18277, // alpha = 0.07281432 + 18353, 47814, 19110, 18073, // alpha = 0.08163266 + 18151, 47807, 18935, 17899, // alpha = 0.09095491 + 17979, 47799, 18782, 17750, // alpha = 0.1007811 + 17830, 47790, 18653, 17621, // alpha = 0.1111111 + 17702, 47779, 18538, 17510, // alpha = 0.1219451 + 17592, 47766, 18439, 17414, // alpha = 0.1332829 + 17494, 47752, 18273, 17248, // alpha = 0.1451247 + 17406, 47736, 18117, 17096, // alpha = 0.1574704 + 17253, 47718, 17981, 16960, // alpha = 0.17032 + 17117, 47697, 17857, 16840, // alpha = 0.1836735 + 16996, 47675, 17746, 16732, // alpha = 0.1975309 + 16887, 47650, 17648, 16634, // alpha = 0.2118922 + 16788, 47622, 17556, 16544, // alpha = 0.2267574 + 16700, 47592, 17476, 16464, // alpha = 0.2421265 + 16621, 47560, 17393, 16390, // alpha = 0.2579995 + 16550, 47525, 17253, 16262, // alpha = 0.2743765 + 16484, 47488, 17129, 16137, // alpha = 0.2912573 + 16425, 47449, 17013, 16020, // alpha = 0.308642 + 16356, 47409, 16909, 15912, // alpha = 0.3265306 + 16261, 47367, 16809, 15813, // alpha = 0.3449232 + 16170, 47323, 16720, 15719, // alpha = 0.3638196 + 16089, 47279, 16636, 15632, // alpha = 0.38322 + 16013, 47233, 16560, 15551, // alpha = 0.4031242 + 15945, 47187, 16489, 15474, // alpha = 0.4235324 + 15880, 47139, 16424, 15400, // alpha = 0.4444445 + 15822, 47080, 16342, 15303, // alpha = 0.4658605 + 15766, 46984, 16231, 15169, // alpha = 0.4877803 + 15717, 46888, 16129, 15046, // alpha = 0.5102041 + 15671, 46791, 16032, 14928, // alpha = 0.5331318 + 15627, 46694, 15946, 14816, // alpha = 0.5565634 + 15586, 46598, 15865, 14708, // alpha = 0.5804989 + 15548, 46502, 15791, 14607, // alpha = 0.6049383 + 15514, 46405, 15723, 14509, // alpha = 0.6298816 + 15481, 46310, 15660, 14415, // alpha = 0.6553288 + 15449, 46216, 15603, 14319, // alpha = 0.68128 + 15422, 46122, 15551, 14148, // alpha = 0.7077349 + 15395, 45978, 15502, 13987, // alpha = 0.7346939 + 15370, 45795, 15460, 13836, // alpha = 0.7621567 + 15335, 45614, 15420, 13687, // alpha = 0.7901235 + 15291, 45437, 15383, 13545, // alpha = 0.8185941 + 15252, 45261, 15342, 13411, // alpha = 0.8475687 + 15215, 45090, 15281, 13259, // alpha = 0.8770471 + 15179, 44788, 15225, 13012, // alpha = 0.9070295 + 15147, 44461, 15176, 12778, // alpha = 0.9375157 + 15115, 44139, 15130, 12547, // alpha = 0.9685059 + 15087, 43623, 15088, 12337, // alpha = 1 + + // Cos (theta) = 0.7420005 + 23785, 47930, 24693, 23664, // alpha = 0.001 + 23785, 47930, 24693, 23664, // alpha = 0.001 + 23809, 47930, 24691, 23686, // alpha = 0.001007811 + 23658, 47930, 24528, 23546, // alpha = 0.002267574 + 22765, 47930, 23673, 22643, // alpha = 0.004031243 + 22091, 47930, 22970, 21936, // alpha = 0.006298816 + 21597, 47930, 22512, 21474, // alpha = 0.009070295 + 21103, 47930, 21973, 20944, // alpha = 0.01234568 + 20715, 47929, 21625, 20593, // alpha = 0.01612497 + 20420, 47928, 21260, 20227, // alpha = 0.02040816 + 20043, 47927, 20918, 19887, // alpha = 0.02519527 + 19764, 47926, 20667, 19635, // alpha = 0.03048627 + 19555, 47924, 20463, 19435, // alpha = 0.03628118 + 19315, 47922, 20160, 19129, // alpha = 0.04258 + 19051, 47919, 19922, 18891, // alpha = 0.04938272 + 18840, 47915, 19727, 18700, // alpha = 0.05668934 + 18667, 47910, 19569, 18543, // alpha = 0.06449988 + 18523, 47905, 19420, 18393, // alpha = 0.07281432 + 18372, 47898, 19201, 18174, // alpha = 0.08163266 + 18173, 47891, 19009, 17993, // alpha = 0.09095491 + 17995, 47882, 18854, 17831, // alpha = 0.1007811 + 17845, 47871, 18718, 17694, // alpha = 0.1111111 + 17717, 47859, 18597, 17578, // alpha = 0.1219451 + 17604, 47845, 18492, 17474, // alpha = 0.1332829 + 17504, 47829, 18371, 17357, // alpha = 0.1451247 + 17416, 47812, 18205, 17196, // alpha = 0.1574704 + 17271, 47792, 18060, 17053, // alpha = 0.17032 + 17131, 47769, 17930, 16924, // alpha = 0.1836735 + 17010, 47745, 17812, 16810, // alpha = 0.1975309 + 16900, 47717, 17707, 16706, // alpha = 0.2118922 + 16800, 47687, 17612, 16610, // alpha = 0.2267574 + 16712, 47654, 17525, 16526, // alpha = 0.2421265 + 16633, 47619, 17444, 16448, // alpha = 0.2579995 + 16559, 47582, 17335, 16365, // alpha = 0.2743765 + 16493, 47543, 17200, 16233, // alpha = 0.2912573 + 16433, 47502, 17080, 16110, // alpha = 0.308642 + 16374, 47459, 16966, 15996, // alpha = 0.3265306 + 16273, 47414, 16864, 15888, // alpha = 0.3449232 + 16183, 47369, 16769, 15790, // alpha = 0.3638196 + 16100, 47322, 16680, 15697, // alpha = 0.38322 + 16027, 47274, 16600, 15612, // alpha = 0.4031242 + 15956, 47226, 16524, 15529, // alpha = 0.4235324 + 15892, 47177, 16455, 15452, // alpha = 0.4444445 + 15833, 47128, 16393, 15380, // alpha = 0.4658605 + 15779, 47053, 16283, 15264, // alpha = 0.4877803 + 15728, 46954, 16175, 15132, // alpha = 0.5102041 + 15681, 46854, 16077, 15007, // alpha = 0.5331318 + 15637, 46755, 15985, 14890, // alpha = 0.5565634 + 15596, 46656, 15900, 14777, // alpha = 0.5804989 + 15557, 46557, 15823, 14670, // alpha = 0.6049383 + 15522, 46459, 15751, 14569, // alpha = 0.6298816 + 15488, 46362, 15687, 14473, // alpha = 0.6553288 + 15457, 46265, 15627, 14378, // alpha = 0.68128 + 15429, 46170, 15572, 14246, // alpha = 0.7077349 + 15402, 46070, 15522, 14079, // alpha = 0.7346939 + 15377, 45883, 15476, 13917, // alpha = 0.7621567 + 15347, 45699, 15435, 13766, // alpha = 0.7901235 + 15303, 45516, 15396, 13619, // alpha = 0.8185941 + 15262, 45338, 15361, 13480, // alpha = 0.8475687 + 15224, 45162, 15299, 13347, // alpha = 0.8770471 + 15189, 44924, 15241, 13129, // alpha = 0.9070295 + 15156, 44586, 15190, 12884, // alpha = 0.9375157 + 15124, 44258, 15141, 12651, // alpha = 0.9685059 + 15094, 43840, 15099, 12428, // alpha = 1 + + // Cos (theta) = 0.7256235 + 23792, 48022, 24751, 23727, // alpha = 0.001 + 23792, 48022, 24751, 23727, // alpha = 0.001 + 23801, 48022, 24778, 23735, // alpha = 0.001007811 + 23652, 48022, 24599, 23594, // alpha = 0.002267574 + 22773, 48022, 23729, 22707, // alpha = 0.004031243 + 22114, 48022, 23052, 22029, // alpha = 0.006298816 + 21611, 48022, 22577, 21553, // alpha = 0.009070295 + 21119, 48021, 22055, 21033, // alpha = 0.01234568 + 20728, 48021, 21687, 20662, // alpha = 0.01612497 + 20445, 48020, 21367, 20340, // alpha = 0.02040816 + 20061, 48019, 21002, 19976, // alpha = 0.02519527 + 19779, 48017, 20733, 19708, // alpha = 0.03048627 + 19564, 48015, 20530, 19505, // alpha = 0.03628118 + 19337, 48012, 20261, 19235, // alpha = 0.04258 + 19071, 48009, 20005, 18983, // alpha = 0.04938272 + 18855, 48005, 19802, 18778, // alpha = 0.05668934 + 18681, 48000, 19633, 18613, // alpha = 0.06449988 + 18536, 47994, 19495, 18474, // alpha = 0.07281432 + 18397, 47986, 19302, 18285, // alpha = 0.08163266 + 18188, 47978, 19104, 18086, // alpha = 0.09095491 + 18014, 47968, 18935, 17919, // alpha = 0.1007811 + 17861, 47956, 18790, 17774, // alpha = 0.1111111 + 17730, 47943, 18662, 17648, // alpha = 0.1219451 + 17617, 47927, 18552, 17539, // alpha = 0.1332829 + 17515, 47910, 18454, 17442, // alpha = 0.1451247 + 17427, 47890, 18303, 17304, // alpha = 0.1574704 + 17289, 47868, 18149, 17152, // alpha = 0.17032 + 17148, 47844, 18010, 17014, // alpha = 0.1836735 + 17024, 47816, 17886, 16892, // alpha = 0.1975309 + 16915, 47786, 17773, 16782, // alpha = 0.2118922 + 16814, 47753, 17669, 16681, // alpha = 0.2267574 + 16724, 47718, 17577, 16590, // alpha = 0.2421265 + 16643, 47681, 17493, 16506, // alpha = 0.2579995 + 16568, 47641, 17416, 16429, // alpha = 0.2743765 + 16503, 47598, 17282, 16334, // alpha = 0.2912573 + 16442, 47555, 17151, 16204, // alpha = 0.308642 + 16386, 47509, 17034, 16081, // alpha = 0.3265306 + 16288, 47462, 16922, 15969, // alpha = 0.3449232 + 16197, 47414, 16821, 15864, // alpha = 0.3638196 + 16115, 47365, 16728, 15766, // alpha = 0.38322 + 16038, 47316, 16644, 15674, // alpha = 0.4031242 + 15968, 47265, 16565, 15588, // alpha = 0.4235324 + 15905, 47215, 16492, 15508, // alpha = 0.4444445 + 15845, 47164, 16424, 15431, // alpha = 0.4658605 + 15788, 47113, 16342, 15354, // alpha = 0.4877803 + 15739, 47020, 16228, 15220, // alpha = 0.5102041 + 15692, 46918, 16123, 15092, // alpha = 0.5331318 + 15647, 46816, 16027, 14967, // alpha = 0.5565634 + 15605, 46715, 15938, 14850, // alpha = 0.5804989 + 15566, 46614, 15858, 14736, // alpha = 0.6049383 + 15530, 46514, 15782, 14631, // alpha = 0.6298816 + 15498, 46415, 15714, 14531, // alpha = 0.6553288 + 15465, 46316, 15652, 14434, // alpha = 0.68128 + 15436, 46219, 15594, 14341, // alpha = 0.7077349 + 15409, 46122, 15542, 14173, // alpha = 0.7346939 + 15385, 45973, 15493, 14010, // alpha = 0.7621567 + 15359, 45785, 15449, 13846, // alpha = 0.7901235 + 15314, 45600, 15410, 13698, // alpha = 0.8185941 + 15274, 45417, 15372, 13553, // alpha = 0.8475687 + 15234, 45238, 15321, 13416, // alpha = 0.8770471 + 15199, 45061, 15261, 13255, // alpha = 0.9070295 + 15165, 44721, 15206, 12999, // alpha = 0.9375157 + 15134, 44384, 15156, 12755, // alpha = 0.9685059 + 15103, 44053, 15111, 12524, // alpha = 1 + + // Cos (theta) = 0.7087427 + 23813, 48119, 24844, 23807, // alpha = 0.001 + 23813, 48119, 24844, 23807, // alpha = 0.001 + 23799, 48119, 24862, 23793, // alpha = 0.001007811 + 23689, 48119, 24683, 23684, // alpha = 0.002267574 + 22792, 48118, 23806, 22786, // alpha = 0.004031243 + 22133, 48118, 23140, 22125, // alpha = 0.006298816 + 21622, 48118, 22650, 21616, // alpha = 0.009070295 + 21138, 48118, 22155, 21130, // alpha = 0.01234568 + 20742, 48117, 21764, 20736, // alpha = 0.01612497 + 20467, 48116, 21481, 20457, // alpha = 0.02040816 + 20080, 48115, 21097, 20072, // alpha = 0.02519527 + 19795, 48113, 20811, 19788, // alpha = 0.03048627 + 19577, 48111, 20594, 19570, // alpha = 0.03628118 + 19360, 48108, 20369, 19348, // alpha = 0.04258 + 19090, 48104, 20101, 19080, // alpha = 0.04938272 + 18872, 48099, 19883, 18863, // alpha = 0.05668934 + 18696, 48094, 19705, 18686, // alpha = 0.06449988 + 18548, 48087, 19559, 18539, // alpha = 0.07281432 + 18419, 48079, 19415, 18401, // alpha = 0.08163266 + 18209, 48069, 19206, 18191, // alpha = 0.09095491 + 18030, 48058, 19025, 18011, // alpha = 0.1007811 + 17879, 48045, 18870, 17859, // alpha = 0.1111111 + 17744, 48030, 18735, 17723, // alpha = 0.1219451 + 17629, 48013, 18618, 17608, // alpha = 0.1332829 + 17527, 47994, 18513, 17504, // alpha = 0.1451247 + 17438, 47972, 18410, 17413, // alpha = 0.1574704 + 17308, 47948, 18245, 17256, // alpha = 0.17032 + 17165, 47920, 18094, 17108, // alpha = 0.1836735 + 17041, 47890, 17964, 16980, // alpha = 0.1975309 + 16928, 47857, 17844, 16863, // alpha = 0.2118922 + 16829, 47822, 17734, 16756, // alpha = 0.2267574 + 16736, 47784, 17635, 16658, // alpha = 0.2421265 + 16654, 47743, 17546, 16569, // alpha = 0.2579995 + 16579, 47700, 17464, 16488, // alpha = 0.2743765 + 16512, 47655, 17369, 16413, // alpha = 0.2912573 + 16451, 47608, 17231, 16301, // alpha = 0.308642 + 16395, 47560, 17105, 16173, // alpha = 0.3265306 + 16304, 47511, 16986, 16052, // alpha = 0.3449232 + 16211, 47461, 16878, 15940, // alpha = 0.3638196 + 16129, 47410, 16780, 15838, // alpha = 0.38322 + 16051, 47358, 16690, 15740, // alpha = 0.4031242 + 15981, 47305, 16606, 15651, // alpha = 0.4235324 + 15917, 47253, 16529, 15566, // alpha = 0.4444445 + 15855, 47201, 16458, 15483, // alpha = 0.4658605 + 15800, 47148, 16393, 15408, // alpha = 0.4877803 + 15749, 47087, 16285, 15311, // alpha = 0.5102041 + 15700, 46982, 16172, 15175, // alpha = 0.5331318 + 15656, 46878, 16071, 15047, // alpha = 0.5565634 + 15615, 46774, 15981, 14924, // alpha = 0.5804989 + 15576, 46672, 15895, 14807, // alpha = 0.6049383 + 15539, 46569, 15816, 14697, // alpha = 0.6298816 + 15506, 46468, 15744, 14592, // alpha = 0.6553288 + 15474, 46368, 15678, 14490, // alpha = 0.68128 + 15444, 46269, 15618, 14395, // alpha = 0.7077349 + 15417, 46170, 15563, 14275, // alpha = 0.7346939 + 15391, 46066, 15513, 14099, // alpha = 0.7621567 + 15366, 45875, 15467, 13935, // alpha = 0.7901235 + 15328, 45686, 15425, 13779, // alpha = 0.8185941 + 15286, 45500, 15387, 13631, // alpha = 0.8475687 + 15247, 45316, 15343, 13486, // alpha = 0.8770471 + 15210, 45137, 15280, 13349, // alpha = 0.9070295 + 15176, 44864, 15223, 13123, // alpha = 0.9375157 + 15143, 44517, 15170, 12869, // alpha = 0.9685059 + 15112, 44179, 15122, 12627, // alpha = 1 + + // Cos (theta) = 0.691358 + 23840, 48174, 24915, 23899, // alpha = 0.001 + 23840, 48174, 24915, 23899, // alpha = 0.001 + 23825, 48174, 24902, 23884, // alpha = 0.001007811 + 23682, 48174, 24734, 23733, // alpha = 0.002267574 + 22810, 48174, 23895, 22869, // alpha = 0.004031243 + 22145, 48174, 23255, 22220, // alpha = 0.006298816 + 21640, 48174, 22713, 21693, // alpha = 0.009070295 + 21156, 48174, 22261, 21232, // alpha = 0.01234568 + 20760, 48173, 21843, 20819, // alpha = 0.01612497 + 20485, 48173, 21556, 20531, // alpha = 0.02040816 + 20102, 48172, 21201, 20177, // alpha = 0.02519527 + 19812, 48171, 20897, 19873, // alpha = 0.03048627 + 19591, 48170, 20666, 19642, // alpha = 0.03628118 + 19384, 48168, 20485, 19463, // alpha = 0.04258 + 19112, 48166, 20206, 19185, // alpha = 0.04938272 + 18890, 48163, 19977, 18953, // alpha = 0.05668934 + 18712, 48160, 19789, 18767, // alpha = 0.06449988 + 18562, 48156, 19631, 18609, // alpha = 0.07281432 + 18437, 48152, 19497, 18478, // alpha = 0.08163266 + 18228, 48146, 19316, 18300, // alpha = 0.09095491 + 18051, 48140, 19124, 18113, // alpha = 0.1007811 + 17895, 48133, 18960, 17949, // alpha = 0.1111111 + 17759, 48121, 18816, 17806, // alpha = 0.1219451 + 17643, 48103, 18688, 17682, // alpha = 0.1332829 + 17540, 48081, 18577, 17572, // alpha = 0.1451247 + 17450, 48057, 18478, 17475, // alpha = 0.1574704 + 17327, 48030, 18352, 17367, // alpha = 0.17032 + 17185, 48000, 18192, 17213, // alpha = 0.1836735 + 17057, 47967, 18052, 17073, // alpha = 0.1975309 + 16944, 47931, 17922, 16949, // alpha = 0.2118922 + 16841, 47892, 17806, 16835, // alpha = 0.2267574 + 16750, 47851, 17700, 16731, // alpha = 0.2421265 + 16665, 47807, 17605, 16635, // alpha = 0.2579995 + 16589, 47761, 17516, 16547, // alpha = 0.2743765 + 16523, 47713, 17434, 16469, // alpha = 0.2912573 + 16460, 47663, 17317, 16394, // alpha = 0.308642 + 16404, 47613, 17179, 16268, // alpha = 0.3265306 + 16323, 47560, 17058, 16143, // alpha = 0.3449232 + 16230, 47507, 16943, 16025, // alpha = 0.3638196 + 16144, 47454, 16838, 15913, // alpha = 0.38322 + 16066, 47400, 16741, 15812, // alpha = 0.4031242 + 15996, 47346, 16651, 15716, // alpha = 0.4235324 + 15929, 47292, 16570, 15626, // alpha = 0.4444445 + 15869, 47237, 16496, 15540, // alpha = 0.4658605 + 15812, 47183, 16428, 15460, // alpha = 0.4877803 + 15761, 47129, 16343, 15385, // alpha = 0.5102041 + 15711, 47047, 16228, 15266, // alpha = 0.5331318 + 15666, 46941, 16121, 15130, // alpha = 0.5565634 + 15624, 46835, 16024, 15002, // alpha = 0.5804989 + 15584, 46730, 15935, 14878, // alpha = 0.6049383 + 15549, 46626, 15852, 14765, // alpha = 0.6298816 + 15514, 46522, 15776, 14652, // alpha = 0.6553288 + 15482, 46420, 15707, 14548, // alpha = 0.68128 + 15453, 46320, 15645, 14450, // alpha = 0.7077349 + 15425, 46220, 15587, 14357, // alpha = 0.7346939 + 15398, 46121, 15533, 14195, // alpha = 0.7621567 + 15373, 45967, 15485, 14028, // alpha = 0.7901235 + 15342, 45776, 15441, 13866, // alpha = 0.8185941 + 15299, 45585, 15401, 13708, // alpha = 0.8475687 + 15259, 45400, 15365, 13561, // alpha = 0.8770471 + 15221, 45216, 15302, 13420, // alpha = 0.9070295 + 15186, 45014, 15241, 13249, // alpha = 0.9375157 + 15154, 44661, 15187, 12992, // alpha = 0.9685059 + 15122, 44314, 15136, 12739, // alpha = 1 + + // Cos (theta) = 0.6734694 + 23854, 48228, 25005, 23983, // alpha = 0.001 + 23854, 48228, 25005, 23983, // alpha = 0.001 + 23843, 48228, 25010, 23971, // alpha = 0.001007811 + 23719, 48228, 24831, 23835, // alpha = 0.002267574 + 22828, 48228, 23979, 22957, // alpha = 0.004031243 + 22163, 48228, 23370, 22328, // alpha = 0.006298816 + 21649, 48228, 22798, 21764, // alpha = 0.009070295 + 21182, 48227, 22382, 21350, // alpha = 0.01234568 + 20778, 48227, 21937, 20907, // alpha = 0.01612497 + 20499, 48226, 21630, 20601, // alpha = 0.02040816 + 20123, 48226, 21317, 20287, // alpha = 0.02519527 + 19829, 48224, 20994, 19964, // alpha = 0.03048627 + 19605, 48223, 20747, 19718, // alpha = 0.03628118 + 19408, 48221, 20555, 19528, // alpha = 0.04258 + 19134, 48219, 20326, 19299, // alpha = 0.04938272 + 18910, 48216, 20080, 19053, // alpha = 0.05668934 + 18729, 48212, 19876, 18853, // alpha = 0.06449988 + 18577, 48208, 19708, 18686, // alpha = 0.07281432 + 18450, 48203, 19567, 18546, // alpha = 0.08163266 + 18251, 48197, 19441, 18420, // alpha = 0.09095491 + 18071, 48190, 19236, 18221, // alpha = 0.1007811 + 17912, 48182, 19058, 18044, // alpha = 0.1111111 + 17776, 48173, 18903, 17893, // alpha = 0.1219451 + 17657, 48162, 18771, 17761, // alpha = 0.1332829 + 17553, 48150, 18650, 17644, // alpha = 0.1451247 + 17460, 48137, 18545, 17540, // alpha = 0.1574704 + 17349, 48115, 18451, 17447, // alpha = 0.17032 + 17206, 48082, 18300, 17324, // alpha = 0.1836735 + 17074, 48046, 18149, 17173, // alpha = 0.1975309 + 16960, 48007, 18008, 17040, // alpha = 0.2118922 + 16854, 47964, 17885, 16917, // alpha = 0.2267574 + 16761, 47919, 17772, 16806, // alpha = 0.2421265 + 16678, 47872, 17667, 16706, // alpha = 0.2579995 + 16603, 47823, 17573, 16613, // alpha = 0.2743765 + 16532, 47772, 17487, 16527, // alpha = 0.2912573 + 16469, 47719, 17409, 16449, // alpha = 0.308642 + 16415, 47665, 17264, 16372, // alpha = 0.3265306 + 16339, 47611, 17131, 16234, // alpha = 0.3449232 + 16245, 47555, 17008, 16110, // alpha = 0.3638196 + 16161, 47499, 16899, 15994, // alpha = 0.38322 + 16083, 47443, 16795, 15886, // alpha = 0.4031242 + 16010, 47387, 16701, 15783, // alpha = 0.4235324 + 15942, 47331, 16614, 15687, // alpha = 0.4444445 + 15881, 47275, 16536, 15598, // alpha = 0.4658605 + 15824, 47219, 16464, 15515, // alpha = 0.4877803 + 15771, 47164, 16396, 15435, // alpha = 0.5102041 + 15724, 47109, 16286, 15360, // alpha = 0.5331318 + 15676, 47004, 16175, 15217, // alpha = 0.5565634 + 15634, 46896, 16071, 15082, // alpha = 0.5804989 + 15596, 46789, 15978, 14956, // alpha = 0.6049383 + 15559, 46683, 15890, 14837, // alpha = 0.6298816 + 15524, 46578, 15812, 14720, // alpha = 0.6553288 + 15491, 46474, 15738, 14613, // alpha = 0.68128 + 15461, 46372, 15672, 14510, // alpha = 0.7077349 + 15432, 46271, 15612, 14412, // alpha = 0.7346939 + 15406, 46170, 15556, 14299, // alpha = 0.7621567 + 15381, 46062, 15505, 14123, // alpha = 0.7901235 + 15356, 45867, 15459, 13954, // alpha = 0.8185941 + 15311, 45675, 15416, 13791, // alpha = 0.8475687 + 15271, 45486, 15378, 13640, // alpha = 0.8770471 + 15233, 45299, 15327, 13492, // alpha = 0.9070295 + 15197, 45115, 15263, 13352, // alpha = 0.9375157 + 15164, 44812, 15206, 13123, // alpha = 0.9685059 + 15131, 44458, 15153, 12863, // alpha = 1 + + // Cos (theta) = 0.6550768 + 23876, 48285, 25125, 24083, // alpha = 0.001 + 23876, 48285, 25125, 24083, // alpha = 0.001 + 23861, 48285, 25120, 24065, // alpha = 0.001007811 + 23724, 48285, 24936, 23907, // alpha = 0.002267574 + 22852, 48285, 24107, 23059, // alpha = 0.004031243 + 22197, 48285, 23506, 22461, // alpha = 0.006298816 + 21672, 48285, 22884, 21854, // alpha = 0.009070295 + 21205, 48284, 22518, 21473, // alpha = 0.01234568 + 20795, 48284, 22039, 21000, // alpha = 0.01612497 + 20514, 48283, 21712, 20675, // alpha = 0.02040816 + 20146, 48282, 21451, 20408, // alpha = 0.02519527 + 19848, 48281, 21103, 20065, // alpha = 0.03048627 + 19621, 48279, 20841, 19802, // alpha = 0.03628118 + 19435, 48277, 20634, 19599, // alpha = 0.04258 + 19156, 48275, 20459, 19420, // alpha = 0.04938272 + 18931, 48271, 20197, 19160, // alpha = 0.05668934 + 18746, 48267, 19977, 18946, // alpha = 0.06449988 + 18592, 48263, 19797, 18768, // alpha = 0.07281432 + 18463, 48257, 19648, 18618, // alpha = 0.08163266 + 18280, 48250, 19519, 18494, // alpha = 0.09095491 + 18092, 48242, 19360, 18337, // alpha = 0.1007811 + 17931, 48233, 19169, 18149, // alpha = 0.1111111 + 17794, 48223, 19005, 17988, // alpha = 0.1219451 + 17673, 48211, 18858, 17847, // alpha = 0.1332829 + 17566, 48198, 18732, 17720, // alpha = 0.1451247 + 17473, 48183, 18617, 17611, // alpha = 0.1574704 + 17373, 48166, 18516, 17512, // alpha = 0.17032 + 17227, 48148, 18418, 17425, // alpha = 0.1836735 + 17093, 48128, 18255, 17280, // alpha = 0.1975309 + 16975, 48085, 18106, 17136, // alpha = 0.2118922 + 16870, 48039, 17969, 17005, // alpha = 0.2267574 + 16776, 47990, 17848, 16889, // alpha = 0.2421265 + 16690, 47939, 17736, 16780, // alpha = 0.2579995 + 16614, 47886, 17636, 16682, // alpha = 0.2743765 + 16544, 47832, 17543, 16591, // alpha = 0.2912573 + 16480, 47776, 17459, 16507, // alpha = 0.308642 + 16423, 47719, 17355, 16430, // alpha = 0.3265306 + 16357, 47661, 17210, 16332, // alpha = 0.3449232 + 16262, 47603, 17084, 16201, // alpha = 0.3638196 + 16175, 47545, 16964, 16077, // alpha = 0.38322 + 16098, 47487, 16852, 15962, // alpha = 0.4031242 + 16025, 47428, 16753, 15856, // alpha = 0.4235324 + 15955, 47370, 16663, 15753, // alpha = 0.4444445 + 15894, 47313, 16577, 15659, // alpha = 0.4658605 + 15838, 47255, 16502, 15571, // alpha = 0.4877803 + 15785, 47198, 16431, 15488, // alpha = 0.5102041 + 15734, 47142, 16351, 15409, // alpha = 0.5331318 + 15689, 47069, 16230, 15310, // alpha = 0.5565634 + 15645, 46958, 16124, 15167, // alpha = 0.5804989 + 15606, 46849, 16022, 15038, // alpha = 0.6049383 + 15568, 46741, 15933, 14911, // alpha = 0.6298816 + 15533, 46634, 15849, 14791, // alpha = 0.6553288 + 15500, 46529, 15771, 14678, // alpha = 0.68128 + 15470, 46425, 15702, 14570, // alpha = 0.7077349 + 15441, 46322, 15639, 14469, // alpha = 0.7346939 + 15414, 46221, 15580, 14373, // alpha = 0.7621567 + 15388, 46120, 15527, 14225, // alpha = 0.7901235 + 15365, 45963, 15478, 14047, // alpha = 0.8185941 + 15327, 45767, 15433, 13884, // alpha = 0.8475687 + 15285, 45575, 15394, 13724, // alpha = 0.8770471 + 15246, 45386, 15353, 13572, // alpha = 0.9070295 + 15208, 45198, 15287, 13425, // alpha = 0.9375157 + 15175, 44973, 15224, 13257, // alpha = 0.9685059 + 15142, 44613, 15170, 12992, // alpha = 1 + + // Cos (theta) = 0.6361803 + 23886, 48346, 25217, 24175, // alpha = 0.001 + 23886, 48346, 25217, 24175, // alpha = 0.001 + 23906, 48346, 25227, 24200, // alpha = 0.001007811 + 23746, 48346, 25031, 24005, // alpha = 0.002267574 + 22848, 48346, 24216, 23134, // alpha = 0.004031243 + 22216, 48346, 23600, 22557, // alpha = 0.006298816 + 21685, 48345, 22993, 21941, // alpha = 0.009070295 + 21231, 48345, 22603, 21556, // alpha = 0.01234568 + 20810, 48345, 22156, 21098, // alpha = 0.01612497 + 20530, 48344, 21804, 20758, // alpha = 0.02040816 + 20168, 48343, 21552, 20508, // alpha = 0.02519527 + 19869, 48341, 21229, 20173, // alpha = 0.03048627 + 19637, 48340, 20945, 19892, // alpha = 0.03628118 + 19459, 48337, 20721, 19676, // alpha = 0.04258 + 19181, 48334, 20545, 19505, // alpha = 0.04938272 + 18953, 48330, 20327, 19276, // alpha = 0.05668934 + 18764, 48326, 20092, 19047, // alpha = 0.06449988 + 18609, 48320, 19899, 18857, // alpha = 0.07281432 + 18478, 48314, 19736, 18697, // alpha = 0.08163266 + 18305, 48306, 19598, 18563, // alpha = 0.09095491 + 18115, 48298, 19478, 18447, // alpha = 0.1007811 + 17950, 48287, 19295, 18261, // alpha = 0.1111111 + 17810, 48276, 19116, 18088, // alpha = 0.1219451 + 17687, 48263, 18959, 17937, // alpha = 0.1332829 + 17579, 48248, 18822, 17803, // alpha = 0.1451247 + 17485, 48231, 18698, 17686, // alpha = 0.1574704 + 17398, 48212, 18588, 17582, // alpha = 0.17032 + 17245, 48192, 18492, 17486, // alpha = 0.1836735 + 17113, 48170, 18370, 17394, // alpha = 0.1975309 + 16989, 48147, 18211, 17237, // alpha = 0.2118922 + 16886, 48115, 18067, 17101, // alpha = 0.2267574 + 16791, 48062, 17934, 16976, // alpha = 0.2421265 + 16703, 48008, 17813, 16860, // alpha = 0.2579995 + 16625, 47951, 17706, 16754, // alpha = 0.2743765 + 16553, 47893, 17605, 16656, // alpha = 0.2912573 + 16490, 47834, 17514, 16568, // alpha = 0.308642 + 16431, 47774, 17430, 16485, // alpha = 0.3265306 + 16376, 47713, 17300, 16410, // alpha = 0.3449232 + 16282, 47652, 17160, 16296, // alpha = 0.3638196 + 16192, 47592, 17033, 16166, // alpha = 0.38322 + 16112, 47531, 16919, 16044, // alpha = 0.4031242 + 16039, 47470, 16811, 15931, // alpha = 0.4235324 + 15969, 47410, 16715, 15823, // alpha = 0.4444445 + 15909, 47351, 16624, 15726, // alpha = 0.4658605 + 15851, 47292, 16543, 15632, // alpha = 0.4877803 + 15797, 47234, 16470, 15543, // alpha = 0.5102041 + 15746, 47176, 16401, 15460, // alpha = 0.5331318 + 15699, 47119, 16292, 15383, // alpha = 0.5565634 + 15657, 47022, 16179, 15261, // alpha = 0.5804989 + 15616, 46910, 16072, 15120, // alpha = 0.6049383 + 15579, 46800, 15977, 14991, // alpha = 0.6298816 + 15544, 46692, 15889, 14866, // alpha = 0.6553288 + 15510, 46585, 15808, 14749, // alpha = 0.68128 + 15477, 46479, 15736, 14633, // alpha = 0.7077349 + 15450, 46375, 15668, 14529, // alpha = 0.7346939 + 15422, 46272, 15607, 14429, // alpha = 0.7621567 + 15396, 46171, 15550, 14333, // alpha = 0.7901235 + 15373, 46061, 15499, 14151, // alpha = 0.8185941 + 15341, 45863, 15452, 13981, // alpha = 0.8475687 + 15298, 45668, 15410, 13813, // alpha = 0.8770471 + 15257, 45476, 15372, 13654, // alpha = 0.9070295 + 15222, 45286, 15312, 13506, // alpha = 0.9375157 + 15187, 45100, 15246, 13360, // alpha = 0.9685059 + 15153, 44776, 15189, 13124, // alpha = 1 + + // Cos (theta) = 0.61678 + 23933, 48411, 25391, 24322, // alpha = 0.001 + 23933, 48411, 25391, 24322, // alpha = 0.001 + 23906, 48411, 25401, 24287, // alpha = 0.001007811 + 23734, 48411, 25180, 24066, // alpha = 0.002267574 + 22869, 48411, 24318, 23247, // alpha = 0.004031243 + 22247, 48411, 23690, 22631, // alpha = 0.006298816 + 21702, 48410, 23114, 22039, // alpha = 0.009070295 + 21263, 48410, 22686, 21633, // alpha = 0.01234568 + 20835, 48409, 22288, 21215, // alpha = 0.01612497 + 20545, 48409, 21910, 20846, // alpha = 0.02040816 + 20198, 48407, 21638, 20582, // alpha = 0.02519527 + 19890, 48406, 21367, 20291, // alpha = 0.03048627 + 19655, 48404, 21064, 19991, // alpha = 0.03628118 + 19476, 48401, 20823, 19762, // alpha = 0.04258 + 19207, 48397, 20631, 19577, // alpha = 0.04938272 + 18973, 48393, 20479, 19399, // alpha = 0.05668934 + 18783, 48388, 20225, 19155, // alpha = 0.06449988 + 18627, 48382, 20012, 18955, // alpha = 0.07281432 + 18491, 48375, 19837, 18782, // alpha = 0.08163266 + 18330, 48366, 19686, 18640, // alpha = 0.09095491 + 18137, 48356, 19559, 18515, // alpha = 0.1007811 + 17973, 48345, 19437, 18385, // alpha = 0.1111111 + 17830, 48332, 19245, 18200, // alpha = 0.1219451 + 17707, 48317, 19073, 18040, // alpha = 0.1332829 + 17597, 48300, 18925, 17896, // alpha = 0.1451247 + 17499, 48281, 18792, 17767, // alpha = 0.1574704 + 17414, 48261, 18671, 17655, // alpha = 0.17032 + 17267, 48238, 18563, 17553, // alpha = 0.1836735 + 17133, 48214, 18468, 17463, // alpha = 0.1975309 + 17011, 48188, 18330, 17352, // alpha = 0.2118922 + 16901, 48161, 18171, 17202, // alpha = 0.2267574 + 16804, 48133, 18029, 17065, // alpha = 0.2421265 + 16717, 48078, 17897, 16944, // alpha = 0.2579995 + 16637, 48017, 17780, 16831, // alpha = 0.2743765 + 16565, 47956, 17672, 16728, // alpha = 0.2912573 + 16500, 47893, 17575, 16632, // alpha = 0.308642 + 16443, 47829, 17483, 16545, // alpha = 0.3265306 + 16389, 47766, 17397, 16465, // alpha = 0.3449232 + 16295, 47702, 17247, 16389, // alpha = 0.3638196 + 16210, 47639, 17110, 16258, // alpha = 0.38322 + 16129, 47576, 16989, 16130, // alpha = 0.4031242 + 16054, 47513, 16872, 16009, // alpha = 0.4235324 + 15986, 47451, 16770, 15897, // alpha = 0.4444445 + 15921, 47390, 16676, 15792, // alpha = 0.4658605 + 15864, 47329, 16589, 15695, // alpha = 0.4877803 + 15810, 47269, 16511, 15602, // alpha = 0.5102041 + 15760, 47210, 16439, 15516, // alpha = 0.5331318 + 15711, 47152, 16360, 15433, // alpha = 0.5565634 + 15665, 47085, 16234, 15354, // alpha = 0.5804989 + 15626, 46972, 16128, 15208, // alpha = 0.6049383 + 15587, 46861, 16024, 15072, // alpha = 0.6298816 + 15552, 46751, 15933, 14943, // alpha = 0.6553288 + 15518, 46642, 15847, 14820, // alpha = 0.68128 + 15487, 46535, 15769, 14703, // alpha = 0.7077349 + 15457, 46429, 15699, 14593, // alpha = 0.7346939 + 15431, 46325, 15634, 14490, // alpha = 0.7621567 + 15404, 46222, 15576, 14391, // alpha = 0.7901235 + 15380, 46121, 15521, 14256, // alpha = 0.8185941 + 15354, 45962, 15474, 14076, // alpha = 0.8475687 + 15312, 45764, 15428, 13904, // alpha = 0.8770471 + 15271, 45570, 15388, 13742, // alpha = 0.9070295 + 15234, 45378, 15340, 13589, // alpha = 0.9375157 + 15198, 45189, 15270, 13438, // alpha = 0.9685059 + 15165, 44949, 15210, 13280, // alpha = 1 + + // Cos (theta) = 0.5968758 + 23930, 48480, 25502, 24413, // alpha = 0.001 + 23930, 48480, 25502, 24413, // alpha = 0.001 + 23967, 48480, 25501, 24462, // alpha = 0.001007811 + 23785, 48480, 25286, 24217, // alpha = 0.002267574 + 22892, 48480, 24492, 23370, // alpha = 0.004031243 + 22279, 48480, 23783, 22713, // alpha = 0.006298816 + 21725, 48480, 23252, 22154, // alpha = 0.009070295 + 21290, 48480, 22787, 21713, // alpha = 0.01234568 + 20854, 48479, 22447, 21335, // alpha = 0.01612497 + 20563, 48478, 22031, 20943, // alpha = 0.02040816 + 20220, 48477, 21738, 20657, // alpha = 0.02519527 + 19913, 48475, 21516, 20420, // alpha = 0.03048627 + 19676, 48472, 21192, 20102, // alpha = 0.03628118 + 19491, 48469, 20936, 19853, // alpha = 0.04258 + 19236, 48465, 20730, 19657, // alpha = 0.04938272 + 18998, 48460, 20562, 19497, // alpha = 0.05668934 + 18805, 48455, 20374, 19277, // alpha = 0.06449988 + 18645, 48448, 20145, 19061, // alpha = 0.07281432 + 18510, 48439, 19953, 18878, // alpha = 0.08163266 + 18357, 48430, 19789, 18722, // alpha = 0.09095491 + 18162, 48418, 19650, 18589, // alpha = 0.1007811 + 17996, 48405, 19527, 18476, // alpha = 0.1111111 + 17851, 48390, 19387, 18321, // alpha = 0.1219451 + 17722, 48374, 19205, 18145, // alpha = 0.1332829 + 17612, 48355, 19038, 17993, // alpha = 0.1451247 + 17513, 48334, 18896, 17856, // alpha = 0.1574704 + 17425, 48311, 18765, 17734, // alpha = 0.17032 + 17290, 48286, 18647, 17626, // alpha = 0.1836735 + 17151, 48259, 18540, 17527, // alpha = 0.1975309 + 17027, 48231, 18446, 17438, // alpha = 0.2118922 + 16918, 48202, 18289, 17310, // alpha = 0.2267574 + 16818, 48171, 18132, 17165, // alpha = 0.2421265 + 16730, 48139, 17991, 17035, // alpha = 0.2579995 + 16650, 48085, 17862, 16912, // alpha = 0.2743765 + 16577, 48019, 17747, 16803, // alpha = 0.2912573 + 16511, 47953, 17640, 16701, // alpha = 0.308642 + 16454, 47886, 17543, 16610, // alpha = 0.3265306 + 16400, 47819, 17456, 16524, // alpha = 0.3449232 + 16317, 47753, 17343, 16444, // alpha = 0.3638196 + 16227, 47687, 17197, 16357, // alpha = 0.38322 + 16143, 47621, 17065, 16219, // alpha = 0.4031242 + 16068, 47556, 16942, 16093, // alpha = 0.4235324 + 16000, 47492, 16831, 15974, // alpha = 0.4444445 + 15937, 47429, 16729, 15864, // alpha = 0.4658605 + 15875, 47367, 16638, 15760, // alpha = 0.4877803 + 15822, 47306, 16554, 15664, // alpha = 0.5102041 + 15772, 47245, 16479, 15573, // alpha = 0.5331318 + 15723, 47186, 16407, 15487, // alpha = 0.5565634 + 15680, 47127, 16305, 15407, // alpha = 0.5804989 + 15638, 47035, 16187, 15303, // alpha = 0.6049383 + 15599, 46922, 16077, 15159, // alpha = 0.6298816 + 15564, 46810, 15981, 15025, // alpha = 0.6553288 + 15529, 46700, 15889, 14895, // alpha = 0.68128 + 15497, 46591, 15808, 14774, // alpha = 0.7077349 + 15467, 46485, 15734, 14660, // alpha = 0.7346939 + 15428, 46379, 15639, 14520, // alpha = 0.7621567 + 15413, 46275, 15604, 14449, // alpha = 0.7901235 + 15386, 46173, 15547, 14350, // alpha = 0.8185941 + 15366, 46063, 15496, 14185, // alpha = 0.8475687 + 15327, 45864, 15448, 14008, // alpha = 0.8770471 + 15286, 45667, 15405, 13835, // alpha = 0.9070295 + 15247, 45474, 15365, 13674, // alpha = 0.9375157 + 15211, 45282, 15298, 13519, // alpha = 0.9685059 + 15178, 45094, 15232, 13375, // alpha = 1 + + // Cos (theta) = 0.5764676 + 23967, 48555, 25660, 24568, // alpha = 0.001 + 23967, 48555, 25660, 24568, // alpha = 0.001 + 23940, 48555, 25664, 24530, // alpha = 0.001007811 + 23764, 48555, 25445, 24279, // alpha = 0.002267574 + 22937, 48555, 24620, 23536, // alpha = 0.004031243 + 22324, 48555, 23851, 22810, // alpha = 0.006298816 + 21746, 48555, 23404, 22275, // alpha = 0.009070295 + 21313, 48554, 22903, 21796, // alpha = 0.01234568 + 20878, 48554, 22573, 21472, // alpha = 0.01612497 + 20582, 48552, 22172, 21052, // alpha = 0.02040816 + 20253, 48551, 21848, 20746, // alpha = 0.02519527 + 19938, 48549, 21610, 20522, // alpha = 0.03048627 + 19696, 48546, 21351, 20222, // alpha = 0.03628118 + 19510, 48542, 21067, 19956, // alpha = 0.04258 + 19267, 48538, 20843, 19746, // alpha = 0.04938272 + 19023, 48533, 20661, 19572, // alpha = 0.05668934 + 18827, 48526, 20512, 19410, // alpha = 0.06449988 + 18663, 48518, 20295, 19175, // alpha = 0.07281432 + 18526, 48508, 20085, 18980, // alpha = 0.08163266 + 18390, 48497, 19906, 18815, // alpha = 0.09095491 + 18189, 48484, 19754, 18671, // alpha = 0.1007811 + 18018, 48470, 19619, 18548, // alpha = 0.1111111 + 17870, 48453, 19505, 18441, // alpha = 0.1219451 + 17741, 48434, 19351, 18263, // alpha = 0.1332829 + 17628, 48413, 19171, 18098, // alpha = 0.1451247 + 17529, 48389, 19009, 17952, // alpha = 0.1574704 + 17440, 48364, 18865, 17822, // alpha = 0.17032 + 17313, 48336, 18740, 17703, // alpha = 0.1836735 + 17173, 48307, 18625, 17599, // alpha = 0.1975309 + 17050, 48276, 18521, 17505, // alpha = 0.2118922 + 16935, 48243, 18419, 17418, // alpha = 0.2267574 + 16837, 48210, 18249, 17276, // alpha = 0.2421265 + 16745, 48176, 18093, 17131, // alpha = 0.2579995 + 16663, 48141, 17956, 17001, // alpha = 0.2743765 + 16591, 48085, 17828, 16885, // alpha = 0.2912573 + 16523, 48014, 17712, 16774, // alpha = 0.308642 + 16463, 47944, 17608, 16676, // alpha = 0.3265306 + 16409, 47874, 17514, 16583, // alpha = 0.3449232 + 16337, 47804, 17425, 16502, // alpha = 0.3638196 + 16244, 47735, 17287, 16423, // alpha = 0.38322 + 16162, 47667, 17143, 16316, // alpha = 0.4031242 + 16086, 47600, 17017, 16182, // alpha = 0.4235324 + 16015, 47534, 16897, 16057, // alpha = 0.4444445 + 15952, 47469, 16791, 15940, // alpha = 0.4658605 + 15889, 47405, 16693, 15830, // alpha = 0.4877803 + 15835, 47342, 16603, 15728, // alpha = 0.5102041 + 15784, 47281, 16520, 15634, // alpha = 0.5331318 + 15735, 47220, 16447, 15543, // alpha = 0.5565634 + 15692, 47160, 16373, 15460, // alpha = 0.5804989 + 15649, 47099, 16250, 15380, // alpha = 0.6049383 + 15612, 46984, 16138, 15252, // alpha = 0.6298816 + 15573, 46871, 16032, 15111, // alpha = 0.6553288 + 15539, 46759, 15936, 14977, // alpha = 0.68128 + 15507, 46649, 15851, 14850, // alpha = 0.7077349 + 15476, 46541, 15771, 14733, // alpha = 0.7346939 + 15447, 46435, 15698, 14618, // alpha = 0.7621567 + 15421, 46330, 15633, 14512, // alpha = 0.7901235 + 15396, 46226, 15572, 14412, // alpha = 0.8185941 + 15373, 46124, 15519, 14297, // alpha = 0.8475687 + 15342, 45968, 15469, 14112, // alpha = 0.8770471 + 15299, 45768, 15424, 13937, // alpha = 0.9070295 + 15260, 45572, 15382, 13771, // alpha = 0.9375157 + 15224, 45380, 15328, 13612, // alpha = 0.9685059 + 15188, 45189, 15260, 13459, // alpha = 1 + + // Cos (theta) = 0.5555555 + 24007, 48637, 25806, 24659, // alpha = 0.001 + 24007, 48637, 25806, 24659, // alpha = 0.001 + 24005, 48637, 25764, 24657, // alpha = 0.001007811 + 23822, 48637, 25618, 24465, // alpha = 0.002267574 + 22961, 48636, 24733, 23618, // alpha = 0.004031243 + 22337, 48636, 24032, 22894, // alpha = 0.006298816 + 21766, 48636, 23566, 22405, // alpha = 0.009070295 + 21349, 48635, 23038, 21896, // alpha = 0.01234568 + 20904, 48634, 22675, 21563, // alpha = 0.01612497 + 20600, 48633, 22331, 21167, // alpha = 0.02040816 + 20289, 48631, 21979, 20844, // alpha = 0.02519527 + 19964, 48629, 21719, 20601, // alpha = 0.03048627 + 19718, 48626, 21519, 20354, // alpha = 0.03628118 + 19527, 48622, 21222, 20067, // alpha = 0.04258 + 19294, 48616, 20974, 19839, // alpha = 0.04938272 + 19049, 48610, 20773, 19655, // alpha = 0.05668934 + 18851, 48603, 20609, 19506, // alpha = 0.06449988 + 18683, 48593, 20465, 19303, // alpha = 0.07281432 + 18542, 48582, 20234, 19090, // alpha = 0.08163266 + 18420, 48570, 20041, 18914, // alpha = 0.09095491 + 18218, 48555, 19871, 18761, // alpha = 0.1007811 + 18044, 48538, 19724, 18629, // alpha = 0.1111111 + 17894, 48519, 19597, 18514, // alpha = 0.1219451 + 17762, 48498, 19485, 18394, // alpha = 0.1332829 + 17646, 48473, 19317, 18215, // alpha = 0.1451247 + 17544, 48447, 19142, 18058, // alpha = 0.1574704 + 17453, 48419, 18986, 17914, // alpha = 0.17032 + 17340, 48388, 18843, 17791, // alpha = 0.1836735 + 17194, 48356, 18716, 17674, // alpha = 0.1975309 + 17067, 48322, 18603, 17572, // alpha = 0.2118922 + 16955, 48287, 18497, 17482, // alpha = 0.2267574 + 16854, 48251, 18379, 17390, // alpha = 0.2421265 + 16759, 48214, 18210, 17234, // alpha = 0.2579995 + 16679, 48177, 18055, 17096, // alpha = 0.2743765 + 16604, 48140, 17917, 16972, // alpha = 0.2912573 + 16535, 48077, 17791, 16854, // alpha = 0.308642 + 16475, 48003, 17680, 16749, // alpha = 0.3265306 + 16420, 47929, 17578, 16652, // alpha = 0.3449232 + 16355, 47857, 17483, 16562, // alpha = 0.3638196 + 16263, 47785, 17391, 16478, // alpha = 0.38322 + 16180, 47714, 17234, 16402, // alpha = 0.4031242 + 16102, 47645, 17096, 16277, // alpha = 0.4235324 + 16031, 47577, 16968, 16143, // alpha = 0.4444445 + 15968, 47510, 16856, 16022, // alpha = 0.4658605 + 15906, 47444, 16750, 15905, // alpha = 0.4877803 + 15848, 47380, 16656, 15798, // alpha = 0.5102041 + 15796, 47316, 16567, 15698, // alpha = 0.5331318 + 15748, 47255, 16489, 15604, // alpha = 0.5565634 + 15703, 47194, 16416, 15516, // alpha = 0.5804989 + 15661, 47134, 16317, 15432, // alpha = 0.6049383 + 15619, 47048, 16197, 15346, // alpha = 0.6298816 + 15584, 46932, 16087, 15201, // alpha = 0.6553288 + 15548, 46819, 15989, 15062, // alpha = 0.68128 + 15516, 46708, 15897, 14930, // alpha = 0.7077349 + 15484, 46599, 15812, 14809, // alpha = 0.7346939 + 15455, 46491, 15736, 14689, // alpha = 0.7621567 + 15429, 46385, 15668, 14579, // alpha = 0.7901235 + 15404, 46281, 15603, 14474, // alpha = 0.8185941 + 15380, 46178, 15545, 14374, // alpha = 0.8475687 + 15356, 46073, 15493, 14222, // alpha = 0.8770471 + 15313, 45874, 15445, 14042, // alpha = 0.9070295 + 15274, 45676, 15401, 13872, // alpha = 0.9375157 + 15237, 45481, 15361, 13708, // alpha = 0.9685059 + 15201, 45289, 15288, 13548, // alpha = 1 + + // Cos (theta) = 0.5341396 + 24044, 48725, 25874, 24752, // alpha = 0.001 + 24044, 48725, 25874, 24752, // alpha = 0.001 + 24068, 48725, 25880, 24770, // alpha = 0.001007811 + 23795, 48725, 25719, 24534, // alpha = 0.002267574 + 22987, 48725, 24852, 23702, // alpha = 0.004031243 + 22378, 48724, 24123, 23006, // alpha = 0.006298816 + 21795, 48724, 23679, 22545, // alpha = 0.009070295 + 21380, 48723, 23191, 22002, // alpha = 0.01234568 + 20933, 48722, 22793, 21648, // alpha = 0.01612497 + 20624, 48721, 22516, 21303, // alpha = 0.02040816 + 20322, 48719, 22131, 20950, // alpha = 0.02519527 + 19991, 48716, 21842, 20688, // alpha = 0.03048627 + 19742, 48712, 21623, 20490, // alpha = 0.03628118 + 19547, 48707, 21398, 20192, // alpha = 0.04258 + 19328, 48701, 21124, 19946, // alpha = 0.04938272 + 19080, 48694, 20906, 19749, // alpha = 0.05668934 + 18876, 48685, 20724, 19587, // alpha = 0.06449988 + 18705, 48675, 20573, 19444, // alpha = 0.07281432 + 18565, 48662, 20409, 19220, // alpha = 0.08163266 + 18441, 48648, 20194, 19023, // alpha = 0.09095491 + 18250, 48631, 20006, 18861, // alpha = 0.1007811 + 18071, 48611, 19845, 18718, // alpha = 0.1111111 + 17919, 48589, 19705, 18594, // alpha = 0.1219451 + 17782, 48565, 19583, 18483, // alpha = 0.1332829 + 17665, 48538, 19471, 18342, // alpha = 0.1451247 + 17559, 48508, 19293, 18170, // alpha = 0.1574704 + 17470, 48476, 19115, 18021, // alpha = 0.17032 + 17362, 48442, 18961, 17880, // alpha = 0.1836735 + 17217, 48407, 18822, 17757, // alpha = 0.1975309 + 17091, 48370, 18694, 17649, // alpha = 0.2118922 + 16974, 48331, 18578, 17550, // alpha = 0.2267574 + 16868, 48292, 18477, 17459, // alpha = 0.2421265 + 16776, 48253, 18336, 17348, // alpha = 0.2579995 + 16690, 48214, 18168, 17196, // alpha = 0.2743765 + 16617, 48174, 18016, 17063, // alpha = 0.2912573 + 16550, 48134, 17883, 16940, // alpha = 0.308642 + 16488, 48063, 17759, 16826, // alpha = 0.3265306 + 16432, 47986, 17646, 16723, // alpha = 0.3449232 + 16378, 47910, 17547, 16627, // alpha = 0.3638196 + 16284, 47835, 17456, 16538, // alpha = 0.38322 + 16199, 47762, 17337, 16456, // alpha = 0.4031242 + 16120, 47690, 17185, 16377, // alpha = 0.4235324 + 16048, 47620, 17050, 16238, // alpha = 0.4444445 + 15983, 47551, 16927, 16106, // alpha = 0.4658605 + 15919, 47484, 16815, 15984, // alpha = 0.4877803 + 15861, 47418, 16713, 15870, // alpha = 0.5102041 + 15811, 47353, 16619, 15767, // alpha = 0.5331318 + 15760, 47290, 16535, 15665, // alpha = 0.5565634 + 15715, 47228, 16458, 15575, // alpha = 0.5804989 + 15672, 47167, 16388, 15487, // alpha = 0.6049383 + 15634, 47108, 16264, 15408, // alpha = 0.6298816 + 15595, 46995, 16151, 15298, // alpha = 0.6553288 + 15557, 46881, 16042, 15150, // alpha = 0.68128 + 15526, 46769, 15945, 15018, // alpha = 0.7077349 + 15495, 46658, 15858, 14888, // alpha = 0.7346939 + 15465, 46549, 15775, 14764, // alpha = 0.7621567 + 15439, 46443, 15706, 14650, // alpha = 0.7901235 + 15413, 46337, 15637, 14542, // alpha = 0.8185941 + 15388, 46234, 15576, 14440, // alpha = 0.8475687 + 15366, 46132, 15518, 14340, // alpha = 0.8770471 + 15329, 45982, 15469, 14157, // alpha = 0.9070295 + 15289, 45783, 15421, 13978, // alpha = 0.9375157 + 15249, 45586, 15380, 13807, // alpha = 0.9685059 + 15214, 45394, 15323, 13645, // alpha = 1 + + // Cos (theta) = 0.5122197 + 24053, 48821, 26055, 24830, // alpha = 0.001 + 24053, 48821, 26055, 24830, // alpha = 0.001 + 24024, 48821, 26042, 24806, // alpha = 0.001007811 + 23846, 48821, 25867, 24656, // alpha = 0.002267574 + 22991, 48821, 24976, 23775, // alpha = 0.004031243 + 22425, 48821, 24352, 23135, // alpha = 0.006298816 + 21822, 48820, 23805, 22629, // alpha = 0.009070295 + 21419, 48819, 23379, 22125, // alpha = 0.01234568 + 20961, 48818, 22940, 21741, // alpha = 0.01612497 + 20646, 48816, 22635, 21450, // alpha = 0.02040816 + 20359, 48814, 22310, 21070, // alpha = 0.02519527 + 20020, 48811, 21992, 20785, // alpha = 0.03048627 + 19768, 48806, 21745, 20573, // alpha = 0.03628118 + 19569, 48801, 21555, 20333, // alpha = 0.04258 + 19364, 48794, 21306, 20065, // alpha = 0.04938272 + 19111, 48785, 21062, 19852, // alpha = 0.05668934 + 18903, 48775, 20856, 19676, // alpha = 0.06449988 + 18730, 48763, 20691, 19530, // alpha = 0.07281432 + 18584, 48748, 20548, 19358, // alpha = 0.08163266 + 18461, 48731, 20376, 19149, // alpha = 0.09095491 + 18278, 48712, 20168, 18968, // alpha = 0.1007811 + 18102, 48690, 19989, 18817, // alpha = 0.1111111 + 17944, 48665, 19831, 18682, // alpha = 0.1219451 + 17805, 48636, 19692, 18562, // alpha = 0.1332829 + 17682, 48606, 19567, 18456, // alpha = 0.1451247 + 17576, 48572, 19459, 18294, // alpha = 0.1574704 + 17483, 48537, 19271, 18130, // alpha = 0.17032 + 17390, 48499, 19096, 17982, // alpha = 0.1836735 + 17243, 48459, 18941, 17851, // alpha = 0.1975309 + 17111, 48419, 18800, 17732, // alpha = 0.2118922 + 16994, 48377, 18673, 17624, // alpha = 0.2267574 + 16886, 48335, 18557, 17525, // alpha = 0.2421265 + 16793, 48293, 18457, 17438, // alpha = 0.2579995 + 16707, 48251, 18300, 17308, // alpha = 0.2743765 + 16632, 48209, 18131, 17163, // alpha = 0.2912573 + 16563, 48167, 17981, 17032, // alpha = 0.308642 + 16499, 48125, 17848, 16908, // alpha = 0.3265306 + 16441, 48044, 17724, 16796, // alpha = 0.3449232 + 16392, 47964, 17613, 16697, // alpha = 0.3638196 + 16301, 47887, 17515, 16599, // alpha = 0.38322 + 16217, 47811, 17428, 16514, // alpha = 0.4031242 + 16138, 47736, 17283, 16434, // alpha = 0.4235324 + 16062, 47664, 17139, 16333, // alpha = 0.4444445 + 15996, 47593, 17000, 16199, // alpha = 0.4658605 + 15936, 47524, 16884, 16069, // alpha = 0.4877803 + 15876, 47456, 16776, 15948, // alpha = 0.5102041 + 15823, 47390, 16677, 15836, // alpha = 0.5331318 + 15773, 47326, 16584, 15733, // alpha = 0.5565634 + 15725, 47263, 16505, 15635, // alpha = 0.5804989 + 15684, 47201, 16431, 15545, // alpha = 0.6049383 + 15644, 47141, 16337, 15461, // alpha = 0.6298816 + 15606, 47059, 16216, 15379, // alpha = 0.6553288 + 15568, 46944, 16102, 15250, // alpha = 0.68128 + 15535, 46830, 16000, 15108, // alpha = 0.7077349 + 15500, 46718, 15896, 14966, // alpha = 0.7346939 + 15475, 46609, 15822, 14844, // alpha = 0.7621567 + 15447, 46501, 15743, 14723, // alpha = 0.7901235 + 15420, 46395, 15671, 14613, // alpha = 0.8185941 + 15398, 46291, 15607, 14507, // alpha = 0.8475687 + 15372, 46188, 15546, 14400, // alpha = 0.8770471 + 15343, 46087, 15493, 14276, // alpha = 0.9070295 + 15301, 45894, 15445, 14092, // alpha = 0.9375157 + 15265, 45696, 15400, 13919, // alpha = 0.9685059 + 15228, 45500, 15356, 13751, // alpha = 1 + + // Cos (theta) = 0.4897959 + 24102, 48927, 26189, 24953, // alpha = 0.001 + 24102, 48927, 26189, 24953, // alpha = 0.001 + 24094, 48927, 26218, 24945, // alpha = 0.001007811 + 23896, 48927, 26004, 24769, // alpha = 0.002267574 + 23034, 48927, 25156, 23890, // alpha = 0.004031243 + 22450, 48926, 24575, 23257, // alpha = 0.006298816 + 21847, 48926, 23948, 22720, // alpha = 0.009070295 + 21467, 48925, 23573, 22269, // alpha = 0.01234568 + 20997, 48923, 23102, 21851, // alpha = 0.01612497 + 20668, 48921, 22766, 21558, // alpha = 0.02040816 + 20398, 48918, 22520, 21204, // alpha = 0.02519527 + 20056, 48914, 22166, 20899, // alpha = 0.03048627 + 19796, 48909, 21893, 20667, // alpha = 0.03628118 + 19594, 48903, 21680, 20487, // alpha = 0.04258 + 19411, 48895, 21509, 20207, // alpha = 0.04938272 + 19145, 48885, 21241, 19969, // alpha = 0.05668934 + 18935, 48873, 21015, 19780, // alpha = 0.06449988 + 18754, 48859, 20832, 19618, // alpha = 0.07281432 + 18607, 48842, 20670, 19486, // alpha = 0.08163266 + 18481, 48822, 20535, 19288, // alpha = 0.09095491 + 18315, 48799, 20356, 19094, // alpha = 0.1007811 + 18127, 48774, 20149, 18924, // alpha = 0.1111111 + 17966, 48745, 19977, 18775, // alpha = 0.1219451 + 17828, 48712, 19820, 18649, // alpha = 0.1332829 + 17705, 48677, 19678, 18535, // alpha = 0.1451247 + 17596, 48640, 19557, 18434, // alpha = 0.1574704 + 17499, 48600, 19445, 18255, // alpha = 0.17032 + 17414, 48558, 19247, 18094, // alpha = 0.1836735 + 17267, 48515, 19072, 17949, // alpha = 0.1975309 + 17136, 48470, 18914, 17823, // alpha = 0.2118922 + 17013, 48425, 18775, 17703, // alpha = 0.2267574 + 16904, 48380, 18652, 17596, // alpha = 0.2421265 + 16812, 48335, 18535, 17505, // alpha = 0.2579995 + 16722, 48289, 18436, 17416, // alpha = 0.2743765 + 16646, 48245, 18257, 17271, // alpha = 0.2912573 + 16574, 48201, 18092, 17128, // alpha = 0.308642 + 16511, 48158, 17946, 16996, // alpha = 0.3265306 + 16454, 48103, 17812, 16880, // alpha = 0.3449232 + 16400, 48020, 17693, 16768, // alpha = 0.3638196 + 16325, 47939, 17583, 16670, // alpha = 0.38322 + 16238, 47860, 17488, 16577, // alpha = 0.4031242 + 16155, 47783, 17390, 16491, // alpha = 0.4235324 + 16080, 47709, 17231, 16411, // alpha = 0.4444445 + 16011, 47636, 17092, 16292, // alpha = 0.4658605 + 15948, 47565, 16962, 16156, // alpha = 0.4877803 + 15892, 47495, 16842, 16034, // alpha = 0.5102041 + 15836, 47428, 16739, 15914, // alpha = 0.5331318 + 15786, 47362, 16641, 15806, // alpha = 0.5565634 + 15739, 47298, 16553, 15703, // alpha = 0.5804989 + 15695, 47235, 16474, 15608, // alpha = 0.6049383 + 15653, 47174, 16401, 15517, // alpha = 0.6298816 + 15615, 47114, 16287, 15434, // alpha = 0.6553288 + 15580, 47007, 16170, 15349, // alpha = 0.68128 + 15546, 46893, 16058, 15202, // alpha = 0.7077349 + 15514, 46780, 15961, 15061, // alpha = 0.7346939 + 15483, 46669, 15867, 14929, // alpha = 0.7621567 + 15455, 46561, 15786, 14804, // alpha = 0.7901235 + 15428, 46454, 15710, 14686, // alpha = 0.8185941 + 15403, 46349, 15643, 14574, // alpha = 0.8475687 + 15381, 46246, 15578, 14471, // alpha = 0.8770471 + 15356, 46144, 15522, 14370, // alpha = 0.9070295 + 15316, 46007, 15470, 14212, // alpha = 0.9375157 + 15278, 45809, 15421, 14034, // alpha = 0.9685059 + 15239, 45614, 15379, 13859, // alpha = 1 + + // Cos (theta) = 0.4668682 + 24101, 49044, 26414, 25041, // alpha = 0.001 + 24101, 49044, 26414, 25041, // alpha = 0.001 + 24110, 49044, 26433, 25049, // alpha = 0.001007811 + 23894, 49044, 26178, 24846, // alpha = 0.002267574 + 23071, 49043, 25359, 24012, // alpha = 0.004031243 + 22480, 49043, 24710, 23398, // alpha = 0.006298816 + 21876, 49042, 24127, 22825, // alpha = 0.009070295 + 21502, 49041, 23706, 22417, // alpha = 0.01234568 + 21026, 49040, 23305, 21966, // alpha = 0.01612497 + 20697, 49037, 22929, 21654, // alpha = 0.02040816 + 20441, 49034, 22650, 21356, // alpha = 0.02519527 + 20092, 49029, 22372, 21025, // alpha = 0.03048627 + 19827, 49023, 22065, 20773, // alpha = 0.03628118 + 19619, 49016, 21828, 20576, // alpha = 0.04258 + 19450, 49006, 21638, 20356, // alpha = 0.04938272 + 19176, 48994, 21460, 20095, // alpha = 0.05668934 + 18965, 48980, 21202, 19894, // alpha = 0.06449988 + 18787, 48963, 20989, 19723, // alpha = 0.07281432 + 18631, 48943, 20811, 19573, // alpha = 0.08163266 + 18503, 48920, 20659, 19445, // alpha = 0.09095491 + 18350, 48894, 20528, 19229, // alpha = 0.1007811 + 18162, 48864, 20346, 19046, // alpha = 0.1111111 + 17997, 48830, 20142, 18887, // alpha = 0.1219451 + 17852, 48793, 19967, 18744, // alpha = 0.1332829 + 17726, 48754, 19812, 18620, // alpha = 0.1451247 + 17614, 48711, 19675, 18509, // alpha = 0.1574704 + 17515, 48666, 19551, 18389, // alpha = 0.17032 + 17427, 48620, 19426, 18214, // alpha = 0.1836735 + 17299, 48572, 19231, 18063, // alpha = 0.1975309 + 17159, 48523, 19053, 17920, // alpha = 0.2118922 + 17035, 48474, 18895, 17792, // alpha = 0.2267574 + 16926, 48426, 18754, 17678, // alpha = 0.2421265 + 16830, 48377, 18630, 17578, // alpha = 0.2579995 + 16743, 48329, 18514, 17485, // alpha = 0.2743765 + 16662, 48282, 18398, 17389, // alpha = 0.2912573 + 16591, 48235, 18214, 17237, // alpha = 0.308642 + 16525, 48190, 18056, 17095, // alpha = 0.3265306 + 16466, 48145, 17907, 16968, // alpha = 0.3449232 + 16412, 48077, 17776, 16849, // alpha = 0.3638196 + 16343, 47992, 17661, 16741, // alpha = 0.38322 + 16255, 47911, 17553, 16643, // alpha = 0.4031242 + 16170, 47831, 17459, 16550, // alpha = 0.4235324 + 16098, 47754, 17339, 16468, // alpha = 0.4444445 + 16026, 47679, 17185, 16390, // alpha = 0.4658605 + 15967, 47606, 17047, 16255, // alpha = 0.4877803 + 15904, 47535, 16919, 16119, // alpha = 0.5102041 + 15849, 47466, 16807, 15996, // alpha = 0.5331318 + 15799, 47399, 16702, 15882, // alpha = 0.5565634 + 15751, 47334, 16609, 15774, // alpha = 0.5804989 + 15706, 47270, 16525, 15674, // alpha = 0.6049383 + 15660, 47208, 16447, 15577, // alpha = 0.6298816 + 15625, 47148, 16370, 15490, // alpha = 0.6553288 + 15589, 47073, 16240, 15408, // alpha = 0.68128 + 15556, 46957, 16123, 15303, // alpha = 0.7077349 + 15522, 46843, 16016, 15158, // alpha = 0.7346939 + 15493, 46731, 15922, 15023, // alpha = 0.7621567 + 15465, 46622, 15834, 14891, // alpha = 0.7901235 + 15437, 46515, 15754, 14766, // alpha = 0.8185941 + 15413, 46409, 15680, 14652, // alpha = 0.8475687 + 15389, 46306, 15613, 14544, // alpha = 0.8770471 + 15367, 46203, 15552, 14439, // alpha = 0.9070295 + 15330, 46102, 15498, 14340, // alpha = 0.9375157 + 15291, 45927, 15447, 14154, // alpha = 0.9685059 + 15254, 45731, 15402, 13978, // alpha = 1 + + // Cos (theta) = 0.4434366 + 24166, 49163, 26646, 25207, // alpha = 0.001 + 24166, 49163, 26646, 25207, // alpha = 0.001 + 24199, 49163, 26644, 25240, // alpha = 0.001007811 + 23983, 49163, 26405, 25022, // alpha = 0.002267574 + 23113, 49163, 25560, 24154, // alpha = 0.004031243 + 22536, 49163, 24857, 23571, // alpha = 0.006298816 + 21920, 49162, 24346, 22959, // alpha = 0.009070295 + 21532, 49161, 23866, 22567, // alpha = 0.01234568 + 21067, 49160, 23552, 22107, // alpha = 0.01612497 + 20729, 49159, 23119, 21765, // alpha = 0.02040816 + 20487, 49157, 22807, 21520, // alpha = 0.02519527 + 20136, 49154, 22579, 21174, // alpha = 0.03048627 + 19855, 49149, 22281, 20889, // alpha = 0.03628118 + 19645, 49140, 22006, 20677, // alpha = 0.04258 + 19476, 49129, 21790, 20504, // alpha = 0.04938272 + 19222, 49115, 21613, 20252, // alpha = 0.05668934 + 19002, 49098, 21433, 20027, // alpha = 0.06449988 + 18814, 49078, 21192, 19836, // alpha = 0.07281432 + 18659, 49054, 20986, 19675, // alpha = 0.08163266 + 18525, 49027, 20811, 19539, // alpha = 0.09095491 + 18389, 48996, 20658, 19385, // alpha = 0.1007811 + 18195, 48961, 20530, 19183, // alpha = 0.1111111 + 18027, 48922, 20349, 19008, // alpha = 0.1219451 + 17880, 48880, 20142, 18854, // alpha = 0.1332829 + 17749, 48834, 19967, 18717, // alpha = 0.1451247 + 17633, 48786, 19810, 18594, // alpha = 0.1574704 + 17533, 48736, 19666, 18487, // alpha = 0.17032 + 17444, 48684, 19540, 18349, // alpha = 0.1836735 + 17323, 48632, 19408, 18179, // alpha = 0.1975309 + 17184, 48579, 19207, 18026, // alpha = 0.2118922 + 17055, 48526, 19030, 17887, // alpha = 0.2267574 + 16949, 48473, 18873, 17767, // alpha = 0.2421265 + 16849, 48421, 18732, 17655, // alpha = 0.2579995 + 16759, 48369, 18608, 17554, // alpha = 0.2743765 + 16676, 48319, 18492, 17461, // alpha = 0.2912573 + 16606, 48270, 18355, 17351, // alpha = 0.308642 + 16538, 48223, 18174, 17199, // alpha = 0.3265306 + 16478, 48176, 18019, 17059, // alpha = 0.3449232 + 16423, 48131, 17875, 16935, // alpha = 0.3638196 + 16362, 48047, 17744, 16820, // alpha = 0.38322 + 16271, 47962, 17631, 16713, // alpha = 0.4031242 + 16189, 47880, 17525, 16616, // alpha = 0.4235324 + 16107, 47801, 17437, 16522, // alpha = 0.4444445 + 16042, 47723, 17293, 16446, // alpha = 0.4658605 + 15977, 47649, 17140, 16355, // alpha = 0.4877803 + 15917, 47576, 17007, 16212, // alpha = 0.5102041 + 15861, 47506, 16884, 16082, // alpha = 0.5331318 + 15811, 47437, 16770, 15964, // alpha = 0.5565634 + 15764, 47371, 16667, 15850, // alpha = 0.5804989 + 15717, 47306, 16579, 15743, // alpha = 0.6049383 + 15676, 47243, 16494, 15645, // alpha = 0.6298816 + 15636, 47182, 16422, 15552, // alpha = 0.6553288 + 15599, 47122, 16320, 15466, // alpha = 0.68128 + 15565, 47022, 16195, 15387, // alpha = 0.7077349 + 15531, 46907, 16083, 15259, // alpha = 0.7346939 + 15500, 46795, 15978, 15116, // alpha = 0.7621567 + 15473, 46685, 15888, 14981, // alpha = 0.7901235 + 15447, 46577, 15801, 14855, // alpha = 0.8185941 + 15420, 46470, 15721, 14734, // alpha = 0.8475687 + 15396, 46366, 15651, 14621, // alpha = 0.8770471 + 15372, 46264, 15587, 14511, // alpha = 0.9070295 + 15344, 46164, 15528, 14410, // alpha = 0.9375157 + 15303, 46048, 15474, 14291, // alpha = 0.9685059 + 15266, 45850, 15425, 14104, // alpha = 1 + + // Cos (theta) = 0.4195011 + 24215, 49236, 26833, 25376, // alpha = 0.001 + 24215, 49236, 26833, 25376, // alpha = 0.001 + 24235, 49236, 26795, 25399, // alpha = 0.001007811 + 24002, 49236, 26663, 25146, // alpha = 0.002267574 + 23159, 49236, 25746, 24318, // alpha = 0.004031243 + 22558, 49235, 25035, 23668, // alpha = 0.006298816 + 21955, 49235, 24592, 23100, // alpha = 0.009070295 + 21564, 49234, 24062, 22676, // alpha = 0.01234568 + 21108, 49233, 23700, 22266, // alpha = 0.01612497 + 20762, 49231, 23355, 21892, // alpha = 0.02040816 + 20510, 49229, 22999, 21618, // alpha = 0.02519527 + 20179, 49225, 22734, 21340, // alpha = 0.03048627 + 19893, 49221, 22533, 21031, // alpha = 0.03628118 + 19679, 49216, 22226, 20798, // alpha = 0.04258 + 19502, 49209, 21980, 20606, // alpha = 0.04938272 + 19265, 49200, 21773, 20424, // alpha = 0.05668934 + 19040, 49190, 21606, 20177, // alpha = 0.06449988 + 18846, 49178, 21428, 19965, // alpha = 0.07281432 + 18687, 49164, 21191, 19790, // alpha = 0.08163266 + 18549, 49144, 20993, 19638, // alpha = 0.09095491 + 18432, 49107, 20814, 19509, // alpha = 0.1007811 + 18232, 49066, 20666, 19339, // alpha = 0.1111111 + 18058, 49021, 20534, 19145, // alpha = 0.1219451 + 17905, 48972, 20354, 18974, // alpha = 0.1332829 + 17775, 48920, 20147, 18826, // alpha = 0.1451247 + 17657, 48865, 19964, 18692, // alpha = 0.1574704 + 17553, 48809, 19805, 18572, // alpha = 0.17032 + 17461, 48752, 19661, 18467, // alpha = 0.1836735 + 17353, 48694, 19535, 18313, // alpha = 0.1975309 + 17214, 48636, 19387, 18151, // alpha = 0.2118922 + 17083, 48579, 19188, 17998, // alpha = 0.2267574 + 16968, 48522, 19008, 17861, // alpha = 0.2421265 + 16869, 48466, 18849, 17743, // alpha = 0.2579995 + 16775, 48411, 18708, 17630, // alpha = 0.2743765 + 16693, 48358, 18586, 17532, // alpha = 0.2912573 + 16621, 48306, 18473, 17443, // alpha = 0.308642 + 16551, 48256, 18314, 17312, // alpha = 0.3265306 + 16489, 48208, 18140, 17162, // alpha = 0.3449232 + 16435, 48161, 17982, 17027, // alpha = 0.3638196 + 16384, 48103, 17841, 16906, // alpha = 0.38322 + 16293, 48015, 17713, 16793, // alpha = 0.4031242 + 16211, 47930, 17599, 16689, // alpha = 0.4235324 + 16128, 47848, 17501, 16592, // alpha = 0.4444445 + 16058, 47768, 17407, 16505, // alpha = 0.4658605 + 15990, 47692, 17248, 16423, // alpha = 0.4877803 + 15931, 47618, 17101, 16314, // alpha = 0.5102041 + 15877, 47546, 16964, 16180, // alpha = 0.5331318 + 15820, 47476, 16846, 16047, // alpha = 0.5565634 + 15775, 47408, 16738, 15931, // alpha = 0.5804989 + 15729, 47342, 16637, 15820, // alpha = 0.6049383 + 15686, 47278, 16549, 15717, // alpha = 0.6298816 + 15645, 47216, 16469, 15618, // alpha = 0.6553288 + 15607, 47156, 16396, 15528, // alpha = 0.68128 + 15559, 47089, 16207, 15410, // alpha = 0.7077349 + 15538, 46973, 16156, 15364, // alpha = 0.7346939 + 15510, 46860, 16044, 15218, // alpha = 0.7621567 + 15479, 46749, 15944, 15076, // alpha = 0.7901235 + 15442, 46640, 15808, 14894, // alpha = 0.8185941 + 15429, 46534, 15770, 14822, // alpha = 0.8475687 + 15402, 46429, 15695, 14701, // alpha = 0.8770471 + 15382, 46327, 15625, 14593, // alpha = 0.9070295 + 15336, 46225, 15533, 14443, // alpha = 0.9375157 + 15320, 46125, 15506, 14385, // alpha = 0.9685059 + 15278, 45974, 15453, 14240, // alpha = 1 + + // Cos (theta) = 0.3950617 + 24270, 49319, 27037, 25577, // alpha = 0.001 + 24270, 49319, 27037, 25577, // alpha = 0.001 + 24351, 49319, 26989, 25635, // alpha = 0.001007811 + 24052, 49319, 26838, 25323, // alpha = 0.002267574 + 23183, 49318, 25933, 24480, // alpha = 0.004031243 + 22589, 49318, 25293, 23790, // alpha = 0.006298816 + 21999, 49317, 24764, 23270, // alpha = 0.009070295 + 21587, 49316, 24307, 22790, // alpha = 0.01234568 + 21156, 49315, 23887, 22455, // alpha = 0.01612497 + 20798, 49313, 23600, 22038, // alpha = 0.02040816 + 20542, 49310, 23237, 21740, // alpha = 0.02519527 + 20223, 49306, 22930, 21518, // alpha = 0.03048627 + 19936, 49300, 22695, 21198, // alpha = 0.03628118 + 19710, 49294, 22502, 20934, // alpha = 0.04258 + 19532, 49285, 22209, 20725, // alpha = 0.04938272 + 19321, 49275, 21973, 20556, // alpha = 0.05668934 + 19082, 49263, 21775, 20354, // alpha = 0.06449988 + 18884, 49248, 21616, 20120, // alpha = 0.07281432 + 18720, 49232, 21449, 19926, // alpha = 0.08163266 + 18578, 49212, 21215, 19757, // alpha = 0.09095491 + 18458, 49190, 21011, 19614, // alpha = 0.1007811 + 18271, 49166, 20832, 19486, // alpha = 0.1111111 + 18094, 49127, 20675, 19302, // alpha = 0.1219451 + 17936, 49070, 20539, 19112, // alpha = 0.1332829 + 17803, 49011, 20364, 18949, // alpha = 0.1451247 + 17678, 48949, 20149, 18798, // alpha = 0.1574704 + 17573, 48886, 19967, 18667, // alpha = 0.17032 + 17481, 48823, 19799, 18554, // alpha = 0.1836735 + 17386, 48759, 19653, 18449, // alpha = 0.1975309 + 17241, 48696, 19525, 18284, // alpha = 0.2118922 + 17106, 48633, 19363, 18115, // alpha = 0.2267574 + 16992, 48572, 19169, 17968, // alpha = 0.2421265 + 16889, 48512, 18989, 17837, // alpha = 0.2579995 + 16794, 48454, 18828, 17716, // alpha = 0.2743765 + 16710, 48398, 18688, 17608, // alpha = 0.2912573 + 16636, 48344, 18565, 17513, // alpha = 0.308642 + 16568, 48291, 18453, 17425, // alpha = 0.3265306 + 16504, 48240, 18278, 17279, // alpha = 0.3449232 + 16447, 48191, 18105, 17132, // alpha = 0.3638196 + 16395, 48144, 17949, 16999, // alpha = 0.38322 + 16314, 48068, 17808, 16879, // alpha = 0.4031242 + 16228, 47981, 17686, 16766, // alpha = 0.4235324 + 16149, 47896, 17573, 16666, // alpha = 0.4444445 + 16075, 47815, 17476, 16571, // alpha = 0.4658605 + 16006, 47736, 17364, 16485, // alpha = 0.4877803 + 15942, 47660, 17204, 16404, // alpha = 0.5102041 + 15887, 47586, 17061, 16279, // alpha = 0.5331318 + 15833, 47515, 16930, 16143, // alpha = 0.5565634 + 15786, 47446, 16813, 16018, // alpha = 0.5804989 + 15740, 47379, 16707, 15902, // alpha = 0.6049383 + 15699, 47315, 16609, 15795, // alpha = 0.6298816 + 15654, 47252, 16522, 15690, // alpha = 0.6553288 + 15618, 47190, 16444, 15597, // alpha = 0.68128 + 15583, 47130, 16361, 15508, // alpha = 0.7077349 + 15551, 47040, 16235, 15424, // alpha = 0.7346939 + 15518, 46926, 16116, 15328, // alpha = 0.7621567 + 15488, 46815, 16008, 15185, // alpha = 0.7901235 + 15462, 46706, 15913, 15047, // alpha = 0.8185941 + 15435, 46599, 15824, 14914, // alpha = 0.8475687 + 15410, 46494, 15741, 14789, // alpha = 0.8770471 + 15387, 46390, 15666, 14678, // alpha = 0.9070295 + 15366, 46289, 15599, 14565, // alpha = 0.9375157 + 15331, 46189, 15539, 14461, // alpha = 0.9685059 + 15290, 46091, 15484, 14362, // alpha = 1 + + // Cos (theta) = 0.3701184 + 24345, 49413, 27224, 25716, // alpha = 0.001 + 24345, 49413, 27224, 25716, // alpha = 0.001 + 24375, 49413, 27241, 25735, // alpha = 0.001007811 + 24115, 49413, 27019, 25543, // alpha = 0.002267574 + 23246, 49413, 26170, 24645, // alpha = 0.004031243 + 22619, 49412, 25574, 23928, // alpha = 0.006298816 + 22029, 49412, 24976, 23447, // alpha = 0.009070295 + 21628, 49410, 24598, 22943, // alpha = 0.01234568 + 21210, 49409, 24119, 22603, // alpha = 0.01612497 + 20840, 49406, 23785, 22214, // alpha = 0.02040816 + 20579, 49402, 23531, 21885, // alpha = 0.02519527 + 20277, 49397, 23179, 21633, // alpha = 0.03048627 + 19982, 49391, 22900, 21392, // alpha = 0.03628118 + 19751, 49382, 22687, 21100, // alpha = 0.04258 + 19563, 49372, 22503, 20863, // alpha = 0.04938272 + 19369, 49360, 22222, 20671, // alpha = 0.05668934 + 19126, 49345, 21994, 20518, // alpha = 0.06449988 + 18927, 49327, 21797, 20302, // alpha = 0.07281432 + 18751, 49306, 21637, 20076, // alpha = 0.08163266 + 18607, 49283, 21486, 19891, // alpha = 0.09095491 + 18483, 49256, 21243, 19731, // alpha = 0.1007811 + 18315, 49228, 21037, 19590, // alpha = 0.1111111 + 18128, 49197, 20852, 19469, // alpha = 0.1219451 + 17972, 49164, 20690, 19274, // alpha = 0.1332829 + 17830, 49108, 20551, 19088, // alpha = 0.1451247 + 17702, 49038, 20379, 18919, // alpha = 0.1574704 + 17593, 48967, 20160, 18774, // alpha = 0.17032 + 17497, 48897, 19969, 18644, // alpha = 0.1836735 + 17412, 48827, 19799, 18531, // alpha = 0.1975309 + 17266, 48758, 19648, 18428, // alpha = 0.2118922 + 17134, 48690, 19518, 18249, // alpha = 0.2267574 + 17014, 48624, 19348, 18086, // alpha = 0.2421265 + 16908, 48561, 19145, 17941, // alpha = 0.2579995 + 16813, 48499, 18962, 17811, // alpha = 0.2743765 + 16728, 48439, 18807, 17695, // alpha = 0.2912573 + 16649, 48382, 18667, 17586, // alpha = 0.308642 + 16581, 48326, 18543, 17493, // alpha = 0.3265306 + 16519, 48273, 18438, 17406, // alpha = 0.3449232 + 16459, 48222, 18245, 17245, // alpha = 0.3638196 + 16405, 48173, 18072, 17099, // alpha = 0.38322 + 16332, 48123, 17917, 16969, // alpha = 0.4031242 + 16244, 48033, 17781, 16852, // alpha = 0.4235324 + 16165, 47946, 17658, 16743, // alpha = 0.4444445 + 16089, 47862, 17549, 16641, // alpha = 0.4658605 + 16023, 47781, 17451, 16551, // alpha = 0.4877803 + 15956, 47703, 17321, 16465, // alpha = 0.5102041 + 15903, 47628, 17165, 16390, // alpha = 0.5331318 + 15846, 47555, 17021, 16249, // alpha = 0.5565634 + 15791, 47485, 16895, 16109, // alpha = 0.5804989 + 15748, 47417, 16784, 15989, // alpha = 0.6049383 + 15705, 47351, 16679, 15872, // alpha = 0.6298816 + 15665, 47288, 16586, 15768, // alpha = 0.6553288 + 15627, 47226, 16499, 15669, // alpha = 0.68128 + 15592, 47165, 16421, 15577, // alpha = 0.7077349 + 15557, 47106, 16323, 15487, // alpha = 0.7346939 + 15528, 46994, 16196, 15407, // alpha = 0.7621567 + 15497, 46882, 16079, 15299, // alpha = 0.7901235 + 15467, 46772, 15975, 15151, // alpha = 0.8185941 + 15443, 46664, 15882, 15021, // alpha = 0.8475687 + 15418, 46559, 15795, 14888, // alpha = 0.8770471 + 15395, 46456, 15715, 14769, // alpha = 0.9070295 + 15371, 46354, 15642, 14653, // alpha = 0.9375157 + 15341, 46255, 15577, 14547, // alpha = 0.9685059 + 15302, 46157, 15518, 14441, // alpha = 1 + + // Cos (theta) = 0.3446712 + 24379, 49522, 27609, 25836, // alpha = 0.001 + 24379, 49522, 27609, 25836, // alpha = 0.001 + 24379, 49522, 27581, 25836, // alpha = 0.001007811 + 24146, 49522, 27359, 25677, // alpha = 0.002267574 + 23327, 49522, 26441, 24793, // alpha = 0.004031243 + 22669, 49522, 25792, 24114, // alpha = 0.006298816 + 22091, 49521, 25242, 23625, // alpha = 0.009070295 + 21663, 49519, 24794, 23114, // alpha = 0.01234568 + 21271, 49517, 24430, 22739, // alpha = 0.01612497 + 20883, 49513, 24033, 22420, // alpha = 0.02040816 + 20615, 49509, 23739, 22054, // alpha = 0.02519527 + 20345, 49502, 23484, 21777, // alpha = 0.03048627 + 20034, 49494, 23166, 21564, // alpha = 0.03628118 + 19792, 49484, 22909, 21294, // alpha = 0.04258 + 19602, 49471, 22703, 21033, // alpha = 0.04938272 + 19432, 49455, 22535, 20816, // alpha = 0.05668934 + 19180, 49437, 22267, 20641, // alpha = 0.06449988 + 18970, 49415, 22030, 20496, // alpha = 0.07281432 + 18792, 49389, 21838, 20264, // alpha = 0.08163266 + 18639, 49361, 21667, 20050, // alpha = 0.09095491 + 18511, 49329, 21523, 19871, // alpha = 0.1007811 + 18358, 49295, 21284, 19706, // alpha = 0.1111111 + 18176, 49258, 21065, 19577, // alpha = 0.1219451 + 18007, 49220, 20877, 19457, // alpha = 0.1332829 + 17856, 49181, 20712, 19243, // alpha = 0.1451247 + 17728, 49132, 20565, 19059, // alpha = 0.1574704 + 17615, 49053, 20387, 18896, // alpha = 0.17032 + 17519, 48975, 20166, 18755, // alpha = 0.1836735 + 17432, 48898, 19966, 18630, // alpha = 0.1975309 + 17299, 48822, 19796, 18516, // alpha = 0.2118922 + 17158, 48749, 19644, 18394, // alpha = 0.2267574 + 17041, 48678, 19511, 18219, // alpha = 0.2421265 + 16929, 48610, 19329, 18058, // alpha = 0.2579995 + 16834, 48544, 19124, 17917, // alpha = 0.2743765 + 16744, 48481, 18945, 17786, // alpha = 0.2912573 + 16667, 48421, 18787, 17673, // alpha = 0.308642 + 16595, 48363, 18648, 17568, // alpha = 0.3265306 + 16529, 48307, 18527, 17472, // alpha = 0.3449232 + 16469, 48254, 18403, 17367, // alpha = 0.3638196 + 16415, 48203, 18211, 17207, // alpha = 0.38322 + 16349, 48154, 18042, 17070, // alpha = 0.4031242 + 16261, 48086, 17891, 16943, // alpha = 0.4235324 + 16181, 47996, 17754, 16825, // alpha = 0.4444445 + 16103, 47910, 17636, 16719, // alpha = 0.4658605 + 16010, 47827, 17463, 16575, // alpha = 0.4877803 + 15967, 47747, 17433, 16529, // alpha = 0.5102041 + 15910, 47671, 17285, 16448, // alpha = 0.5331318 + 15854, 47597, 17129, 16359, // alpha = 0.5565634 + 15805, 47525, 16991, 16221, // alpha = 0.5804989 + 15759, 47456, 16865, 16087, // alpha = 0.6049383 + 15715, 47389, 16754, 15965, // alpha = 0.6298816 + 15672, 47324, 16654, 15852, // alpha = 0.6553288 + 15636, 47262, 16559, 15748, // alpha = 0.68128 + 15598, 47201, 16477, 15648, // alpha = 0.7077349 + 15564, 47141, 16402, 15557, // alpha = 0.7346939 + 15532, 47063, 16283, 15472, // alpha = 0.7621567 + 15503, 46950, 16160, 15393, // alpha = 0.7901235 + 15474, 46840, 16046, 15273, // alpha = 0.8185941 + 15448, 46732, 15946, 15129, // alpha = 0.8475687 + 15423, 46627, 15853, 14994, // alpha = 0.8770471 + 15399, 46523, 15767, 14868, // alpha = 0.9070295 + 15377, 46422, 15691, 14747, // alpha = 0.9375157 + 15352, 46322, 15621, 14636, // alpha = 0.9685059 + 15311, 46224, 15557, 14529, // alpha = 1 + + // Cos (theta) = 0.3187201 + 24421, 49651, 27814, 25983, // alpha = 0.001 + 24421, 49651, 27814, 25983, // alpha = 0.001 + 24474, 49651, 27830, 26022, // alpha = 0.001007811 + 24259, 49651, 27608, 25863, // alpha = 0.002267574 + 23384, 49650, 26764, 24949, // alpha = 0.004031243 + 22703, 49650, 26054, 24310, // alpha = 0.006298816 + 22159, 49648, 25599, 23776, // alpha = 0.009070295 + 21713, 49646, 25066, 23336, // alpha = 0.01234568 + 21334, 49643, 24712, 22899, // alpha = 0.01612497 + 20940, 49639, 24347, 22605, // alpha = 0.02040816 + 20663, 49633, 23993, 22269, // alpha = 0.02519527 + 20416, 49625, 23733, 21948, // alpha = 0.03048627 + 20088, 49614, 23513, 21703, // alpha = 0.03628118 + 19839, 49601, 23205, 21517, // alpha = 0.04258 + 19645, 49585, 22947, 21236, // alpha = 0.04938272 + 19480, 49565, 22742, 20988, // alpha = 0.05668934 + 19244, 49541, 22571, 20793, // alpha = 0.06449988 + 19018, 49514, 22332, 20621, // alpha = 0.07281432 + 18835, 49482, 22091, 20482, // alpha = 0.08163266 + 18677, 49447, 21885, 20241, // alpha = 0.09095491 + 18539, 49409, 21708, 20031, // alpha = 0.1007811 + 18418, 49368, 21557, 19855, // alpha = 0.1111111 + 18218, 49325, 21337, 19700, // alpha = 0.1219451 + 18041, 49281, 21109, 19561, // alpha = 0.1332829 + 17892, 49236, 20906, 19433, // alpha = 0.1451247 + 17753, 49192, 20727, 19217, // alpha = 0.1574704 + 17645, 49143, 20577, 19043, // alpha = 0.17032 + 17542, 49056, 20405, 18883, // alpha = 0.1836735 + 17449, 48972, 20174, 18738, // alpha = 0.1975309 + 17332, 48890, 19969, 18612, // alpha = 0.2118922 + 17195, 48811, 19791, 18502, // alpha = 0.2267574 + 17070, 48735, 19641, 18375, // alpha = 0.2421265 + 16956, 48662, 19503, 18194, // alpha = 0.2579995 + 16851, 48592, 19312, 18033, // alpha = 0.2743765 + 16761, 48525, 19112, 17891, // alpha = 0.2912573 + 16679, 48461, 18927, 17764, // alpha = 0.308642 + 16605, 48400, 18773, 17650, // alpha = 0.3265306 + 16543, 48342, 18631, 17551, // alpha = 0.3449232 + 16481, 48286, 18511, 17455, // alpha = 0.3638196 + 16423, 48233, 18380, 17331, // alpha = 0.38322 + 16368, 48183, 18181, 17184, // alpha = 0.4031242 + 16273, 48134, 18014, 17044, // alpha = 0.4235324 + 16189, 48048, 17865, 16916, // alpha = 0.4444445 + 16110, 47959, 17733, 16799, // alpha = 0.4658605 + 16045, 47874, 17612, 16699, // alpha = 0.4877803 + 15982, 47793, 17507, 16604, // alpha = 0.5102041 + 15927, 47714, 17416, 16519, // alpha = 0.5331318 + 15864, 47639, 17251, 16433, // alpha = 0.5565634 + 15815, 47566, 17100, 16331, // alpha = 0.5804989 + 15768, 47496, 16966, 16192, // alpha = 0.6049383 + 15720, 47428, 16843, 16058, // alpha = 0.6298816 + 15681, 47362, 16733, 15944, // alpha = 0.6553288 + 15640, 47299, 16632, 15832, // alpha = 0.68128 + 15606, 47237, 16542, 15730, // alpha = 0.7077349 + 15570, 47177, 16459, 15633, // alpha = 0.7346939 + 15538, 47119, 16386, 15543, // alpha = 0.7621567 + 15509, 47020, 16253, 15460, // alpha = 0.7901235 + 15479, 46910, 16127, 15379, // alpha = 0.8185941 + 15453, 46802, 16018, 15251, // alpha = 0.8475687 + 15426, 46696, 15920, 15108, // alpha = 0.8770471 + 15405, 46593, 15829, 14979, // alpha = 0.9070295 + 15381, 46491, 15744, 14854, // alpha = 0.9375157 + 15359, 46392, 15670, 14735, // alpha = 0.9685059 + 15320, 46294, 15601, 14622, // alpha = 1 + + // Cos (theta) = 0.292265 + 24595, 49803, 28122, 26282, // alpha = 0.001 + 24595, 49803, 28122, 26282, // alpha = 0.001 + 24514, 49803, 28148, 26200, // alpha = 0.001007811 + 24276, 49803, 27843, 26005, // alpha = 0.002267574 + 23484, 49803, 27038, 25171, // alpha = 0.004031243 + 22768, 49802, 26432, 24585, // alpha = 0.006298816 + 22231, 49800, 25846, 23960, // alpha = 0.009070295 + 21773, 49798, 25438, 23585, // alpha = 0.01234568 + 21420, 49794, 24988, 23108, // alpha = 0.01612497 + 21009, 49788, 24680, 22771, // alpha = 0.02040816 + 20709, 49780, 24349, 22522, // alpha = 0.02519527 + 20487, 49769, 24022, 22156, // alpha = 0.03048627 + 20166, 49756, 23769, 21886, // alpha = 0.03628118 + 19900, 49738, 23575, 21668, // alpha = 0.04258 + 19692, 49717, 23275, 21487, // alpha = 0.04938272 + 19522, 49691, 23025, 21204, // alpha = 0.05668934 + 19307, 49661, 22812, 20969, // alpha = 0.06449988 + 19077, 49626, 22634, 20779, // alpha = 0.07281432 + 18882, 49586, 22438, 20614, // alpha = 0.08163266 + 18712, 49543, 22176, 20462, // alpha = 0.09095491 + 18573, 49496, 21951, 20228, // alpha = 0.1007811 + 18452, 49447, 21761, 20022, // alpha = 0.1111111 + 18262, 49397, 21593, 19842, // alpha = 0.1219451 + 18085, 49346, 21393, 19688, // alpha = 0.1332829 + 17922, 49295, 21150, 19550, // alpha = 0.1451247 + 17782, 49244, 20934, 19404, // alpha = 0.1574704 + 17671, 49195, 20748, 19209, // alpha = 0.17032 + 17568, 49142, 20590, 19029, // alpha = 0.1836735 + 17471, 49049, 20426, 18864, // alpha = 0.1975309 + 17366, 48960, 20182, 18721, // alpha = 0.2118922 + 17217, 48874, 19973, 18595, // alpha = 0.2267574 + 17094, 48793, 19792, 18487, // alpha = 0.2421265 + 16980, 48715, 19634, 18348, // alpha = 0.2579995 + 16871, 48641, 19497, 18166, // alpha = 0.2743765 + 16779, 48570, 19307, 18012, // alpha = 0.2912573 + 16696, 48503, 19100, 17873, // alpha = 0.308642 + 16620, 48439, 18921, 17743, // alpha = 0.3265306 + 16551, 48378, 18762, 17631, // alpha = 0.3449232 + 16491, 48320, 18619, 17532, // alpha = 0.3638196 + 16436, 48265, 18499, 17440, // alpha = 0.38322 + 16385, 48212, 18345, 17308, // alpha = 0.4031242 + 16286, 48162, 18160, 17154, // alpha = 0.4235324 + 16206, 48101, 17993, 17023, // alpha = 0.4444445 + 16127, 48010, 17844, 16899, // alpha = 0.4658605 + 16055, 47922, 17717, 16783, // alpha = 0.4877803 + 15990, 47839, 17594, 16682, // alpha = 0.5102041 + 15931, 47758, 17492, 16588, // alpha = 0.5331318 + 15875, 47681, 17387, 16501, // alpha = 0.5565634 + 15822, 47607, 17223, 16421, // alpha = 0.5804989 + 15774, 47536, 17072, 16312, // alpha = 0.6049383 + 15729, 47467, 16943, 16173, // alpha = 0.6298816 + 15685, 47401, 16820, 16049, // alpha = 0.6553288 + 15643, 47336, 16710, 15927, // alpha = 0.68128 + 15610, 47274, 16612, 15819, // alpha = 0.7077349 + 15577, 47214, 16523, 15721, // alpha = 0.7346939 + 15543, 47155, 16442, 15624, // alpha = 0.7621567 + 15511, 47092, 16355, 15534, // alpha = 0.7901235 + 15484, 46981, 16223, 15450, // alpha = 0.8185941 + 15456, 46873, 16104, 15373, // alpha = 0.8475687 + 15429, 46767, 15997, 15233, // alpha = 0.8770471 + 15404, 46663, 15896, 15095, // alpha = 0.9070295 + 15385, 46562, 15803, 14972, // alpha = 0.9375157 + 15362, 46463, 15724, 14843, // alpha = 0.9685059 + 15326, 46365, 15651, 14728, // alpha = 1 + + // Cos (theta) = 0.2653061 + 24613, 49989, 28565, 26503, // alpha = 0.001 + 24613, 49989, 28565, 26503, // alpha = 0.001 + 24634, 49989, 28483, 26541, // alpha = 0.001007811 + 24364, 49988, 28309, 26243, // alpha = 0.002267574 + 23558, 49988, 27442, 25423, // alpha = 0.004031243 + 22837, 49987, 26769, 24762, // alpha = 0.006298816 + 22315, 49985, 26213, 24194, // alpha = 0.009070295 + 21831, 49981, 25785, 23754, // alpha = 0.01234568 + 21515, 49976, 25375, 23381, // alpha = 0.01612497 + 21094, 49968, 24985, 22989, // alpha = 0.02040816 + 20778, 49957, 24702, 22699, // alpha = 0.02519527 + 20544, 49943, 24422, 22442, // alpha = 0.03048627 + 20259, 49924, 24100, 22124, // alpha = 0.03628118 + 19973, 49901, 23843, 21861, // alpha = 0.04258 + 19751, 49873, 23643, 21657, // alpha = 0.04938272 + 19568, 49839, 23406, 21471, // alpha = 0.05668934 + 19386, 49799, 23131, 21198, // alpha = 0.06449988 + 19137, 49753, 22908, 20967, // alpha = 0.07281432 + 18931, 49703, 22712, 20774, // alpha = 0.08163266 + 18762, 49649, 22545, 20615, // alpha = 0.09095491 + 18606, 49592, 22275, 20458, // alpha = 0.1007811 + 18486, 49534, 22026, 20229, // alpha = 0.1111111 + 18310, 49474, 21819, 20015, // alpha = 0.1219451 + 18128, 49415, 21638, 19840, // alpha = 0.1332829 + 17960, 49357, 21465, 19679, // alpha = 0.1451247 + 17818, 49300, 21200, 19544, // alpha = 0.1574704 + 17697, 49245, 20965, 19401, // alpha = 0.17032 + 17585, 49192, 20775, 19192, // alpha = 0.1836735 + 17488, 49130, 20610, 19008, // alpha = 0.1975309 + 17401, 49033, 20440, 18849, // alpha = 0.2118922 + 17255, 48941, 20194, 18710, // alpha = 0.2267574 + 17116, 48853, 19981, 18582, // alpha = 0.2421265 + 16996, 48770, 19799, 18471, // alpha = 0.2579995 + 16894, 48691, 19634, 18321, // alpha = 0.2743765 + 16799, 48616, 19496, 18148, // alpha = 0.2912573 + 16712, 48545, 19296, 17994, // alpha = 0.308642 + 16635, 48478, 19087, 17856, // alpha = 0.3265306 + 16565, 48415, 18911, 17729, // alpha = 0.3449232 + 16500, 48354, 18751, 17617, // alpha = 0.3638196 + 16423, 48297, 18516, 17464, // alpha = 0.38322 + 16391, 48243, 18489, 17428, // alpha = 0.4031242 + 16301, 48191, 18338, 17283, // alpha = 0.4235324 + 16213, 48142, 18145, 17137, // alpha = 0.4444445 + 16138, 48062, 17976, 17005, // alpha = 0.4658605 + 16063, 47972, 17834, 16882, // alpha = 0.4877803 + 15998, 47886, 17699, 16772, // alpha = 0.5102041 + 15936, 47804, 17583, 16671, // alpha = 0.5331318 + 15876, 47726, 17481, 16575, // alpha = 0.5565634 + 15827, 47650, 17367, 16492, // alpha = 0.5804989 + 15777, 47577, 17205, 16413, // alpha = 0.6049383 + 15731, 47507, 17055, 16293, // alpha = 0.6298816 + 15688, 47440, 16922, 16159, // alpha = 0.6553288 + 15648, 47375, 16805, 16033, // alpha = 0.68128 + 15611, 47312, 16697, 15921, // alpha = 0.7077349 + 15579, 47251, 16596, 15813, // alpha = 0.7346939 + 15544, 47192, 16508, 15712, // alpha = 0.7621567 + 15514, 47135, 16432, 15618, // alpha = 0.7901235 + 15484, 47054, 16333, 15530, // alpha = 0.8185941 + 15458, 46945, 16198, 15446, // alpha = 0.8475687 + 15433, 46839, 16084, 15372, // alpha = 0.8770471 + 15408, 46735, 15979, 15232, // alpha = 0.9070295 + 15386, 46634, 15879, 15096, // alpha = 0.9375157 + 15362, 46534, 15790, 14962, // alpha = 0.9685059 + 15325, 46437, 15706, 14844, // alpha = 1 + + // Cos (theta) = 0.2378433 + 24704, 50197, 28864, 26776, // alpha = 0.001 + 24704, 50197, 28864, 26776, // alpha = 0.001 + 24676, 50197, 28942, 26747, // alpha = 0.001007811 + 24408, 50197, 28731, 26495, // alpha = 0.002267574 + 23625, 50197, 27845, 25695, // alpha = 0.004031243 + 22885, 50196, 27181, 24960, // alpha = 0.006298816 + 22467, 50195, 26667, 24555, // alpha = 0.009070295 + 21922, 50192, 26150, 23997, // alpha = 0.01234568 + 21574, 50188, 25780, 23643, // alpha = 0.01612497 + 21189, 50183, 25446, 23267, // alpha = 0.02040816 + 20852, 50175, 25073, 22920, // alpha = 0.02519527 + 20607, 50155, 24793, 22668, // alpha = 0.03048627 + 20351, 50129, 24579, 22414, // alpha = 0.03628118 + 20057, 50097, 24251, 22111, // alpha = 0.04258 + 19818, 50058, 23973, 21863, // alpha = 0.04938272 + 19629, 50012, 23757, 21666, // alpha = 0.05668934 + 19471, 49959, 23572, 21498, // alpha = 0.06449988 + 19219, 49900, 23280, 21218, // alpha = 0.07281432 + 18998, 49835, 23032, 20986, // alpha = 0.08163266 + 18803, 49768, 22807, 20781, // alpha = 0.09095491 + 18653, 49698, 22617, 20621, // alpha = 0.1007811 + 18514, 49628, 22393, 20469, // alpha = 0.1111111 + 18358, 49558, 22125, 20219, // alpha = 0.1219451 + 18178, 49490, 21888, 20022, // alpha = 0.1332829 + 18000, 49423, 21694, 19836, // alpha = 0.1451247 + 17850, 49359, 21523, 19676, // alpha = 0.1574704 + 17721, 49298, 21258, 19540, // alpha = 0.17032 + 17611, 49239, 21007, 19391, // alpha = 0.1836735 + 17509, 49183, 20801, 19179, // alpha = 0.1975309 + 17419, 49110, 20627, 18993, // alpha = 0.2118922 + 17280, 49010, 20474, 18840, // alpha = 0.2267574 + 17143, 48916, 20219, 18700, // alpha = 0.2421265 + 17019, 48827, 19994, 18572, // alpha = 0.2579995 + 16872, 48743, 19662, 18378, // alpha = 0.2743765 + 16813, 48664, 19641, 18300, // alpha = 0.2912573 + 16722, 48590, 19501, 18129, // alpha = 0.308642 + 16640, 48519, 19301, 17971, // alpha = 0.3265306 + 16575, 48453, 19092, 17841, // alpha = 0.3449232 + 16509, 48390, 18904, 17716, // alpha = 0.3638196 + 16449, 48330, 18747, 17605, // alpha = 0.38322 + 16394, 48274, 18608, 17506, // alpha = 0.4031242 + 16314, 48220, 18485, 17420, // alpha = 0.4235324 + 16225, 48170, 18327, 17267, // alpha = 0.4444445 + 16140, 48115, 18135, 17123, // alpha = 0.4658605 + 16065, 48023, 17968, 16988, // alpha = 0.4877803 + 16000, 47935, 17824, 16874, // alpha = 0.5102041 + 15941, 47851, 17691, 16764, // alpha = 0.5331318 + 15882, 47770, 17579, 16664, // alpha = 0.5565634 + 15825, 47694, 17474, 16570, // alpha = 0.5804989 + 15778, 47620, 17355, 16486, // alpha = 0.6049383 + 15733, 47549, 17188, 16411, // alpha = 0.6298816 + 15689, 47481, 17040, 16287, // alpha = 0.6553288 + 15651, 47415, 16910, 16158, // alpha = 0.68128 + 15612, 47351, 16793, 16031, // alpha = 0.7077349 + 15579, 47290, 16683, 15921, // alpha = 0.7346939 + 15547, 47230, 16587, 15814, // alpha = 0.7621567 + 15514, 47172, 16498, 15708, // alpha = 0.7901235 + 15485, 47116, 16421, 15617, // alpha = 0.8185941 + 15457, 47019, 16311, 15529, // alpha = 0.8475687 + 15431, 46913, 16181, 15447, // alpha = 0.8770471 + 15405, 46809, 16066, 15372, // alpha = 0.9070295 + 15384, 46707, 15960, 15241, // alpha = 0.9375157 + 15360, 46608, 15861, 15099, // alpha = 0.9685059 + 15319, 46511, 15772, 14974, // alpha = 1 + + // Cos (theta) = 0.2098765 + 24773, 50345, 29355, 27022, // alpha = 0.001 + 24773, 50345, 29355, 27022, // alpha = 0.001 + 24752, 50345, 29375, 26997, // alpha = 0.001007811 + 24586, 50344, 29073, 26805, // alpha = 0.002267574 + 23719, 50344, 28258, 25962, // alpha = 0.004031243 + 23030, 50343, 27697, 25327, // alpha = 0.006298816 + 22551, 50340, 27088, 24771, // alpha = 0.009070295 + 22022, 50337, 26700, 24320, // alpha = 0.01234568 + 21652, 50331, 26238, 23889, // alpha = 0.01612497 + 21308, 50323, 25880, 23602, // alpha = 0.02040816 + 20942, 50312, 25619, 23220, // alpha = 0.02519527 + 20681, 50298, 25245, 22914, // alpha = 0.03048627 + 20468, 50279, 24954, 22671, // alpha = 0.03628118 + 20149, 50256, 24719, 22437, // alpha = 0.04258 + 19892, 50229, 24484, 22133, // alpha = 0.04938272 + 19683, 50197, 24176, 21884, // alpha = 0.05668934 + 19522, 50145, 23909, 21690, // alpha = 0.06449988 + 19288, 50067, 23705, 21513, // alpha = 0.07281432 + 19062, 49985, 23488, 21243, // alpha = 0.08163266 + 18860, 49900, 23189, 21002, // alpha = 0.09095491 + 18695, 49815, 22924, 20806, // alpha = 0.1007811 + 18542, 49731, 22718, 20623, // alpha = 0.1111111 + 18424, 49649, 22526, 20485, // alpha = 0.1219451 + 18213, 49570, 22233, 20233, // alpha = 0.1332829 + 18035, 49494, 21962, 20021, // alpha = 0.1451247 + 17876, 49422, 21751, 19833, // alpha = 0.1574704 + 17747, 49353, 21569, 19677, // alpha = 0.17032 + 17635, 49289, 21314, 19543, // alpha = 0.1836735 + 17525, 49228, 21057, 19384, // alpha = 0.1975309 + 17440, 49171, 20839, 19179, // alpha = 0.2118922 + 17300, 49082, 20657, 18988, // alpha = 0.2267574 + 17167, 48981, 20494, 18833, // alpha = 0.2421265 + 17036, 48887, 20283, 18684, // alpha = 0.2579995 + 16584, 48798, 19692, 18071, // alpha = 0.2743765 + 16827, 48714, 19820, 18459, // alpha = 0.2912573 + 16733, 48635, 19653, 18287, // alpha = 0.308642 + 16655, 48562, 19508, 18122, // alpha = 0.3265306 + 16580, 48492, 19318, 17966, // alpha = 0.3449232 + 16516, 48426, 19098, 17835, // alpha = 0.3638196 + 16453, 48365, 18913, 17710, // alpha = 0.38322 + 16399, 48306, 18754, 17600, // alpha = 0.4031242 + 16315, 48251, 18611, 17504, // alpha = 0.4235324 + 16225, 48198, 18490, 17413, // alpha = 0.4444445 + 16141, 48149, 18328, 17263, // alpha = 0.4658605 + 16069, 48074, 18142, 17120, // alpha = 0.4877803 + 15998, 47985, 17970, 16988, // alpha = 0.5102041 + 15935, 47899, 17825, 16870, // alpha = 0.5331318 + 15878, 47817, 17694, 16762, // alpha = 0.5565634 + 15823, 47739, 17575, 16661, // alpha = 0.5804989 + 15774, 47664, 17473, 16571, // alpha = 0.6049383 + 15728, 47591, 17350, 16486, // alpha = 0.6298816 + 15688, 47522, 17185, 16413, // alpha = 0.6553288 + 15652, 47456, 17038, 16305, // alpha = 0.68128 + 15610, 47391, 16903, 16167, // alpha = 0.7077349 + 15575, 47329, 16785, 16039, // alpha = 0.7346939 + 15540, 47269, 16679, 15927, // alpha = 0.7621567 + 15509, 47211, 16583, 15819, // alpha = 0.7901235 + 15481, 47154, 16492, 15719, // alpha = 0.8185941 + 15453, 47094, 16416, 15627, // alpha = 0.8475687 + 15426, 46988, 16301, 15539, // alpha = 0.8770471 + 15401, 46884, 16172, 15457, // alpha = 0.9070295 + 15375, 46783, 16054, 15379, // alpha = 0.9375157 + 15346, 46683, 15950, 15251, // alpha = 0.9685059 + 15306, 46587, 15849, 15119, // alpha = 1 + + // Cos (theta) = 0.1814059 + 24799, 50540, 29975, 27289, // alpha = 0.001 + 24799, 50540, 29975, 27289, // alpha = 0.001 + 24848, 50540, 29957, 27356, // alpha = 0.001007811 + 24629, 50539, 29808, 27061, // alpha = 0.002267574 + 23733, 50538, 28938, 26207, // alpha = 0.004031243 + 23074, 50537, 28246, 25638, // alpha = 0.006298816 + 22655, 50533, 27706, 25110, // alpha = 0.009070295 + 22162, 50527, 27184, 24689, // alpha = 0.01234568 + 21759, 50519, 26805, 24253, // alpha = 0.01612497 + 21476, 50506, 26457, 23887, // alpha = 0.02040816 + 21065, 50490, 26089, 23607, // alpha = 0.02519527 + 20770, 50467, 25805, 23259, // alpha = 0.03048627 + 20543, 50439, 25580, 22949, // alpha = 0.03628118 + 20271, 50405, 25218, 22715, // alpha = 0.04258 + 19975, 50365, 24937, 22494, // alpha = 0.04938272 + 19749, 50319, 24711, 22184, // alpha = 0.05668934 + 19558, 50270, 24467, 21918, // alpha = 0.06449988 + 19363, 50218, 24149, 21710, // alpha = 0.07281432 + 19113, 50153, 23878, 21537, // alpha = 0.08163266 + 18902, 50047, 23655, 21274, // alpha = 0.09095491 + 18723, 49943, 23400, 21025, // alpha = 0.1007811 + 18574, 49843, 23087, 20817, // alpha = 0.1111111 + 18449, 49747, 22828, 20640, // alpha = 0.1219451 + 18240, 49655, 22624, 20485, // alpha = 0.1332829 + 18060, 49569, 22357, 20243, // alpha = 0.1451247 + 17901, 49488, 22069, 20026, // alpha = 0.1574704 + 17764, 49412, 21831, 19838, // alpha = 0.17032 + 17645, 49341, 21622, 19682, // alpha = 0.1836735 + 17548, 49275, 21406, 19548, // alpha = 0.1975309 + 17453, 49213, 21118, 19396, // alpha = 0.2118922 + 17323, 49155, 20888, 19173, // alpha = 0.2267574 + 17181, 49049, 20698, 18991, // alpha = 0.2421265 + 17053, 48948, 20522, 18833, // alpha = 0.2579995 + 16937, 48854, 20288, 18691, // alpha = 0.2743765 + 16836, 48766, 20056, 18571, // alpha = 0.2912573 + 16741, 48683, 19854, 18459, // alpha = 0.308642 + 16661, 48605, 19674, 18295, // alpha = 0.3265306 + 16586, 48533, 19526, 18125, // alpha = 0.3449232 + 16515, 48464, 19346, 17968, // alpha = 0.3638196 + 16453, 48400, 19120, 17831, // alpha = 0.38322 + 16398, 48339, 18934, 17710, // alpha = 0.4031242 + 16314, 48282, 18767, 17602, // alpha = 0.4235324 + 16223, 48228, 18623, 17507, // alpha = 0.4444445 + 16139, 48177, 18498, 17419, // alpha = 0.4658605 + 16062, 48128, 18350, 17273, // alpha = 0.4877803 + 15993, 48036, 18153, 17125, // alpha = 0.5102041 + 15925, 47948, 17981, 16994, // alpha = 0.5331318 + 15865, 47864, 17831, 16876, // alpha = 0.5565634 + 15821, 47785, 17701, 16775, // alpha = 0.5804989 + 15768, 47708, 17583, 16674, // alpha = 0.6049383 + 15720, 47635, 17478, 16583, // alpha = 0.6298816 + 15672, 47564, 17202, 16433, // alpha = 0.6553288 + 15636, 47497, 17192, 16421, // alpha = 0.68128 + 15599, 47432, 17039, 16318, // alpha = 0.7077349 + 15565, 47369, 16905, 16181, // alpha = 0.7346939 + 15532, 47308, 16789, 16061, // alpha = 0.7621567 + 15504, 47250, 16682, 15953, // alpha = 0.7901235 + 15470, 47193, 16584, 15838, // alpha = 0.8185941 + 15438, 47138, 16495, 15734, // alpha = 0.8475687 + 15412, 47066, 16412, 15645, // alpha = 0.8770471 + 15391, 46962, 16298, 15558, // alpha = 0.9070295 + 15365, 46861, 16168, 15474, // alpha = 0.9375157 + 15329, 46762, 16049, 15400, // alpha = 0.9685059 + 15277, 46666, 15943, 15284, // alpha = 1 + + // Cos (theta) = 0.1524313 + 24941, 50812, 30628, 27749, // alpha = 0.001 + 24941, 50812, 30628, 27749, // alpha = 0.001 + 24934, 50812, 30622, 27743, // alpha = 0.001007811 + 24628, 50811, 30638, 27344, // alpha = 0.002267574 + 23777, 50810, 29771, 26596, // alpha = 0.004031243 + 23051, 50806, 29117, 25828, // alpha = 0.006298816 + 22706, 50800, 28423, 25496, // alpha = 0.009070295 + 22481, 50791, 27787, 25168, // alpha = 0.01234568 + 21734, 50776, 27696, 24551, // alpha = 0.01612497 + 21488, 50756, 27230, 24161, // alpha = 0.02040816 + 21077, 50728, 26891, 23825, // alpha = 0.02519527 + 20762, 50691, 26651, 23567, // alpha = 0.03048627 + 20497, 50646, 26336, 23146, // alpha = 0.03628118 + 20158, 50592, 26020, 22857, // alpha = 0.04258 + 19871, 50531, 25772, 22618, // alpha = 0.04938272 + 19660, 50466, 25510, 22357, // alpha = 0.05668934 + 19486, 50397, 25148, 22065, // alpha = 0.06449988 + 19244, 50328, 24848, 21835, // alpha = 0.07281432 + 19011, 50260, 24611, 21642, // alpha = 0.08163266 + 18836, 50193, 24228, 21475, // alpha = 0.09095491 + 18696, 50085, 23888, 21234, // alpha = 0.1007811 + 18544, 49965, 23649, 20989, // alpha = 0.1111111 + 18435, 49852, 23333, 20801, // alpha = 0.1219451 + 18232, 49747, 23012, 20633, // alpha = 0.1332829 + 18076, 49650, 22737, 20502, // alpha = 0.1451247 + 17913, 49559, 22529, 20262, // alpha = 0.1574704 + 17776, 49474, 22206, 20042, // alpha = 0.17032 + 17657, 49396, 21918, 19858, // alpha = 0.1836735 + 17555, 49324, 21695, 19701, // alpha = 0.1975309 + 17457, 49256, 21506, 19555, // alpha = 0.2118922 + 17342, 49194, 21208, 19408, // alpha = 0.2267574 + 17199, 49120, 20953, 19201, // alpha = 0.2421265 + 17065, 49012, 20743, 19012, // alpha = 0.2579995 + 16943, 48912, 20565, 18845, // alpha = 0.2743765 + 16836, 48819, 20363, 18702, // alpha = 0.2912573 + 16739, 48732, 20112, 18578, // alpha = 0.308642 + 16654, 48651, 19897, 18467, // alpha = 0.3265306 + 16582, 48574, 19711, 18312, // alpha = 0.3449232 + 16507, 48503, 19562, 18133, // alpha = 0.3638196 + 16448, 48436, 19393, 17984, // alpha = 0.38322 + 16393, 48373, 19164, 17849, // alpha = 0.4031242 + 16294, 48314, 18973, 17722, // alpha = 0.4235324 + 16204, 48258, 18801, 17616, // alpha = 0.4444445 + 16116, 48206, 18652, 17516, // alpha = 0.4658605 + 16044, 48156, 18522, 17431, // alpha = 0.4877803 + 15976, 48089, 18383, 17295, // alpha = 0.5102041 + 15909, 47999, 18182, 17148, // alpha = 0.5331318 + 15850, 47913, 18011, 17017, // alpha = 0.5565634 + 15796, 47831, 17851, 16903, // alpha = 0.5804989 + 15747, 47754, 17716, 16793, // alpha = 0.6049383 + 15702, 47679, 17594, 16694, // alpha = 0.6298816 + 15664, 47608, 17490, 16605, // alpha = 0.6553288 + 15616, 47539, 17386, 16517, // alpha = 0.68128 + 15581, 47474, 17209, 16440, // alpha = 0.7077349 + 15556, 47410, 17059, 16366, // alpha = 0.7346939 + 15509, 47350, 16923, 16215, // alpha = 0.7621567 + 15478, 47291, 16801, 16092, // alpha = 0.7901235 + 15449, 47234, 16692, 15978, // alpha = 0.8185941 + 15429, 47179, 16598, 15873, // alpha = 0.8475687 + 15395, 47125, 16502, 15772, // alpha = 0.8770471 + 15373, 47042, 16418, 15677, // alpha = 0.9070295 + 15326, 46941, 16308, 15587, // alpha = 0.9375157 + 15285, 46843, 16178, 15505, // alpha = 0.9685059 + 15242, 46747, 16057, 15428, // alpha = 1 + + // Cos (theta) = 0.1229529 + 25083, 51209, 31339, 28168, // alpha = 0.001 + 25083, 51209, 31339, 28168, // alpha = 0.001 + 25127, 51209, 31344, 28211, // alpha = 0.001007811 + 24628, 51208, 31744, 27710, // alpha = 0.002267574 + 23411, 51207, 31209, 26509, // alpha = 0.004031243 + 22893, 51204, 30386, 25984, // alpha = 0.006298816 + 24152, 51196, 27951, 27238, // alpha = 0.009070295 + 23701, 51178, 27550, 26783, // alpha = 0.01234568 + 20910, 51151, 29457, 23985, // alpha = 0.01612497 + 20587, 51112, 29040, 23659, // alpha = 0.02040816 + 20261, 51061, 28729, 23320, // alpha = 0.02519527 + 19929, 50995, 28319, 22976, // alpha = 0.03048627 + 19668, 50918, 27958, 22709, // alpha = 0.03628118 + 19468, 50830, 27681, 22474, // alpha = 0.04258 + 19215, 50737, 27238, 22195, // alpha = 0.04938272 + 18972, 50641, 26878, 21933, // alpha = 0.05668934 + 18771, 50546, 26575, 21720, // alpha = 0.06449988 + 18634, 50454, 26112, 21567, // alpha = 0.07281432 + 18522, 50367, 25756, 21375, // alpha = 0.08163266 + 18437, 50284, 25336, 21181, // alpha = 0.09095491 + 18309, 50208, 24907, 21023, // alpha = 0.1007811 + 18170, 50098, 24591, 20868, // alpha = 0.1111111 + 18118, 49967, 24063, 20786, // alpha = 0.1219451 + 18052, 49846, 23689, 20707, // alpha = 0.1332829 + 17955, 49735, 23305, 20596, // alpha = 0.1451247 + 17853, 49634, 22946, 20485, // alpha = 0.1574704 + 17748, 49540, 22664, 20277, // alpha = 0.17032 + 17641, 49454, 22377, 20075, // alpha = 0.1836735 + 17549, 49375, 22041, 19897, // alpha = 0.1975309 + 17448, 49302, 21801, 19721, // alpha = 0.2118922 + 17330, 49235, 21589, 19584, // alpha = 0.2267574 + 17194, 49173, 21326, 19460, // alpha = 0.2421265 + 17048, 49079, 21050, 19241, // alpha = 0.2579995 + 16934, 48973, 20819, 19054, // alpha = 0.2743765 + 16832, 48874, 20627, 18883, // alpha = 0.2912573 + 16731, 48783, 20464, 18736, // alpha = 0.308642 + 16645, 48697, 20188, 18608, // alpha = 0.3265306 + 16566, 48618, 19965, 18491, // alpha = 0.3449232 + 16498, 48543, 19767, 18355, // alpha = 0.3638196 + 16438, 48474, 19606, 18181, // alpha = 0.38322 + 16368, 48409, 19466, 18019, // alpha = 0.4031242 + 16275, 48347, 19230, 17886, // alpha = 0.4235324 + 16177, 48290, 19022, 17760, // alpha = 0.4444445 + 16091, 48235, 18845, 17645, // alpha = 0.4658605 + 16014, 48184, 18694, 17547, // alpha = 0.4877803 + 15946, 48135, 18555, 17460, // alpha = 0.5102041 + 15878, 48051, 18440, 17342, // alpha = 0.5331318 + 15817, 47963, 18241, 17197, // alpha = 0.5565634 + 15768, 47880, 18049, 17069, // alpha = 0.5804989 + 15719, 47801, 17891, 16947, // alpha = 0.6049383 + 15671, 47725, 17754, 16837, // alpha = 0.6298816 + 15628, 47653, 17627, 16733, // alpha = 0.6553288 + 15588, 47584, 17514, 16644, // alpha = 0.68128 + 15550, 47517, 17416, 16557, // alpha = 0.7077349 + 15522, 47454, 17247, 16483, // alpha = 0.7346939 + 15482, 47392, 17091, 16404, // alpha = 0.7621567 + 15449, 47333, 16954, 16282, // alpha = 0.7901235 + 15421, 47276, 16828, 16160, // alpha = 0.8185941 + 15391, 47220, 16713, 16041, // alpha = 0.8475687 + 15367, 47167, 16608, 15932, // alpha = 0.8770471 + 15331, 47115, 16516, 15833, // alpha = 0.9070295 + 15279, 47024, 16433, 15735, // alpha = 0.9375157 + 15228, 46926, 16331, 15643, // alpha = 0.9685059 + 15193, 46830, 16195, 15557, // alpha = 1 + + // Cos (theta) = 0.09297051 + 25404, 51547, 31744, 28886, // alpha = 0.001 + 25404, 51547, 31744, 28886, // alpha = 0.001 + 25473, 51547, 31744, 28932, // alpha = 0.001007811 + 31210, 51545, 23232, 31744, // alpha = 0.002267574 + 27218, 51542, 23336, 30772, // alpha = 0.004031243 + 26691, 51535, 23490, 30118, // alpha = 0.006298816 + 25968, 51522, 23113, 29484, // alpha = 0.009070295 + 19648, 51501, 23163, 23807, // alpha = 0.01234568 + 18734, 51470, 22822, 23277, // alpha = 0.01612497 + 18508, 51428, 22499, 23119, // alpha = 0.02040816 + 17453, 51374, 22214, 22665, // alpha = 0.02519527 + 17109, 51310, 21745, 22539, // alpha = 0.03048627 + 16586, 51239, 21526, 22323, // alpha = 0.03628118 + 15884, 51133, 21146, 22098, // alpha = 0.04258 + 18694, 50989, 28687, 22037, // alpha = 0.04938272 + 18526, 50850, 28180, 21796, // alpha = 0.05668934 + 18338, 50719, 27799, 21592, // alpha = 0.06449988 + 18154, 50598, 27346, 21402, // alpha = 0.07281432 + 18005, 50487, 26901, 21173, // alpha = 0.08163266 + 17987, 50385, 26474, 21044, // alpha = 0.09095491 + 17763, 50293, 26027, 20810, // alpha = 0.1007811 + 17675, 50209, 25658, 20682, // alpha = 0.1111111 + 17633, 50090, 25149, 20601, // alpha = 0.1219451 + 17569, 49952, 24755, 20503, // alpha = 0.1332829 + 17545, 49827, 24304, 20415, // alpha = 0.1451247 + 17536, 49713, 23816, 20351, // alpha = 0.1574704 + 17541, 49610, 23382, 20312, // alpha = 0.17032 + 17208, 49516, 23304, 19841, // alpha = 0.1836735 + 17528, 49429, 22552, 20193, // alpha = 0.1975309 + 17436, 49350, 22207, 19989, // alpha = 0.2118922 + 17311, 49278, 21912, 19813, // alpha = 0.2267574 + 17165, 49212, 21685, 19657, // alpha = 0.2421265 + 17034, 49149, 21485, 19523, // alpha = 0.2579995 + 16905, 49036, 21178, 19343, // alpha = 0.2743765 + 16795, 48932, 20927, 19133, // alpha = 0.2912573 + 16409, 48835, 20495, 18484, // alpha = 0.308642 + 16614, 48746, 20546, 18800, // alpha = 0.3265306 + 16546, 48662, 20310, 18675, // alpha = 0.3449232 + 16466, 48585, 20068, 18546, // alpha = 0.3638196 + 16414, 48513, 19851, 18446, // alpha = 0.38322 + 16319, 48445, 19682, 18269, // alpha = 0.4031242 + 16216, 48382, 19523, 18103, // alpha = 0.4235324 + 16115, 48322, 19344, 17951, // alpha = 0.4444445 + 16031, 48266, 19120, 17823, // alpha = 0.4658605 + 15957, 48213, 18931, 17704, // alpha = 0.4877803 + 15892, 48164, 18759, 17606, // alpha = 0.5102041 + 15828, 48105, 18614, 17513, // alpha = 0.5331318 + 15769, 48016, 18488, 17424, // alpha = 0.5565634 + 15715, 47931, 18314, 17293, // alpha = 0.5804989 + 15666, 47850, 18128, 17149, // alpha = 0.6049383 + 15618, 47774, 17956, 17021, // alpha = 0.6298816 + 15574, 47700, 17800, 16915, // alpha = 0.6553288 + 15542, 47630, 17671, 16808, // alpha = 0.68128 + 15508, 47563, 17553, 16714, // alpha = 0.7077349 + 15475, 47498, 17454, 16623, // alpha = 0.7346939 + 15458, 47436, 17304, 16554, // alpha = 0.7621567 + 15413, 47376, 17143, 16468, // alpha = 0.7901235 + 15382, 47319, 16995, 16394, // alpha = 0.8185941 + 15348, 47263, 16867, 16281, // alpha = 0.8475687 + 15310, 47209, 16743, 16160, // alpha = 0.8770471 + 15258, 47157, 16637, 16044, // alpha = 0.9070295 + 15219, 47107, 16543, 15941, // alpha = 0.9375157 + 15159, 47012, 16453, 15836, // alpha = 0.9685059 + 15119, 46917, 16371, 15740, // alpha = 1 + + // Cos (theta) = 0.06248425 + 25390, 52220, 31744, 29480, // alpha = 0.001 + 25390, 52220, 31744, 29480, // alpha = 0.001 + 25479, 52220, 31744, 29567, // alpha = 0.001007811 + 31658, 52215, 24643, 31744, // alpha = 0.002267574 + 27444, 52204, 24148, 31514, // alpha = 0.004031243 + 26913, 52180, 23699, 30987, // alpha = 0.006298816 + 26301, 52139, 22981, 30358, // alpha = 0.009070295 + 18900, 52074, 24284, 24257, // alpha = 0.01234568 + 17618, 51983, 23926, 23750, // alpha = 0.01612497 + 17301, 51869, 23534, 23642, // alpha = 0.02040816 + 14351, 51740, 23103, 23067, // alpha = 0.02519527 + 13366, 51608, 22718, 22920, // alpha = 0.03048627 + 46096, 51479, 22391, 22749, // alpha = 0.03628118 + 46347, 51358, 21941, 22599, // alpha = 0.04258 + 46664, 51248, 21627, 22368, // alpha = 0.04938272 + 47364, 51097, 21205, 22047, // alpha = 0.05668934 + 47095, 50919, 20868, 21903, // alpha = 0.06449988 + 17782, 50761, 28614, 21433, // alpha = 0.07281432 + 17686, 50621, 28046, 21204, // alpha = 0.08163266 + 17889, 50497, 27923, 21105, // alpha = 0.09095491 + 17460, 50386, 27132, 20789, // alpha = 0.1007811 + 17377, 50288, 26724, 20646, // alpha = 0.1111111 + 17244, 50200, 26228, 20529, // alpha = 0.1219451 + 17266, 50066, 25739, 20492, // alpha = 0.1332829 + 17148, 49925, 25290, 20313, // alpha = 0.1451247 + 17066, 49798, 24845, 20179, // alpha = 0.1574704 + 17087, 49683, 24386, 20149, // alpha = 0.17032 + 17098, 49580, 23854, 20140, // alpha = 0.1836735 + 17930, 49486, 22425, 21172, // alpha = 0.1975309 + 17660, 49400, 22298, 20789, // alpha = 0.2118922 + 17464, 49323, 22128, 20512, // alpha = 0.2267574 + 16994, 49251, 22542, 19507, // alpha = 0.2421265 + 17049, 49186, 21748, 19904, // alpha = 0.2579995 + 16903, 49101, 21566, 19714, // alpha = 0.2743765 + 17037, 48991, 20964, 19140, // alpha = 0.2912573 + 16666, 48890, 21055, 19383, // alpha = 0.308642 + 16583, 48796, 20826, 19171, // alpha = 0.3265306 + 16487, 48709, 20650, 18962, // alpha = 0.3449232 + 16424, 48629, 20485, 18814, // alpha = 0.3638196 + 16334, 48554, 20217, 18676, // alpha = 0.38322 + 16224, 48484, 19983, 18554, // alpha = 0.4031242 + 16145, 48418, 19780, 18456, // alpha = 0.4235324 + 16027, 48357, 19623, 18273, // alpha = 0.4444445 + 15952, 48299, 19477, 18114, // alpha = 0.4658605 + 15891, 48245, 19249, 17978, // alpha = 0.4877803 + 15829, 48194, 19035, 17849, // alpha = 0.5102041 + 15771, 48145, 18849, 17732, // alpha = 0.5331318 + 15717, 48071, 18686, 17634, // alpha = 0.5565634 + 15660, 47985, 18552, 17536, // alpha = 0.5804989 + 15488, 47902, 18150, 16980, // alpha = 0.6049383 + 15566, 47824, 18224, 17344, // alpha = 0.6298816 + 15551, 47749, 18031, 17231, // alpha = 0.6553288 + 15504, 47678, 17871, 17094, // alpha = 0.68128 + 15459, 47610, 17730, 16970, // alpha = 0.7077349 + 15423, 47544, 17605, 16861, // alpha = 0.7346939 + 15390, 47481, 17497, 16762, // alpha = 0.7621567 + 15367, 47421, 17383, 16677, // alpha = 0.7901235 + 15321, 47363, 17211, 16596, // alpha = 0.8185941 + 15305, 47307, 17049, 16531, // alpha = 0.8475687 + 15226, 47253, 16912, 16452, // alpha = 0.8770471 + 15091, 47201, 16649, 15959, // alpha = 0.9070295 + 15106, 47151, 16681, 16243, // alpha = 0.9375157 + 15071, 47099, 16578, 16140, // alpha = 0.9685059 + 15060, 47004, 16495, 16040, // alpha = 1 + + // Cos (theta) = 0.03149408 + 31744, 53227, 24873, 31744, // alpha = 0.001 + 31744, 53227, 24873, 31744, // alpha = 0.001 + 31228, 53227, 29795, 31744, // alpha = 0.001007811 + 31744, 53211, 26315, 31744, // alpha = 0.002267574 + 26801, 53168, 25673, 31744, // alpha = 0.004031243 + 28117, 53083, 25120, 31744, // alpha = 0.006298816 + 27532, 52946, 24422, 31744, // alpha = 0.009070295 + 47401, 52772, 26048, 25022, // alpha = 0.01234568 + 49790, 52587, 25704, 24745, // alpha = 0.01612497 + 15422, 52412, 23699, 23790, // alpha = 0.02040816 + 49485, 52256, 24501, 24067, // alpha = 0.02519527 + 49155, 52018, 23860, 23814, // alpha = 0.03048627 + 48972, 51790, 23451, 23558, // alpha = 0.03628118 + 48916, 51596, 22984, 23244, // alpha = 0.04258 + 48498, 51432, 22575, 23046, // alpha = 0.04938272 + 48181, 51293, 22070, 22828, // alpha = 0.05668934 + 48231, 51149, 21673, 22491, // alpha = 0.06449988 + 48982, 50946, 21193, 22008, // alpha = 0.07281432 + 49332, 50771, 20765, 20890, // alpha = 0.08163266 + 17425, 50619, 28853, 21081, // alpha = 0.09095491 + 47737, 50487, 20463, 21654, // alpha = 0.1007811 + 17105, 50372, 27810, 20789, // alpha = 0.1111111 + 17192, 50271, 27176, 20817, // alpha = 0.1219451 + 17139, 50181, 26869, 20583, // alpha = 0.1332829 + 16890, 50028, 26290, 20527, // alpha = 0.1451247 + 16784, 49887, 25831, 20390, // alpha = 0.1574704 + 16770, 49761, 25340, 20383, // alpha = 0.17032 + 16839, 49648, 24746, 20525, // alpha = 0.1836735 + 17889, 49546, 22836, 21932, // alpha = 0.1975309 + 17657, 49454, 22702, 21616, // alpha = 0.2118922 + 17473, 49371, 22567, 21260, // alpha = 0.2267574 + 16052, 49295, 23612, 19496, // alpha = 0.2421265 + 17025, 49226, 22132, 20657, // alpha = 0.2579995 + 16854, 49162, 21914, 20449, // alpha = 0.2743765 + 16727, 49057, 21710, 20159, // alpha = 0.2912573 + 16613, 48950, 21544, 19912, // alpha = 0.308642 + 16513, 48852, 21285, 19721, // alpha = 0.3265306 + 16435, 48761, 21033, 19564, // alpha = 0.3449232 + 16342, 48676, 20813, 19403, // alpha = 0.3638196 + 16229, 48598, 20621, 19196, // alpha = 0.38322 + 16146, 48525, 20434, 19023, // alpha = 0.4031242 + 16070, 48457, 20157, 18870, // alpha = 0.4235324 + 15955, 48393, 19950, 18712, // alpha = 0.4444445 + 15885, 48334, 19755, 18589, // alpha = 0.4658605 + 15818, 48278, 19589, 18483, // alpha = 0.4877803 + 15762, 48225, 19429, 18352, // alpha = 0.5102041 + 15680, 48175, 19198, 18172, // alpha = 0.5331318 + 15634, 48129, 18982, 18028, // alpha = 0.5565634 + 15597, 48040, 18797, 17905, // alpha = 0.5804989 + 15544, 47956, 18649, 17783, // alpha = 0.6049383 + 15515, 47876, 18508, 17686, // alpha = 0.6298816 + 15472, 47800, 18355, 17586, // alpha = 0.6553288 + 15461, 47727, 18137, 17519, // alpha = 0.68128 + 15418, 47658, 17968, 17433, // alpha = 0.7077349 + 15377, 47592, 17816, 17310, // alpha = 0.7346939 + 15317, 47528, 17681, 17173, // alpha = 0.7621567 + 15245, 47467, 17560, 17052, // alpha = 0.7901235 + 15179, 47409, 17456, 16938, // alpha = 0.8185941 + 15130, 47352, 17304, 16838, // alpha = 0.8475687 + 15145, 47298, 17136, 16772, // alpha = 0.8770471 + 15075, 47246, 16992, 16678, // alpha = 0.9070295 + 15005, 47195, 16859, 16596, // alpha = 0.9375157 + 14952, 47146, 16738, 16521, // alpha = 0.9685059 + 14900, 47094, 16631, 16450, // alpha = 1 + + // Cos (theta) = 0.0003754022 + 31744, 57389, 29040, 31744, // alpha = 0.001 + 31744, 57389, 29040, 31744, // alpha = 0.001 + 31182, 57381, 31744, 31744, // alpha = 0.001007811 + 31744, 56205, 29318, 31744, // alpha = 0.002267574 + 26872, 55376, 27855, 31744, // alpha = 0.004031243 + 28006, 54673, 26787, 31744, // alpha = 0.006298816 + 27225, 54213, 25654, 31744, // alpha = 0.009070295 + 52930, 53690, 26971, 25946, // alpha = 0.01234568 + 51380, 53348, 26404, 24157, // alpha = 0.01612497 + 10552, 52979, 28920, 28002, // alpha = 0.02040816 + 22185, 52643, 26363, 30691, // alpha = 0.02519527 + 21244, 52393, 25644, 29431, // alpha = 0.03048627 + 20416, 52182, 25206, 28802, // alpha = 0.03628118 + 21233, 51886, 23248, 28142, // alpha = 0.04258 + 19794, 51651, 23882, 27735, // alpha = 0.04938272 + 19512, 51462, 23346, 27150, // alpha = 0.05668934 + 19026, 51306, 22920, 26738, // alpha = 0.06449988 + 18883, 51155, 22505, 26440, // alpha = 0.07281432 + 18544, 50939, 21892, 25804, // alpha = 0.08163266 + 20932, 50757, 19740, 22633, // alpha = 0.09095491 + 18749, 50601, 20569, 25351, // alpha = 0.1007811 + 18031, 50467, 20653, 24844, // alpha = 0.1111111 + 20983, 50350, 17923, 20358, // alpha = 0.1219451 + 17945, 50249, 18004, 18739, // alpha = 0.1332829 + 21215, 50144, 17675, 22442, // alpha = 0.1451247 + 19829, 49987, 17936, 19808, // alpha = 0.1574704 + 19775, 49848, 17048, 19329, // alpha = 0.17032 + 17334, 49724, 16388, 18064, // alpha = 0.1836735 + 17382, 49613, 16672, 17513, // alpha = 0.1975309 + 17849, 49513, 17446, 23154, // alpha = 0.2118922 + 20537, 49423, 19573, 21669, // alpha = 0.2267574 + 20346, 49342, 19703, 21627, // alpha = 0.2421265 + 20109, 49268, 19692, 21582, // alpha = 0.2579995 + 20030, 49201, 19148, 21469, // alpha = 0.2743765 + 19610, 49126, 19725, 21297, // alpha = 0.2912573 + 19300, 49013, 19723, 21059, // alpha = 0.308642 + 18871, 48909, 19800, 20906, // alpha = 0.3265306 + 18312, 48814, 20059, 20808, // alpha = 0.3449232 + 18096, 48726, 19874, 20602, // alpha = 0.3638196 + 16660, 48644, 20844, 20380, // alpha = 0.38322 + 16514, 48568, 20670, 20085, // alpha = 0.4031242 + 16453, 48497, 20489, 19897, // alpha = 0.4235324 + 16396, 48431, 20205, 19726, // alpha = 0.4444445 + 16291, 48369, 19964, 19582, // alpha = 0.4658605 + 16086, 48312, 19819, 19355, // alpha = 0.4877803 + 16009, 48257, 19627, 19179, // alpha = 0.5102041 + 15926, 48206, 19477, 18991, // alpha = 0.5331318 + 15857, 48158, 19237, 18844, // alpha = 0.5565634 + 15790, 48097, 19013, 18702, // alpha = 0.5804989 + 15727, 48011, 18825, 18580, // alpha = 0.6049383 + 15666, 47929, 18666, 18480, // alpha = 0.6298816 + 15611, 47851, 18525, 18337, // alpha = 0.6553288 + 15555, 47777, 18387, 18155, // alpha = 0.68128 + 15507, 47707, 18175, 18011, // alpha = 0.7077349 + 15459, 47640, 17990, 17890, // alpha = 0.7346939 + 15413, 47575, 17846, 17763, // alpha = 0.7621567 + 15369, 47514, 17699, 17661, // alpha = 0.7901235 + 15293, 47454, 17578, 17566, // alpha = 0.8185941 + 15212, 47398, 17471, 17482, // alpha = 0.8475687 + 15139, 47343, 17333, 17412, // alpha = 0.8770471 + 15058, 47290, 17169, 17261, // alpha = 0.9070295 + 14990, 47240, 17018, 17146, // alpha = 0.9375157 + 15033, 47191, 16861, 17056, // alpha = 0.9685059 + 14962, 47143, 16745, 16951, // alpha = 1 + }; + + // NOTE: Formerly, we needed to also export and create a table for the BRDF's amplitude factor + fresnel coefficient + // but it turns out these 2 factors are actually already precomputed and available in the FGD table corresponding + // to the BRDF_Ward BRDF, therefore they are no longer exported... + } +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Ward.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Ward.cs.meta new file mode 100644 index 00000000..3176ed56 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Ward.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 217af18bde2ac0645bd0f017a4e3cfe7 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/Generated/LtcData.BRDF_Ward.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/LTCAreaLight.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/LTCAreaLight.cs new file mode 100644 index 00000000..7442a83a --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/LTCAreaLight.cs @@ -0,0 +1,135 @@ +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using UnityEngine.Rendering; +using BadDog.Rendering.AreaLight.LTC; + +namespace BadDog.Rendering.AreaLight +{ + [GenerateHLSL] + public enum LTCLightingModel + { + // Lit, Stack-Lit and Fabric/Silk + GGX, + DisneyDiffuse, + + // Fabric/CottonWool shader + Charlie, + // FabricLambert, (Isotropic) + + // Hair + KajiyaKaySpecular, + // KajiyaKayDiffuse, (Isotropic) + Marschner, // TODO + + // Other + CookTorrance, + Ward, + OrenNayar, + Count + } + + public partial class LTCAreaLight + { + public static IBRDF GetBRDFInterface(LTCLightingModel model) + { + switch (model) + { + case LTCLightingModel.GGX: + return new BRDF_GGX(); + case LTCLightingModel.DisneyDiffuse: + return new BRDF_Disney(); + + case LTCLightingModel.Charlie: + return new BRDF_Charlie(); + + case LTCLightingModel.KajiyaKaySpecular: + return new BRDF_KajiyaKaySpecular(); + case LTCLightingModel.Marschner: + return new BRDF_Marschner(); + + case LTCLightingModel.CookTorrance: + return new BRDF_CookTorrance(); + case LTCLightingModel.Ward: + return new BRDF_Ward(); + case LTCLightingModel.OrenNayar: + return new BRDF_OrenNayar(); + } + return new BRDF_GGX(); + } + + static LTCAreaLight s_Instance; + + public static LTCAreaLight instance + { + get + { + if (s_Instance == null) + s_Instance = new LTCAreaLight(); + + return s_Instance; + } + } + + int m_refCounting; + + // For area lighting - We pack all texture inside a texture array to reduce the number of resource required + Texture2DArray m_LtcData; // 0: m_LtcGGXMatrix - RGBA, 1: m_LtcDisneyDiffuseMatrix - RGBA + + public const int k_LtcLUTResolution = 64; + + LTCAreaLight() + { + m_refCounting = 0; + } + + public void Build() + { + Debug.Assert(m_refCounting >= 0); + + if (m_refCounting == 0) + { + m_LtcData = new Texture2DArray(k_LtcLUTResolution, k_LtcLUTResolution, (int)LTCLightingModel.Count, GraphicsFormat.R16G16B16A16_SFloat, TextureCreationFlags.None) + { + hideFlags = HideFlags.HideAndDontSave, + wrapMode = TextureWrapMode.Clamp, + filterMode = FilterMode.Bilinear, + name = CoreUtils.GetTextureAutoName(k_LtcLUTResolution, k_LtcLUTResolution, GraphicsFormat.R16G16B16A16_SFloat, depth: (int)LTCLightingModel.Count, dim: TextureDimension.Tex2DArray, name: "LTC_LUT") + }; + + m_LtcData.SetPixelData(s_LtcMatrixData_BRDF_GGX, 0, (int)LTCLightingModel.GGX); + m_LtcData.SetPixelData(s_LtcMatrixData_BRDF_Disney, 0, (int)LTCLightingModel.DisneyDiffuse); + + m_LtcData.SetPixelData(s_LtcMatrixData_BRDF_Charlie, 0, (int)LTCLightingModel.Charlie); + + m_LtcData.SetPixelData(s_LtcMatrixData_BRDF_KajiyaKaySpecular, 0, (int)LTCLightingModel.KajiyaKaySpecular); + // TODO: Generate the Marschner LCT Table + + m_LtcData.SetPixelData(s_LtcMatrixData_BRDF_CookTorrance, 0, (int)LTCLightingModel.CookTorrance); + m_LtcData.SetPixelData(s_LtcMatrixData_BRDF_Ward, 0, (int)LTCLightingModel.Ward); + m_LtcData.SetPixelData(s_LtcMatrixData_BRDF_OrenNayar, 0, (int)LTCLightingModel.OrenNayar); + + m_LtcData.Apply(); + } + + m_refCounting++; + } + + public void Cleanup() + { + m_refCounting--; + + if (m_refCounting == 0) + { + CoreUtils.Destroy(m_LtcData); + } + + Debug.Assert(m_refCounting >= 0); + } + + public void Bind(CommandBuffer cmd) + { + cmd.SetGlobalTexture("_LtcData", m_LtcData); + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/LTCAreaLight.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/LTCAreaLight.cs.meta new file mode 100644 index 00000000..5cbd9c4c --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/LTCAreaLight.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: aea83b49b088a6047859da87f9277680 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/LTCAreaLight/LTCAreaLight.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD.meta new file mode 100644 index 00000000..1a3cac77 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a19f6e467644af244b2d0559127ea6cf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGD.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGD.cs new file mode 100644 index 00000000..e2aba2d3 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGD.cs @@ -0,0 +1,168 @@ +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Experimental.Rendering; + +namespace BadDog.Rendering.AreaLight +{ + public class PreIntegratedFGD + { + [GenerateHLSL] + public enum FGDTexture + { + Resolution = 64 + } + + static PreIntegratedFGD s_Instance; + + public static PreIntegratedFGD instance + { + get + { + if (s_Instance == null) + { + s_Instance = new PreIntegratedFGD(); + } + + return s_Instance; + } + } + + public enum FGDIndex + { + FGD_GGXAndDisneyDiffuse = 0, + FGD_CharlieAndFabricLambert = 1, + FGD_Marschner = 2, + Count = 3 + } + + bool[] m_isInit = new bool[(int)FGDIndex.Count]; + int[] m_refCounting = new int[(int)FGDIndex.Count]; + + Material[] m_PreIntegratedFGDMaterial = new Material[(int)FGDIndex.Count]; + RenderTexture[] m_PreIntegratedFGD = new RenderTexture[(int)FGDIndex.Count]; + Shader[] m_CustomShaders = new Shader[(int)FGDIndex.Count]; + + PreIntegratedFGD() + { + for (int i = 0; i < (int)FGDIndex.Count; ++i) + { + m_isInit[i] = false; + m_refCounting[i] = 0; + m_CustomShaders[i] = null; + } + } + + /// + /// Set custom shader for a specific FGD index. If null, will fallback to Shader.Find() + /// + public void SetShader(FGDIndex index, Shader shader) + { + if (index >= FGDIndex.Count) + { + Debug.LogError($"Invalid FGD index: {index}"); + return; + } + m_CustomShaders[(int)index] = shader; + } + + private Shader GetShaderForIndex(FGDIndex index) + { + // Use custom shader if set, otherwise fallback to Shader.Find() + Shader customShader = m_CustomShaders[(int)index]; + if (customShader != null) + { + return customShader; + } + + switch (index) + { + case FGDIndex.FGD_GGXAndDisneyDiffuse: return Shader.Find("Hidden/BadDog/URP/PreIntegratedFGD_GGXDisneyDiffuse"); + case FGDIndex.FGD_CharlieAndFabricLambert: return Shader.Find("Hidden/BadDog/URP/PreIntegratedFGD_CharlieFabricLambert"); + case FGDIndex.FGD_Marschner: return Shader.Find("Hidden/BadDog/URP/PreIntegratedFGD_Marschner"); + default: Debug.LogError($"Unable to get shader for index: {index}."); break; + } + + return null; + } + + public void Build(FGDIndex index) + { + Debug.Assert(index != FGDIndex.Count); + Debug.Assert(m_refCounting[(int)index] >= 0); + + if (m_refCounting[(int)index] == 0) + { + Shader pixelShader = GetShaderForIndex(index); + int res = (int)FGDTexture.Resolution; + m_PreIntegratedFGDMaterial[(int)index] = CoreUtils.CreateEngineMaterial(pixelShader); + m_PreIntegratedFGD[(int)index] = new RenderTexture(res, res, 0, GraphicsFormat.A2B10G10R10_UNormPack32) + { + hideFlags = HideFlags.HideAndDontSave, + filterMode = FilterMode.Bilinear, + wrapMode = TextureWrapMode.Clamp, + name = CoreUtils.GetRenderTargetAutoName(res, res, 1, GraphicsFormat.A2B10G10R10_UNormPack32, $"preIntegrated{index}") + }; + m_PreIntegratedFGD[(int)index].Create(); + m_isInit[(int)index] = false; + } + + m_refCounting[(int)index]++; + } + + public void RenderInit(FGDIndex index, CommandBuffer cmd) + { + if (m_isInit[(int)index] && m_PreIntegratedFGD[(int)index].IsCreated()) + { + return; + } + + // If we are in wireframe mode, the drawfullscreen will not work as expected, but we don't need the LUT anyway + // So create the texture to avoid errors, it will be initialized by the first render without wireframe + if (GL.wireframe) + { + m_PreIntegratedFGD[(int)index].Create(); + return; + } + + CoreUtils.DrawFullScreen(cmd, m_PreIntegratedFGDMaterial[(int)index], new RenderTargetIdentifier(m_PreIntegratedFGD[(int)index])); + m_isInit[(int)index] = true; + } + + public void Cleanup(FGDIndex index) + { + m_refCounting[(int)index]--; + + if (m_refCounting[(int)index] == 0) + { + CoreUtils.Destroy(m_PreIntegratedFGDMaterial[(int)index]); + CoreUtils.Destroy(m_PreIntegratedFGD[(int)index]); + + m_isInit[(int)index] = false; + } + + Debug.Assert(m_refCounting[(int)index] >= 0); + } + + public void Bind(CommandBuffer cmd, FGDIndex index) + { + switch (index) + { + case FGDIndex.FGD_GGXAndDisneyDiffuse: + cmd.SetGlobalTexture(PreIntegratedFGDShaderIDs._PreIntegratedFGD_GGXDisneyDiffuse, m_PreIntegratedFGD[(int)index]); + break; + + case FGDIndex.FGD_CharlieAndFabricLambert: + cmd.SetGlobalTexture(PreIntegratedFGDShaderIDs._PreIntegratedFGD_CharlieAndFabric, m_PreIntegratedFGD[(int)index]); + break; + + case FGDIndex.FGD_Marschner: + cmd.SetGlobalTexture(PreIntegratedFGDShaderIDs._PreIntegratedFGD_Marschner, m_PreIntegratedFGD[(int)index]); + break; + + default: + break; + } + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGD.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGD.cs.meta new file mode 100644 index 00000000..1a0e87cf --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGD.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 595ce7af30b78214f9930f6a78f1b917 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGD.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGDShaderIDs.cs b/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGDShaderIDs.cs new file mode 100644 index 00000000..154cd8ed --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGDShaderIDs.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +namespace BadDog.Rendering.AreaLight +{ + /// + /// Shader property IDs for Pre-Integrated FGD (Fresnel, Geometric, Diffuse) + /// + public static class PreIntegratedFGDShaderIDs + { + // Pre-integrated FGD texture IDs + public static readonly int _PreIntegratedFGD_GGXDisneyDiffuse = Shader.PropertyToID("_PreIntegratedFGD_GGXDisneyDiffuse"); + public static readonly int _PreIntegratedFGD_CharlieAndFabric = Shader.PropertyToID("_PreIntegratedFGD_CharlieAndFabric"); + public static readonly int _PreIntegratedFGD_Marschner = Shader.PropertyToID("_PreIntegratedFGD_Marschner"); + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGDShaderIDs.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGDShaderIDs.cs.meta new file mode 100644 index 00000000..be35d1ef --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGDShaderIDs.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 71b06b7ce73f870438526fc0d026ba8c +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Material/PreIntegratedFGD/PreIntegratedFGDShaderIDs.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes.meta b/Packages/com.baddog.rendering.arealight/Runtime/Passes.meta new file mode 100644 index 00000000..16d2034c --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8b3d0fd0279a26047b36e6b6fc475925 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.Legacy.cs b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.Legacy.cs new file mode 100644 index 00000000..bedea2b3 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.Legacy.cs @@ -0,0 +1,308 @@ +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace BadDog.Rendering.AreaLight +{ + public partial class AreaLightingPass + { + partial void AllocateShadowmapIfNeeded() + { + if (m_CreateEmptyShadowmap) + { + // Allocate minimal 1x1 shadowmap for shader compatibility + ShadowUtils.ShadowRTReAllocateIfNeeded(ref m_AreaLightsShadowmapHandle, 1, 1, k_ShadowmapBufferBits, name: "_AreaLightsShadowmapTexture"); + } + else + { + // Allocate actual shadowmap atlas for rendering shadows + ShadowUtils.ShadowRTReAllocateIfNeeded(ref m_AreaLightsShadowmapHandle, m_RenderTargetWidth, m_RenderTargetHeight, k_ShadowmapBufferBits, name: "_AreaLightsShadowmapTexture"); + } + } + + public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) + { + if (m_AreaLightsShadowmapHandle != null) + { + ConfigureTarget(m_AreaLightsShadowmapHandle); + + if (m_EmptyShadowmapNeedsClear || !m_CreateEmptyShadowmap) + { + ConfigureClear(ClearFlag.All, Color.black); + m_EmptyShadowmapNeedsClear = false; + } + } + } + + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + CommandBuffer cmd = CommandBufferPool.Get(); + + using (new ProfilingScope(cmd, m_ProfilingSampler)) + { + // Enable global shader keyword for BG Area Lighting + CoreUtils.SetKeyword(cmd, AreaLightingShaderIDs.ENABLE_BG_AREA_LIGHTING_KEYWORD, true); + + // Build LTC data texture (uses reference counting, safe to call multiple times) + LTCAreaLight.instance.Build(); + LTCAreaLight.instance.Bind(cmd); + + // GGX + Disney Diffuse + PreIntegratedFGD.instance.Build(PreIntegratedFGD.FGDIndex.FGD_GGXAndDisneyDiffuse); + PreIntegratedFGD.instance.RenderInit(PreIntegratedFGD.FGDIndex.FGD_GGXAndDisneyDiffuse, cmd); + PreIntegratedFGD.instance.Bind(cmd, PreIntegratedFGD.FGDIndex.FGD_GGXAndDisneyDiffuse); + + // Charlie + Fabric Lambert + PreIntegratedFGD.instance.Build(PreIntegratedFGD.FGDIndex.FGD_CharlieAndFabricLambert); + PreIntegratedFGD.instance.RenderInit(PreIntegratedFGD.FGDIndex.FGD_CharlieAndFabricLambert, cmd); + PreIntegratedFGD.instance.Bind(cmd, PreIntegratedFGD.FGDIndex.FGD_CharlieAndFabricLambert); + + // Marschner + PreIntegratedFGD.instance.Build(PreIntegratedFGD.FGDIndex.FGD_Marschner); + PreIntegratedFGD.instance.RenderInit(PreIntegratedFGD.FGDIndex.FGD_Marschner, cmd); + PreIntegratedFGD.instance.Bind(cmd, PreIntegratedFGD.FGDIndex.FGD_Marschner); + + var lightData = renderingData.lightData; + var visibleLights = lightData.visibleLights; + var areaLightDataArray = BGAreaLightManager.BuildAreaLightDataArray(visibleLights, lightData.mainLightIndex, m_LightSettings.maxAreaLights); + var areaLightBuffer = BGAreaLightManager.UpdateGraphicsBuffer(areaLightDataArray); + + if (areaLightBuffer != null) + { + cmd.SetGlobalBuffer(AreaLightingShaderIDs._AreaLightDataBuffer, areaLightBuffer); + cmd.SetGlobalInt(AreaLightingShaderIDs._AreaLightDataBufferCount, + areaLightDataArray.IsCreated ? areaLightDataArray.Length : 0); + } + else + { + var emptyBuffer = BGAreaLightManager.GetEmptyBuffer(); + cmd.SetGlobalBuffer(AreaLightingShaderIDs._AreaLightDataBuffer, emptyBuffer); + cmd.SetGlobalInt(AreaLightingShaderIDs._AreaLightDataBufferCount, 0); + } + } + + if (m_CreateEmptyShadowmap) + { + SetShadowParamsForEmptyShadowmap(cmd); + + if (m_AreaLightsShadowmapHandle != null) + { + cmd.SetGlobalTexture(AreaLightingShaderIDs._AreaLightsShadowmapTexture, m_AreaLightsShadowmapHandle.nameID); + } + } + else + { + RenderAreaLightShadows(context, ref renderingData, cmd); + } + + context.ExecuteCommandBuffer(cmd); + CommandBufferPool.Release(cmd); + } + + private void InitRendererLists(ref CullingResults cullResults, ref PassData passData, ScriptableRenderContext context) + { + if (m_CreateEmptyShadowmap) + { + return; + } + + for (int shadowSliceIndex = 0; shadowSliceIndex < m_ValidShadowCastingLightsCount; ++shadowSliceIndex) + { + int areaLightIndex = m_ShadowSliceToAreaLightIndex[shadowSliceIndex]; + int visibleLightIndex = m_AreaLightIndexToVisibleLightIndex[areaLightIndex]; + if (visibleLightIndex < 0 || visibleLightIndex >= passData.visibleLights.Length) + { + passData.shadowRendererLists[shadowSliceIndex] = default; + continue; + } + + Light shadowLight = passData.visibleLights[visibleLightIndex].light; + int layerMask = shadowLight != null ? shadowLight.cullingMask : ~0; + bool useRenderingLayers = UniversalRenderPipeline.asset != null && UniversalRenderPipeline.asset.useRenderingLayers; + uint renderingLayerMask = useRenderingLayers && shadowLight != null + ? (uint)shadowLight.renderingLayerMask + : uint.MaxValue; + var sorting = new SortingSettings(passData.camera) { criteria = SortingCriteria.None }; + var ds = new DrawingSettings(new ShaderTagId("ShadowCaster"), sorting); + var fs = new FilteringSettings(RenderQueueRange.all, layerMask, renderingLayerMask); + + RendererListParams param = new RendererListParams(cullResults, ds, fs); + passData.shadowRendererLists[shadowSliceIndex] = context.CreateRendererList(ref param); + } + } + + private void RenderAreaLightShadowmapAtlas(CommandBuffer cmd, ref PassData data) + { + using (new ProfilingScope(cmd, m_ShadowProfilingSampler)) + { + SetBGAreaLightShadowQualityKeywords(cmd); + + bool anyShadowSliceRendered = false; + int shadowSlicesCount = m_ShadowSliceToAreaLightIndex.Count; + + Vector4 lastShadowBias = new Vector4(-10f, -10f, -10f, -10f); + + for (int globalShadowSliceIndex = 0; globalShadowSliceIndex < shadowSlicesCount; ++globalShadowSliceIndex) + { + int areaLightIndex = m_ShadowSliceToAreaLightIndex[globalShadowSliceIndex]; + if (areaLightIndex < 0) + { + continue; + } + + Vector4 shadowParams = m_AreaLightIndexToShadowParams[areaLightIndex]; + // Check if shadow is valid: w != -1 and shadowStrength > 0 + if (Mathf.Approximately(shadowParams.x, 0.0f) || Mathf.Approximately(shadowParams.w, -1.0f)) + { + continue; + } + + int visibleLightIndex = m_AreaLightIndexToVisibleLightIndex[areaLightIndex]; + if (visibleLightIndex < 0 || visibleLightIndex >= data.visibleLights.Length) + { + continue; + } + + VisibleLight shadowLight = data.visibleLights[visibleLightIndex]; + ShadowSliceData shadowSliceData = m_AreaLightsShadowSlices[globalShadowSliceIndex]; + + // Get nearPlane for this light (matching the logic in TryComputeAreaLightShadowSlice) + Light unityLight = shadowLight.light; + float nearPlane; + if (unityLight != null && + BGAreaLightManager.TryGetRegisteredAreaLight(unityLight, out var areaLightComp)) + { + nearPlane = areaLightComp.GetShadowNearPlane(); + } + else + { + nearPlane = unityLight != null ? unityLight.shadowNearPlane : 0.1f; + } + + Vector4 shadowBias = AreaShadowUtils.GetRectangleLightShadowBias(ref shadowLight, + ref m_ShadowDataCache, shadowSliceData.resolution, nearPlane, m_ShadowSettings.shadowFilter); + if (globalShadowSliceIndex == 0 || !AreaShadowUtils.FastApproximately(shadowBias, lastShadowBias)) + { + SetShadowBias(cmd, shadowBias); + lastShadowBias = shadowBias; + } + + Vector3 lightPosition = shadowLight.localToWorldMatrix.GetColumn(3); + SetLightPosition(cmd, lightPosition); + + RendererList shadowRendererList = data.shadowRendererLists[globalShadowSliceIndex]; + RenderShadowSlice(cmd, ref shadowSliceData, ref shadowRendererList, + shadowSliceData.projectionMatrix, shadowSliceData.viewMatrix); + anyShadowSliceRendered = true; + } + + if (anyShadowSliceRendered) + { + SetupAreaLightsShadowReceiverConstants(cmd, data.allocatedShadowAtlasSize); + cmd.SetViewProjectionMatrices(data.viewMatrix, data.projectionMatrix); + } + } + } + + private void InitPassData(ref PassData passData, in CameraData cameraData, in LightData lightData) + { + passData.pass = this; + passData.emptyShadowmap = m_CreateEmptyShadowmap; + passData.visibleLights = lightData.visibleLights; + passData.viewMatrix = cameraData.GetViewMatrix(); + passData.projectionMatrix = cameraData.GetProjectionMatrix(); + passData.camera = cameraData.camera; + passData.shadowRendererLists = m_ShadowRendererLists; + } + + private void RenderAreaLightShadows(ScriptableRenderContext context, ref RenderingData renderingData, CommandBuffer cmd) + { + var cameraData = renderingData.cameraData; + var lightData = renderingData.lightData; + + InitPassData(ref m_PassData, cameraData, lightData); + InitRendererLists(ref renderingData.cullResults, ref m_PassData, context); + m_PassData.allocatedShadowAtlasSize = new Vector2Int(m_RenderTargetWidth, m_RenderTargetHeight); + + RenderAreaLightShadowmapAtlas(cmd, ref m_PassData); + + if (m_AreaLightsShadowmapHandle != null) + { + cmd.SetGlobalTexture(AreaLightingShaderIDs._AreaLightsShadowmapTexture, m_AreaLightsShadowmapHandle.nameID); + } + } + + private void SetShadowBias(CommandBuffer cmd, Vector4 shadowBias) + { + cmd.SetGlobalVector(AreaLightingShaderIDs._ShadowBias, shadowBias); + } + + private void SetLightPosition(CommandBuffer cmd, Vector3 lightPosition) + { + cmd.SetGlobalVector(AreaLightingShaderIDs._LightPosition, + new Vector4(lightPosition.x, lightPosition.y, lightPosition.z, 1.0f)); + } + + private void RenderShadowSlice(CommandBuffer cmd, ref ShadowSliceData shadowSliceData, ref RendererList shadowRendererList, + Matrix4x4 proj, Matrix4x4 view) + { + cmd.SetGlobalDepthBias(1.0f, 2.5f); + cmd.SetViewport(new Rect(shadowSliceData.offsetX, shadowSliceData.offsetY, shadowSliceData.resolution, + shadowSliceData.resolution)); + cmd.SetViewProjectionMatrices(view, proj); + + cmd.DrawRendererList(shadowRendererList); + + cmd.DisableScissorRect(); + cmd.SetGlobalDepthBias(0.0f, 0.0f); + } + + private void SetupAreaLightsShadowReceiverConstants(CommandBuffer cmd, Vector2Int atlasSize) + { + cmd.SetGlobalMatrixArray(AreaLightingShaderIDs._AreaLightsWorldToShadow, m_AreaLightShadowSliceIndexTo_WorldShadowMatrix); + cmd.SetGlobalVectorArray(AreaLightingShaderIDs._AreaLightShadowParams, m_AreaLightIndexToShadowParams); + cmd.SetGlobalVector(AreaLightingShaderIDs._AreaLightShadowmapSize, new Vector4(1f / atlasSize.x, 1f / atlasSize.y, atlasSize.x, atlasSize.y)); + float pcssShadowSoftness = Mathf.Max(0f, m_ShadowSettings.pcssShadowSoftness); + int pcssBlockerSampleCount = Mathf.Clamp(m_ShadowSettings.pcssBlockerSampleCount, 1, 64); + int pcssFilterSampleCount = Mathf.Clamp(m_ShadowSettings.pcssFilterSampleCount, 1, 64); + cmd.SetGlobalVector(AreaLightingShaderIDs._PCSSAdditionalLightParams, new Vector4(pcssShadowSoftness, pcssBlockerSampleCount, pcssFilterSampleCount, 1.0f)); + } + + private static void SetShadowParamsForEmptyShadowmap(CommandBuffer cmd) + { + cmd.SetGlobalMatrixArray(AreaLightingShaderIDs._AreaLightsWorldToShadow, s_EmptyShadowMatrices); + cmd.SetGlobalVectorArray(AreaLightingShaderIDs._AreaLightShadowParams, s_EmptyShadowParams); + cmd.SetGlobalVector(AreaLightingShaderIDs._AreaLightShadowmapSize, new Vector4(0f, 0f, 1f, 1f)); + cmd.SetGlobalVector(AreaLightingShaderIDs._PCSSAdditionalLightParams, Vector4.zero); + } + + private void SetBGAreaLightShadowQualityKeywords(CommandBuffer cmd) + { + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsPCF2x2, false); + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsTent5x5, false); + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsTent7x7, false); + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsPCSS, false); + + switch (m_ShadowSettings.shadowFilter) + { + case AreaLightShadowSettings.BGAreaLightShadowMode.PCF2x2: + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsPCF2x2, true); + break; + case AreaLightShadowSettings.BGAreaLightShadowMode.Tent5x5: + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsTent5x5, true); + break; + case AreaLightShadowSettings.BGAreaLightShadowMode.Tent7x7: + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsTent7x7, true); + break; + case AreaLightShadowSettings.BGAreaLightShadowMode.PCSS: + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsPCSS, true); + break; + case AreaLightShadowSettings.BGAreaLightShadowMode.Off: + default: + // All keywords disabled (handled above) + break; + } + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.Legacy.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.Legacy.cs.meta new file mode 100644 index 00000000..362d6a63 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.Legacy.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1c5279b325c6fc74bbc057ef781801be +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.Legacy.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.RenderGraph.cs b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.RenderGraph.cs new file mode 100644 index 00000000..2464c21f --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.RenderGraph.cs @@ -0,0 +1,355 @@ +using System; +using Unity.Collections; +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +#if UNITY_6000_0_OR_NEWER || UNITY_2023_2_OR_NEWER +using UnityEngine.Rendering.RenderGraphModule; + +namespace BadDog.Rendering.AreaLight +{ + public partial class AreaLightingPass + { + private RendererListHandle[] m_ShadowRendererListsHandles; + + private partial class PassData + { + internal RendererListHandle[] shadowRendererListsHdl; + internal UniversalLightData lightData; + internal int maxAreaLights; + } + + partial void ConfigureShadowSettingsRenderGraph(int maxShadowCastingLights) + { + if (m_ShadowRendererListsHandles == null || m_ShadowRendererListsHandles.Length != maxShadowCastingLights) + { + m_ShadowRendererListsHandles = new RendererListHandle[maxShadowCastingLights]; + } + if (m_PassData != null) + { + m_PassData.shadowRendererListsHdl = m_ShadowRendererListsHandles; + } + } + + partial void EnsureMappingArraysRenderGraph() + { + if (m_ShadowRendererListsHandles == null || m_ShadowRendererListsHandles.Length != m_ShadowSettings.maxShadowCastingLights) + { + m_ShadowRendererListsHandles = new RendererListHandle[m_ShadowSettings.maxShadowCastingLights]; + } + } + + partial void ResetMappingArraysRenderGraph() + { + if (m_ShadowRendererListsHandles != null) + { + Array.Clear(m_ShadowRendererListsHandles, 0, m_ShadowRendererListsHandles.Length); + } + } + + public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData) + { + UniversalLightData lightData = frameData.Get(); + UniversalCameraData cameraData = frameData.Get(); + UniversalRenderingData renderingData = frameData.Get(); + UniversalShadowData shadowData = frameData.Get(); + + using (var builder = renderGraph.AddUnsafePass("AreaLighting Setup", out var passData, m_ProfilingSampler)) + { + // Disable pass culling first - this pass must always execute to set up global textures and buffers + builder.AllowPassCulling(false); + builder.AllowGlobalStateModification(true); + + passData.lightData = lightData; + passData.maxAreaLights = m_LightSettings.maxAreaLights; + + builder.SetRenderFunc((PassData data, UnsafeGraphContext context) => + { + // Convert UnsafeCommandBuffer to CommandBuffer for methods that require CommandBuffer + CommandBuffer cmd = CommandBufferHelpers.GetNativeCommandBuffer(context.cmd); + + // Enable global shader keyword for BG Area Lighting + CoreUtils.SetKeyword(cmd, AreaLightingShaderIDs.ENABLE_BG_AREA_LIGHTING_KEYWORD, true); + + // Build LTC data texture (uses reference counting, safe to call multiple times) + LTCAreaLight.instance.Build(); + LTCAreaLight.instance.Bind(cmd); + + // GGX + Disney Diffuse + PreIntegratedFGD.instance.Build(PreIntegratedFGD.FGDIndex.FGD_GGXAndDisneyDiffuse); + PreIntegratedFGD.instance.RenderInit(PreIntegratedFGD.FGDIndex.FGD_GGXAndDisneyDiffuse, cmd); + PreIntegratedFGD.instance.Bind(cmd, PreIntegratedFGD.FGDIndex.FGD_GGXAndDisneyDiffuse); + + // Charlie + Fabric Lambert + PreIntegratedFGD.instance.Build(PreIntegratedFGD.FGDIndex.FGD_CharlieAndFabricLambert); + PreIntegratedFGD.instance.RenderInit(PreIntegratedFGD.FGDIndex.FGD_CharlieAndFabricLambert, cmd); + PreIntegratedFGD.instance.Bind(cmd, PreIntegratedFGD.FGDIndex.FGD_CharlieAndFabricLambert); + + // Marschner + PreIntegratedFGD.instance.Build(PreIntegratedFGD.FGDIndex.FGD_Marschner); + PreIntegratedFGD.instance.RenderInit(PreIntegratedFGD.FGDIndex.FGD_Marschner, cmd); + PreIntegratedFGD.instance.Bind(cmd, PreIntegratedFGD.FGDIndex.FGD_Marschner); + + var visibleLights = data.lightData.visibleLights; + var areaLightDataArray = BGAreaLightManager.BuildAreaLightDataArray(visibleLights, data.lightData.mainLightIndex, data.maxAreaLights); + var areaLightBuffer = BGAreaLightManager.UpdateGraphicsBuffer(areaLightDataArray); + + if (areaLightBuffer != null) + { + cmd.SetGlobalBuffer(AreaLightingShaderIDs._AreaLightDataBuffer, areaLightBuffer); + cmd.SetGlobalInt(AreaLightingShaderIDs._AreaLightDataBufferCount, areaLightDataArray.IsCreated ? areaLightDataArray.Length : 0); + } + else + { + var emptyBuffer = BGAreaLightManager.GetEmptyBuffer(); + cmd.SetGlobalBuffer(AreaLightingShaderIDs._AreaLightDataBuffer, emptyBuffer); + cmd.SetGlobalInt(AreaLightingShaderIDs._AreaLightDataBufferCount, 0); + } + }); + } + + // Shadow pass - render area light shadows if any + if (m_ValidShadowCastingLightsCount > 0 || m_CreateEmptyShadowmap) + { + using (var builder = renderGraph.AddRasterRenderPass("AreaLight Shadows", out var passData, m_ShadowProfilingSampler)) + { + InitPassData(ref passData, cameraData, lightData, shadowData); + InitRendererLists(ref renderingData.cullResults, ref passData, renderGraph); + + TextureHandle shadowTexture; + if (!m_CreateEmptyShadowmap) + { + for (int globalShadowSliceIndex = 0; globalShadowSliceIndex < m_ShadowSliceToAreaLightIndex.Count; ++globalShadowSliceIndex) + { + builder.UseRendererList(passData.shadowRendererListsHdl[globalShadowSliceIndex]); + } + + shadowTexture = UniversalRenderer.CreateRenderGraphTexture(renderGraph, m_AreaLightShadowDescriptor, "_AreaLightsShadowmapTexture", true, FilterMode.Bilinear); + builder.SetRenderAttachmentDepth(shadowTexture, AccessFlags.Write); + } + else + { + shadowTexture = renderGraph.defaultResources.defaultShadowTexture; + } + + TextureDesc descriptor = shadowTexture.GetDescriptor(renderGraph); + passData.allocatedShadowAtlasSize = new Vector2Int(descriptor.width, descriptor.height); + + builder.AllowGlobalStateModification(true); + + if (shadowTexture.IsValid()) + { + builder.SetGlobalTextureAfterPass(shadowTexture, AreaLightingShaderIDs._AreaLightsShadowmapTexture); + } + + builder.SetRenderFunc((PassData data, RasterGraphContext context) => + { + RasterCommandBuffer rasterCommandBuffer = context.cmd; + if (!data.emptyShadowmap) + { + data.pass.RenderAreaLightShadowmapAtlas(rasterCommandBuffer, ref data); + } + else + { + SetShadowParamsForEmptyShadowmap(rasterCommandBuffer); + } + }); + } + } + } + + private void InitRendererLists(ref CullingResults cullResults, ref PassData passData, RenderGraph renderGraph) + { + if (m_CreateEmptyShadowmap) + { + return; + } + + for (int shadowSliceIndex = 0; shadowSliceIndex < m_ValidShadowCastingLightsCount; ++shadowSliceIndex) + { + int areaLightIndex = m_ShadowSliceToAreaLightIndex[shadowSliceIndex]; + int visibleLightIndex = m_AreaLightIndexToVisibleLightIndex[areaLightIndex]; + if (visibleLightIndex < 0 || visibleLightIndex >= passData.visibleLights.Length) + { + passData.shadowRendererListsHdl[shadowSliceIndex] = default; + continue; + } + + Light shadowLight = passData.visibleLights[visibleLightIndex].light; + int layerMask = shadowLight != null ? shadowLight.cullingMask : ~0; + bool useRenderingLayers = UniversalRenderPipeline.asset != null && UniversalRenderPipeline.asset.useRenderingLayers; + uint renderingLayerMask = useRenderingLayers && shadowLight != null + ? (uint)shadowLight.renderingLayerMask + : uint.MaxValue; + var sorting = new SortingSettings(passData.camera) { criteria = SortingCriteria.None }; + var ds = new DrawingSettings(new ShaderTagId("ShadowCaster"), sorting); + var fs = new FilteringSettings(RenderQueueRange.all, layerMask, renderingLayerMask); + + RendererListParams param = new RendererListParams(cullResults, ds, fs); + + passData.shadowRendererListsHdl[shadowSliceIndex] = renderGraph.CreateRendererList(param); + } + } + + private void InitPassData(ref PassData passData, UniversalCameraData cameraData, UniversalLightData lightData, UniversalShadowData shadowData) + { + passData.pass = this; + passData.emptyShadowmap = m_CreateEmptyShadowmap; + passData.visibleLights = lightData.visibleLights; + passData.viewMatrix = cameraData.GetViewMatrix(); + passData.projectionMatrix = cameraData.GetProjectionMatrix(); + passData.camera = cameraData.camera; + passData.shadowRendererLists = m_ShadowRendererLists; + passData.shadowRendererListsHdl = m_ShadowRendererListsHandles; + } + + private void SetupAreaLightsShadowReceiverConstants(RasterCommandBuffer cmd, Vector2Int atlasSize) + { + cmd.SetGlobalMatrixArray(AreaLightingShaderIDs._AreaLightsWorldToShadow, m_AreaLightShadowSliceIndexTo_WorldShadowMatrix); + cmd.SetGlobalVectorArray(AreaLightingShaderIDs._AreaLightShadowParams, m_AreaLightIndexToShadowParams); + cmd.SetGlobalVector(AreaLightingShaderIDs._AreaLightShadowmapSize, new Vector4(1f / atlasSize.x, 1f / atlasSize.y, atlasSize.x, atlasSize.y)); + float pcssShadowSoftness = Mathf.Max(0f, m_ShadowSettings.pcssShadowSoftness); + int pcssBlockerSampleCount = Mathf.Clamp(m_ShadowSettings.pcssBlockerSampleCount, 1, 64); + int pcssFilterSampleCount = Mathf.Clamp(m_ShadowSettings.pcssFilterSampleCount, 1, 64); + cmd.SetGlobalVector(AreaLightingShaderIDs._PCSSAdditionalLightParams, new Vector4(pcssShadowSoftness, pcssBlockerSampleCount, pcssFilterSampleCount, 1.0f)); + } + + private static void SetShadowParamsForEmptyShadowmap(RasterCommandBuffer cmd) + { + cmd.SetGlobalMatrixArray(AreaLightingShaderIDs._AreaLightsWorldToShadow, s_EmptyShadowMatrices); + cmd.SetGlobalVectorArray(AreaLightingShaderIDs._AreaLightShadowParams, s_EmptyShadowParams); + cmd.SetGlobalVector(AreaLightingShaderIDs._AreaLightShadowmapSize, new Vector4(0f, 0f, 1f, 1f)); + cmd.SetGlobalVector(AreaLightingShaderIDs._PCSSAdditionalLightParams, Vector4.zero); + } + + private void SetBGAreaLightShadowQualityKeywords(RasterCommandBuffer cmd) + { + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsPCF2x2, false); + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsTent5x5, false); + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsTent7x7, false); + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsPCSS, false); + + switch (m_ShadowSettings.shadowFilter) + { + case AreaLightShadowSettings.BGAreaLightShadowMode.PCF2x2: + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsPCF2x2, true); + break; + case AreaLightShadowSettings.BGAreaLightShadowMode.Tent5x5: + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsTent5x5, true); + break; + case AreaLightShadowSettings.BGAreaLightShadowMode.Tent7x7: + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsTent7x7, true); + break; + case AreaLightShadowSettings.BGAreaLightShadowMode.PCSS: + cmd.SetKeyword(ShaderGlobalKeywords.BGAreaLightShadowsPCSS, true); + break; + case AreaLightShadowSettings.BGAreaLightShadowMode.Off: + default: + // All keywords disabled (handled above) + break; + } + } + + private void RenderAreaLightShadowmapAtlas(RasterCommandBuffer cmd, ref PassData data) + { + using (new ProfilingScope(cmd, m_ShadowProfilingSampler)) + { + SetBGAreaLightShadowQualityKeywords(cmd); + + bool anyShadowSliceRendered = false; + int shadowSlicesCount = m_ShadowSliceToAreaLightIndex.Count; + + Vector4 lastShadowBias = new Vector4(-10f, -10f, -10f, -10f); + + for (int globalShadowSliceIndex = 0; globalShadowSliceIndex < shadowSlicesCount; ++globalShadowSliceIndex) + { + int areaLightIndex = m_ShadowSliceToAreaLightIndex[globalShadowSliceIndex]; + if (areaLightIndex < 0) + { + continue; + } + + Vector4 shadowParams = m_AreaLightIndexToShadowParams[areaLightIndex]; + // Check if shadow is valid: w != -1 and shadowStrength > 0 + if (Mathf.Approximately(shadowParams.x, 0.0f) || Mathf.Approximately(shadowParams.w, -1.0f)) + { + continue; + } + + int visibleLightIndex = m_AreaLightIndexToVisibleLightIndex[areaLightIndex]; + if (visibleLightIndex < 0 || visibleLightIndex >= data.visibleLights.Length) + { + continue; + } + + VisibleLight shadowLight = data.visibleLights[visibleLightIndex]; + ShadowSliceData shadowSliceData = m_AreaLightsShadowSlices[globalShadowSliceIndex]; + + // Get nearPlane for this light (matching the logic in TryComputeAreaLightShadowSlice) + Light unityLight = shadowLight.light; + float nearPlane; + if (unityLight != null && BGAreaLightManager.TryGetRegisteredAreaLight(unityLight, out var areaLightComp)) + { + nearPlane = areaLightComp.GetShadowNearPlane(); + } + else + { + nearPlane = unityLight != null ? unityLight.shadowNearPlane : 0.1f; + } + + Vector4 shadowBias = AreaShadowUtils.GetRectangleLightShadowBias(ref shadowLight, ref m_ShadowDataCache, shadowSliceData.resolution, nearPlane, m_ShadowSettings.shadowFilter); + if (globalShadowSliceIndex == 0 || !AreaShadowUtils.FastApproximately(shadowBias, lastShadowBias)) + { + SetShadowBias(cmd, shadowBias); + lastShadowBias = shadowBias; + } + + Vector3 lightPosition = shadowLight.localToWorldMatrix.GetColumn(3); + SetLightPosition(cmd, lightPosition); + + RendererList shadowRendererList = data.shadowRendererListsHdl[globalShadowSliceIndex]; + RenderShadowSlice(cmd, ref shadowSliceData, ref shadowRendererList, shadowSliceData.projectionMatrix, shadowSliceData.viewMatrix); + anyShadowSliceRendered = true; + } + + if (anyShadowSliceRendered) + { + SetupAreaLightsShadowReceiverConstants(cmd, data.allocatedShadowAtlasSize); + cmd.SetViewProjectionMatrices(data.viewMatrix, data.projectionMatrix); + } + } + } + + private void SetShadowBias(RasterCommandBuffer cmd, Vector4 shadowBias) + { + cmd.SetGlobalVector(AreaLightingShaderIDs._ShadowBias, shadowBias); + } + + private void SetLightPosition(RasterCommandBuffer cmd, Vector3 lightPosition) + { + cmd.SetGlobalVector(AreaLightingShaderIDs._LightPosition, + new Vector4(lightPosition.x, lightPosition.y, lightPosition.z, 1.0f)); + } + + private void RenderShadowSlice(RasterCommandBuffer cmd, ref ShadowSliceData shadowSliceData, ref RendererList shadowRendererList, + Matrix4x4 proj, Matrix4x4 view) + { + cmd.SetGlobalDepthBias(1.0f, 2.5f); + cmd.SetViewport(new Rect(shadowSliceData.offsetX, shadowSliceData.offsetY, shadowSliceData.resolution, + shadowSliceData.resolution)); + cmd.SetViewProjectionMatrices(view, proj); + + if (shadowRendererList.isValid) + { + cmd.DrawRendererList(shadowRendererList); + } + + cmd.DisableScissorRect(); + cmd.SetGlobalDepthBias(0.0f, 0.0f); + } + } +} +#endif + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.RenderGraph.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.RenderGraph.cs.meta new file mode 100644 index 00000000..1b6784ad --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.RenderGraph.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ccba3711a0907224992b4d3ff8af9a13 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.RenderGraph.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.cs b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.cs new file mode 100644 index 00000000..6129fb08 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.cs @@ -0,0 +1,445 @@ +using System; +using System.Collections.Generic; +using Unity.Collections; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace BadDog.Rendering.AreaLight +{ + public partial class AreaLightingPass : ScriptableRenderPass + { + private static readonly ProfilingSampler m_ProfilingSampler = new ProfilingSampler("AreaLighting Setup"); + private static readonly ProfilingSampler m_ShadowProfilingSampler = new ProfilingSampler("AreaLight Shadows"); + + private const int k_ShadowmapBufferBits = 16; + private const int k_MaxAreaLightShadowCount = 8; + + private static readonly Matrix4x4[] s_EmptyShadowMatrices = new Matrix4x4[k_MaxAreaLightShadowCount] + { + Matrix4x4.identity, Matrix4x4.identity, Matrix4x4.identity, Matrix4x4.identity, + Matrix4x4.identity, Matrix4x4.identity, Matrix4x4.identity, Matrix4x4.identity + }; + + private static readonly Vector4[] s_EmptyShadowParams = new Vector4[k_MaxAreaLightShadowCount] + { + Vector4.zero, Vector4.zero, Vector4.zero, Vector4.zero, + Vector4.zero, Vector4.zero, Vector4.zero, Vector4.zero + }; + private AreaLightSettings m_LightSettings; + private AreaLightShadowSettings m_ShadowSettings; + + private RTHandle m_AreaLightsShadowmapHandle; + private Matrix4x4[] m_AreaLightShadowSliceIndexTo_WorldShadowMatrix; // Indexed by areaLightIndex + private Vector4[] m_AreaLightIndexToShadowParams; // Indexed by areaLightIndex + private ShadowSliceData[] m_AreaLightsShadowSlices; // Indexed by shadowSliceIndex + private int m_ValidShadowCastingLightsCount = 0; + private short[] m_VisibleLightIndexToAreaLightIndex; + private short[] m_AreaLightIndexToVisibleLightIndex; + private bool[] m_VisibleLightIndexToIsCastingShadows; + private readonly List m_ShadowSliceToAreaLightIndex = new(); // shadowSliceIndex -> areaLightIndex + private RendererList[] m_ShadowRendererLists; // Indexed by shadowSliceIndex + private bool m_CreateEmptyShadowmap; + private bool m_EmptyShadowmapNeedsClear = true; + private int m_RenderTargetWidth; + private int m_RenderTargetHeight; + private ShadowData m_ShadowDataCache; + private RenderTextureDescriptor m_AreaLightShadowDescriptor; + private static readonly List s_AreaLightRequestedResolutions = new(); + + private partial class PassData + { + internal AreaLightingPass pass; + internal bool emptyShadowmap; + internal Vector2Int allocatedShadowAtlasSize; + internal RendererList[] shadowRendererLists; + internal NativeArray visibleLights; + internal Matrix4x4 viewMatrix; + internal Matrix4x4 projectionMatrix; + internal Camera camera; + } + + private PassData m_PassData; + + partial void ConfigureShadowSettingsRenderGraph(int maxShadowCastingLights); + + public AreaLightingPass() + { + renderPassEvent = RenderPassEvent.AfterRenderingShadows; + + m_AreaLightShadowSliceIndexTo_WorldShadowMatrix = new Matrix4x4[k_MaxAreaLightShadowCount]; + m_AreaLightIndexToShadowParams = new Vector4[k_MaxAreaLightShadowCount]; + m_AreaLightsShadowSlices = new ShadowSliceData[k_MaxAreaLightShadowCount]; + m_ShadowRendererLists = new RendererList[k_MaxAreaLightShadowCount]; + + m_PassData = new PassData + { + shadowRendererLists = m_ShadowRendererLists + }; + } + + private void ConfigureAreaLightingSettings(AreaLightSettings lightSettings, + AreaLightShadowSettings shadowSettings) + { + m_LightSettings = lightSettings; + m_ShadowSettings = shadowSettings; + + PreIntegratedFGD.instance.SetShader(PreIntegratedFGD.FGDIndex.FGD_GGXAndDisneyDiffuse, lightSettings.preIntegratedFGD_GGXDisneyDiffuse); + PreIntegratedFGD.instance.SetShader(PreIntegratedFGD.FGDIndex.FGD_CharlieAndFabricLambert, lightSettings.preIntegratedFGD_CharlieFabricLambert); + PreIntegratedFGD.instance.SetShader(PreIntegratedFGD.FGDIndex.FGD_Marschner, lightSettings.preIntegratedFGD_Marschner); + + ConfigureShadowSettingsRenderGraph(shadowSettings.maxShadowCastingLights); + } + + public void Setup(AreaLightSettings lightSettings, AreaLightShadowSettings shadowSettings, RenderingData renderingData) + { + ConfigureAreaLightingSettings(lightSettings, shadowSettings); + PrepareAreaLightShadows(renderingData); + } + + public override void OnCameraCleanup(CommandBuffer cmd) + { + CoreUtils.SetKeyword(cmd, AreaLightingShaderIDs.ENABLE_BG_AREA_LIGHTING_KEYWORD, false); + } + + public void Dispose() + { + m_AreaLightsShadowmapHandle?.Release(); + } + + + private void PrepareAreaLightShadows(RenderingData renderingData) + { + m_CreateEmptyShadowmap = false; + m_ValidShadowCastingLightsCount = 0; + m_RenderTargetWidth = m_ShadowSettings.shadowAtlasResolution; + m_RenderTargetHeight = m_ShadowSettings.shadowAtlasResolution; + + var cameraData = renderingData.cameraData; + var lightData = renderingData.lightData; + var shadowData = renderingData.shadowData; + m_ShadowDataCache = shadowData; + NativeArray visibleLights = lightData.visibleLights; + if (!visibleLights.IsCreated || visibleLights.Length == 0) + { + m_CreateEmptyShadowmap = true; + m_EmptyShadowmapNeedsClear = true; + AllocateShadowmapIfNeeded(); + return; + } + + EnsureMappingArrays(visibleLights.Length); + ResetMappingArrays(visibleLights.Length); + + PrepareAreaLightRequestedResolutions(visibleLights, lightData.mainLightIndex); + + var atlasLayout = new AreaLightsShadowAtlasLayout(lightData, shadowData, cameraData, s_AreaLightRequestedResolutions, m_ShadowSettings.maxShadowCastingLights, m_ShadowSettings.shadowAtlasResolution); + + int targetShadowCount = Math.Min(atlasLayout.GetTotalShadowSlicesCount(), m_ShadowSettings.maxShadowCastingLights); + if (targetShadowCount <= 0) + { + m_CreateEmptyShadowmap = true; + m_EmptyShadowmapNeedsClear = true; + AllocateShadowmapIfNeeded(); + return; + } + + // Trim shadow atlas dimensions if possible (to avoid allocating texture space that will not be used) + int atlasMaxX = 0; + int atlasMaxY = 0; + for (int i = 0; i < targetShadowCount; ++i) + { + var request = atlasLayout.GetSortedShadowResolutionRequest(i); + int maxX = request.offsetX + request.allocatedResolution; + int maxY = request.offsetY + request.allocatedResolution; + if (maxX > atlasMaxX) atlasMaxX = maxX; + if (maxY > atlasMaxY) atlasMaxY = maxY; + } + + // Use power-of-two dimensions (might perform better on some hardware) + m_RenderTargetWidth = Mathf.NextPowerOfTwo(atlasMaxX); + m_RenderTargetHeight = Mathf.NextPowerOfTwo(atlasMaxY); + + int areaLightIndex = 0; + int shadowSliceIndex = 0; + + for (int visibleLightIndex = 0; visibleLightIndex < visibleLights.Length && areaLightIndex < m_LightSettings.maxAreaLights; ++visibleLightIndex) + { + if (visibleLightIndex == lightData.mainLightIndex) + { + continue; + } + + ref readonly VisibleLight visibleLight = ref visibleLights.UnsafeElementAt(visibleLightIndex); + Light light = visibleLight.light; + + // Only registered BGAreaLight rectangle lights participate in the area light system. + if (visibleLight.lightType != LightType.Rectangle || light == null + || !BGAreaLightManager.TryGetRegisteredAreaLight(light, out _)) + { + continue; + } + + // Default shadow params: no shadow (w = -1 means no shadow) + // z = 0 means Spot-like light type identifier (for shader compatibility) + m_AreaLightIndexToShadowParams[areaLightIndex] = new Vector4(0f, 0f, 0f, -1f); + m_AreaLightShadowSliceIndexTo_WorldShadowMatrix[areaLightIndex] = Matrix4x4.identity; + m_AreaLightIndexToVisibleLightIndex[areaLightIndex] = (short)visibleLightIndex; + m_VisibleLightIndexToAreaLightIndex[visibleLightIndex] = (short)areaLightIndex; + + // Check if this light casts shadows (light type and null check already done above) + bool canCastShadows = AreaShadowUtils.CanLightCastShadows(light); + // Ensure we don't exceed array bounds: shadowSliceIndex < maxShadowCastingLights + if (m_ShadowSettings.shadowFilter != AreaLightShadowSettings.BGAreaLightShadowMode.Off + && canCastShadows + && atlasLayout.HasSpaceForLight(visibleLightIndex) + && shadowSliceIndex < targetShadowCount + && shadowSliceIndex < m_ShadowSettings.maxShadowCastingLights) + { + var resolutionRequest = atlasLayout.GetSliceShadowResolutionRequest(visibleLightIndex, 0); + int resolution = Mathf.Clamp(resolutionRequest.allocatedResolution, AreaShadowUtils.MinimalAreaLightShadowResolution(), m_ShadowSettings.shadowAtlasResolution); + + if (TryComputeAreaLightShadowSlice(visibleLight, visibleLightIndex, resolution, out var viewMatrix, out var projMatrix, out var splitData, out var shadowTransform)) + { + // Store shadow slice data using shadowSliceIndex for rendering + ref ShadowSliceData slice = ref m_AreaLightsShadowSlices[shadowSliceIndex]; + slice.viewMatrix = viewMatrix; + slice.projectionMatrix = projMatrix; + slice.splitData = splitData; + slice.offsetX = resolutionRequest.offsetX; + slice.offsetY = resolutionRequest.offsetY; + slice.resolution = resolution; + slice.shadowTransform = shadowTransform; + + float shadowStrength = light.shadowStrength; + + // Store shadow parameters using areaLightIndex (matches BGAreaLightManager index) + // x: shadowStrength, y: softShadows (1.0), z: lightType (0.0 = Spot-like), w: areaLightIndex + m_AreaLightIndexToShadowParams[areaLightIndex] = new Vector4(shadowStrength, 1f, 0f, (float)areaLightIndex); + m_AreaLightShadowSliceIndexTo_WorldShadowMatrix[areaLightIndex] = shadowTransform; + + // Map shadowSliceIndex to areaLightIndex for rendering loop + m_ShadowSliceToAreaLightIndex.Add((short)areaLightIndex); + m_VisibleLightIndexToIsCastingShadows[visibleLightIndex] = true; + + shadowSliceIndex++; + } + } + + areaLightIndex++; + } + + m_ValidShadowCastingLightsCount = shadowSliceIndex; + + // Clear remaining entries + for (int i = areaLightIndex; i < m_AreaLightShadowSliceIndexTo_WorldShadowMatrix.Length; ++i) + { + m_AreaLightShadowSliceIndexTo_WorldShadowMatrix[i] = Matrix4x4.identity; + m_AreaLightIndexToShadowParams[i] = Vector4.zero; + } + + if (m_ValidShadowCastingLightsCount <= 0) + { + m_CreateEmptyShadowmap = true; + m_ShadowSliceToAreaLightIndex.Clear(); + m_EmptyShadowmapNeedsClear = true; + AllocateShadowmapIfNeeded(); + return; + } + + m_CreateEmptyShadowmap = false; + m_EmptyShadowmapNeedsClear = true; + + float oneOverAtlasWidth = 1f / m_RenderTargetWidth; + float oneOverAtlasHeight = 1f / m_RenderTargetHeight; + + // Apply atlas transform to shadow matrices + for (int i = 0; i < shadowSliceIndex; ++i) + { + int areaLightIdx = m_ShadowSliceToAreaLightIndex[i]; + ref ShadowSliceData slice = ref m_AreaLightsShadowSlices[i]; + + Matrix4x4 sliceTransform = Matrix4x4.identity; + sliceTransform.m00 = slice.resolution * oneOverAtlasWidth; + sliceTransform.m11 = slice.resolution * oneOverAtlasHeight; + sliceTransform.m03 = slice.offsetX * oneOverAtlasWidth; + sliceTransform.m13 = slice.offsetY * oneOverAtlasHeight; + + Matrix4x4 worldToShadow = sliceTransform * slice.shadowTransform; + m_AreaLightShadowSliceIndexTo_WorldShadowMatrix[areaLightIdx] = worldToShadow; + slice.shadowTransform = worldToShadow; + } + + UpdateTextureDescriptorIfNeeded(); + AllocateShadowmapIfNeeded(); + } + + partial void AllocateShadowmapIfNeeded(); + + private void UpdateTextureDescriptorIfNeeded() + { + if ( m_AreaLightShadowDescriptor.width != m_RenderTargetWidth + || m_AreaLightShadowDescriptor.height != m_RenderTargetHeight + || m_AreaLightShadowDescriptor.depthBufferBits != k_ShadowmapBufferBits + || m_AreaLightShadowDescriptor.colorFormat != RenderTextureFormat.Shadowmap) + { + m_AreaLightShadowDescriptor = new RenderTextureDescriptor(m_RenderTargetWidth, m_RenderTargetHeight, RenderTextureFormat.Shadowmap, k_ShadowmapBufferBits); + } + } + + void PrepareAreaLightRequestedResolutions(NativeArray visibleLights, int mainLightIndex) + { + int requiredLength = visibleLights.Length; + if (s_AreaLightRequestedResolutions.Capacity < requiredLength) + { + s_AreaLightRequestedResolutions.Capacity = requiredLength; + } + + s_AreaLightRequestedResolutions.Clear(); + + int defaultResolution = Mathf.Max(m_ShadowSettings.shadowAtlasResolution, AreaShadowUtils.MinimalAreaLightShadowResolution()); + + for (int i = 0; i < visibleLights.Length; ++i) + { + ref readonly VisibleLight visibleLight = ref visibleLights.UnsafeElementAt(i); + bool isValidAreaLight = AreaShadowUtils.IsValidShadowCastingLight(visibleLight, mainLightIndex, i); + + int requestedResolution = 0; + + if (isValidAreaLight) + { + requestedResolution = defaultResolution; + + Light unityLight = visibleLight.light; + if (unityLight != null && BGAreaLightManager.TryGetRegisteredAreaLight(unityLight, out var areaLight)) + { + int custom = areaLight.GetCustomShadowResolution(); + if (custom > 0) + { + int minRes = AreaShadowUtils.MinimalAreaLightShadowResolution(); + requestedResolution = Mathf.Max(minRes, Mathf.NextPowerOfTwo(custom)); + } + } + } + + s_AreaLightRequestedResolutions.Add(requestedResolution); + } + } + + void EnsureMappingArrays(int visibleLightCount) + { + if (m_AreaLightIndexToVisibleLightIndex == null || m_AreaLightIndexToVisibleLightIndex.Length != m_LightSettings.maxAreaLights) + { + m_AreaLightIndexToVisibleLightIndex = new short[m_LightSettings.maxAreaLights]; + } + + if (m_VisibleLightIndexToAreaLightIndex == null || m_VisibleLightIndexToAreaLightIndex.Length != visibleLightCount) + { + m_VisibleLightIndexToAreaLightIndex = new short[visibleLightCount]; + } + + if (m_VisibleLightIndexToIsCastingShadows == null || m_VisibleLightIndexToIsCastingShadows.Length != visibleLightCount) + { + m_VisibleLightIndexToIsCastingShadows = new bool[visibleLightCount]; + } + + if (m_ShadowRendererLists == null || m_ShadowRendererLists.Length != m_ShadowSettings.maxShadowCastingLights) + { + m_ShadowRendererLists = new RendererList[m_ShadowSettings.maxShadowCastingLights]; + } + + EnsureMappingArraysRenderGraph(); + } + + partial void EnsureMappingArraysRenderGraph(); + + void ResetMappingArrays(int visibleLightCount) + { + if (m_VisibleLightIndexToAreaLightIndex != null) + { + for (int i = 0; i < m_VisibleLightIndexToAreaLightIndex.Length; ++i) + { + m_VisibleLightIndexToAreaLightIndex[i] = -1; + } + } + + if (m_VisibleLightIndexToIsCastingShadows != null) + { + Array.Clear(m_VisibleLightIndexToIsCastingShadows, 0, m_VisibleLightIndexToIsCastingShadows.Length); + } + + if (m_AreaLightIndexToVisibleLightIndex != null) + { + for (int i = 0; i < m_AreaLightIndexToVisibleLightIndex.Length; ++i) + { + m_AreaLightIndexToVisibleLightIndex[i] = -1; + } + } + + if (m_ShadowRendererLists != null) + { + Array.Clear(m_ShadowRendererLists, 0, m_ShadowRendererLists.Length); + } + + ResetMappingArraysRenderGraph(); + + m_ShadowSliceToAreaLightIndex.Clear(); + } + + partial void ResetMappingArraysRenderGraph(); + + bool TryComputeAreaLightShadowSlice(in VisibleLight visibleLight, int visibleLightIndex, int resolution, + out Matrix4x4 viewMatrix, out Matrix4x4 projMatrix, out ShadowSplitData splitData, out Matrix4x4 shadowTransform) + { + viewMatrix = Matrix4x4.identity; + projMatrix = Matrix4x4.identity; + splitData = new ShadowSplitData(); + shadowTransform = Matrix4x4.identity; + + Light unityLight = visibleLight.light; + + if (unityLight == null) + { + return false; + } + + if (!AreaShadowUtils.TryGetAreaLightParameters(unityLight, out float areaLightShadowCone, + out Vector2 areaSize)) + { + return false; + } + + float forwardOffset = AreaShadowUtils.GetAreaLightOffsetForShadows(areaSize, areaLightShadowCone); + + float normalBias; + float nearPlane; + if (BGAreaLightManager.TryGetRegisteredAreaLight(unityLight, out var areaLightComp)) + { + normalBias = areaLightComp.GetShadowNormalBias(); + nearPlane = areaLightComp.GetShadowNearPlane(); + } + else + { + normalBias = unityLight.shadowNormalBias; + nearPlane = unityLight.shadowNearPlane; + } + + AreaShadowUtils.ExtractRectangleAreaLightMatrix( + visibleLight, + forwardOffset, + areaLightShadowCone, + nearPlane, + areaSize, + resolution, + normalBias, + SystemInfo.usesReversedZBuffer, + out shadowTransform, + out viewMatrix, + out projMatrix, + out splitData); + + return true; + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.cs.meta new file mode 100644 index 00000000..cbbc451f --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3f059a5dc5b3b584b82d9a7b518cb9c0 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightingPass.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightsShadowAtlasLayout.cs b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightsShadowAtlasLayout.cs new file mode 100644 index 00000000..bffeaf64 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightsShadowAtlasLayout.cs @@ -0,0 +1,383 @@ +using System; +using System.Collections.Generic; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace BadDog.Rendering.AreaLight +{ + internal struct AreaLightsShadowAtlasLayout + { + internal struct ShadowResolutionRequest + { + public ushort visibleLightIndex; + public ushort requestedResolution; + public ushort offsetX; // x coordinate of the square area allocated in the atlas for this shadow map + public ushort offsetY; // y coordinate of the square area allocated in the atlas for this shadow map + public ushort allocatedResolution; // width of the square area allocated in the atlas for this shadow map + } + + // Static fields used to avoid GC allocs of intermediate computations + static List s_UnusedAtlasSquareAreas; // This list tracks space available in the atlas + static List s_ShadowResolutionRequests; // intermediate array used to compute the final resolution of each shadow slice rendered in the frame + static float[] s_VisibleLightIndexToCameraSquareDistance; // stores for each shadowed additional light its (squared) distance to camera ; used to sub-sort shadow requests according to how close their casting light is + static Func s_CompareShadowResolutionRequest; + static ShadowResolutionRequest[] s_SortedShadowResolutionRequests; + + NativeArray m_SortedShadowResolutionRequests; + NativeArray m_VisibleLightIndexToSortedShadowResolutionRequestsFirstSliceIndex; // for each visible light, store the index of its first shadow slice in m_SortedShadowResolutionRequests (for quicker access) + int m_TotalShadowSlicesCount; + int m_TotalShadowResolutionRequestCount; + bool m_TooManyShadowMaps; + int m_ShadowSlicesScaleFactor; + int m_AtlasSize; + + public AreaLightsShadowAtlasLayout(LightData lightData, ShadowData shadowData, CameraData cameraData, int maxShadowCastingLights) + : this(lightData, shadowData, cameraData, null, maxShadowCastingLights, 0) + { + } + + public AreaLightsShadowAtlasLayout(LightData lightData, ShadowData shadowData, CameraData cameraData, List overrideRequestedResolutions, int maxShadowCastingLights, int customAtlasSize = 0) + { + NativeArray visibleLights = lightData.visibleLights; + int numberOfVisibleLights = visibleLights.Length; + + if (s_UnusedAtlasSquareAreas == null) + { + s_UnusedAtlasSquareAreas = new List(); + } + + if (s_ShadowResolutionRequests == null) + { + s_ShadowResolutionRequests = new List(); + } + + if (s_VisibleLightIndexToCameraSquareDistance == null || s_VisibleLightIndexToCameraSquareDistance.Length < numberOfVisibleLights) + { + s_VisibleLightIndexToCameraSquareDistance = new float[numberOfVisibleLights]; + } + + if (s_CompareShadowResolutionRequest == null) + { + s_CompareShadowResolutionRequest = CreateCompareShadowResolutionRequesPredicate(); + } + + int newCapacity = maxShadowCastingLights; + + if (s_UnusedAtlasSquareAreas.Capacity < newCapacity) + { + s_UnusedAtlasSquareAreas.Capacity = newCapacity; + } + + if (s_ShadowResolutionRequests.Count < numberOfVisibleLights) + { + s_ShadowResolutionRequests.Capacity = numberOfVisibleLights; + int diff = numberOfVisibleLights - s_ShadowResolutionRequests.Count + 1; + for (int i = 0; i < diff; i++) + { + s_ShadowResolutionRequests.Add(new ShadowResolutionRequest()); + } + } + + s_UnusedAtlasSquareAreas.Clear(); + + ushort totalShadowResolutionRequestsCount = 0; // Number of shadow slices that we would need for all shadowed area lights in the scene. We might have to ignore some of those requests if they do not fit in the shadow atlas. + for (int visibleLightIndex = 0; visibleLightIndex < visibleLights.Length; ++visibleLightIndex) + { + // Skip main directional light as it is not packed into the shadow atlas + if (visibleLightIndex == lightData.mainLightIndex) + { + s_VisibleLightIndexToCameraSquareDistance[visibleLightIndex] = float.MaxValue; + continue; + } + + ref readonly VisibleLight vl = ref visibleLights.UnsafeElementAt(visibleLightIndex); + Light light = vl.light; + if (!AreaShadowUtils.IsValidShadowCastingLight(vl, lightData.mainLightIndex, visibleLightIndex)) + { + s_VisibleLightIndexToCameraSquareDistance[visibleLightIndex] = float.MaxValue; + continue; + } + + ushort visibleLightIndexUshort = (ushort)visibleLightIndex; + + ushort requestedResolution = 0; + + if (overrideRequestedResolutions != null && overrideRequestedResolutions.Count == numberOfVisibleLights) + { + requestedResolution = (ushort)overrideRequestedResolutions[visibleLightIndex]; + } + else if (shadowData.resolution != null && shadowData.resolution.Count == numberOfVisibleLights) + { + requestedResolution = (ushort)shadowData.resolution[visibleLightIndex]; + } + else + { + requestedResolution = 0; + } + + if (totalShadowResolutionRequestsCount >= s_ShadowResolutionRequests.Count) + { + s_ShadowResolutionRequests.Add(new ShadowResolutionRequest()); + } + + ShadowResolutionRequest request = s_ShadowResolutionRequests[totalShadowResolutionRequestsCount]; + request.visibleLightIndex = visibleLightIndexUshort; + request.requestedResolution = requestedResolution; + s_ShadowResolutionRequests[totalShadowResolutionRequestsCount] = request; + totalShadowResolutionRequestsCount++; + + // mark this light as casting shadows + s_VisibleLightIndexToCameraSquareDistance[visibleLightIndex] = (cameraData.worldSpaceCameraPos - light.transform.position).sqrMagnitude; + } + + if (s_SortedShadowResolutionRequests == null || s_SortedShadowResolutionRequests.Length < totalShadowResolutionRequestsCount) + { + s_SortedShadowResolutionRequests = new ShadowResolutionRequest[totalShadowResolutionRequestsCount]; + } + + for (int i = 0; i < totalShadowResolutionRequestsCount; ++i) + { + s_SortedShadowResolutionRequests[i] = s_ShadowResolutionRequests[i]; + } + + // Sort shadow requests by priority (resolution, soft shadow, distance to camera, etc.) + InsertionSort(s_SortedShadowResolutionRequests, 0, totalShadowResolutionRequestsCount); + + m_SortedShadowResolutionRequests = new NativeArray(s_SortedShadowResolutionRequests, Allocator.Temp); + + // To avoid visual artifacts when there is not enough place in the atlas, we remove shadow slices that would be allocated a too small resolution. + // When using uniform buffers (non-SSBO path), m_AreaLightShadowSliceIndexTo_WorldShadowMatrix.Length maps to _BGAreaLightWorldToShadow in Shadows.hlsl + // We have to limit its size because uniform buffers cannot be higher than 64kb for some platforms. + int totalShadowSlicesCount = Math.Min(totalShadowResolutionRequestsCount, maxShadowCastingLights); // Number of shadow slices that we will actually be able to fit in the shadow atlas without causing visual artifacts. + int atlasSize = customAtlasSize > 0 ? customAtlasSize : shadowData.additionalLightsShadowmapWidth; + + // Find biggest end index in m_SortedShadowResolutionRequests array, under which all shadow requests can be allocated a big enough shadow atlas slot, to not cause rendering artifacts + bool allShadowsAfterStartIndexHaveEnoughResolution = false; + int estimatedScaleFactor = 1; + while (!allShadowsAfterStartIndexHaveEnoughResolution && totalShadowSlicesCount > 0) + { + ShadowResolutionRequest request = m_SortedShadowResolutionRequests[totalShadowSlicesCount - 1]; + estimatedScaleFactor = EstimateScaleFactorNeededToFitAllShadowsInAtlas(m_SortedShadowResolutionRequests, totalShadowSlicesCount, atlasSize); + + // check if resolution of the least priority shadow slice request would be acceptable + if (request.requestedResolution >= estimatedScaleFactor * AreaShadowUtils.MinimalAreaLightShadowResolution()) + { + allShadowsAfterStartIndexHaveEnoughResolution = true; + } + else // Skip shadow requests for this light ; their resolution is too small to look any good + { + totalShadowSlicesCount--; + } + } + + for (int sortedArrayIndex = totalShadowSlicesCount; sortedArrayIndex < m_SortedShadowResolutionRequests.Length; ++sortedArrayIndex) + { + m_SortedShadowResolutionRequests[sortedArrayIndex] = default; // Reset entries that we cannot fit in the atlas + } + + m_VisibleLightIndexToSortedShadowResolutionRequestsFirstSliceIndex = new NativeArray(visibleLights.Length, Allocator.Temp); + + // Reset the reverse lookup array + for (int visibleLightIndex = 0; visibleLightIndex < m_VisibleLightIndexToSortedShadowResolutionRequestsFirstSliceIndex.Length; ++visibleLightIndex) + { + m_VisibleLightIndexToSortedShadowResolutionRequestsFirstSliceIndex[visibleLightIndex] = -1; + } + + // Update the reverse lookup array (starting from the end of the array, in order to use index of slice#0 in case a same visibleLight has several shadowSlices) + for (int sortedArrayIndex = totalShadowSlicesCount - 1; sortedArrayIndex >= 0; --sortedArrayIndex) + { + int visibleLightIndex = s_SortedShadowResolutionRequests[sortedArrayIndex].visibleLightIndex; + m_VisibleLightIndexToSortedShadowResolutionRequestsFirstSliceIndex[visibleLightIndex] = sortedArrayIndex; + } + + // Assigns to each of the first totalShadowSlicesCount items in m_SortedShadowResolutionRequests a location in the shadow atlas based on requested resolutions. + // If necessary, scales down shadow maps active in the frame, to make all of them fit in the atlas. + bool allShadowSlicesFitInAtlas = false; + bool tooManyShadows = false; + int shadowSlicesScaleFactor = estimatedScaleFactor; + + while (!allShadowSlicesFitInAtlas && !tooManyShadows) + { + s_UnusedAtlasSquareAreas.Clear(); + s_UnusedAtlasSquareAreas.Add(new RectInt(0, 0, atlasSize, atlasSize)); + allShadowSlicesFitInAtlas = true; + + for (int shadowRequestIndex = 0; shadowRequestIndex < totalShadowSlicesCount; ++shadowRequestIndex) + { + var resolution = m_SortedShadowResolutionRequests[shadowRequestIndex].requestedResolution / shadowSlicesScaleFactor; + + if (resolution < AreaShadowUtils.MinimalAreaLightShadowResolution()) + { + tooManyShadows = true; + break; + } + + bool foundSpaceInAtlas = false; + + // Try to find free space in the atlas + for (int unusedAtlasSquareAreaIndex = 0; unusedAtlasSquareAreaIndex < s_UnusedAtlasSquareAreas.Count; ++unusedAtlasSquareAreaIndex) + { + RectInt atlasArea = s_UnusedAtlasSquareAreas[unusedAtlasSquareAreaIndex]; + int atlasAreaWidth = atlasArea.width; + if (atlasAreaWidth < resolution) + { + continue; + } + + int atlasAreaHeight = atlasArea.height; + int atlasAreaX = atlasArea.x; + int atlasAreaY = atlasArea.y; + + // we can use this atlas area for the shadow request + ref ShadowResolutionRequest shadowRequest = ref m_SortedShadowResolutionRequests.UnsafeElementAtMutable(shadowRequestIndex); + shadowRequest.offsetX = (ushort)atlasAreaX; + shadowRequest.offsetY = (ushort)atlasAreaY; + shadowRequest.allocatedResolution = (ushort)resolution; + + // this atlas space is not available anymore, so remove it from the list + s_UnusedAtlasSquareAreas.RemoveAt(unusedAtlasSquareAreaIndex); + + // make sure to split space so that the rest of this square area can be used + int remainingShadowRequestsCount = totalShadowSlicesCount - shadowRequestIndex - 1; // (no need to add more than that) + int newSquareAreasCount = 0; + int newSquareAreaWidth = resolution; // we split the area in squares of same size + int newSquareAreaHeight = resolution; + int newSquareAreaX = atlasAreaX; + int newSquareAreaY = atlasAreaY; + + while (newSquareAreasCount < remainingShadowRequestsCount) + { + newSquareAreaX += newSquareAreaWidth; + if (newSquareAreaX + newSquareAreaWidth > (atlasAreaX + atlasAreaWidth)) + { + newSquareAreaX = atlasAreaX; + newSquareAreaY += newSquareAreaHeight; + if (newSquareAreaY + newSquareAreaHeight > (atlasAreaY + atlasAreaHeight)) + { + break; + } + } + + // replace the space we removed previously by new smaller squares (inserting them in this order ensures shadow maps will be packed at the side of the atlas, without gaps) + s_UnusedAtlasSquareAreas.Insert(unusedAtlasSquareAreaIndex + newSquareAreasCount, new RectInt(newSquareAreaX, newSquareAreaY, newSquareAreaWidth, newSquareAreaHeight)); + ++newSquareAreasCount; + } + + foundSpaceInAtlas = true; + break; + } + + if (!foundSpaceInAtlas) + { + allShadowSlicesFitInAtlas = false; + break; + } + } + + if (!allShadowSlicesFitInAtlas && !tooManyShadows) + { + shadowSlicesScaleFactor *= 2; + } + } + + m_TooManyShadowMaps = tooManyShadows; + m_ShadowSlicesScaleFactor = shadowSlicesScaleFactor; + m_TotalShadowSlicesCount = totalShadowSlicesCount; + m_TotalShadowResolutionRequestCount = totalShadowResolutionRequestsCount; + m_AtlasSize = atlasSize; + } + + public int GetTotalShadowSlicesCount() => m_TotalShadowSlicesCount; + + public int GetTotalShadowResolutionRequestCount() => m_TotalShadowResolutionRequestCount; + + public bool HasTooManyShadowMaps() => m_TooManyShadowMaps; + + public int GetShadowSlicesScaleFactor() => m_ShadowSlicesScaleFactor; + + public int GetAtlasSize() => m_AtlasSize; + + public bool HasSpaceForLight(int originalVisibleLightIndex) + { + return m_VisibleLightIndexToSortedShadowResolutionRequestsFirstSliceIndex[originalVisibleLightIndex] != -1; + } + + public ShadowResolutionRequest GetSortedShadowResolutionRequest(int sortedShadowResolutionRequestIndex) + { + return m_SortedShadowResolutionRequests[sortedShadowResolutionRequestIndex]; + } + + public ShadowResolutionRequest GetSliceShadowResolutionRequest(int originalVisibleLightIndex, int sliceIndex) + { + int sortedShadowResolutionRequestIndex = m_VisibleLightIndexToSortedShadowResolutionRequestsFirstSliceIndex[originalVisibleLightIndex]; + return m_SortedShadowResolutionRequests[sortedShadowResolutionRequestIndex]; + } + + public static void ClearStaticCaches() + { + s_UnusedAtlasSquareAreas = null; + s_ShadowResolutionRequests = null; + s_VisibleLightIndexToCameraSquareDistance = null; + s_CompareShadowResolutionRequest = null; + s_SortedShadowResolutionRequests = null; + } + + static int EstimateScaleFactorNeededToFitAllShadowsInAtlas(in NativeArray shadowResolutionRequests, int endIndex, int atlasSize) + { + long totalTexelsInShadowAtlas = atlasSize * atlasSize; + + long totalTexelsInShadowRequests = 0; + for (int shadowRequestIndex = 0; shadowRequestIndex < endIndex; ++shadowRequestIndex) + { + totalTexelsInShadowRequests += shadowResolutionRequests[shadowRequestIndex].requestedResolution * shadowResolutionRequests[shadowRequestIndex].requestedResolution; + } + + int estimatedScaleFactor = 1; + while (totalTexelsInShadowRequests > totalTexelsInShadowAtlas * estimatedScaleFactor * estimatedScaleFactor) + { + estimatedScaleFactor *= 2; + } + + return estimatedScaleFactor; + } + + // Sort array in decreasing requestedResolution order, + // sub-sorting in light distance to camera + // then grouping in increasing visibleIndex + static Func CreateCompareShadowResolutionRequesPredicate() + { + return (ShadowResolutionRequest curr, ShadowResolutionRequest other) => + { + return (((curr.requestedResolution > other.requestedResolution) + || (curr.requestedResolution == other.requestedResolution && s_VisibleLightIndexToCameraSquareDistance[curr.visibleLightIndex] < s_VisibleLightIndexToCameraSquareDistance[other.visibleLightIndex]) + || (curr.requestedResolution == other.requestedResolution && s_VisibleLightIndexToCameraSquareDistance[curr.visibleLightIndex] == s_VisibleLightIndexToCameraSquareDistance[other.visibleLightIndex] && curr.visibleLightIndex < other.visibleLightIndex))) + ? -1 : 1; + }; + } + + static void InsertionSort(ShadowResolutionRequest[] array, int startIndex, int lastIndex) + { + int i = startIndex + 1; + + while (i < lastIndex) + { + var curr = array[i]; + int j = i - 1; + + // Sort in priority order using the comparison function + while ((j >= 0) && s_CompareShadowResolutionRequest(curr, array[j]) < 0) + { + array[j + 1] = array[j]; + j--; + } + + array[j + 1] = curr; + i++; + } + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightsShadowAtlasLayout.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightsShadowAtlasLayout.cs.meta new file mode 100644 index 00000000..7312f723 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightsShadowAtlasLayout.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9883d51b2827fc540ab57491ab8a6346 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaLightsShadowAtlasLayout.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaShadowUtils.cs b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaShadowUtils.cs new file mode 100644 index 00000000..76ffb03c --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaShadowUtils.cs @@ -0,0 +1,331 @@ +using Unity.Mathematics; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace BadDog.Rendering.AreaLight +{ + public static class AreaShadowUtils + { + internal const int k_MinimumAreaLightShadowResolution = 16; + internal const float k_Sqrt2 = 1.4142135623730950488016887242097f; + + public const float k_DefaultAreaLightShadowCone = 120.0f; + public const float k_MinAreaLightShadowCone = 90.0f; + public const float k_MaxAreaLightShadowCone = 179.0f; + public const float k_MinShadowNearPlane = 0.01f; + public const float k_MaxShadowNearPlane = 10.0f; + + public static bool IsValidShadowCastingLight(LightData lightData, int index, LightType lightType, + LightShadows lightShadows, float shadowStrength) + { + if (index == lightData.mainLightIndex) + { + return false; + } + + if (lightType != LightType.Rectangle) + { + return false; + } + + return lightShadows != LightShadows.None && shadowStrength > 0f; + } + + public static bool IsValidShadowCastingLight(in VisibleLight visibleLight, int mainLightIndex, int visibleLightIndex) + { + if (visibleLightIndex == mainLightIndex) + { + return false; + } + + if (visibleLight.lightType != LightType.Rectangle) + { + return false; + } + + Light light = visibleLight.light; + if (!BGAreaLightManager.TryGetRegisteredAreaLight(light, out _)) + { + return false; + } + + return CanLightCastShadows(light); + } + + public static bool CanLightCastShadows(Light light) + { + if (light == null) + { + return false; + } + + return light.shadows != LightShadows.None && light.shadowStrength > 0f; + } + + public static int MinimalAreaLightShadowResolution() + { + return k_MinimumAreaLightShadowResolution; + } + + public static bool TryGetAreaLightParameters(Light light, out float shadowCone, out Vector2 areaSize) + { + shadowCone = k_DefaultAreaLightShadowCone; + areaSize = Vector2.one; + + if (light == null || light.type != LightType.Rectangle) + { + return false; + } + + if (!BGAreaLightManager.TryGetRegisteredAreaLight(light, out var areaLight)) + { + return false; + } + + areaSize = areaLight.GetSize(); + shadowCone = Mathf.Clamp(areaLight.GetShadowCone(), k_MinAreaLightShadowCone, k_MaxAreaLightShadowCone); + + return true; + } + + public static float GetAreaLightOffsetForShadows(Vector2 areaSize, float coneAngle) + { + float halfMinSize = Mathf.Min(areaSize.x, areaSize.y) * 0.5f; + float halfAngle = coneAngle * 0.5f; + float cotanHalfAngle = 1.0f / Mathf.Tan(halfAngle * Mathf.Deg2Rad); + float offset = halfMinSize * cotanHalfAngle; + + return -offset; + } + + public static void ExtractRectangleAreaLightMatrix( + VisibleLight visibleLight, + float forwardOffset, + float areaLightShadowCone, + float shadowNearPlane, + Vector2 areaSize, + int shadowResolution, + float normalBiasMax, + bool reverseZ, + out Matrix4x4 shadowMatrix, + out Matrix4x4 viewMatrix, + out Matrix4x4 projMatrix, + out ShadowSplitData splitData) + { + Vector2 viewportSize = new Vector2(shadowResolution, shadowResolution); + float aspectRatio = Mathf.Approximately(areaSize.y, 0f) ? 1.0f : areaSize.x / areaSize.y; + float spotAngle = areaLightShadowCone; + visibleLight.spotAngle = spotAngle; + float guardAngle = CalcGuardAnglePerspective(visibleLight.spotAngle, viewportSize.x, 1, normalBiasMax, + 180.0f - visibleLight.spotAngle); + + shadowMatrix = ExtractSpotLightMatrixInternal( + visibleLight, + forwardOffset, + visibleLight.spotAngle, + shadowNearPlane, + guardAngle, + aspectRatio, + reverseZ, + out viewMatrix, + out projMatrix, + out splitData); + } + + public static Matrix4x4 GetShadowTransform(Matrix4x4 proj, Matrix4x4 view) + { + if (SystemInfo.usesReversedZBuffer) + { + proj.m20 = -proj.m20; + proj.m21 = -proj.m21; + proj.m22 = -proj.m22; + proj.m23 = -proj.m23; + } + + Matrix4x4 worldToShadow = proj * view; + + Matrix4x4 textureScaleAndBias = Matrix4x4.identity; + textureScaleAndBias.m00 = 0.5f; + textureScaleAndBias.m11 = 0.5f; + textureScaleAndBias.m22 = 0.5f; + textureScaleAndBias.m03 = 0.5f; + textureScaleAndBias.m13 = 0.5f; + textureScaleAndBias.m23 = 0.5f; + + return textureScaleAndBias * worldToShadow; + } + + internal static bool FastApproximately(float a, float b) + { + return Mathf.Abs(a - b) < 0.000001f; + } + + internal static bool FastApproximately(Vector4 a, Vector4 b) + { + return FastApproximately(a.x, b.x) + && FastApproximately(a.y, b.y) + && FastApproximately(a.z, b.z) + && FastApproximately(a.w, b.w); + } + + + static Matrix4x4 ExtractSpotLightMatrixInternal( + VisibleLight vl, + float forwardOffset, + float spotAngle, + float nearPlane, + float guardAngle, + float aspectRatio, + bool reverseZ, + out Matrix4x4 view, + out Matrix4x4 proj, + out ShadowSplitData splitData) + { + splitData = new ShadowSplitData(); + splitData.cullingSphere.Set(0.0f, 0.0f, 0.0f, float.NegativeInfinity); + splitData.cullingPlaneCount = 6; + + Matrix4x4 localToWorldOffset = vl.localToWorldMatrix; + CoreMatrixUtils.MatrixTimesTranslation(ref localToWorldOffset, Vector3.forward * forwardOffset); + view = localToWorldOffset.inverse; + view.m20 *= -1; + view.m21 *= -1; + view.m22 *= -1; + view.m23 *= -1; + + proj = ExtractSpotLightProjectionMatrix(vl.range - forwardOffset, spotAngle, nearPlane - forwardOffset, + aspectRatio, guardAngle); + + Matrix4x4 deviceProjMatrix = GetGPUProjectionMatrix(proj, false, reverseZ); + Matrix4x4 deviceViewProj = CoreMatrixUtils.MultiplyPerspectiveMatrix(deviceProjMatrix, view); + + splitData.cullingMatrix = deviceViewProj; + splitData.cullingNearPlane = nearPlane - forwardOffset; + + return GetShadowTransform(proj, view); + } + + static float CalcGuardAnglePerspective(float angleInDeg, float resolution, float filterWidth, + float normalBiasMax, float guardAngleMaxInDeg) + { + float angleInRad = angleInDeg * 0.5f * Mathf.Deg2Rad; + float res = 2.0f / resolution; + float texelSize = math.cos(angleInRad) * res; + float beta = normalBiasMax * texelSize * k_Sqrt2; + float guardAngle = math.atan(beta); + texelSize = math.tan(angleInRad + guardAngle) * res; + guardAngle = math.atan((resolution + math.ceil(filterWidth)) * texelSize * 0.5f) * 2.0f * Mathf.Rad2Deg - + angleInDeg; + guardAngle *= 2.0f; + + return guardAngle < guardAngleMaxInDeg ? guardAngle : guardAngleMaxInDeg; + } + + static Matrix4x4 ExtractSpotLightProjectionMatrix(float range, float spotAngle, float nearPlane, + float aspectRatio, float guardAngle) + { + float fov = spotAngle + guardAngle; + float nearZ = Mathf.Max(nearPlane, k_MinShadowNearPlane); + + float e = 1.0f / Mathf.Tan(fov / 180.0f * Mathf.PI / 2.0f); + float a = aspectRatio; + float n = nearZ; + float f = n + range; + + Matrix4x4 mat = new Matrix4x4(); + + if (a < 1) + { + mat.m00 = e; + mat.m11 = e * a; + } + else + { + mat.m00 = e / a; + mat.m11 = e; + } + + mat.m22 = -(f + n) / (f - n); + mat.m23 = -2 * f * n / (f - n); + mat.m32 = -1; + + return mat; + } + + static Matrix4x4 GetGPUProjectionMatrix(Matrix4x4 projectionMatrix, bool invertY, bool reverseZ) + { + float4x4 gpuProjectionMatrix = math.transpose(projectionMatrix); + if (invertY) + { + gpuProjectionMatrix.c1 = -gpuProjectionMatrix.c1; + } + + float multiplier = reverseZ ? -0.5f : 0.5f; + gpuProjectionMatrix.c2 = gpuProjectionMatrix.c2 * multiplier + gpuProjectionMatrix.c3 * 0.5f; + + return math.transpose(gpuProjectionMatrix); + } + + internal static Vector4 GetRectangleLightShadowBias(ref VisibleLight shadowLight, ref ShadowData shadowData, float shadowResolution, float nearPlane, AreaLightShadowSettings.BGAreaLightShadowMode shadowFilterMode) + { + Light unityLight = shadowLight.light; + + float userDepthBias = 0.0f; + float userNormalBias = 0.0f; + + if (unityLight != null) + { + userDepthBias = unityLight.shadowBias; + userNormalBias = unityLight.shadowNormalBias; + + if (BGAreaLightManager.TryGetRegisteredAreaLight(unityLight, out var areaLight)) + { + userDepthBias = areaLight.GetShadowDepthBias(); + userNormalBias = areaLight.GetShadowNormalBias(); + } + } + + float spotLikeAngle = k_DefaultAreaLightShadowCone; + Vector2 size = Vector2.one; + if (TryGetAreaLightParameters(shadowLight.light, out float areaCone, out size)) + { + spotLikeAngle = areaCone; + } + + float aspectRatio = Mathf.Approximately(size.y, 0f) ? 1.0f : (size.x / size.y); + float guardAngle = CalcGuardAnglePerspective(spotLikeAngle, shadowResolution, 1, userNormalBias, 180.0f - spotLikeAngle); + + float actualNearPlane = Mathf.Max(nearPlane, k_MinShadowNearPlane); + Matrix4x4 proj = ExtractSpotLightProjectionMatrix( + shadowLight.range, + spotLikeAngle, + actualNearPlane, + aspectRatio, + guardAngle); + Matrix4x4 deviceProjectionYFlip = GetGPUProjectionMatrix(proj, true, SystemInfo.usesReversedZBuffer); + + float worldTexelSize = 2.0f / Mathf.Max(deviceProjectionYFlip.m00, 1e-6f) / Mathf.Max(shadowResolution, 1.0f) * k_Sqrt2; + float depthBias = -userDepthBias * worldTexelSize; + float normalBias = -userNormalBias * worldTexelSize; + + if (shadowFilterMode != AreaLightShadowSettings.BGAreaLightShadowMode.Off) + { + float kernelRadius = shadowFilterMode switch + { + AreaLightShadowSettings.BGAreaLightShadowMode.PCF2x2 => 1.5f, // 2x2 PCF + AreaLightShadowSettings.BGAreaLightShadowMode.Tent5x5 => 2.5f, // 5x5 Tent + AreaLightShadowSettings.BGAreaLightShadowMode.Tent7x7 => 3.5f, // 7x7 Tent + AreaLightShadowSettings.BGAreaLightShadowMode.PCSS => 3.5f, // PCSS (similar to 7x7) + _ => 2.5f + }; + + depthBias *= kernelRadius; + normalBias *= kernelRadius; + } + + return new Vector4(depthBias, normalBias, (float)LightType.Rectangle, 0.0f); + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaShadowUtils.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaShadowUtils.cs.meta new file mode 100644 index 00000000..097ec2c4 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaShadowUtils.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 33d629c65edb99d4da2cecc5488d96e3 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Passes/AreaShadowUtils.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/NativeArrayExtensionsCompat.cs b/Packages/com.baddog.rendering.arealight/Runtime/Passes/NativeArrayExtensionsCompat.cs new file mode 100644 index 00000000..4ef5c6f5 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/NativeArrayExtensionsCompat.cs @@ -0,0 +1,24 @@ +using System.Runtime.CompilerServices; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; + +namespace BadDog.Rendering.AreaLight +{ + internal static class NativeArrayExtensionsCompat + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe ref readonly T UnsafeElementAt(this NativeArray array, int index) + where T : struct + { + return ref UnsafeUtility.ArrayElementAsRef(NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(array), index); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe ref T UnsafeElementAtMutable(this NativeArray array, int index) + where T : struct + { + return ref UnsafeUtility.ArrayElementAsRef(NativeArrayUnsafeUtility.GetUnsafePtr(array), index); + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Runtime/Passes/NativeArrayExtensionsCompat.cs.meta b/Packages/com.baddog.rendering.arealight/Runtime/Passes/NativeArrayExtensionsCompat.cs.meta new file mode 100644 index 00000000..430e2f5d --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/Passes/NativeArrayExtensionsCompat.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 52eb969895db2a54b8133d587dd9642f +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/Passes/NativeArrayExtensionsCompat.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Runtime/com.baddog.rendering.arealight.asmdef b/Packages/com.baddog.rendering.arealight/Runtime/com.baddog.rendering.arealight.asmdef new file mode 100644 index 00000000..e017f039 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/com.baddog.rendering.arealight.asmdef @@ -0,0 +1,19 @@ +{ + "name": "BadDog.Rendering.AreaLight", + "rootNamespace": "BadDog.Rendering.AreaLight", + "references": [ + "Unity.Collections", + "Unity.Mathematics", + "Unity.RenderPipelines.Core.Runtime", + "Unity.RenderPipelines.Universal.Runtime" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} diff --git a/Packages/com.baddog.rendering.arealight/Runtime/com.baddog.rendering.arealight.asmdef.meta b/Packages/com.baddog.rendering.arealight/Runtime/com.baddog.rendering.arealight.asmdef.meta new file mode 100644 index 00000000..8e608d9a --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Runtime/com.baddog.rendering.arealight.asmdef.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 9bf701283a989de4c83161abde817c9a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Runtime/com.baddog.rendering.arealight.asmdef + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples.meta b/Packages/com.baddog.rendering.arealight/Samples.meta new file mode 100644 index 00000000..10a1b626 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c6e7907893986a428f58b921b609991 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials.meta b/Packages/com.baddog.rendering.arealight/Samples/Materials.meta new file mode 100644 index 00000000..4edc73f9 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c0cb81da25719a34d8a6c361164f6735 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaLit.mat b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaLit.mat new file mode 100644 index 00000000..6bd6d076 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaLit.mat @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: BGAreaLit + m_Shader: {fileID: 4800000, guid: deab2e321dbdc8a469635b200f36c496, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.7798742, g: 0.7798742, b: 0.7798742, a: 1} + - _Color: {r: 0.7798742, g: 0.7798742, b: 0.7798742, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &5741221068931763247 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaLit.mat.meta b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaLit.mat.meta new file mode 100644 index 00000000..723a14d8 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaLit.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 5291f109eb34b11479bbfcd835a5253d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaLit.mat + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaSimpleLit.mat b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaSimpleLit.mat new file mode 100644 index 00000000..57733249 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaSimpleLit.mat @@ -0,0 +1,140 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: BGAreaSimpleLit + m_Shader: {fileID: 4800000, guid: 944f87dd0be44d4438c1ee0fb085c7fa, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossinessSource: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Shininess: 0 + - _Smoothness: 0.5 + - _SmoothnessSource: 0 + - _SmoothnessTextureChannel: 0 + - _SpecSource: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &8875036743527764093 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaSimpleLit.mat.meta b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaSimpleLit.mat.meta new file mode 100644 index 00000000..7be119af --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaSimpleLit.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 51d7d45c84b882d4c8020aa2ed98c54d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaSimpleLit.mat + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaTerrainLit.mat b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaTerrainLit.mat new file mode 100644 index 00000000..6097a141 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaTerrainLit.mat @@ -0,0 +1,203 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-838998727916957345 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: BGAreaTerrainLit + m_Shader: {fileID: 4800000, guid: a2f4843136c5e7c4f945fd88fa9b82de, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Control: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Mask0: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Mask1: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Mask2: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Mask3: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Normal0: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Normal1: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Normal2: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Normal3: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Splat0: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Splat1: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Splat2: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Splat3: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TerrainHolesTexture: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnableHeightBlend: 0 + - _EnableInstancedPerPixelNormal: 1 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _HeightTransition: 0 + - _Metallic: 0 + - _Metallic0: 0 + - _Metallic1: 0 + - _Metallic2: 0 + - _Metallic3: 0 + - _NumLayersCount: 1 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _Smoothness0: 0.5 + - _Smoothness1: 0.5 + - _Smoothness2: 0.5 + - _Smoothness3: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaTerrainLit.mat.meta b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaTerrainLit.mat.meta new file mode 100644 index 00000000..82637c2e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaTerrainLit.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 28c3e86320a80ae4fa28c969fe808cec +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Materials/BGAreaTerrainLit.mat + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/Fire.mat b/Packages/com.baddog.rendering.arealight/Samples/Materials/Fire.mat new file mode 100644 index 00000000..5ff0bfbd --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/Fire.mat @@ -0,0 +1,168 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-7548716085263921702 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Fire + m_Shader: {fileID: 4800000, guid: 0b2516ca234061647a5b31ac12e5f6cc, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _NORMALMAP + - _RECEIVE_SHADOWS_OFF + - _SURFACE_TYPE_TRANSPARENT + m_InvalidKeywords: + - _FLIPBOOKBLENDING_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 1 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: + - DepthOnly + - SHADOWCASTER + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: bcd0335adc1f19c439c38503da608994, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 02249df1810000541a98c7c56d1e0a40, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 2800000, guid: 3b7572d2f5e6df842b0e4813cd8c0825, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: d55de7d77af7bcc4983855bff86b5c6e, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 0 + - _BlendOp: 0 + - _BumpScale: 1 + - _CameraFadingEnabled: 0 + - _CameraFarFadeDistance: 2 + - _CameraNearFadeDistance: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _ColorMode: 0 + - _Cull: 0 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DistortionBlend: 0.5 + - _DistortionEnabled: 0 + - _DistortionStrength: 1 + - _DistortionStrengthScaled: 0 + - _DstBlend: 10 + - _DstBlendAlpha: 10 + - _EmissionEnabled: 0 + - _EnvironmentReflections: 1 + - _FlipbookBlending: 0 + - _FlipbookMode: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossinessSource: 0 + - _GlossyReflections: 1 + - _InvFade: 1 + - _LightingEnabled: 1 + - _Metallic: 0 + - _Mode: 2 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 0 + - _SampleGI: 0 + - _Shininess: 0 + - _Smoothness: 0 + - _SmoothnessSource: 0 + - _SmoothnessTextureChannel: 0 + - _SoftParticlesEnabled: 0 + - _SoftParticlesFarFadeDistance: 1 + - _SoftParticlesNearFadeDistance: 0 + - _SpecSource: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 5 + - _SrcBlendAlpha: 1 + - _Surface: 1 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 0 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0} + - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0.49569103, g: 0.029159654, b: 0.014028906, a: 1} + - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/Fire.mat.meta b/Packages/com.baddog.rendering.arealight/Samples/Materials/Fire.mat.meta new file mode 100644 index 00000000..52e46c93 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/Fire.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: f2ba43e93e3865d4ea80fc01da2aa44e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Materials/Fire.mat + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/Light.mat b/Packages/com.baddog.rendering.arealight/Samples/Materials/Light.mat new file mode 100644 index 00000000..fe1206fb --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/Light.mat @@ -0,0 +1,138 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Light + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 2 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &9445847853103717 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/Light.mat.meta b/Packages/com.baddog.rendering.arealight/Samples/Materials/Light.mat.meta new file mode 100644 index 00000000..3d4072f9 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/Light.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: c2ca8ac17e7161c4190b9bc419ee3355 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Materials/Light.mat + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/Wall.mat b/Packages/com.baddog.rendering.arealight/Samples/Materials/Wall.mat new file mode 100644 index 00000000..e0a5c0ba --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/Wall.mat @@ -0,0 +1,137 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Wall + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &4299090263972724277 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Materials/Wall.mat.meta b/Packages/com.baddog.rendering.arealight/Samples/Materials/Wall.mat.meta new file mode 100644 index 00000000..2f3c1170 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Materials/Wall.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 6ac19dba859e27940a69ed2b51d98d15 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Materials/Wall.mat + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Prefabs.meta b/Packages/com.baddog.rendering.arealight/Samples/Prefabs.meta new file mode 100644 index 00000000..7729da6d --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c2697ce6b5a15e40af0fc64a7767eaa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Samples/Prefabs/fire.prefab b/Packages/com.baddog.rendering.arealight/Samples/Prefabs/fire.prefab new file mode 100644 index 00000000..10611651 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Prefabs/fire.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c88b6cf2af75e2b4a00edb0a9db8c2e006bfc3efa1bbdd32af47cea15c93e0e +size 122222 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Prefabs/fire.prefab.meta b/Packages/com.baddog.rendering.arealight/Samples/Prefabs/fire.prefab.meta new file mode 100644 index 00000000..0c502aa4 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Prefabs/fire.prefab.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: fbb3e3e429f31a640bb393ba01af19e2 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Prefabs/fire.prefab + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes.meta b/Packages/com.baddog.rendering.arealight/Samples/Scenes.meta new file mode 100644 index 00000000..727be033 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 681e43a1aa1fe624283146baabada2a7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/New Terrain.asset b/Packages/com.baddog.rendering.arealight/Samples/Scenes/New Terrain.asset new file mode 100644 index 00000000..52792e9b --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/New Terrain.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81369e47cccbf6453270a87ac2f96072fee94d34adf849d9d7fbe92b0087543b +size 557360 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/New Terrain.asset.meta b/Packages/com.baddog.rendering.arealight/Samples/Scenes/New Terrain.asset.meta new file mode 100644 index 00000000..9e6b0334 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/New Terrain.asset.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: e915b7781e30f6f43a3ae2b4160b9af2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 15600000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scenes/New Terrain.asset + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/SampleSceneProfile.asset b/Packages/com.baddog.rendering.arealight/Samples/Scenes/SampleSceneProfile.asset new file mode 100644 index 00000000..f99cd3fb --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/SampleSceneProfile.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8003c286cd22558a720c2f66e2bd085eebad339bec16a537c4d4c563c23af5ea +size 3862 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/SampleSceneProfile.asset.meta b/Packages/com.baddog.rendering.arealight/Samples/Scenes/SampleSceneProfile.asset.meta new file mode 100644 index 00000000..7fc6fd08 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/SampleSceneProfile.asset.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 3f66fac8d0c73fe469a644b17d5a6442 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scenes/SampleSceneProfile.asset + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test.unity b/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test.unity new file mode 100644 index 00000000..2314159e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19827f178fb200159d30c6fdaf74092af325dd0bd135536f03d382e203a38345 +size 30828 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test.unity.meta b/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test.unity.meta new file mode 100644 index 00000000..36f2f8d7 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 6116086ed506d504e91804b16edb4a27 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scenes/Test.unity + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test02.unity b/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test02.unity new file mode 100644 index 00000000..4e7838ea --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test02.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1aada5bdcadf75c44674384788f476833401ad2f8eedc74f1b14dbafbe814de +size 53622 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test02.unity.meta b/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test02.unity.meta new file mode 100644 index 00000000..ed4b5558 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/Test02.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 4040530d08e057542841326e61f27754 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scenes/Test02.unity + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestLit.unity b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestLit.unity new file mode 100644 index 00000000..eeeb6d7c --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestLit.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d88766c8e66fbc6b06708cf8ce9bed5714c0dfe9c1dfe11e66592cf68028f7eb +size 39381 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestLit.unity.meta b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestLit.unity.meta new file mode 100644 index 00000000..95e2bd37 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestLit.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: f6195bf14fc5b0242be36e8f7c9e7de0 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scenes/TestLit.unity + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestParticleLit.unity b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestParticleLit.unity new file mode 100644 index 00000000..bc91fcfb --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestParticleLit.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:663008986d2ee71e432374cb262d38d651d9d6f2cdc3615e342f751b566cd310 +size 40190 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestParticleLit.unity.meta b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestParticleLit.unity.meta new file mode 100644 index 00000000..3edb68d0 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestParticleLit.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 10900add9f6294440bb2f4f679ab917d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scenes/TestParticleLit.unity + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSimpleLit.unity b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSimpleLit.unity new file mode 100644 index 00000000..749e05ca --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSimpleLit.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:adf629dca12e835aaf68b0af3041753799d738007e308567f5cf1c9350715839 +size 38374 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSimpleLit.unity.meta b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSimpleLit.unity.meta new file mode 100644 index 00000000..11fd619c --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSimpleLit.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 8557948f441ca554387b6678d32d5797 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSimpleLit.unity + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSpine.unity b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSpine.unity new file mode 100644 index 00000000..58f2332e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSpine.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77177c52beabec298148bb7fd03d8e8036dfe773c6a16c716a12897348b778f0 +size 44731 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSpine.unity.meta b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSpine.unity.meta new file mode 100644 index 00000000..991b5ecc --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSpine.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 79e4c677a24d47b4e9f1cbc34baed06f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scenes/TestSpine.unity + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestTerrainLit.unity b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestTerrainLit.unity new file mode 100644 index 00000000..4c0ea323 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestTerrainLit.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:029728b821502f16fa654457f44261772d890ece734c62327339d713356891d8 +size 39018 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestTerrainLit.unity.meta b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestTerrainLit.unity.meta new file mode 100644 index 00000000..e90e35a9 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scenes/TestTerrainLit.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 34aa5c87e98f21041a42019a9f280208 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scenes/TestTerrainLit.unity + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scripts.meta b/Packages/com.baddog.rendering.arealight/Samples/Scripts.meta new file mode 100644 index 00000000..d19ed3c6 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 81cfea8e048159d47888861b2ab8f227 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scripts/AreaLightTestPanel.cs b/Packages/com.baddog.rendering.arealight/Samples/Scripts/AreaLightTestPanel.cs new file mode 100644 index 00000000..f948c596 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scripts/AreaLightTestPanel.cs @@ -0,0 +1,321 @@ +using System; +using System.Reflection; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +using BadDog.Rendering.AreaLight; + +namespace BadDog.Rendering.AreaLight.Samples +{ + /// + /// AreaLight Test Panel for runtime testing and debugging + /// + public class AreaLightTestPanel : MonoBehaviour + { + [Header("UI Settings")] + [SerializeField] private Rect panelRect = new Rect(10, 10, 800, 500); + + [Header("FPS Settings")] + [SerializeField] private float fpsUpdateInterval = 0.5f; + + // FPS tracking + private float m_LastFpsUpdate; + private int m_FrameCount; + private float m_CurrentFps; + + // GUI styles + private GUIStyle m_WindowStyle; + private GUIStyle m_LabelStyle; + private GUIStyle m_ToggleStyle; + private GUIStyle m_ButtonStyle; + private bool m_StylesInitialized = false; + + // Shadow atlas resolution options + private static readonly int[] k_ShadowAtlasResolutions = { 256, 512, 1024, 2048, 4096, 8192 }; + private static readonly string[] k_ShadowAtlasResolutionLabels = { "256", "512", "1024", "2048", "4096", "8192" }; + private int m_ShadowAtlasResolutionIndex = 2; // Default 1024 + + private void Start() + { + InitializeFPSTracking(); + SetTargetFrameRate(); + InitializeShadowAtlasResolutionIndex(); + } + + private void Update() + { + UpdateFPS(); + } + + private void OnGUI() + { + InitializeStyles(); + // Fixed window that cannot be dragged + panelRect = GUILayout.Window(95279529, panelRect, DrawTestPanel, "AreaLight Test Panel", m_WindowStyle, GUILayout.Width(panelRect.width), GUILayout.Height(panelRect.height)); + } + + private void InitializeFPSTracking() + { + m_LastFpsUpdate = Time.time; + m_FrameCount = 0; + m_CurrentFps = 0f; + } + + private void SetTargetFrameRate() + { +#if UNITY_ANDROID || UNITY_IOS + // Set target frame rate to 60 for mobile platforms + Application.targetFrameRate = 60; +#endif + } + + private void UpdateFPS() + { + m_FrameCount++; + float currentTime = Time.time; + + if (currentTime - m_LastFpsUpdate >= fpsUpdateInterval) + { + m_CurrentFps = m_FrameCount / (currentTime - m_LastFpsUpdate); + m_FrameCount = 0; + m_LastFpsUpdate = currentTime; + } + } + + private void InitializeStyles() + { + if (m_StylesInitialized) + { + return; + } + + m_WindowStyle = new GUIStyle(GUI.skin.window) { fontSize = 38 }; + m_LabelStyle = new GUIStyle(GUI.skin.label) { fontSize = 32, wordWrap = true }; + m_ToggleStyle = new GUIStyle(GUI.skin.toggle) { fontSize = 32 }; + m_ButtonStyle = new GUIStyle(GUI.skin.button) { fontSize = 28 }; + + m_StylesInitialized = true; + } + + private void InitializeShadowAtlasResolutionIndex() + { + var areaLightInstance = GetActiveAreaLightInstance(); + if (areaLightInstance != null) + { + var shadowSettings = GetShadowSettings(areaLightInstance); + if (shadowSettings != null) + { + int currentResolution = shadowSettings.shadowAtlasResolution; + for (int i = 0; i < k_ShadowAtlasResolutions.Length; i++) + { + if (k_ShadowAtlasResolutions[i] == currentResolution) + { + m_ShadowAtlasResolutionIndex = i; + break; + } + } + } + } + } + + private void DrawTestPanel(int windowID) + { + GUILayout.BeginVertical(); + GUILayout.Space(10); + + DrawPerformanceSection(); + DrawControlsSection(); + + GUILayout.EndVertical(); + } + + private void DrawPerformanceSection() + { + GUILayout.Label("=== Performance ===", m_LabelStyle); + + Color originalColor = GUI.contentColor; + SetFPSColor(); + GUILayout.Label($"FPS: {m_CurrentFps:F1}", m_LabelStyle); + GUI.contentColor = originalColor; + + GUILayout.Space(10); + } + + private void SetFPSColor() + { + if (m_CurrentFps >= 60f) + { + GUI.contentColor = Color.green; + } + else if (m_CurrentFps >= 30f) + { + GUI.contentColor = Color.yellow; + } + else + { + GUI.contentColor = Color.red; + } + } + + private void DrawControlsSection() + { + GUILayout.Label("=== AreaLight Controls ===", m_LabelStyle); + + // Get AreaLight instance from URP asset + var areaLightInstance = GetActiveAreaLightInstance(); + if (areaLightInstance == null) + { + GUILayout.Label("AreaLight Feature not found", m_LabelStyle); + return; + } + + var lightSettings = GetLightSettings(areaLightInstance); + var shadowSettings = GetShadowSettings(areaLightInstance); + + if (lightSettings == null || shadowSettings == null) + { + GUILayout.Label("Failed to access AreaLight settings", m_LabelStyle); + return; + } + + // Light Settings + GUILayout.Label("--- Light Settings ---", m_LabelStyle); + DrawIntSlider("Max Area Lights", ref lightSettings.maxAreaLights, 0, 8); + + GUILayout.Space(10); + + // Shadow Settings + GUILayout.Label("--- Shadow Settings ---", m_LabelStyle); + + // Shadow Atlas Resolution (sync index first) + int currentResolution = shadowSettings.shadowAtlasResolution; + for (int i = 0; i < k_ShadowAtlasResolutions.Length; i++) + { + if (k_ShadowAtlasResolutions[i] == currentResolution) + { + m_ShadowAtlasResolutionIndex = i; + break; + } + } + + GUILayout.Label("Shadow Atlas Resolution:", m_LabelStyle); + int newIndex = GUILayout.SelectionGrid(m_ShadowAtlasResolutionIndex, k_ShadowAtlasResolutionLabels, 6, m_ButtonStyle); + if (newIndex != m_ShadowAtlasResolutionIndex) + { + m_ShadowAtlasResolutionIndex = newIndex; + shadowSettings.shadowAtlasResolution = k_ShadowAtlasResolutions[m_ShadowAtlasResolutionIndex]; + } + + DrawIntSlider("Max Shadow Casting Lights", ref shadowSettings.maxShadowCastingLights, 0, 8); + + GUILayout.Space(5); + + // Shadow Filter (enum dropdown simulation) + GUILayout.Label("Shadow Filter:", m_LabelStyle); + string[] filterOptions = { "Off", "PCF2x2", "Tent5x5", "Tent7x7", "PCSS" }; + int currentFilterIndex = (int)shadowSettings.shadowFilter; + int newFilterIndex = GUILayout.SelectionGrid(currentFilterIndex, filterOptions, 5, m_ButtonStyle); + if (newFilterIndex != currentFilterIndex) + { + shadowSettings.shadowFilter = (AreaLightShadowSettings.BGAreaLightShadowMode)newFilterIndex; + } + + GUILayout.Space(5); + + // PCSS Settings (only show when PCSS is selected) + if (shadowSettings.shadowFilter == AreaLightShadowSettings.BGAreaLightShadowMode.PCSS) + { + GUILayout.Label("--- PCSS Settings ---", m_LabelStyle); + DrawSlider("PCSS Shadow Softness", ref shadowSettings.pcssShadowSoftness, 0f, 32f); + DrawIntSlider("PCSS Blocker Sample Count", ref shadowSettings.pcssBlockerSampleCount, 4, 32); + DrawIntSlider("PCSS Filter Sample Count", ref shadowSettings.pcssFilterSampleCount, 4, 32); + } + } + + private void DrawSlider(string label, ref float value, float min, float max) + { + GUILayout.Label($"{label}: {value:F2}", m_LabelStyle); + // GUILayout.HorizontalSlider returns the current slider value + // Ensure slider has enough width to be interactive + value = GUILayout.HorizontalSlider(value, min, max, GUILayout.ExpandWidth(true), GUILayout.Height(20)); + } + + private void DrawIntSlider(string label, ref int value, int min, int max) + { + GUILayout.Label($"{label}: {value}", m_LabelStyle); + // Ensure slider has enough width to be interactive + float newValue = GUILayout.HorizontalSlider(value, min, max, GUILayout.ExpandWidth(true), GUILayout.Height(20)); + int intValue = Mathf.RoundToInt(newValue); + // Clamp to ensure value stays within bounds + value = Mathf.Clamp(intValue, min, max); + } + + private AreaLighting GetActiveAreaLightInstance() + { + var urpAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset; + if (urpAsset == null) + { + return null; + } + + var scriptableRendererData = GetScriptableRendererData(urpAsset); + if (scriptableRendererData == null) + { + return null; + } + + if (scriptableRendererData.rendererFeatures != null) + { + foreach (var feature in scriptableRendererData.rendererFeatures) + { + if (feature is AreaLighting areaLightFeature && feature.isActive) + { + return areaLightFeature; + } + } + } + + return null; + } + + private ScriptableRendererData GetScriptableRendererData(UniversalRenderPipelineAsset urpAsset) + { + var property = typeof(UniversalRenderPipelineAsset).GetProperty("scriptableRendererData", + BindingFlags.NonPublic | BindingFlags.Instance); + + if (property != null) + { + return property.GetValue(urpAsset) as ScriptableRendererData; + } + + return null; + } + + private AreaLightSettings GetLightSettings(AreaLighting areaLighting) + { + var field = typeof(AreaLighting).GetField("m_LightSettings", + BindingFlags.NonPublic | BindingFlags.Instance); + + if (field != null) + { + return field.GetValue(areaLighting) as AreaLightSettings; + } + + return null; + } + + private AreaLightShadowSettings GetShadowSettings(AreaLighting areaLighting) + { + var field = typeof(AreaLighting).GetField("m_ShadowSettings", + BindingFlags.NonPublic | BindingFlags.Instance); + + if (field != null) + { + return field.GetValue(areaLighting) as AreaLightShadowSettings; + } + + return null; + } + } +} + diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scripts/AreaLightTestPanel.cs.meta b/Packages/com.baddog.rendering.arealight/Samples/Scripts/AreaLightTestPanel.cs.meta new file mode 100644 index 00000000..592c8d0b --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scripts/AreaLightTestPanel.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1117998342ebd97458ec7e4d8eac1e84 +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scripts/AreaLightTestPanel.cs + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scripts/com.baddog.rendering.arealight.samples.asmdef b/Packages/com.baddog.rendering.arealight/Samples/Scripts/com.baddog.rendering.arealight.samples.asmdef new file mode 100644 index 00000000..38c41749 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scripts/com.baddog.rendering.arealight.samples.asmdef @@ -0,0 +1,18 @@ +{ + "name": "BadDog.Rendering.AreaLight.Samples", + "rootNamespace": "BadDog.Rendering.AreaLight.Samples", + "references": [ + "Unity.RenderPipelines.Universal.Runtime", + "BadDog.Rendering.AreaLight" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} + diff --git a/Packages/com.baddog.rendering.arealight/Samples/Scripts/com.baddog.rendering.arealight.samples.asmdef.meta b/Packages/com.baddog.rendering.arealight/Samples/Scripts/com.baddog.rendering.arealight.samples.asmdef.meta new file mode 100644 index 00000000..743c43f8 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Scripts/com.baddog.rendering.arealight.samples.asmdef.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 0c9746ef8c6730b40ab7c1ea78d30b6b +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Scripts/com.baddog.rendering.arealight.samples.asmdef + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Settings.meta b/Packages/com.baddog.rendering.arealight/Samples/Settings.meta new file mode 100644 index 00000000..ac7c14bb --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dc164045217e4d94f8bd10e92eac02cb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset.asset b/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset.asset new file mode 100644 index 00000000..7976a02c --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15ea4b20d3ed20359b6438fe0ea575b9898e18364c3acba06f1f4f625d2c469b +size 4699 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset.asset.meta b/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset.asset.meta new file mode 100644 index 00000000..33dafeb6 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset.asset.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 5a2fd50869319c5499db28ec6b831c1e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset.asset + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset_Renderer.asset b/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset_Renderer.asset new file mode 100644 index 00000000..b23592a3 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset_Renderer.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57b4c089dc3a729d2f7a90c2e56c557498adb6d3de231f71a59f047f956bc065 +size 3058 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset_Renderer.asset.meta b/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset_Renderer.asset.meta new file mode 100644 index 00000000..41760e82 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset_Renderer.asset.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 6c65f83761ee09b46b2ed46c4742a3f9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Settings/URPSampleAsset_Renderer.asset + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Spine.meta b/Packages/com.baddog.rendering.arealight/Samples/Spine.meta new file mode 100644 index 00000000..c2f7f5a2 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Spine.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4334cac638cb280489c3f9bcf097e9e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Samples/Spine/README.txt b/Packages/com.baddog.rendering.arealight/Samples/Spine/README.txt new file mode 100644 index 00000000..b0934e08 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Spine/README.txt @@ -0,0 +1,3 @@ +Note that we are not using the official Spine package here. I have simply placed a Spine mesh in the scene and applied the BGAreaSpineLit.shader, which is sufficient for testing purposes. +If you are working on an actual Spine project, please use the official Spine package along with its required scripts, and then apply my shader accordingly. + diff --git a/Packages/com.baddog.rendering.arealight/Samples/Spine/README.txt.meta b/Packages/com.baddog.rendering.arealight/Samples/Spine/README.txt.meta new file mode 100644 index 00000000..d876482e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Spine/README.txt.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 2726c9eb09da9384e8ea1b25ca83b406 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Spine/README.txt + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.mat b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.mat new file mode 100644 index 00000000..15fce20c --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.mat @@ -0,0 +1,66 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: spineboy + m_Shader: {fileID: 4800000, guid: f879e5cab3db4519a757f17400a9de49, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _STRAIGHT_ALPHA_INPUT + m_InvalidKeywords: + - _ADAPTIVE_PROBE_VOLUMES_PER_PIXEL + - _USE8NEIGHBOURHOOD_ON + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 2800000, guid: 90216cadd37249c4cafa50f56d3f7b81, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - PixelSnap: 0 + - _AdaptiveProbeVolumesPerPixel: 1 + - _CloakPhase: 0 + - _Cutoff: 0.1 + - _DarkColorAlphaAdditive: 0 + - _DoubleSidedLighting: 0 + - _Fill: 0 + - _FillPhase: 0 + - _LightAffectsAdditive: 0 + - _OutlineMipLevel: 0 + - _OutlineOpaqueAlpha: 1 + - _OutlineReferenceTexWidth: 1024 + - _OutlineSmoothness: 1 + - _OutlineWidth: 3 + - _ReceiveShadows: 0 + - _RefractionStrength: 0.01 + - _StencilComp: 8 + - _StencilRef: 1 + - _StraightAlphaInput: 1 + - _ThresholdEnd: 0.25 + - _TintBlack: 0 + - _Use8Neighbourhood: 1 + - _UseScreenSpaceOutlineWidth: 0 + - _ZWrite: 0 + - _node_3476: 0 + m_Colors: + - _Black: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _FillColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 1, g: 1, b: 0, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.mat.meta b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.mat.meta new file mode 100644 index 00000000..594a1240 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 5c3e77e82ea184e429cfbd19aa57d09d +timeCreated: 1489559535 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.mat + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.png b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.png new file mode 100644 index 00000000..5eb6c135 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:889ab768f92f504315cc66d68c0d7cbda25f3a19c2bc95e7893d0db89abacab8 +size 543543 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.png.meta b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.png.meta new file mode 100644 index 00000000..23751edd --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.png.meta @@ -0,0 +1,825 @@ +fileFormatVersion: 2 +guid: 90216cadd37249c4cafa50f56d3f7b81 +TextureImporter: + internalIDToNameTable: + - first: + 213: 21300000 + second: eye_indifferent + - first: + 213: 21300002 + second: eye_surprised + - first: + 213: 21300004 + second: front_bracer + - first: + 213: 21300006 + second: front_fist_closed + - first: + 213: 21300008 + second: front_fist_open + - first: + 213: 21300010 + second: front_foot + - first: + 213: 21300012 + second: front_foot_bend1 + - first: + 213: 21300014 + second: front_foot_bend2 + - first: + 213: 21300016 + second: front_shin + - first: + 213: 21300018 + second: front_thigh + - first: + 213: 21300020 + second: front_upper_arm + - first: + 213: 21300022 + second: goggles + - first: + 213: 21300024 + second: gun + - first: + 213: 21300026 + second: head + - first: + 213: 21300028 + second: mouth_grind + - first: + 213: 21300030 + second: mouth_oooo + - first: + 213: 21300032 + second: mouth_smile + - first: + 213: 21300034 + second: muzzle + - first: + 213: 21300036 + second: neck + - first: + 213: 21300038 + second: rear_bracer + - first: + 213: 21300040 + second: rear_foot + - first: + 213: 21300042 + second: rear_foot_bend1 + - first: + 213: 21300044 + second: rear_foot_bend2 + - first: + 213: 21300046 + second: rear_shin + - first: + 213: 21300048 + second: rear_thigh + - first: + 213: 21300050 + second: rear_upper_arm + - first: + 213: 21300052 + second: torso + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: eye_indifferent + rect: + serializedVersion: 2 + x: 549 + y: 239 + width: 93 + height: 89 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: eye_surprised + rect: + serializedVersion: 2 + x: 834 + y: 76 + width: 93 + height: 89 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: front_bracer + rect: + serializedVersion: 2 + x: 375 + y: 532 + width: 80 + height: 58 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: front_fist_closed + rect: + serializedVersion: 2 + x: 466 + y: 354 + width: 82 + height: 75 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: front_fist_open + rect: + serializedVersion: 2 + x: 447 + y: 431 + width: 86 + height: 87 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: front_foot + rect: + serializedVersion: 2 + x: 549 + y: 168 + width: 126 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: front_foot_bend1 + rect: + serializedVersion: 2 + x: 375 + y: 402 + width: 70 + height: 128 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: front_foot_bend2 + rect: + serializedVersion: 2 + x: 275 + y: 584 + width: 93 + height: 108 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: front_shin + rect: + serializedVersion: 2 + x: 466 + y: 168 + width: 81 + height: 184 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: front_thigh + rect: + serializedVersion: 2 + x: 214 + y: 702 + width: 48 + height: 112 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: front_upper_arm + rect: + serializedVersion: 2 + x: 214 + y: 816 + width: 54 + height: 97 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: goggles + rect: + serializedVersion: 2 + x: 466 + y: 0 + width: 261 + height: 166 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: gun + rect: + serializedVersion: 2 + x: 2 + y: 702 + width: 210 + height: 203 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: head + rect: + serializedVersion: 2 + x: 2 + y: 402 + width: 271 + height: 298 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: mouth_grind + rect: + serializedVersion: 2 + x: 929 + y: 67 + width: 93 + height: 59 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: mouth_oooo + rect: + serializedVersion: 2 + x: 929 + y: 128 + width: 93 + height: 59 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: mouth_smile + rect: + serializedVersion: 2 + x: 550 + y: 330 + width: 59 + height: 93 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: muzzle + rect: + serializedVersion: 2 + x: 2 + y: 0 + width: 462 + height: 400 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: neck + rect: + serializedVersion: 2 + x: 64 + y: 975 + width: 35 + height: 41 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: rear_bracer + rect: + serializedVersion: 2 + x: 677 + y: 168 + width: 55 + height: 72 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: rear_foot + rect: + serializedVersion: 2 + x: 2 + y: 907 + width: 60 + height: 113 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: rear_foot_bend1 + rect: + serializedVersion: 2 + x: 64 + y: 907 + width: 117 + height: 66 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: rear_foot_bend2 + rect: + serializedVersion: 2 + x: 729 + y: 76 + width: 103 + height: 83 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: rear_shin + rect: + serializedVersion: 2 + x: 729 + y: 0 + width: 178 + height: 74 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: rear_thigh + rect: + serializedVersion: 2 + x: 909 + y: 0 + width: 103 + height: 65 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: rear_upper_arm + rect: + serializedVersion: 2 + x: 370 + y: 592 + width: 47 + height: 87 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: torso + rect: + serializedVersion: 2 + x: 275 + y: 402 + width: 98 + height: 180 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Spine/spineboy.png + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboymesh.asset b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboymesh.asset new file mode 100644 index 00000000..b261be28 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboymesh.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d110fe758fffd916c5758faa1fafe8c242acbfca96a09419d6c73f4e4a178df +size 7069 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboymesh.asset.meta b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboymesh.asset.meta new file mode 100644 index 00000000..c540b36a --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Spine/spineboymesh.asset.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: b092692d9fc741743a3d895f2880073f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Spine/spineboymesh.asset + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Textures.meta b/Packages/com.baddog.rendering.arealight/Samples/Textures.meta new file mode 100644 index 00000000..d8305121 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67eb79c9288d9f048b0978502d018f15 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeA.psd b/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeA.psd new file mode 100644 index 00000000..0a08b36b --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeA.psd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ec33ab13a41739be4fa99a9806aff3a26a8662f56d2f59bb805ba5aab3984ed +size 3257940 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeA.psd.meta b/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeA.psd.meta new file mode 100644 index 00000000..2240610f --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeA.psd.meta @@ -0,0 +1,124 @@ +fileFormatVersion: 2 +guid: bcd0335adc1f19c439c38503da608994 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Textures/smokeA.psd + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeN.psd b/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeN.psd new file mode 100644 index 00000000..5dff2c9a --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeN.psd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b103d6d43997bd8131e8cab0f02fd7035a7beb186b8d37afcd6c7df1fe9d2609 +size 8816546 diff --git a/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeN.psd.meta b/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeN.psd.meta new file mode 100644 index 00000000..cd2c90eb --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Samples/Textures/smokeN.psd.meta @@ -0,0 +1,124 @@ +fileFormatVersion: 2 +guid: 02249df1810000541a98c7c56d1e0a40 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Samples/Textures/smokeN.psd + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders.meta b/Packages/com.baddog.rendering.arealight/Shaders.meta new file mode 100644 index 00000000..289212e6 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc1b1a71d929a3843b27c0c95719700e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog.meta new file mode 100644 index 00000000..7f5fdc6c --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b85261579de54e4fb9b45cf6fd166a8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLit.shader b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLit.shader new file mode 100644 index 00000000..d43592ab --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLit.shader @@ -0,0 +1,456 @@ +Shader "BadDog/URP/BGAreaLit" +{ + Properties + { + // Specular vs Metallic workflow + _WorkflowMode("WorkflowMode", Float) = 1.0 + + [MainTexture] _BaseMap("Albedo", 2D) = "white" {} + [MainColor] _BaseColor("Color", Color) = (1,1,1,1) + + _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + _Smoothness("Smoothness", Range(0.0, 1.0)) = 0.5 + _SmoothnessTextureChannel("Smoothness texture channel", Float) = 0 + + _Metallic("Metallic", Range(0.0, 1.0)) = 0.0 + _MetallicGlossMap("Metallic", 2D) = "white" {} + + _SpecColor("Specular", Color) = (0.2, 0.2, 0.2) + _SpecGlossMap("Specular", 2D) = "white" {} + + [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0 + [ToggleOff] _EnvironmentReflections("Environment Reflections", Float) = 1.0 + + _BumpScale("Scale", Float) = 1.0 + _BumpMap("Normal Map", 2D) = "bump" {} + + _Parallax("Scale", Range(0.005, 0.08)) = 0.005 + _ParallaxMap("Height Map", 2D) = "black" {} + + _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0 + _OcclusionMap("Occlusion", 2D) = "white" {} + + [HDR] _EmissionColor("Color", Color) = (0,0,0) + _EmissionMap("Emission", 2D) = "white" {} + + _DetailMask("Detail Mask", 2D) = "white" {} + _DetailAlbedoMapScale("Scale", Range(0.0, 2.0)) = 1.0 + _DetailAlbedoMap("Detail Albedo x2", 2D) = "linearGrey" {} + _DetailNormalMapScale("Scale", Range(0.0, 2.0)) = 1.0 + [Normal] _DetailNormalMap("Normal Map", 2D) = "bump" {} + + // SRP batching compatibility for Clear Coat (Not used in Lit) + [HideInInspector] _ClearCoatMask("_ClearCoatMask", Float) = 0.0 + [HideInInspector] _ClearCoatSmoothness("_ClearCoatSmoothness", Float) = 0.0 + + // Blending state + _Surface("__surface", Float) = 0.0 + _Blend("__blend", Float) = 0.0 + _Cull("__cull", Float) = 2.0 + [ToggleUI] _AlphaClip("__clip", Float) = 0.0 + [HideInInspector] _SrcBlend("__src", Float) = 1.0 + [HideInInspector] _DstBlend("__dst", Float) = 0.0 + [HideInInspector] _SrcBlendAlpha("__srcA", Float) = 1.0 + [HideInInspector] _DstBlendAlpha("__dstA", Float) = 0.0 + [HideInInspector] _ZWrite("__zw", Float) = 1.0 + [HideInInspector] _BlendModePreserveSpecular("_BlendModePreserveSpecular", Float) = 1.0 + [HideInInspector] _AlphaToMask("__alphaToMask", Float) = 0.0 + [HideInInspector] _AddPrecomputedVelocity("_AddPrecomputedVelocity", Float) = 0.0 + [HideInInspector] _XRMotionVectorsPass("_XRMotionVectorsPass", Float) = 1.0 + + [ToggleUI] _ReceiveShadows("Receive Shadows", Float) = 1.0 + // Editmode props + _QueueOffset("Queue offset", Float) = 0.0 + + // ObsoleteProperties + [HideInInspector] _MainTex("BaseMap", 2D) = "white" {} + [HideInInspector] _Color("Base Color", Color) = (1, 1, 1, 1) + [HideInInspector] _GlossMapScale("Smoothness", Float) = 0.0 + [HideInInspector] _Glossiness("Smoothness", Float) = 0.0 + [HideInInspector] _GlossyReflections("EnvironmentReflections", Float) = 0.0 + + [HideInInspector][NoScaleOffset]unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {} + [HideInInspector][NoScaleOffset]unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {} + [HideInInspector][NoScaleOffset]unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {} + } + + SubShader + { + Tags + { + "RenderType" = "Opaque" + "RenderPipeline" = "UniversalPipeline" + "UniversalMaterialType" = "Lit" + "IgnoreProjector" = "True" + } + LOD 300 + + // ------------------------------------------------------------------ + // Forward pass. Shades all light in a single pass. GI + emission + Fog + Pass + { + Name "ForwardLit" + Tags + { + "LightMode" = "UniversalForwardOnly" + } + + // ------------------------------------- + // Render State Commands + Blend[_SrcBlend][_DstBlend], [_SrcBlendAlpha][_DstBlendAlpha] + ZWrite[_ZWrite] + Cull[_Cull] + AlphaToMask[_AlphaToMask] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex LitPassVertex + #pragma fragment LitPassFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _NORMALMAP + #pragma shader_feature_local _PARALLAXMAP + #pragma shader_feature_local _RECEIVE_SHADOWS_OFF + #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED + #pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT + #pragma shader_feature_local_fragment _ALPHATEST_ON + #pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON + #pragma shader_feature_local_fragment _EMISSION + #pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP + #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature_local_fragment _OCCLUSIONMAP + #pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF + #pragma shader_feature_local_fragment _SPECULAR_SETUP + + // ------------------------------------- + // Universal Pipeline keywords + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN + #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX + #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS + #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING + #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION + #if UNITY_VERSION >= 60000100 + #pragma multi_compile_fragment _ _REFLECTION_PROBE_ATLAS + #endif + #pragma multi_compile_fragment _ _ENABLE_BG_AREA_LIGHTING + #pragma multi_compile_fragment _ _BG_AREALIGHT_SHADOWS_PCF2X2 _BG_AREALIGHT_SHADOWS_TENT5X5 _BG_AREALIGHT_SHADOWS_TENT7X7 _BG_AREALIGHT_SHADOWS_PCSS + #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION + #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma multi_compile_fragment _ _LIGHT_COOKIES + #pragma multi_compile _ _LIGHT_LAYERS + #if UNITY_VERSION >= 60000100 + #pragma multi_compile _ _CLUSTER_LIGHT_LOOP + #else + #pragma multi_compile _ _FORWARD_PLUS + #endif + #if UNITY_VERSION >= 60000000 + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #endif + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING + #pragma multi_compile _ SHADOWS_SHADOWMASK + #pragma multi_compile _ DIRLIGHTMAP_COMBINED + #pragma multi_compile _ LIGHTMAP_ON + #if UNITY_VERSION >= 60000100 + #pragma multi_compile_fragment _ LIGHTMAP_BICUBIC_SAMPLING + #endif + #pragma multi_compile _ DYNAMICLIGHTMAP_ON + #pragma multi_compile _ USE_LEGACY_LIGHTMAPS + #pragma multi_compile _ LOD_FADE_CROSSFADE + #pragma multi_compile_fragment _ DEBUG_DISPLAY + #if UNITY_VERSION >= 60000100 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Fog.hlsl" + #else + #pragma multi_compile_fog + #endif + #if UNITY_VERSION >= 60000000 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" + #endif + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #pragma instancing_options renderinglayer + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLitForwardPass.hlsl" + ENDHLSL + } + + Pass + { + Name "ShadowCaster" + Tags + { + "LightMode" = "ShadowCaster" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + ZTest LEqual + ColorMask 0 + Cull[_Cull] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex ShadowPassVertex + #pragma fragment ShadowPassFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _ALPHATEST_ON + #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Universal Pipeline keywords + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ LOD_FADE_CROSSFADE + + // This is used during shadow map generation to differentiate between directional and punctual light shadows, as they use different formulas to apply Normal Bias + #pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl" + ENDHLSL + } + + Pass + { + Name "DepthOnly" + Tags + { + "LightMode" = "DepthOnly" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + ColorMask R + Cull[_Cull] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex DepthOnlyVertex + #pragma fragment DepthOnlyFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _ALPHATEST_ON + #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ LOD_FADE_CROSSFADE + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl" + ENDHLSL + } + + // This pass is used when drawing to a _CameraNormalsTexture texture + Pass + { + Name "DepthNormals" + Tags + { + "LightMode" = "DepthNormals" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + Cull[_Cull] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex DepthNormalsVertex + #pragma fragment DepthNormalsFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _NORMALMAP + #pragma shader_feature_local _PARALLAXMAP + #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED + #pragma shader_feature_local _ALPHATEST_ON + #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ LOD_FADE_CROSSFADE + + // ------------------------------------- + // Universal Pipeline keywords + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl" + ENDHLSL + } + + // This pass it not used during regular rendering, only for lightmap baking. + Pass + { + Name "Meta" + Tags + { + "LightMode" = "Meta" + } + + // ------------------------------------- + // Render State Commands + Cull Off + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex UniversalVertexMeta + #pragma fragment UniversalFragmentMetaLit + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local_fragment _SPECULAR_SETUP + #pragma shader_feature_local_fragment _EMISSION + #pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP + #pragma shader_feature_local_fragment _ALPHATEST_ON + #pragma shader_feature_local_fragment _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED + #pragma shader_feature_local_fragment _SPECGLOSSMAP + #pragma shader_feature EDITOR_VISUALIZATION + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitMetaPass.hlsl" + + ENDHLSL + } + + Pass + { + Name "Universal2D" + Tags + { + "LightMode" = "Universal2D" + } + + // ------------------------------------- + // Render State Commands + Blend[_SrcBlend][_DstBlend] + ZWrite[_ZWrite] + Cull[_Cull] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex vert + #pragma fragment frag + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local_fragment _ALPHATEST_ON + #pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON + + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/Utils/Universal2D.hlsl" + ENDHLSL + } + + Pass + { + Name "MotionVectors" + Tags { "LightMode" = "MotionVectors" } + ColorMask RG + + HLSLPROGRAM + #pragma shader_feature_local _ALPHATEST_ON + #pragma multi_compile _ LOD_FADE_CROSSFADE + #pragma shader_feature_local_vertex _ADD_PRECOMPUTED_VELOCITY + + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ObjectMotionVectors.hlsl" + ENDHLSL + } + + Pass + { + Name "XRMotionVectors" + Tags { "LightMode" = "XRMotionVectors" } + ColorMask RGBA + + // Stencil write for obj motion pixels + Stencil + { + WriteMask 1 + Ref 1 + Comp Always + Pass Replace + } + + HLSLPROGRAM + #pragma shader_feature_local _ALPHATEST_ON + #pragma multi_compile _ LOD_FADE_CROSSFADE + #pragma shader_feature_local_vertex _ADD_PRECOMPUTED_VELOCITY + #define APPLICATION_SPACE_WARP_MOTION 1 + + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ObjectMotionVectors.hlsl" + ENDHLSL + } + } + + FallBack "Hidden/Universal Render Pipeline/FallbackError" + CustomEditor "UnityEditor.Rendering.Universal.ShaderGUI.LitShader" +} + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLit.shader.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLit.shader.meta new file mode 100644 index 00000000..593c7723 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLit.shader.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: deab2e321dbdc8a469635b200f36c496 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLit.shader + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLitForwardPass.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLitForwardPass.hlsl new file mode 100644 index 00000000..c343a66a --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLitForwardPass.hlsl @@ -0,0 +1,280 @@ +#ifndef BADDOG_AREALIT_FORWARD_PASS_INCLUDED +#define BADDOG_AREALIT_FORWARD_PASS_INCLUDED + +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + +#if defined(LOD_FADE_CROSSFADE) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" +#endif + +#if defined(_PARALLAXMAP) +#define REQUIRES_TANGENT_SPACE_VIEW_DIR_INTERPOLATOR +#endif + +#if (defined(_NORMALMAP) || (defined(_PARALLAXMAP) && !defined(REQUIRES_TANGENT_SPACE_VIEW_DIR_INTERPOLATOR))) || defined(_DETAIL) +#define REQUIRES_WORLD_SPACE_TANGENT_INTERPOLATOR +#endif + +// Include Area Light support +#include "Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl" + +//----------------------------------------------------------------------------- +// Area Light Contribution Calculation +//----------------------------------------------------------------------------- + +// Vertex and Fragment structures from URP Lit shader +struct Attributes +{ + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + float4 tangentOS : TANGENT; + float2 texcoord : TEXCOORD0; + float2 staticLightmapUV : TEXCOORD1; + float2 dynamicLightmapUV : TEXCOORD2; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct Varyings +{ + float2 uv : TEXCOORD0; + +#if defined(REQUIRES_WORLD_SPACE_POS_INTERPOLATOR) + float3 positionWS : TEXCOORD1; +#endif + + float3 normalWS : TEXCOORD2; +#if defined(REQUIRES_WORLD_SPACE_TANGENT_INTERPOLATOR) + half4 tangentWS : TEXCOORD3; // xyz: tangent, w: sign +#endif + float3 viewDirWS : TEXCOORD4; + +#ifdef _ADDITIONAL_LIGHTS_VERTEX + half4 fogFactorAndVertexLight : TEXCOORD5; // x: fogFactor, yzw: vertex light +#else + half fogFactor : TEXCOORD5; +#endif + +#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD6; +#endif + +#if defined(REQUIRES_TANGENT_SPACE_VIEW_DIR_INTERPOLATOR) + half3 viewDirTS : TEXCOORD7; +#endif + + DECLARE_LIGHTMAP_OR_SH(staticLightmapUV, vertexSH, 8); +#ifdef DYNAMICLIGHTMAP_ON + float2 dynamicLightmapUV : TEXCOORD9; // Dynamic lightmap UVs +#endif + +#ifdef USE_APV_PROBE_OCCLUSION + float4 probeOcclusion : TEXCOORD10; +#endif + + float4 positionCS : SV_POSITION; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO +}; + +void InitializeInputData(Varyings input, half3 normalTS, out InputData inputData) +{ + inputData = (InputData)0; + +#if defined(REQUIRES_WORLD_SPACE_POS_INTERPOLATOR) + inputData.positionWS = input.positionWS; +#endif + + half3 viewDirWS = GetWorldSpaceNormalizeViewDir(input.positionWS); +#if defined(_NORMALMAP) || defined(_DETAIL) + float sgn = input.tangentWS.w; // should be either +1 or -1 + float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz); + half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz); + + #if defined(_NORMALMAP) + inputData.tangentToWorld = tangentToWorld; + #endif + inputData.normalWS = TransformTangentToWorld(normalTS, tangentToWorld); +#else + inputData.normalWS = input.normalWS; +#endif + + inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS); + inputData.viewDirectionWS = viewDirWS; + +#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + inputData.shadowCoord = input.shadowCoord; +#elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + inputData.shadowCoord = TransformWorldToShadowCoord(inputData.positionWS); +#else + inputData.shadowCoord = float4(0, 0, 0, 0); +#endif + +#ifdef _ADDITIONAL_LIGHTS_VERTEX + inputData.fogCoord = InitializeInputDataFog(float4(input.positionWS, 1.0), input.fogFactorAndVertexLight.x); + inputData.vertexLighting = input.fogFactorAndVertexLight.yzw; +#else + inputData.fogCoord = InitializeInputDataFog(float4(input.positionWS, 1.0), input.fogFactor); +#endif + +#if defined(DYNAMICLIGHTMAP_ON) + inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, input.dynamicLightmapUV, input.vertexSH, inputData.normalWS); + inputData.shadowMask = SAMPLE_SHADOWMASK(input.staticLightmapUV); +#elif !defined(LIGHTMAP_ON) && (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) + inputData.bakedGI = SAMPLE_GI(input.vertexSH, + GetAbsolutePositionWS(inputData.positionWS), + inputData.normalWS, + inputData.viewDirectionWS, + input.positionCS.xy, + input.probeOcclusion, + inputData.shadowMask); +#else + inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, input.vertexSH, inputData.normalWS); + inputData.shadowMask = SAMPLE_SHADOWMASK(input.staticLightmapUV); +#endif + + inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(input.positionCS); + + #if defined(DEBUG_DISPLAY) + #if defined(DYNAMICLIGHTMAP_ON) + inputData.dynamicLightmapUV = input.dynamicLightmapUV; + #endif + #if defined(LIGHTMAP_ON) + inputData.staticLightmapUV = input.staticLightmapUV; + #else + inputData.vertexSH = input.vertexSH; + #endif + #if defined(USE_APV_PROBE_OCCLUSION) + inputData.probeOcclusion = input.probeOcclusion; + #endif + #endif +} + +/////////////////////////////////////////////////////////////////////////////// +// Vertex and Fragment functions // +/////////////////////////////////////////////////////////////////////////////// + +// Used in Standard (Physically Based) shader +Varyings LitPassVertex(Attributes input) +{ + Varyings output = (Varyings)0; + + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz); + + // normalWS and tangentWS already normalize. + // this is required to avoid skewing the direction during interpolation + // also required for per-vertex lighting and SH evaluation + VertexNormalInputs normalInput = GetVertexNormalInputs(input.normalOS, input.tangentOS); + + half3 viewDirWS = GetWorldSpaceViewDir(vertexInput.positionWS); + half3 vertexLight = VertexLighting(vertexInput.positionWS, normalInput.normalWS); + half fogFactor = 0; + #if !defined(_FOG_FRAGMENT) + fogFactor = ComputeFogFactor(vertexInput.positionCS.z); + #endif + + output.uv = TRANSFORM_TEX(input.texcoord, _BaseMap); + + // already normalized from normal transform to WS. + output.normalWS = normalInput.normalWS; + output.viewDirWS = viewDirWS; +#if defined(REQUIRES_WORLD_SPACE_TANGENT_INTERPOLATOR) || defined(REQUIRES_TANGENT_SPACE_VIEW_DIR_INTERPOLATOR) + real sign = input.tangentOS.w * GetOddNegativeScale(); + half4 tangentWS = half4(normalInput.tangentWS.xyz, sign); +#endif +#if defined(REQUIRES_WORLD_SPACE_TANGENT_INTERPOLATOR) + output.tangentWS = tangentWS; +#endif + +#if defined(REQUIRES_TANGENT_SPACE_VIEW_DIR_INTERPOLATOR) + half3 viewDirTS = GetViewDirectionTangentSpace(tangentWS, output.normalWS, viewDirWS); + output.viewDirTS = viewDirTS; +#endif + + OUTPUT_LIGHTMAP_UV(input.staticLightmapUV, unity_LightmapST, output.staticLightmapUV); +#ifdef DYNAMICLIGHTMAP_ON + output.dynamicLightmapUV = input.dynamicLightmapUV.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; +#endif +#if UNITY_VERSION >= 60000000 + OUTPUT_SH4(vertexInput.positionWS, output.normalWS.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), output.vertexSH, output.probeOcclusion); +#else + OUTPUT_SH(output.normalWS.xyz, output.vertexSH); +#endif +#ifdef _ADDITIONAL_LIGHTS_VERTEX + output.fogFactorAndVertexLight = half4(fogFactor, vertexLight); +#else + output.fogFactor = fogFactor; +#endif + +#if defined(REQUIRES_WORLD_SPACE_POS_INTERPOLATOR) + output.positionWS = vertexInput.positionWS; +#endif + +#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + output.shadowCoord = GetShadowCoord(vertexInput); +#endif + + output.positionCS = vertexInput.positionCS; + + return output; +} + +// Used in Standard (Physically Based) shader +half4 LitPassFragment(Varyings input) : SV_Target +{ + UNITY_SETUP_INSTANCE_ID(input); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + +#if defined(_PARALLAXMAP) +#if defined(REQUIRES_TANGENT_SPACE_VIEW_DIR_INTERPOLATOR) + half3 viewDirTS = input.viewDirTS; +#else + half3 viewDirWS = GetWorldSpaceNormalizeViewDir(input.positionWS); + half3 viewDirTS = GetViewDirectionTangentSpace(input.tangentWS, input.normalWS, viewDirWS); +#endif + ApplyPerPixelDisplacement(viewDirTS, input.uv); +#endif + + SurfaceData surfaceData; + InitializeStandardLitSurfaceData(input.uv, surfaceData); + +#ifdef LOD_FADE_CROSSFADE + LODFadeCrossFade(input.positionCS); +#endif + + InputData inputData; + InitializeInputData(input, surfaceData.normalTS, inputData); + #if UNITY_VERSION >= 60000000 + SETUP_DEBUG_TEXTURE_DATA(inputData, UNDO_TRANSFORM_TEX(input.uv, _BaseMap)); + #else + SETUP_DEBUG_TEXTURE_DATA(inputData, input.uv, _BaseMap); + #endif + +#ifdef _DBUFFER + ApplyDecalToSurfaceData(input.positionCS, surfaceData, inputData); +#endif + + // Standard URP lighting calculation + half4 color = UniversalFragmentPBR(inputData, surfaceData); + + // Additional Area Light (only when enabled) + #if defined(_ENABLE_BG_AREA_LIGHTING) + color.rgb += EvaluateAreaLight(inputData, surfaceData); + #endif + + color.rgb = MixFog(color.rgb, inputData.fogCoord); + color.a = OutputAlpha(color.a, IsSurfaceTypeTransparent(_Surface)); + + return color; +} + +#endif // BADDOG_AREALIT_FORWARD_PASS_INCLUDED + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLitForwardPass.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLitForwardPass.hlsl.meta new file mode 100644 index 00000000..2aed35b3 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLitForwardPass.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 07e05dc2db65cc94db89c9e7ccfc9a2a +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaLitForwardPass.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLit.shader b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLit.shader new file mode 100644 index 00000000..69a4fde6 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLit.shader @@ -0,0 +1,389 @@ +Shader "BadDog/URP/BGAreaParticleLit" +{ + Properties + { + [MainTexture] _BaseMap("Base Map", 2D) = "white" {} + [MainColor] _BaseColor("Base Color", Color) = (1,1,1,1) + + _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + _MetallicGlossMap("Metallic Map", 2D) = "white" {} + [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0 + _Smoothness("Smoothness", Range(0.0, 1.0)) = 0.5 + + _BumpScale("Scale", Float) = 1.0 + _BumpMap("Normal Map", 2D) = "bump" {} + + [HDR] _EmissionColor("Color", Color) = (0,0,0) + _EmissionMap("Emission", 2D) = "white" {} + [ToggleUI] _ReceiveShadows("Receive Shadows", Float) = 1.0 + + // ------------------------------------- + // Particle specific + _SoftParticlesNearFadeDistance("Soft Particles Near Fade", Float) = 0.0 + _SoftParticlesFarFadeDistance("Soft Particles Far Fade", Float) = 1.0 + _CameraNearFadeDistance("Camera Near Fade", Float) = 1.0 + _CameraFarFadeDistance("Camera Far Fade", Float) = 2.0 + _DistortionBlend("Distortion Blend", Range(0.0, 1.0)) = 0.5 + _DistortionStrength("Distortion Strength", Float) = 1.0 + + // ------------------------------------- + // Hidden properties - Generic + _Surface("__surface", Float) = 0.0 + _Blend("__mode", Float) = 0.0 + _Cull("__cull", Float) = 2.0 + [ToggleUI] _AlphaClip("__clip", Float) = 0.0 + [HideInInspector] _BlendOp("__blendop", Float) = 0.0 + [HideInInspector] _SrcBlend("__src", Float) = 1.0 + [HideInInspector] _DstBlend("__dst", Float) = 0.0 + [HideInInspector] _SrcBlendAlpha("__srcA", Float) = 1.0 + [HideInInspector] _DstBlendAlpha("__dstA", Float) = 0.0 + [HideInInspector] _ZWrite("__zw", Float) = 1.0 + [HideInInspector] _BlendModePreserveSpecular("_BlendModePreserveSpecular", Float) = 1.0 + [HideInInspector] _AlphaToMask("__alphaToMask", Float) = 0.0 + + + // Particle specific + _ColorMode("_ColorMode", Float) = 0.0 + [HideInInspector] _BaseColorAddSubDiff("_ColorMode", Vector) = (0,0,0,0) + [ToggleOff] _FlipbookBlending("__flipbookblending", Float) = 0.0 + [ToggleUI] _SoftParticlesEnabled("__softparticlesenabled", Float) = 0.0 + [ToggleUI] _CameraFadingEnabled("__camerafadingenabled", Float) = 0.0 + [ToggleUI] _DistortionEnabled("__distortionenabled", Float) = 0.0 + [HideInInspector] _SoftParticleFadeParams("__softparticlefadeparams", Vector) = (0,0,0,0) + [HideInInspector] _CameraFadeParams("__camerafadeparams", Vector) = (0,0,0,0) + [HideInInspector] _DistortionStrengthScaled("Distortion Strength Scaled", Float) = 0.1 + + // Editmode props + _QueueOffset("Queue offset", Float) = 0.0 + + // ObsoleteProperties + [HideInInspector] _FlipbookMode("flipbook", Float) = 0 + [HideInInspector] _Glossiness("gloss", Float) = 0 + [HideInInspector] _Mode("mode", Float) = 0 + [HideInInspector] _Color("color", Color) = (1,1,1,1) + } + + HLSLINCLUDE + + //Particle shaders rely on "write" to CB syntax which is not supported by DXC + #pragma never_use_dxc + + ENDHLSL + + SubShader + { + Tags + { + "RenderType" = "Opaque" + "IgnoreProjector" = "True" + "PreviewType" = "Plane" + "PerformanceChecks" = "False" + "RenderPipeline" = "UniversalPipeline" + "UniversalMaterialType" = "Lit" + } + + + // ------------------------------------------------------------------ + // Forward pass. + Pass + { + // Lightmode matches the ShaderPassName set in UniversalRenderPipeline.cs. SRPDefaultUnlit and passes with + // no LightMode tag are also rendered by Universal Render Pipeline + Name "ForwardLit" + Tags + { + "LightMode" = "UniversalForwardOnly" + } + + // ------------------------------------- + // Render State Commands + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend], [_SrcBlendAlpha][_DstBlendAlpha] + ZWrite[_ZWrite] + Cull[_Cull] + AlphaToMask[_AlphaToMask] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex ParticlesLitVertex + #pragma fragment ParticlesLitFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _NORMALMAP + #pragma shader_feature_local _RECEIVE_SHADOWS_OFF + #pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT + #pragma shader_feature_local_fragment _EMISSION + #pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP + + // ------------------------------------- + // Particle Keywords + #pragma shader_feature_local _FLIPBOOKBLENDING_ON + #pragma shader_feature_local _SOFTPARTICLES_ON + #pragma shader_feature_local _FADING_ON + #pragma shader_feature_local _DISTORTION_ON + #pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON + #pragma shader_feature_local_fragment _ _ALPHATEST_ON + #pragma shader_feature_local_fragment _ _COLOROVERLAY_ON _COLORCOLOR_ON _COLORADDSUBDIFF_ON + + // ------------------------------------- + // Universal Pipeline keywords + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN + #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS + #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING + #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION + #if UNITY_VERSION >= 60000100 + #pragma multi_compile_fragment _ _REFLECTION_PROBE_ATLAS + #endif + #pragma multi_compile_fragment _ _ENABLE_BG_AREA_LIGHTING + #pragma multi_compile_fragment _ _BG_AREALIGHT_SHADOWS_PCF2X2 _BG_AREALIGHT_SHADOWS_TENT5X5 _BG_AREALIGHT_SHADOWS_TENT7X7 _BG_AREALIGHT_SHADOWS_PCSS + #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH + #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION + #pragma multi_compile_fragment _ _LIGHT_COOKIES + #if UNITY_VERSION >= 60000100 + #pragma multi_compile _ _CLUSTER_LIGHT_LOOP + #else + #pragma multi_compile _ _FORWARD_PLUS + #endif + #pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX + #if UNITY_VERSION >= 60000000 + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" + #endif + #if UNITY_VERSION >= 60000100 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Fog.hlsl" + #else + #pragma multi_compile_fog + #endif + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING + #pragma multi_compile_instancing + #pragma multi_compile_fragment _ DEBUG_DISPLAY + #pragma instancing_options procedural:ParticleInstancingSetup + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Particles/ParticlesLitInput.hlsl" + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLitForwardPass.hlsl" + ENDHLSL + } + + // ------------------------------------------------------------------ + // Depth Only pass. + Pass + { + Name "DepthOnly" + Tags + { + "LightMode" = "DepthOnly" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + ColorMask R + Cull[_Cull] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex DepthOnlyVertex + #pragma fragment DepthOnlyFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _ _ALPHATEST_ON + #pragma shader_feature_local _ _FLIPBOOKBLENDING_ON + #pragma shader_feature_local_fragment _ _COLOROVERLAY_ON _COLORCOLOR_ON _COLORADDSUBDIFF_ON + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile_instancing + #pragma instancing_options procedural:ParticleInstancingSetup + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Particles/ParticlesLitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/Particles/ParticlesDepthOnlyPass.hlsl" + ENDHLSL + } + // This pass is used when drawing to a _CameraNormalsTexture texture + Pass + { + Name "DepthNormals" + Tags + { + "LightMode" = "DepthNormals" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + Cull[_Cull] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex DepthNormalsVertex + #pragma fragment DepthNormalsFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _ _NORMALMAP + #pragma shader_feature_local _ _FLIPBOOKBLENDING_ON + #pragma shader_feature_local _ _ALPHATEST_ON + #pragma shader_feature_local_fragment _ _COLOROVERLAY_ON _COLORCOLOR_ON _COLORADDSUBDIFF_ON + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile_instancing + #pragma instancing_options procedural:ParticleInstancingSetup + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Particles/ParticlesLitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/Particles/ParticlesDepthNormalsPass.hlsl" + ENDHLSL + } + // ------------------------------------------------------------------ + // Scene view outline pass. + Pass + { + Name "SceneSelectionPass" + Tags + { + "LightMode" = "SceneSelectionPass" + } + + // ------------------------------------- + // Render State Commands + BlendOp Add + Blend One Zero + ZWrite On + Cull Off + + HLSLPROGRAM + #define PARTICLES_EDITOR_META_PASS + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex vertParticleEditor + #pragma fragment fragParticleSceneHighlight + + // ------------------------------------- + // Particle Keywords + #pragma shader_feature_local_fragment _ALPHATEST_ON + #pragma shader_feature_local _FLIPBOOKBLENDING_ON + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile_instancing + #pragma instancing_options procedural:ParticleInstancingSetup + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Particles/ParticlesLitInput.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Particles/ParticlesEditorPass.hlsl" + + ENDHLSL + } + + // ------------------------------------------------------------------ + // Scene picking buffer pass. + Pass + { + Name "ScenePickingPass" + Tags + { + "LightMode" = "Picking" + } + + // ------------------------------------- + // Render State Commands + BlendOp Add + Blend One Zero + ZWrite On + Cull Off + + HLSLPROGRAM + #define PARTICLES_EDITOR_META_PASS + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex vertParticleEditor + #pragma fragment fragParticleScenePicking + + // ------------------------------------- + // Particle Keywords + #pragma shader_feature_local_fragment _ALPHATEST_ON + #pragma shader_feature_local _FLIPBOOKBLENDING_ON + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile_instancing + #pragma instancing_options procedural:ParticleInstancingSetup + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Particles/ParticlesLitInput.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Particles/ParticlesEditorPass.hlsl" + + ENDHLSL + } + + Pass + { + Name "Universal2D" + Tags + { + "LightMode" = "Universal2D" + } + + // ------------------------------------- + // Render State Commands + Blend[_SrcBlend][_DstBlend] + ZWrite[_ZWrite] + Cull[_Cull] + + HLSLPROGRAM + + // ------------------------------------- + // Shader Stages + #pragma vertex vert + #pragma fragment frag + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local_fragment _ALPHATEST_ON + #pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON + + // ------------------------------------- + // Includes + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Particles/ParticlesLitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/Utils/Universal2D.hlsl" + ENDHLSL + } + } + + Fallback "Universal Render Pipeline/Particles/Simple Lit" + CustomEditor "UnityEditor.Rendering.Universal.ShaderGUI.ParticlesLitShader" +} + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLit.shader.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLit.shader.meta new file mode 100644 index 00000000..8deb0f47 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLit.shader.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: 0b2516ca234061647a5b31ac12e5f6cc +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLit.shader + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLitForwardPass.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLitForwardPass.hlsl new file mode 100644 index 00000000..65239c39 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLitForwardPass.hlsl @@ -0,0 +1,162 @@ +#ifndef BADDOG_AREA_PARTICLES_FORWARD_LIT_PASS_INCLUDED +#define BADDOG_AREA_PARTICLES_FORWARD_LIT_PASS_INCLUDED + +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Particles.hlsl" + +// Include Area Light support +#include "Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl" + +void InitializeInputData(VaryingsParticle input, half3 normalTS, out InputData inputData) +{ + inputData = (InputData)0; + + inputData.positionWS = input.positionWS.xyz; + +#ifdef _NORMALMAP + half3 viewDirWS = half3(input.normalWS.w, input.tangentWS.w, input.bitangentWS.w); + inputData.tangentToWorld = half3x3(input.tangentWS.xyz, input.bitangentWS.xyz, input.normalWS.xyz); + inputData.normalWS = TransformTangentToWorld(normalTS, inputData.tangentToWorld); +#else + half3 viewDirWS = input.viewDirWS; + inputData.normalWS = input.normalWS; +#endif + + inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS); + + viewDirWS = SafeNormalize(viewDirWS); + + inputData.viewDirectionWS = viewDirWS; + +#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + inputData.shadowCoord = input.shadowCoord; +#elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + inputData.shadowCoord = TransformWorldToShadowCoord(inputData.positionWS); +#else + inputData.shadowCoord = float4(0, 0, 0, 0); +#endif + + inputData.fogCoord = InitializeInputDataFog(float4(input.positionWS.xyz, 1.0), input.positionWS.w); + inputData.vertexLighting = half3(0.0h, 0.0h, 0.0h); +#if !defined(LIGHTMAP_ON) && (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) + inputData.bakedGI = SAMPLE_GI(input.vertexSH, + GetAbsolutePositionWS(inputData.positionWS), + inputData.normalWS, + inputData.viewDirectionWS, + input.clipPos.xy, + input.probeOcclusion, + inputData.shadowMask); +#else + inputData.bakedGI = SampleSHPixel(input.vertexSH, inputData.normalWS); +#endif + + inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(input.clipPos); + inputData.shadowMask = half4(1, 1, 1, 1); + +#if defined(DEBUG_DISPLAY) && defined(USE_APV_PROBE_OCCLUSION) + inputData.probeOcclusion = input.probeOcclusion; +#endif + + #if defined(DEBUG_DISPLAY) && !defined(PARTICLES_EDITOR_META_PASS) + inputData.vertexSH = input.vertexSH; + #endif +} + +/////////////////////////////////////////////////////////////////////////////// +// Vertex and Fragment functions // +/////////////////////////////////////////////////////////////////////////////// + +VaryingsParticle ParticlesLitVertex(AttributesParticle input) +{ + VaryingsParticle output = (VaryingsParticle)0; + + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz); + VertexNormalInputs normalInput = GetVertexNormalInputs(input.normalOS, input.tangentOS); + + half3 viewDirWS = GetWorldSpaceNormalizeViewDir(vertexInput.positionWS); + half3 vertexLight = VertexLighting(vertexInput.positionWS, half3(normalInput.normalWS)); + half fogFactor = 0.0; + #if !defined(_FOG_FRAGMENT) + fogFactor = ComputeFogFactor(vertexInput.positionCS.z); + #endif + +#ifdef _NORMALMAP + output.normalWS = half4(normalInput.normalWS, viewDirWS.x); + output.tangentWS = half4(normalInput.tangentWS, viewDirWS.y); + output.bitangentWS = half4(normalInput.bitangentWS, viewDirWS.z); +#else + output.normalWS = half3(normalInput.normalWS); + output.viewDirWS = viewDirWS; +#endif + +#if UNITY_VERSION >= 60000000 + OUTPUT_SH4(vertexInput.positionWS, output.normalWS.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), output.vertexSH, output.probeOcclusion); +#else + OUTPUT_SH(output.normalWS.xyz, output.vertexSH); +#endif + + output.positionWS.xyz = vertexInput.positionWS; + output.positionWS.w = fogFactor; + output.clipPos = vertexInput.positionCS; + output.color = GetParticleColor(input.color); + +#if defined(_FLIPBOOKBLENDING_ON) +#if defined(UNITY_PARTICLE_INSTANCING_ENABLED) + GetParticleTexcoords(output.texcoord, output.texcoord2AndBlend, input.texcoords.xyxy, 0.0); +#else + GetParticleTexcoords(output.texcoord, output.texcoord2AndBlend, input.texcoords, input.texcoordBlend); +#endif +#else + GetParticleTexcoords(output.texcoord, input.texcoords.xy); +#endif + +#if defined(_SOFTPARTICLES_ON) || defined(_FADING_ON) || defined(_DISTORTION_ON) + output.projectedPosition = vertexInput.positionNDC; +#endif + +#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + output.shadowCoord = GetShadowCoord(vertexInput); +#endif + + return output; +} + +half4 ParticlesLitFragment(VaryingsParticle input) : SV_Target +{ + UNITY_SETUP_INSTANCE_ID(input); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + ParticleParams particleParams; + InitParticleParams(input, particleParams); + + SurfaceData surfaceData; + InitializeParticleLitSurfaceData(particleParams, surfaceData); + + InputData inputData; + InitializeInputData(input, surfaceData.normalTS, inputData); + #if UNITY_VERSION >= 60000000 + SETUP_DEBUG_TEXTURE_DATA_FOR_TEX(inputData, input.texcoord, _BaseMap); + #else + SETUP_DEBUG_TEXTURE_DATA(inputData, input.texcoord, _BaseMap); + #endif + + // Standard URP PBR lighting calculation + half4 color = UniversalFragmentPBR(inputData, surfaceData); + + // Additional Area Light (only when enabled) + #if defined(_ENABLE_BG_AREA_LIGHTING) + color.rgb += EvaluateAreaLight(inputData, surfaceData); + #endif + + color.rgb = MixFog(color.rgb, inputData.fogCoord); + color.a = OutputAlpha(color.a, IsSurfaceTypeTransparent(_Surface)); + + return color; +} + +#endif // BADDOG_AREA_PARTICLES_FORWARD_LIT_PASS_INCLUDED + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLitForwardPass.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLitForwardPass.hlsl.meta new file mode 100644 index 00000000..a9d64c14 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLitForwardPass.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: e808e29fa69a12f4592e75201b077d20 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaParticleLitForwardPass.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLit.shader b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLit.shader new file mode 100644 index 00000000..b6b3b893 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLit.shader @@ -0,0 +1,408 @@ +// Shader targeted for low end devices. Single Pass Forward Rendering with Area Light Support. +Shader "BadDog/URP/BGAreaSimpleLit" +{ + // Keep properties of StandardSpecular shader for upgrade reasons. + Properties + { + [MainTexture] _BaseMap("Base Map (RGB) Smoothness / Alpha (A)", 2D) = "white" {} + [MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1) + + _Cutoff("Alpha Clipping", Range(0.0, 1.0)) = 0.5 + + _Smoothness("Smoothness", Range(0.0, 1.0)) = 0.5 + _SpecColor("Specular Color", Color) = (0.5, 0.5, 0.5, 0.5) + _SpecGlossMap("Specular Map", 2D) = "white" {} + _SmoothnessSource("Smoothness Source", Float) = 0.0 + _SpecularHighlights("Specular Highlights", Float) = 1.0 + + [HideInInspector] _BumpScale("Scale", Float) = 1.0 + [NoScaleOffset] _BumpMap("Normal Map", 2D) = "bump" {} + + [HDR] _EmissionColor("Emission Color", Color) = (0,0,0) + [NoScaleOffset]_EmissionMap("Emission Map", 2D) = "white" {} + + // Blending state + _Surface("__surface", Float) = 0.0 + _Blend("__blend", Float) = 0.0 + _Cull("__cull", Float) = 2.0 + [ToggleUI] _AlphaClip("__clip", Float) = 0.0 + [HideInInspector] _SrcBlend("__src", Float) = 1.0 + [HideInInspector] _DstBlend("__dst", Float) = 0.0 + [HideInInspector] _SrcBlendAlpha("__srcA", Float) = 1.0 + [HideInInspector] _DstBlendAlpha("__dstA", Float) = 0.0 + [HideInInspector] _ZWrite("__zw", Float) = 1.0 + [HideInInspector] _BlendModePreserveSpecular("_BlendModePreserveSpecular", Float) = 1.0 + [HideInInspector] _AlphaToMask("__alphaToMask", Float) = 0.0 + [HideInInspector] _AddPrecomputedVelocity("_AddPrecomputedVelocity", Float) = 0.0 + [HideInInspector] _XRMotionVectorsPass("_XRMotionVectorsPass", Float) = 1.0 + + [ToggleUI] _ReceiveShadows("Receive Shadows", Float) = 1.0 + // Editmode props + _QueueOffset("Queue offset", Float) = 0.0 + + // ObsoleteProperties + [HideInInspector] _MainTex("BaseMap", 2D) = "white" {} + [HideInInspector] _Color("Base Color", Color) = (1, 1, 1, 1) + [HideInInspector] _Shininess("Smoothness", Float) = 0.0 + [HideInInspector] _GlossinessSource("GlossinessSource", Float) = 0.0 + [HideInInspector] _SpecSource("SpecularHighlights", Float) = 0.0 + + [HideInInspector][NoScaleOffset]unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {} + [HideInInspector][NoScaleOffset]unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {} + [HideInInspector][NoScaleOffset]unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {} + } + + SubShader + { + Tags + { + "RenderType" = "Opaque" + "RenderPipeline" = "UniversalPipeline" + "UniversalMaterialType" = "SimpleLit" + "IgnoreProjector" = "True" + } + LOD 300 + + Pass + { + Name "ForwardLit" + Tags + { + "LightMode" = "UniversalForwardOnly" + } + + // ------------------------------------- + // Render State Commands + // Use same blending / depth states as Standard shader + Blend[_SrcBlend][_DstBlend], [_SrcBlendAlpha][_DstBlendAlpha] + ZWrite[_ZWrite] + Cull[_Cull] + AlphaToMask[_AlphaToMask] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex LitPassVertexSimple + #pragma fragment LitPassFragmentSimple + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _NORMALMAP + #pragma shader_feature_local_fragment _EMISSION + #pragma shader_feature_local _RECEIVE_SHADOWS_OFF + #pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT + #pragma shader_feature_local_fragment _ALPHATEST_ON + #pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON + #pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR + #pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA + + // ------------------------------------- + // Universal Pipeline keywords + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN + #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX + #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING + #pragma multi_compile _ SHADOWS_SHADOWMASK + #pragma multi_compile _ _LIGHT_LAYERS + #if UNITY_VERSION >= 60000100 + #pragma multi_compile _ _CLUSTER_LIGHT_LOOP + #else + #pragma multi_compile _ _FORWARD_PLUS + #endif + #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS + #pragma multi_compile_fragment _ _ENABLE_BG_AREA_LIGHTING + #pragma multi_compile_fragment _ _BG_AREALIGHT_SHADOWS_PCF2X2 _BG_AREALIGHT_SHADOWS_TENT5X5 _BG_AREALIGHT_SHADOWS_TENT7X7 _BG_AREALIGHT_SHADOWS_PCSS + #pragma multi_compile_fragment _ _SHADOWS_SOFT + #pragma multi_compile_fragment _ _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH + #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION + #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma multi_compile_fragment _ _LIGHT_COOKIES + #if UNITY_VERSION >= 60000000 + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" + #endif + #if UNITY_VERSION >= 60000100 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Fog.hlsl" + #else + #pragma multi_compile_fog + #endif + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ DIRLIGHTMAP_COMBINED + #pragma multi_compile _ LIGHTMAP_ON + #if UNITY_VERSION >= 60000100 + #pragma multi_compile_fragment _ LIGHTMAP_BICUBIC_SAMPLING + #endif + #pragma multi_compile _ DYNAMICLIGHTMAP_ON + #pragma multi_compile _ USE_LEGACY_LIGHTMAPS + #pragma multi_compile_fragment _ DEBUG_DISPLAY + #pragma multi_compile _ LOD_FADE_CROSSFADE + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #pragma instancing_options renderinglayer + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + //-------------------------------------- + // Defines + #define BUMP_SCALE_NOT_SUPPORTED 1 + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl" + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLitForwardPass.hlsl" + ENDHLSL + } + + Pass + { + Name "ShadowCaster" + Tags + { + "LightMode" = "ShadowCaster" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + ZTest LEqual + ColorMask 0 + Cull[_Cull] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex ShadowPassVertex + #pragma fragment ShadowPassFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _ALPHATEST_ON + #pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ LOD_FADE_CROSSFADE + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // This is used during shadow map generation to differentiate between directional and punctual light shadows, as they use different formulas to apply Normal Bias + #pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl" + ENDHLSL + } + + Pass + { + Name "DepthOnly" + Tags + { + "LightMode" = "DepthOnly" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + ColorMask R + Cull[_Cull] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex DepthOnlyVertex + #pragma fragment DepthOnlyFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _ALPHATEST_ON + #pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ LOD_FADE_CROSSFADE + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl" + ENDHLSL + } + + // This pass is used when drawing to a _CameraNormalsTexture texture + Pass + { + Name "DepthNormals" + Tags + { + "LightMode" = "DepthNormals" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + Cull[_Cull] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex DepthNormalsVertex + #pragma fragment DepthNormalsFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _NORMALMAP + #pragma shader_feature_local _ALPHATEST_ON + #pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ LOD_FADE_CROSSFADE + + // Universal Pipeline keywords + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitDepthNormalsPass.hlsl" + ENDHLSL + } + + // This pass it not used during regular rendering, only for lightmap baking. + Pass + { + Name "Meta" + Tags + { + "LightMode" = "Meta" + } + + // ------------------------------------- + // Render State Commands + Cull Off + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex UniversalVertexMeta + #pragma fragment UniversalFragmentMetaSimple + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local_fragment _EMISSION + #pragma shader_feature_local_fragment _SPECGLOSSMAP + #pragma shader_feature EDITOR_VISUALIZATION + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitMetaPass.hlsl" + + ENDHLSL + } + + Pass + { + Name "Universal2D" + Tags + { + "LightMode" = "Universal2D" + "RenderType" = "Transparent" + "Queue" = "Transparent" + } + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex vert + #pragma fragment frag + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local_fragment _ALPHATEST_ON + #pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/Utils/Universal2D.hlsl" + ENDHLSL + } + + Pass + { + Name "MotionVectors" + Tags { "LightMode" = "MotionVectors" } + ColorMask RG + + HLSLPROGRAM + #pragma shader_feature_local _ALPHATEST_ON + #pragma multi_compile _ LOD_FADE_CROSSFADE + #pragma shader_feature_local_vertex _ADD_PRECOMPUTED_VELOCITY + + #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ObjectMotionVectors.hlsl" + ENDHLSL + } + + Pass + { + Name "XRMotionVectors" + Tags { "LightMode" = "XRMotionVectors" } + ColorMask RGBA + + // Stencil write for obj motion pixels + Stencil + { + WriteMask 1 + Ref 1 + Comp Always + Pass Replace + } + + HLSLPROGRAM + #pragma shader_feature_local _ALPHATEST_ON + #pragma multi_compile _ LOD_FADE_CROSSFADE + #pragma shader_feature_local_vertex _ADD_PRECOMPUTED_VELOCITY + #define APPLICATION_SPACE_WARP_MOTION 1 + #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ObjectMotionVectors.hlsl" + ENDHLSL + } + } + + Fallback "Hidden/Universal Render Pipeline/FallbackError" + CustomEditor "UnityEditor.Rendering.Universal.ShaderGUI.SimpleLitShader" +} diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLit.shader.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLit.shader.meta new file mode 100644 index 00000000..7d1e1203 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLit.shader.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: 944f87dd0be44d4438c1ee0fb085c7fa +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLit.shader + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLitForwardPass.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLitForwardPass.hlsl new file mode 100644 index 00000000..de2dde6a --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLitForwardPass.hlsl @@ -0,0 +1,247 @@ +#ifndef BADDOG_AREA_SIMPLE_LIT_PASS_INCLUDED +#define BADDOG_AREA_SIMPLE_LIT_PASS_INCLUDED + +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" +#if defined(LOD_FADE_CROSSFADE) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" +#endif + +// Include Area Light support +#include "Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl" + +struct Attributes +{ + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + float4 tangentOS : TANGENT; + float2 texcoord : TEXCOORD0; + float2 staticLightmapUV : TEXCOORD1; + float2 dynamicLightmapUV : TEXCOORD2; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct Varyings +{ + float2 uv : TEXCOORD0; + + float3 positionWS : TEXCOORD1; // xyz: posWS + + #ifdef _NORMALMAP + half4 normalWS : TEXCOORD2; // xyz: normal, w: viewDir.x + half4 tangentWS : TEXCOORD3; // xyz: tangent, w: viewDir.y + half4 bitangentWS : TEXCOORD4; // xyz: bitangent, w: viewDir.z + #else + half3 normalWS : TEXCOORD2; + #endif + + #ifdef _ADDITIONAL_LIGHTS_VERTEX + half4 fogFactorAndVertexLight : TEXCOORD5; // x: fogFactor, yzw: vertex light + #else + half fogFactor : TEXCOORD5; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD6; + #endif + + DECLARE_LIGHTMAP_OR_SH(staticLightmapUV, vertexSH, 7); + +#ifdef DYNAMICLIGHTMAP_ON + float2 dynamicLightmapUV : TEXCOORD8; // Dynamic lightmap UVs +#endif + +#ifdef USE_APV_PROBE_OCCLUSION + float4 probeOcclusion : TEXCOORD9; +#endif + + float4 positionCS : SV_POSITION; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO +}; + +void InitializeInputData(Varyings input, half3 normalTS, out InputData inputData) +{ + inputData = (InputData)0; + + inputData.positionWS = input.positionWS; +#if defined(DEBUG_DISPLAY) + inputData.positionCS = input.positionCS; +#endif + + #ifdef _NORMALMAP + half3 viewDirWS = half3(input.normalWS.w, input.tangentWS.w, input.bitangentWS.w); + inputData.tangentToWorld = half3x3(input.tangentWS.xyz, input.bitangentWS.xyz, input.normalWS.xyz); + inputData.normalWS = TransformTangentToWorld(normalTS, inputData.tangentToWorld); + #else + half3 viewDirWS = GetWorldSpaceNormalizeViewDir(inputData.positionWS); + inputData.normalWS = input.normalWS; + #endif + + inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS); + viewDirWS = SafeNormalize(viewDirWS); + + inputData.viewDirectionWS = viewDirWS; + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + inputData.shadowCoord = input.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + inputData.shadowCoord = TransformWorldToShadowCoord(inputData.positionWS); + #else + inputData.shadowCoord = float4(0, 0, 0, 0); + #endif + + #ifdef _ADDITIONAL_LIGHTS_VERTEX + inputData.fogCoord = InitializeInputDataFog(float4(inputData.positionWS, 1.0), input.fogFactorAndVertexLight.x); + inputData.vertexLighting = input.fogFactorAndVertexLight.yzw; + #else + inputData.fogCoord = InitializeInputDataFog(float4(inputData.positionWS, 1.0), input.fogFactor); + inputData.vertexLighting = half3(0, 0, 0); + #endif + + inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(input.positionCS); + + #if defined(DEBUG_DISPLAY) + #if defined(DYNAMICLIGHTMAP_ON) + inputData.dynamicLightmapUV = input.dynamicLightmapUV.xy; + #endif + #if defined(LIGHTMAP_ON) + inputData.staticLightmapUV = input.staticLightmapUV; + #else + inputData.vertexSH = input.vertexSH; + #endif + #if defined(USE_APV_PROBE_OCCLUSION) + inputData.probeOcclusion = input.probeOcclusion; + #endif + #endif +} + +void InitializeBakedGIData(Varyings input, inout InputData inputData) +{ +#if defined(DYNAMICLIGHTMAP_ON) + inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, input.dynamicLightmapUV, input.vertexSH, inputData.normalWS); + inputData.shadowMask = SAMPLE_SHADOWMASK(input.staticLightmapUV); +#elif !defined(LIGHTMAP_ON) && (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) + inputData.bakedGI = SAMPLE_GI(input.vertexSH, + GetAbsolutePositionWS(inputData.positionWS), + inputData.normalWS, + inputData.viewDirectionWS, + input.positionCS.xy, + input.probeOcclusion, + inputData.shadowMask); +#else + inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, input.vertexSH, inputData.normalWS); + inputData.shadowMask = SAMPLE_SHADOWMASK(input.staticLightmapUV); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +// Vertex and Fragment functions // +/////////////////////////////////////////////////////////////////////////////// + +// Used in Standard (Simple Lighting) shader +Varyings LitPassVertexSimple(Attributes input) +{ + Varyings output = (Varyings)0; + + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz); + VertexNormalInputs normalInput = GetVertexNormalInputs(input.normalOS, input.tangentOS); + +#if defined(_FOG_FRAGMENT) + half fogFactor = 0; +#else + half fogFactor = ComputeFogFactor(vertexInput.positionCS.z); +#endif + + output.uv = TRANSFORM_TEX(input.texcoord, _BaseMap); + output.positionWS.xyz = vertexInput.positionWS; + output.positionCS = vertexInput.positionCS; + +#ifdef _NORMALMAP + half3 viewDirWS = GetWorldSpaceViewDir(vertexInput.positionWS); + output.normalWS = half4(normalInput.normalWS, viewDirWS.x); + output.tangentWS = half4(normalInput.tangentWS, viewDirWS.y); + output.bitangentWS = half4(normalInput.bitangentWS, viewDirWS.z); +#else + output.normalWS = NormalizeNormalPerVertex(normalInput.normalWS); +#endif + + OUTPUT_LIGHTMAP_UV(input.staticLightmapUV, unity_LightmapST, output.staticLightmapUV); +#ifdef DYNAMICLIGHTMAP_ON + output.dynamicLightmapUV = input.dynamicLightmapUV.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; +#endif +#if UNITY_VERSION >= 60000000 + OUTPUT_SH4(vertexInput.positionWS, output.normalWS.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), output.vertexSH, output.probeOcclusion); +#else + OUTPUT_SH(output.normalWS.xyz, output.vertexSH); +#endif + + #ifdef _ADDITIONAL_LIGHTS_VERTEX + half3 vertexLight = VertexLighting(vertexInput.positionWS, normalInput.normalWS); + output.fogFactorAndVertexLight = half4(fogFactor, vertexLight); + #else + output.fogFactor = fogFactor; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + output.shadowCoord = GetShadowCoord(vertexInput); + #endif + + return output; +} + +// Used for StandardSimpleLighting shader with Area Light support +void LitPassFragmentSimple( + Varyings input + , out half4 outColor : SV_Target0 +#ifdef _WRITE_RENDERING_LAYERS + , out uint outRenderingLayers : SV_Target1 +#endif +) +{ + UNITY_SETUP_INSTANCE_ID(input); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + SurfaceData surfaceData; + InitializeSimpleLitSurfaceData(input.uv, surfaceData); + +#ifdef LOD_FADE_CROSSFADE + LODFadeCrossFade(input.positionCS); +#endif + + InputData inputData; + InitializeInputData(input, surfaceData.normalTS, inputData); + #if UNITY_VERSION >= 60000000 + SETUP_DEBUG_TEXTURE_DATA(inputData, UNDO_TRANSFORM_TEX(input.uv, _BaseMap)); + #else + SETUP_DEBUG_TEXTURE_DATA(inputData, input.uv, _BaseMap); + #endif + +#if defined(_DBUFFER) + ApplyDecalToSurfaceData(input.positionCS, surfaceData, inputData); +#endif + + InitializeBakedGIData(input, inputData); + + // Standard URP SimpleLit lighting calculation (Blinn-Phong) + half4 color = UniversalFragmentBlinnPhong(inputData, surfaceData); + + // Additional Area Light (only when enabled) + #if defined(_ENABLE_BG_AREA_LIGHTING) + color.rgb += EvaluateAreaLight(inputData, surfaceData); + #endif + + color.rgb = MixFog(color.rgb, inputData.fogCoord); + color.a = OutputAlpha(color.a, IsSurfaceTypeTransparent(_Surface)); + + outColor = color; + +#ifdef _WRITE_RENDERING_LAYERS + outRenderingLayers = EncodeMeshRenderingLayer(); +#endif +} + +#endif diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLitForwardPass.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLitForwardPass.hlsl.meta new file mode 100644 index 00000000..f8d68790 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLitForwardPass.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 31e39004ca00d8d489eb5985b35f6f2f +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSimpleLitForwardPass.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLit.shader b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLit.shader new file mode 100644 index 00000000..5df01a4e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLit.shader @@ -0,0 +1,229 @@ +Shader "BadDog/URP/BGAreaSpineLit" +{ + Properties + { + _Cutoff("Shadow alpha cutoff", Range(0, 1)) = 0.1 + [NoScaleOffset] _MainTex("Main Texture", 2D) = "black" {} + [Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0 + [Toggle(_ZWRITE)] _ZWrite("Depth Write", Float) = 0.0 + [Toggle(_RECEIVE_SHADOWS)] _ReceiveShadows("Receive Shadows", Int) = 0 + [Toggle(_DOUBLE_SIDED_LIGHTING)] _DoubleSidedLighting("Double-Sided Lighting", Int) = 0 + [MaterialToggle(_LIGHT_AFFECTS_ADDITIVE)] _LightAffectsAdditive("Light Affects Additive", Float) = 0 + [MaterialToggle(_TINT_BLACK_ON)] _TintBlack("Tint Black", Float) = 0 + _Color(" Light Color", Color) = (1, 1, 1, 1) + _Black(" Dark Color", Color) = (0, 0, 0, 0) + [MaterialToggle(_ADAPTIVE_PROBE_VOLUMES_PER_PIXEL)] _AdaptiveProbeVolumesPerPixel("APV per Pixel", Float) = 1 + [HideInInspector] _StencilRef("Stencil Reference", Float) = 1.0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Compare", Float) = 8 + } + + SubShader + { + Tags + { + "RenderPipeline" = "UniversalPipeline" + "Queue" = "Transparent" + "IgnoreProjector" = "True" + "RenderType" = "Transparent" + } + LOD 100 + + Cull Off + ZWrite[_ZWrite] + Blend One OneMinusSrcAlpha + + Stencil + { + Ref[_StencilRef] + Comp[_StencilComp] + Pass Keep + } + + Pass + { + Name "ForwardLit" + Tags { "LightMode" = "UniversalForward" } + + ZWrite[_ZWrite] + Cull Off + Blend One OneMinusSrcAlpha + + HLSLPROGRAM + // Required to compile gles 2.0 with standard srp library + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + + // ------------------------------------- + // Universal Pipeline keywords + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN + #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS + #pragma multi_compile _ _SHADOWS_SOFT + #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE + #pragma multi_compile _ _LIGHT_AFFECTS_ADDITIVE + #pragma multi_compile_fragment _ _LIGHT_COOKIES + #pragma shader_feature _TINT_BLACK_ON + #pragma multi_compile_fragment _ _ENABLE_BG_AREA_LIGHTING + + #pragma multi_compile _ _LIGHT_LAYERS + #if UNITY_VERSION >= 60000100 + #pragma multi_compile _ _CLUSTER_LIGHT_LOOP + #else + #pragma multi_compile _ _FORWARD_PLUS + #endif + + // ------------------------------------- + // Unity defined keywords + #if UNITY_VERSION >= 60000000 + #pragma multi_compile_fragment _ DEBUG_DISPLAY + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" + #endif + #if UNITY_VERSION >= 60000100 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Fog.hlsl" + #else + #pragma multi_compile_fog + #endif + + // ------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #pragma instancing_options renderinglayer + + // ------------------------------------- + // Spine related keywords + #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT + #pragma shader_feature _ _DOUBLE_SIDED_LIGHTING + #pragma shader_feature _RECEIVE_SHADOWS_OFF _RECEIVE_SHADOWS + + #pragma vertex vert + #pragma fragment frag + + #undef LIGHTMAP_ON + + #define USE_URP + #define fixed4 half4 + #define fixed3 half3 + #define fixed half + + #define BGAREA_SPINE_PASS_FORWARDLIT + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl" + #undef BGAREA_SPINE_PASS_FORWARDLIT + ENDHLSL + } + + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + ZWrite On + ColorMask 0 + ZTest LEqual + Cull Off + + HLSLPROGRAM + // Required to compile gles 2.0 with standard srp library + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + #pragma target 2.0 + + // ------------------------------------- + // Material Keywords + #pragma shader_feature _ALPHATEST_ON + + // ------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _DOUBLE_SIDED_LIGHTING + + #pragma vertex ShadowPassVertexSkeletonLit + #pragma fragment ShadowPassFragmentSkeletonLit + + #define USE_URP + #define fixed4 half4 + #define fixed3 half3 + #define fixed half + + #define BGAREA_SPINE_PASS_SHADOWCASTER + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl" + #undef BGAREA_SPINE_PASS_SHADOWCASTER + ENDHLSL + } + + Pass + { + Name "DepthOnly" + Tags { "LightMode" = "DepthOnly" } + + ZWrite On + ColorMask R + Cull Off + + HLSLPROGRAM + // Required to compile gles 2.0 with standard srp library + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + + #pragma vertex DepthOnlyVertex + #pragma fragment DepthOnlyFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature _ALPHATEST_ON + #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + + // ------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + + #define USE_URP + #define fixed4 half4 + #define fixed3 half3 + #define fixed half + + #define BGAREA_SPINE_PASS_DEPTHONLY + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl" + #undef BGAREA_SPINE_PASS_DEPTHONLY + ENDHLSL + } + + // This pass is used when drawing to a _CameraNormalsTexture texture + Pass + { + Name "DepthNormals" + Tags { "LightMode" = "DepthNormals" } + + ZWrite On + + HLSLPROGRAM + #pragma vertex DepthNormalsVertex + #pragma fragment DepthNormalsFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature _ALPHATEST_ON + #pragma shader_feature _ _DOUBLE_SIDED_LIGHTING + + // ------------------------------------- + // Universal Pipeline keywords + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + // ------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + + #define USE_URP + #define fixed4 half4 + #define fixed3 half3 + #define fixed half + + #define BGAREA_SPINE_PASS_DEPTHNORMALS + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl" + #undef BGAREA_SPINE_PASS_DEPTHNORMALS + ENDHLSL + } + } + + FallBack "Universal Render Pipeline/Unlit" +} diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLit.shader.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLit.shader.meta new file mode 100644 index 00000000..f74f7a3a --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLit.shader.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: f879e5cab3db4519a757f17400a9de49 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLit.shader + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl new file mode 100644 index 00000000..d979be84 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl @@ -0,0 +1,601 @@ +#ifndef BADDOG_AREA_SPINE_LIT_PASSES_INCLUDED +#define BADDOG_AREA_SPINE_LIT_PASSES_INCLUDED + +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + +#undef LIGHTMAP_ON + +CBUFFER_START(UnityPerMaterial) + float4 _MainTex_ST; + half _Cutoff; + half4 _Color; + half4 _Black; +CBUFFER_END + +sampler2D _MainTex; + +inline half3 BGSpine_GammaToTargetSpace(half3 gammaColor) +{ +#if UNITY_COLORSPACE_GAMMA + return gammaColor; +#else + return SRGBToLinear(gammaColor); +#endif +} + +inline half4 BGSpine_PMAGammaToTargetSpace(half4 gammaPMAColor) +{ +#if UNITY_COLORSPACE_GAMMA + return gammaPMAColor; +#else + return gammaPMAColor.a == 0 + ? half4(SRGBToLinear(gammaPMAColor.rgb), gammaPMAColor.a) + : half4(SRGBToLinear(gammaPMAColor.rgb / gammaPMAColor.a) * gammaPMAColor.a, gammaPMAColor.a); +#endif +} + +float4 BGSpine_fragTintedColor(float4 texColor, float3 darkTintColor, float4 lightTintColorPMA, float lightColorAlpha, float darkColorAlpha) +{ + float a = texColor.a * lightTintColorPMA.a; + +#if !defined(_STRAIGHT_ALPHA_INPUT) + float3 texDarkColor = texColor.a - texColor.rgb; +#else + float3 texDarkColor = (1 - texColor.rgb); +#endif + float3 darkColor = texDarkColor * darkTintColor.rgb * lightColorAlpha; + float3 lightColor = texColor.rgb * lightTintColorPMA.rgb; + + float4 fragColor = float4(darkColor + lightColor, a); +#if defined(_STRAIGHT_ALPHA_INPUT) + fragColor.rgb *= texColor.a; +#endif + +#if defined(_DARK_COLOR_ALPHA_ADDITIVE) + fragColor.a = a * (1 - darkColorAlpha); +#endif + return fragColor; +} + +#if defined(_WRITE_RENDERING_LAYERS) || defined(_LIGHT_LAYERS) +uint BGSpine_GetMeshRenderingLayerBackwardsCompatible() +{ + // URP 14+ exposes GetMeshRenderingLayer(). Older: GetMeshRenderingLightLayer(). + // We prefer the 14+ API when present. + #if defined(SHADER_API_GLES) || defined(SHADER_API_GLES3) + // No reliable version macro on all targets; best-effort fallback. + return 0; + #else + #if defined(UNIVERSAL_REALTIME_LIGHTS_INCLUDED) + // In URP 17 this exists. + return GetMeshRenderingLayer(); + #else + return 0; + #endif + #endif +} +#else +uint BGSpine_GetMeshRenderingLayerBackwardsCompatible() +{ + return 0; +} +#endif + +// ----------------------------------------------------------------------------- +// ShadowCaster pass (names kept to match existing shader pragmas) +// ----------------------------------------------------------------------------- +#if defined(BGAREA_SPINE_PASS_SHADOWCASTER) + +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl" + +float3 _LightDirection; + +struct AttributesSpine +{ + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + float4 vertexColor : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct VaryingsSpine +{ + float4 positionCS : SV_POSITION; + float4 texcoordAndAlpha : TEXCOORD0; +}; + +float4 GetShadowPositionHClip(float3 positionOS, half3 normalWS) +{ + float3 positionWS = TransformObjectToWorld(positionOS); + float4 positionCS = TransformWorldToHClip(ApplyShadowBias(positionWS, normalWS, _LightDirection)); + +#if UNITY_REVERSED_Z + positionCS.z = min(positionCS.z, positionCS.w * UNITY_NEAR_CLIP_VALUE); +#else + positionCS.z = max(positionCS.z, positionCS.w * UNITY_NEAR_CLIP_VALUE); +#endif + + return positionCS; +} + +VaryingsSpine ShadowPassVertexSkeletonLit(AttributesSpine input) +{ + VaryingsSpine output; + UNITY_SETUP_INSTANCE_ID(input); + + output.texcoordAndAlpha.xyz = float3(TRANSFORM_TEX(input.texcoord, _MainTex).xy, 0); + + half3 fixedNormalOS = half3(0, 0, -1); + half3 normalWS = normalize(TransformObjectToWorldNormal(fixedNormalOS)); +#ifdef _DOUBLE_SIDED_LIGHTING + half3 viewDirWS = UNITY_MATRIX_V[2].xyz; + half faceSign = sign(dot(viewDirWS, normalWS)); + normalWS *= faceSign; +#endif + + output.positionCS = GetShadowPositionHClip(input.positionOS.xyz, normalWS); + output.texcoordAndAlpha.a = input.vertexColor.a; + return output; +} + +half4 ShadowPassFragmentSkeletonLit(VaryingsSpine input) : SV_TARGET +{ + fixed4 texureColor = tex2D(_MainTex, input.texcoordAndAlpha.xy); + clip(texureColor.a * input.texcoordAndAlpha.a - _Cutoff); + return 0; +} + +#endif // BGAREA_SPINE_PASS_SHADOWCASTER + +// ----------------------------------------------------------------------------- +// DepthOnly pass +// ----------------------------------------------------------------------------- +#if defined(BGAREA_SPINE_PASS_DEPTHONLY) + +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + +struct AttributesSpine +{ + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + float4 vertexColor : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct VaryingsSpine +{ + float4 positionCS : SV_POSITION; + float4 texcoordAndAlpha : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; + +VaryingsSpine DepthOnlyVertex(AttributesSpine input) +{ + VaryingsSpine output = (VaryingsSpine)0; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + output.texcoordAndAlpha.xyz = float3(TRANSFORM_TEX(input.texcoord, _MainTex).xy, 0); + output.texcoordAndAlpha.a = input.vertexColor.a; + output.positionCS = TransformObjectToHClip(input.positionOS.xyz); + return output; +} + +half4 DepthOnlyFragment(VaryingsSpine input) : SV_TARGET +{ + fixed4 texureColor = tex2D(_MainTex, input.texcoordAndAlpha.xy); + clip(texureColor.a * input.texcoordAndAlpha.a - _Cutoff); + return input.positionCS.z; +} + +#endif // BGAREA_SPINE_PASS_DEPTHONLY + +// ----------------------------------------------------------------------------- +// DepthNormals pass +// ----------------------------------------------------------------------------- +#if defined(BGAREA_SPINE_PASS_DEPTHNORMALS) + +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + +struct AttributesSpine +{ + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + float4 vertexColor : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct VaryingsSpine +{ + float3 normalWS : NORMAL; + float4 positionCS : SV_POSITION; + float4 texcoordAndAlpha : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; + +VaryingsSpine DepthNormalsVertex(AttributesSpine input) +{ + VaryingsSpine output = (VaryingsSpine)0; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + half3 fixedNormal = half3(0, 0, -1); + half3 normalWS = normalize(mul((float3x3)unity_ObjectToWorld, fixedNormal)); + +#ifdef _DOUBLE_SIDED_LIGHTING + half3 viewDirWS = UNITY_MATRIX_V[2].xyz; + half faceSign = sign(dot(viewDirWS, normalWS)); + normalWS *= faceSign; +#endif + output.normalWS = normalWS; + + output.texcoordAndAlpha.xyz = float3(TRANSFORM_TEX(input.texcoord, _MainTex).xy, 0); + output.texcoordAndAlpha.a = input.vertexColor.a; + output.positionCS = TransformObjectToHClip(input.positionOS.xyz); + return output; +} + +void DepthNormalsFragment( + VaryingsSpine input, + out half4 outNormalWS : SV_Target0 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 +#endif +) +{ + fixed4 texureColor = tex2D(_MainTex, input.texcoordAndAlpha.xy); + clip(texureColor.a * input.texcoordAndAlpha.a - _Cutoff); + + float3 normalWS = input.normalWS; +#if defined(_GBUFFER_NORMALS_OCT) + float2 octNormalWS = PackNormalOctQuadEncode(normalWS); + float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); + half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); + outNormalWS = half4(packedNormalWS, 0.0); +#else + outNormalWS = half4(normalWS, 0.0); +#endif + +#ifdef _WRITE_RENDERING_LAYERS + uint renderingLayers = BGSpine_GetMeshRenderingLayerBackwardsCompatible(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); +#endif +} + +#endif // BGAREA_SPINE_PASS_DEPTHNORMALS + +// ----------------------------------------------------------------------------- +// ForwardLit pass +// ----------------------------------------------------------------------------- +#if defined(BGAREA_SPINE_PASS_FORWARDLIT) + +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl" + +// Unity 6 / URP 17: _FORWARD_PLUS keywords/macros were deprecated in favor of _CLUSTER_LIGHT_LOOP. +// Keep the existing Spine-derived code path compiling by mapping the deprecated macro to the new one. +#if USE_CLUSTER_LIGHT_LOOP && !defined(FORWARD_PLUS_SUBTRACTIVE_LIGHT_CHECK) + #define FORWARD_PLUS_SUBTRACTIVE_LIGHT_CHECK CLUSTER_LIGHT_LOOP_SUBTRACTIVE_LIGHT_CHECK +#endif + +// Area light include (arealight package) +#include "Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl" + +// Receive shadows for main light when requested +#if (defined(_MAIN_LIGHT_SHADOWS) || defined(MAIN_LIGHT_CALCULATE_SHADOWS)) && !defined(_RECEIVE_SHADOWS_OFF) + #define BGAREA_SPINE_RECEIVE_SHADOWS +#endif + +// Fog keyword guard (mirrors your modified file) +#if !(defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2)) + #undef _FOG +#endif + +// Adaptive Probe Volumes (keep behavior close to Spine) +#if !defined(DYNAMICLIGHTMAP_ON) && !defined(LIGHTMAP_ON) && (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && defined(__PROBEVOLUME_HLSL__) + #define BGAREA_SPINE_USE_ADAPTIVE_PROBE_VOLUMES +#endif + +struct appdata +{ + float3 pos : POSITION; + float3 normal : NORMAL; + half4 color : COLOR; + float2 uv0 : TEXCOORD0; +#if defined(_TINT_BLACK_ON) + float2 tintBlackRG : TEXCOORD1; + float2 tintBlackB : TEXCOORD2; +#endif + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct VertexOutput +{ + half4 color : COLOR0; + +#if defined(_FOG) + float3 uv0AndFog : TEXCOORD0; +#else + float2 uv0 : TEXCOORD0; +#endif + float4 pos : SV_POSITION; + +#if defined(BGAREA_SPINE_RECEIVE_SHADOWS) + float4 shadowCoord : TEXCOORD1; + half3 shadowedColor : TEXCOORD2; +#endif + + // Always provide position/normal for per-pixel area light and (optional) Forward+/APV. + float3 positionWS : TEXCOORD3; + half3 normalWS : TEXCOORD4; + +#if defined(_TINT_BLACK_ON) + float3 darkColor : TEXCOORD5; +#endif + +#if defined(BGAREA_SPINE_USE_ADAPTIVE_PROBE_VOLUMES) && defined(_ADAPTIVE_PROBE_VOLUMES_PER_PIXEL) + float3 positionCS : TEXCOORD6; +#endif + + UNITY_VERTEX_OUTPUT_STEREO +}; + +#if defined(_FOG) + #define BGSpine_PackedUV0(i) (i.uv0AndFog.xy) + #define BGSpine_PackedFog(i) (i.uv0AndFog.z) +#else + #define BGSpine_PackedUV0(i) (i.uv0.xy) +#endif + +half3 BGSpine_ProcessLight(float3 positionWS, half3 normalWS, uint meshRenderingLayers, int lightIndex) +{ + Light light = GetAdditionalLight(lightIndex, positionWS); +#ifdef USE_LIGHT_LAYERS + if (!IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) + return half3(0, 0, 0); +#endif + + half3 attenuatedLightColor = light.color * (light.distanceAttenuation * light.shadowAttenuation); + return LightingLambert(attenuatedLightColor, light.direction, normalWS); +} + +half3 BGSpine_LightweightLightVertexSimplified(float3 positionWS, half3 normalWS, out half3 shadowedColor) +{ + Light mainLight = GetMainLight(); + half3 attenuatedLightColor = mainLight.color * (mainLight.distanceAttenuation * mainLight.shadowAttenuation); + half3 mainLightColor = LightingLambert(attenuatedLightColor, mainLight.direction, normalWS); + + half3 additionalLightColor = half3(0, 0, 0); + // Note: we don't add any lighting in the fragment shader in non-Forward+ case. +#if defined(_ADDITIONAL_LIGHTS) || defined(_ADDITIONAL_LIGHTS_VERTEX) + uint meshRenderingLayers = BGSpine_GetMeshRenderingLayerBackwardsCompatible(); +#if USE_FORWARD_PLUS || USE_CLUSTER_LIGHT_LOOP + for (uint lightIndex = 0; lightIndex < min(URP_FP_DIRECTIONAL_LIGHTS_COUNT, MAX_VISIBLE_LIGHTS); lightIndex++) + { + FORWARD_PLUS_SUBTRACTIVE_LIGHT_CHECK + additionalLightColor += BGSpine_ProcessLight(positionWS, normalWS, meshRenderingLayers, (int)lightIndex); + } +#else + uint pixelLightCount = GetAdditionalLightsCount(); + for (uint lightIndex = 0u; lightIndex < pixelLightCount; ++lightIndex) + { + additionalLightColor += BGSpine_ProcessLight(positionWS, normalWS, meshRenderingLayers, (int)lightIndex); + } +#endif +#endif + + shadowedColor = additionalLightColor; + return mainLightColor + additionalLightColor; +} + +#if defined(_ADDITIONAL_LIGHTS) && (USE_FORWARD_PLUS || USE_CLUSTER_LIGHT_LOOP) +half3 BGSpine_LightweightLightFragmentSimplified(float3 positionWS, float2 positionCS, half3 normalWS, out half3 shadowedColor) +{ + half3 additionalLightColor = half3(0, 0, 0); + shadowedColor = half3(0, 0, 0); + + // LIGHT_LOOP_BEGIN needs these fields. + InputData inputData; + inputData.positionWS = positionWS; + inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(positionCS); + + uint meshRenderingLayers = BGSpine_GetMeshRenderingLayerBackwardsCompatible(); + uint pixelLightCount = GetAdditionalLightsCount(); + + LIGHT_LOOP_BEGIN(pixelLightCount) + additionalLightColor += BGSpine_ProcessLight(positionWS, normalWS, meshRenderingLayers, (int)lightIndex); + LIGHT_LOOP_END + + return additionalLightColor; +} +#endif + +VertexOutput vert(appdata v) +{ + VertexOutput o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + half4 color = BGSpine_PMAGammaToTargetSpace(v.color); + float3 positionWS = TransformObjectToWorld(v.pos); + half3 fixedNormal = half3(0, 0, -1); + half3 normalWS = normalize(mul((float3x3)unity_ObjectToWorld, fixedNormal)); + + o.pos = TransformWorldToHClip(positionWS); +#if defined(_FOG) + half fogFactor = ComputeFogFactor(o.pos.z); + BGSpine_PackedFog(o) = fogFactor; +#endif + BGSpine_PackedUV0(o) = v.uv0; + +#ifdef _DOUBLE_SIDED_LIGHTING + // Match Spine behavior: flip normal based on view direction. + half3 viewDirWS = UNITY_MATRIX_V[2].xyz; + half faceSign = sign(dot(viewDirWS, normalWS)); + normalWS *= faceSign; +#endif + + o.positionWS = positionWS; + o.normalWS = normalWS; + +#if defined(_TINT_BLACK_ON) + color *= _Color; + o.darkColor = BGSpine_GammaToTargetSpace(half3(v.tintBlackRG.r, v.tintBlackRG.g, v.tintBlackB.r)) + (_Black.rgb * v.color.a); +#endif + + half3 shadowedColor; +#if !defined(_LIGHT_AFFECTS_ADDITIVE) + if (color.a == 0) + { + o.color = color; +#if defined(BGAREA_SPINE_RECEIVE_SHADOWS) + o.shadowedColor = color.rgb; + o.shadowCoord = float4(0, 0, 0, 0); +#endif + return o; + } +#endif + + color.rgb *= BGSpine_LightweightLightVertexSimplified(positionWS, normalWS, shadowedColor); + + // Ambient light via SH / APV / Lightmap macro (mirrors Spine; safe even if v.lightmapUV doesn't exist). + half3 vertexSH; + float4 ignoredProbeOcclusion; +#if defined(OUTPUT_SH4) + OUTPUT_SH4(positionWS, normalWS.xyz, GetWorldSpaceNormalizeViewDir(positionWS), vertexSH, ignoredProbeOcclusion); +#else + OUTPUT_SH(normalWS.xyz, vertexSH); +#endif + +#if defined(BGAREA_SPINE_USE_ADAPTIVE_PROBE_VOLUMES) + #if !defined(_ADAPTIVE_PROBE_VOLUMES_PER_PIXEL) + half4 shadowMask = 1.0; + half3 bakedGI = SAMPLE_GI(vertexSH, + GetAbsolutePositionWS(positionWS), + normalWS.xyz, + GetWorldSpaceNormalizeViewDir(positionWS), + o.pos.xy, + ignoredProbeOcclusion, + shadowMask) * v.color.a; + #else + half3 bakedGI = half3(0.0, 0.0, 0.0); + o.positionCS = o.pos; + #endif +#else + half3 bakedGI = SAMPLE_GI(v.lightmapUV, vertexSH, normalWS) * v.color.a; +#endif + color.rgb += bakedGI; + o.color = color; + +#if defined(BGAREA_SPINE_RECEIVE_SHADOWS) + shadowedColor += bakedGI; + o.shadowedColor = shadowedColor; + + VertexPositionInputs vertexInput; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = o.pos; + o.shadowCoord = GetShadowCoord(vertexInput); +#endif + return o; +} + +half4 frag(VertexOutput i +#ifdef USE_WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 +#endif +) : SV_Target0 +{ + half4 tex = tex2D(_MainTex, BGSpine_PackedUV0(i)); +#if !defined(_TINT_BLACK_ON) && defined(_STRAIGHT_ALPHA_INPUT) + tex.rgb *= tex.a; +#endif + + // Optional per-pixel APV contribution (mirrors Spine pattern). +#if defined(BGAREA_SPINE_USE_ADAPTIVE_PROBE_VOLUMES) && defined(_ADAPTIVE_PROBE_VOLUMES_PER_PIXEL) + half3 vertexSH; + float4 ignoredProbeOcclusion; + OUTPUT_SH4(i.positionWS, i.normalWS.xyz, GetWorldSpaceNormalizeViewDir(i.positionWS), vertexSH, ignoredProbeOcclusion); + half4 shadowMask = 1.0; + half3 bakedGI = SAMPLE_GI(vertexSH, + GetAbsolutePositionWS(i.positionWS), + i.normalWS.xyz, + GetWorldSpaceNormalizeViewDir(i.positionWS), + i.positionCS.xy, + ignoredProbeOcclusion, + shadowMask) * i.color.a; + i.color.rgb += bakedGI; +#endif + + if (i.color.a == 0) + { +#if defined(_TINT_BLACK_ON) + return BGSpine_fragTintedColor(tex, i.darkColor, i.color, _Color.a, _Black.a); +#else + return tex * i.color; +#endif + } + + // Forward+/Cluster additional lights are processed in fragment. +#if defined(_ADDITIONAL_LIGHTS) && (USE_FORWARD_PLUS || USE_CLUSTER_LIGHT_LOOP) + half3 shadowedColor; + i.color.rgb += BGSpine_LightweightLightFragmentSimplified(i.positionWS, i.pos.xy, i.normalWS, shadowedColor); +#if defined(BGAREA_SPINE_RECEIVE_SHADOWS) + i.shadowedColor += shadowedColor; +#endif +#endif + + // Area light contribution (matches BadDog arealight design: independent loop over compact area buffer). +#if defined(_ENABLE_BG_AREA_LIGHTING) + half3 viewDirWS = GetWorldSpaceNormalizeViewDir(i.positionWS); + half3 areaRadiance = EvaluateAreaLight( + i.positionWS, + i.normalWS, + viewDirWS, + half3(1.0, 1.0, 1.0), // brdfDiffuse: treat as radiance term, will be multiplied by tex later. + half3(0.0, 0.0, 0.0), // brdfSpecular: Spine lit is diffuse-only by default. + 1.0, // perceptualRoughness + float3(0.0, 0.0, 0.0), // fresnel0 + true // specularHighlightsOff + ); + i.color.rgb += areaRadiance; +#if defined(BGAREA_SPINE_RECEIVE_SHADOWS) + i.shadowedColor += areaRadiance; +#endif +#endif + +#if defined(BGAREA_SPINE_RECEIVE_SHADOWS) + half shadowAttenuation = MainLightRealtimeShadow(i.shadowCoord); + i.color.rgb = lerp(i.shadowedColor, i.color.rgb, shadowAttenuation); +#endif + +#ifdef USE_WRITE_RENDERING_LAYERS + uint renderingLayers = BGSpine_GetMeshRenderingLayerBackwardsCompatible(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); +#endif + +#if defined(_TINT_BLACK_ON) + half4 pixel = BGSpine_fragTintedColor(tex, i.darkColor, i.color, _Color.a, _Black.a); +#else + half4 pixel = tex * i.color; +#endif + +#if defined(_FOG) + pixel.rgb = MixFogColor(pixel.rgb, unity_FogColor.rgb * pixel.a, BGSpine_PackedFog(i)); +#endif + return pixel; +} + +#endif // BGAREA_SPINE_PASS_FORWARDLIT + +#endif // BADDOG_AREA_SPINE_LIT_PASSES_INCLUDED + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl.meta new file mode 100644 index 00000000..b0ec7497 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 1c85c4cb232c5354cb762679c2f757db +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaSpineLitForwardPass.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLit.shader b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLit.shader new file mode 100644 index 00000000..4fda565e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLit.shader @@ -0,0 +1,257 @@ +Shader "BadDog/URP/BGAreaTerrainLit" +{ + Properties + { + [HideInInspector] [ToggleUI] _EnableHeightBlend("EnableHeightBlend", Float) = 0.0 + _HeightTransition("Height Transition", Range(0, 1.0)) = 0.0 + // Layer count is passed down to guide height-blend enable/disable, due + // to the fact that heigh-based blend will be broken with multipass. + [HideInInspector] [PerRendererData] _NumLayersCount ("Total Layer Count", Float) = 1.0 + + // set by terrain engine + [HideInInspector] _Control("Control (RGBA)", 2D) = "red" {} + [HideInInspector] _Splat3("Layer 3 (A)", 2D) = "grey" {} + [HideInInspector] _Splat2("Layer 2 (B)", 2D) = "grey" {} + [HideInInspector] _Splat1("Layer 1 (G)", 2D) = "grey" {} + [HideInInspector] _Splat0("Layer 0 (R)", 2D) = "grey" {} + [HideInInspector] _Normal3("Normal 3 (A)", 2D) = "bump" {} + [HideInInspector] _Normal2("Normal 2 (B)", 2D) = "bump" {} + [HideInInspector] _Normal1("Normal 1 (G)", 2D) = "bump" {} + [HideInInspector] _Normal0("Normal 0 (R)", 2D) = "bump" {} + [HideInInspector] _Mask3("Mask 3 (A)", 2D) = "grey" {} + [HideInInspector] _Mask2("Mask 2 (B)", 2D) = "grey" {} + [HideInInspector] _Mask1("Mask 1 (G)", 2D) = "grey" {} + [HideInInspector] _Mask0("Mask 0 (R)", 2D) = "grey" {} + [HideInInspector][Gamma] _Metallic0("Metallic 0", Range(0.0, 1.0)) = 0.0 + [HideInInspector][Gamma] _Metallic1("Metallic 1", Range(0.0, 1.0)) = 0.0 + [HideInInspector][Gamma] _Metallic2("Metallic 2", Range(0.0, 1.0)) = 0.0 + [HideInInspector][Gamma] _Metallic3("Metallic 3", Range(0.0, 1.0)) = 0.0 + [HideInInspector] _Smoothness0("Smoothness 0", Range(0.0, 1.0)) = 0.5 + [HideInInspector] _Smoothness1("Smoothness 1", Range(0.0, 1.0)) = 0.5 + [HideInInspector] _Smoothness2("Smoothness 2", Range(0.0, 1.0)) = 0.5 + [HideInInspector] _Smoothness3("Smoothness 3", Range(0.0, 1.0)) = 0.5 + + // used in fallback on old cards & base map + [HideInInspector] _MainTex("BaseMap (RGB)", 2D) = "grey" {} + [HideInInspector] _BaseColor("Main Color", Color) = (1,1,1,1) + + [HideInInspector] _TerrainHolesTexture("Holes Map (RGB)", 2D) = "white" {} + + [ToggleUI] _EnableInstancedPerPixelNormal("Enable Instanced per-pixel normal", Float) = 1.0 + } + + HLSLINCLUDE + + #pragma multi_compile_fragment __ _ALPHATEST_ON + + ENDHLSL + + SubShader + { + Tags { "Queue" = "Geometry-100" "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "UniversalMaterialType" = "Lit" "IgnoreProjector" = "False" "TerrainCompatible" = "True"} + + Pass + { + Name "ForwardLit" + Tags { "LightMode" = "UniversalForwardOnly" } + HLSLPROGRAM + #pragma target 3.0 + + #pragma vertex SplatmapVert + #pragma fragment SplatmapFragment + + #define _METALLICSPECGLOSSMAP 1 + #define _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 1 + + // ------------------------------------- + // Universal Pipeline keywords + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN + #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING + #pragma multi_compile _ SHADOWS_SHADOWMASK + #pragma multi_compile _ _LIGHT_LAYERS + #if UNITY_VERSION >= 60000100 + #pragma multi_compile _ _CLUSTER_LIGHT_LOOP + #else + #pragma multi_compile _ _FORWARD_PLUS + #endif + #pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX + #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS + #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING + #if UNITY_VERSION >= 60000100 + #pragma multi_compile_fragment _ _REFLECTION_PROBE_ATLAS + #endif + #pragma multi_compile_fragment _ _ENABLE_BG_AREA_LIGHTING + #pragma multi_compile_fragment _ _BG_AREALIGHT_SHADOWS_PCF2X2 _BG_AREALIGHT_SHADOWS_TENT5X5 _BG_AREALIGHT_SHADOWS_TENT7X7 _BG_AREALIGHT_SHADOWS_PCSS + #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH + #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION + #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma multi_compile_fragment _ _LIGHT_COOKIES + #if UNITY_VERSION >= 60000000 + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #endif + #if UNITY_VERSION >= 60000100 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Fog.hlsl" + #else + #pragma multi_compile_fog + #endif + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ DIRLIGHTMAP_COMBINED + #pragma multi_compile _ LIGHTMAP_ON + #if UNITY_VERSION >= 60000100 + #pragma multi_compile_fragment _ LIGHTMAP_BICUBIC_SAMPLING + #endif + #if UNITY_VERSION >= 60000000 + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" + #endif + #pragma multi_compile _ DYNAMICLIGHTMAP_ON + #pragma multi_compile_fragment _ DEBUG_DISPLAY + #pragma multi_compile_instancing + #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap + + #pragma shader_feature_local_fragment _TERRAIN_BLEND_HEIGHT + #pragma shader_feature_local _NORMALMAP + #pragma shader_feature_local_fragment _MASKMAP + // Sample normal in pixel shader when doing instancing + #pragma shader_feature_local _TERRAIN_INSTANCED_PERPIXEL_NORMAL + + #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && SHADER_API_VULKAN && SHADER_API_MOBILE + #define SKIP_SHADOWS_LIGHT_INDEX_CHECK 1 + #endif + + #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitInput.hlsl" + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl" + ENDHLSL + } + + Pass + { + Name "ShadowCaster" + Tags{"LightMode" = "ShadowCaster"} + + ZWrite On + ColorMask 0 + + HLSLPROGRAM + #pragma target 2.0 + + #pragma vertex ShadowPassVertex + #pragma fragment ShadowPassFragment + + #pragma multi_compile_instancing + #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap + + // ------------------------------------- + // Universal Pipeline keywords + + // This is used during shadow map generation to differentiate between directional and punctual light shadows, as they use different formulas to apply Normal Bias + #pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW + + #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitInput.hlsl" + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl" + ENDHLSL + } + + Pass + { + Name "DepthOnly" + Tags{"LightMode" = "DepthOnly"} + + ZWrite On + ColorMask R + + HLSLPROGRAM + #pragma target 2.0 + + #pragma vertex DepthOnlyVertex + #pragma fragment DepthOnlyFragment + + #pragma multi_compile_instancing + #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap + + #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitInput.hlsl" + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl" + ENDHLSL + } + + // This pass is used when drawing to a _CameraNormalsTexture texture + Pass + { + Name "DepthNormals" + Tags{"LightMode" = "DepthNormals"} + + ZWrite On + + HLSLPROGRAM + #pragma target 2.0 + #pragma vertex DepthNormalOnlyVertex + #pragma fragment DepthNormalOnlyFragment + + #pragma shader_feature_local _NORMALMAP + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + #pragma multi_compile_instancing + #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap + + #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitDepthNormalsPass.hlsl" + ENDHLSL + } + + Pass + { + Name "SceneSelectionPass" + Tags { "LightMode" = "SceneSelectionPass" } + + HLSLPROGRAM + #pragma target 2.0 + + #pragma vertex DepthOnlyVertex + #pragma fragment DepthOnlyFragment + + #pragma multi_compile_instancing + #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap + + #define SCENESELECTIONPASS + #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitInput.hlsl" + #include "Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl" + ENDHLSL + } + + // This pass it not used during regular rendering, only for lightmap baking. + Pass + { + Name "Meta" + Tags{"LightMode" = "Meta"} + + Cull Off + + HLSLPROGRAM + #pragma vertex TerrainVertexMeta + #pragma fragment TerrainFragmentMeta + + #pragma multi_compile_instancing + #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap + #pragma shader_feature EDITOR_VISUALIZATION + #define _METALLICSPECGLOSSMAP 1 + #define _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 1 + + #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitMetaPass.hlsl" + + ENDHLSL + } + + UsePass "Hidden/Nature/Terrain/Utilities/PICKING" + } + Dependency "AddPassShader" = "Hidden/Universal Render Pipeline/Terrain/Lit (Add Pass)" + Dependency "BaseMapShader" = "Hidden/Universal Render Pipeline/Terrain/Lit (Base Pass)" + Dependency "BaseMapGenShader" = "Hidden/Universal Render Pipeline/Terrain/Lit (Basemap Gen)" + + CustomEditor "UnityEditor.Rendering.Universal.TerrainLitShaderGUI" + + Fallback "Hidden/Universal Render Pipeline/FallbackError" +} diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLit.shader.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLit.shader.meta new file mode 100644 index 00000000..f2b38329 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLit.shader.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: a2f4843136c5e7c4f945fd88fa9b82de +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLit.shader + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl new file mode 100644 index 00000000..f21bbb0d --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl @@ -0,0 +1,614 @@ + +#ifndef BADDOG_AREA_TERRAIN_LIT_PASSES_INCLUDED +#define BADDOG_AREA_TERRAIN_LIT_PASSES_INCLUDED + +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl" + +// Include Area Light support +#include "Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl" + +struct Attributes +{ + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct Varyings +{ + float4 uvMainAndLM : TEXCOORD0; // xy: control, zw: lightmap + #ifndef TERRAIN_SPLAT_BASEPASS + float4 uvSplat01 : TEXCOORD1; // xy: splat0, zw: splat1 + float4 uvSplat23 : TEXCOORD2; // xy: splat2, zw: splat3 + #endif + + #if defined(_NORMALMAP) && !defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + half4 normal : TEXCOORD3; // xyz: normal, w: viewDir.x + half4 tangent : TEXCOORD4; // xyz: tangent, w: viewDir.y + half4 bitangent : TEXCOORD5; // xyz: bitangent, w: viewDir.z + #else + half3 normal : TEXCOORD3; + half3 vertexSH : TEXCOORD4; // SH + #endif + + #ifdef _ADDITIONAL_LIGHTS_VERTEX + half4 fogFactorAndVertexLight : TEXCOORD6; // x: fogFactor, yzw: vertex light + #else + half fogFactor : TEXCOORD6; + #endif + + float3 positionWS : TEXCOORD7; + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD8; + #endif + +#if defined(DYNAMICLIGHTMAP_ON) + float2 dynamicLightmapUV : TEXCOORD9; +#endif + +#ifdef USE_APV_PROBE_OCCLUSION + float4 probeOcclusion : TEXCOORD10; +#endif + + float4 clipPos : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO +}; + +void InitializeInputData(Varyings IN, half3 normalTS, out InputData inputData) +{ + inputData = (InputData)0; + + inputData.positionWS = IN.positionWS; + inputData.positionCS = IN.clipPos; + + #if defined(_NORMALMAP) && !defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + half3 viewDirWS = half3(IN.normal.w, IN.tangent.w, IN.bitangent.w); + inputData.tangentToWorld = half3x3(-IN.tangent.xyz, IN.bitangent.xyz, IN.normal.xyz); + inputData.normalWS = TransformTangentToWorld(normalTS, inputData.tangentToWorld); + half3 SH = 0; + #elif defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + half3 viewDirWS = GetWorldSpaceNormalizeViewDir(IN.positionWS); + float2 sampleCoords = (IN.uvMainAndLM.xy / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy; + half3 normalWS = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1)); + half3 tangentWS = cross(GetObjectToWorldMatrix()._13_23_33, normalWS); + inputData.normalWS = TransformTangentToWorld(normalTS, half3x3(-tangentWS, cross(normalWS, tangentWS), normalWS)); + half3 SH = IN.vertexSH; + #else + half3 viewDirWS = GetWorldSpaceNormalizeViewDir(IN.positionWS); + inputData.normalWS = IN.normal; + half3 SH = IN.vertexSH; + #endif + + inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS); + inputData.viewDirectionWS = viewDirWS; + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + inputData.shadowCoord = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + inputData.shadowCoord = TransformWorldToShadowCoord(inputData.positionWS); + #else + inputData.shadowCoord = float4(0, 0, 0, 0); + #endif + + #ifdef _ADDITIONAL_LIGHTS_VERTEX + inputData.fogCoord = InitializeInputDataFog(float4(IN.positionWS, 1.0), IN.fogFactorAndVertexLight.x); + inputData.vertexLighting = IN.fogFactorAndVertexLight.yzw; + #else + inputData.fogCoord = InitializeInputDataFog(float4(IN.positionWS, 1.0), IN.fogFactor); + #endif + + inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(IN.clipPos); + + #if defined(DEBUG_DISPLAY) + #if defined(DYNAMICLIGHTMAP_ON) + inputData.dynamicLightmapUV = IN.dynamicLightmapUV; + #endif + #if defined(LIGHTMAP_ON) + inputData.staticLightmapUV = IN.uvMainAndLM.zw; + #else + inputData.vertexSH = SH; + #endif + #if defined(USE_APV_PROBE_OCCLUSION) + inputData.probeOcclusion = IN.probeOcclusion; + #endif + #endif +} + +void InitializeBakedGIData(Varyings IN, inout InputData inputData) +{ + #if defined(_NORMALMAP) && !defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + half3 SH = 0; + #else + half3 SH = IN.vertexSH; + #endif + +#if defined(DYNAMICLIGHTMAP_ON) + inputData.bakedGI = SAMPLE_GI(IN.uvMainAndLM.zw, IN.dynamicLightmapUV, SH, inputData.normalWS); + inputData.shadowMask = SAMPLE_SHADOWMASK(IN.uvMainAndLM.zw); +#elif !defined(LIGHTMAP_ON) && (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) + inputData.bakedGI = SAMPLE_GI(SH, + GetAbsolutePositionWS(inputData.positionWS), + inputData.normalWS, + inputData.viewDirectionWS, + inputData.positionCS.xy, + IN.probeOcclusion, + inputData.shadowMask); +#else + inputData.bakedGI = SAMPLE_GI(IN.uvMainAndLM.zw, SH, inputData.normalWS); + inputData.shadowMask = SAMPLE_SHADOWMASK(IN.uvMainAndLM.zw); +#endif +} + +#ifndef TERRAIN_SPLAT_BASEPASS + +void NormalMapMix(float4 uvSplat01, float4 uvSplat23, inout half4 splatControl, inout half3 mixedNormal) +{ + #if defined(_NORMALMAP) + half3 nrm = half(0.0); + nrm += splatControl.r * UnpackNormalScale(SAMPLE_TEXTURE2D(_Normal0, sampler_Normal0, uvSplat01.xy), _NormalScale0); + nrm += splatControl.g * UnpackNormalScale(SAMPLE_TEXTURE2D(_Normal1, sampler_Normal0, uvSplat01.zw), _NormalScale1); + nrm += splatControl.b * UnpackNormalScale(SAMPLE_TEXTURE2D(_Normal2, sampler_Normal0, uvSplat23.xy), _NormalScale2); + nrm += splatControl.a * UnpackNormalScale(SAMPLE_TEXTURE2D(_Normal3, sampler_Normal0, uvSplat23.zw), _NormalScale3); + + // avoid risk of NaN when normalizing. + #if !HALF_IS_FLOAT + nrm.z += half(0.01); + #else + nrm.z += 1e-5f; + #endif + + mixedNormal = normalize(nrm.xyz); + #endif +} + +void SplatmapMix(float4 uvMainAndLM, float4 uvSplat01, float4 uvSplat23, inout half4 splatControl, out half weight, out half4 mixedDiffuse, out half4 defaultSmoothness, inout half3 mixedNormal) +{ + half4 diffAlbedo[4]; + + diffAlbedo[0] = SAMPLE_TEXTURE2D(_Splat0, sampler_Splat0, uvSplat01.xy); + diffAlbedo[1] = SAMPLE_TEXTURE2D(_Splat1, sampler_Splat0, uvSplat01.zw); + diffAlbedo[2] = SAMPLE_TEXTURE2D(_Splat2, sampler_Splat0, uvSplat23.xy); + diffAlbedo[3] = SAMPLE_TEXTURE2D(_Splat3, sampler_Splat0, uvSplat23.zw); + + // This might be a bit of a gamble -- the assumption here is that if the diffuseMap has no + // alpha channel, then diffAlbedo[n].a = 1.0 (and _DiffuseHasAlphaN = 0.0) + // Prior to coming in, _SmoothnessN is actually set to max(_DiffuseHasAlphaN, _SmoothnessN) + // This means that if we have an alpha channel, _SmoothnessN is locked to 1.0 and + // otherwise, the true slider value is passed down and diffAlbedo[n].a == 1.0. + defaultSmoothness = half4(diffAlbedo[0].a, diffAlbedo[1].a, diffAlbedo[2].a, diffAlbedo[3].a); + defaultSmoothness *= half4(_Smoothness0, _Smoothness1, _Smoothness2, _Smoothness3); + +#ifndef _TERRAIN_BLEND_HEIGHT // density blending + if(_NumLayersCount <= 4) + { + // 20.0 is the number of steps in inputAlphaMask (Density mask. We decided 20 empirically) + half4 opacityAsDensity = saturate((half4(diffAlbedo[0].a, diffAlbedo[1].a, diffAlbedo[2].a, diffAlbedo[3].a) - (1 - splatControl)) * 20.0); + opacityAsDensity += 0.001h * splatControl; // if all weights are zero, default to what the blend mask says + half4 useOpacityAsDensityParam = { _DiffuseRemapScale0.w, _DiffuseRemapScale1.w, _DiffuseRemapScale2.w, _DiffuseRemapScale3.w }; // 1 is off + splatControl = lerp(opacityAsDensity, splatControl, useOpacityAsDensityParam); + } +#endif + + // Now that splatControl has changed, we can compute the final weight and normalize + weight = dot(splatControl, 1.0h); + +#ifdef TERRAIN_SPLAT_ADDPASS + clip(weight <= 0.005h ? -1.0h : 1.0h); +#endif + +#ifndef _TERRAIN_BASEMAP_GEN + // Normalize weights before lighting and restore weights in final modifier functions so that the overal + // lighting result can be correctly weighted. + splatControl /= (weight + HALF_MIN); +#endif + + mixedDiffuse = 0.0h; + mixedDiffuse += diffAlbedo[0] * half4(_DiffuseRemapScale0.rgb * splatControl.rrr, 1.0h); + mixedDiffuse += diffAlbedo[1] * half4(_DiffuseRemapScale1.rgb * splatControl.ggg, 1.0h); + mixedDiffuse += diffAlbedo[2] * half4(_DiffuseRemapScale2.rgb * splatControl.bbb, 1.0h); + mixedDiffuse += diffAlbedo[3] * half4(_DiffuseRemapScale3.rgb * splatControl.aaa, 1.0h); + + NormalMapMix(uvSplat01, uvSplat23, splatControl, mixedNormal); +} + +#endif + +#ifdef _TERRAIN_BLEND_HEIGHT +void HeightBasedSplatModify(inout half4 splatControl, in half4 masks[4]) +{ + // heights are in mask blue channel, we multiply by the splat Control weights to get combined height + half4 splatHeight = half4(masks[0].b, masks[1].b, masks[2].b, masks[3].b) * splatControl.rgba; + half maxHeight = max(splatHeight.r, max(splatHeight.g, max(splatHeight.b, splatHeight.a))); + + // Ensure that the transition height is not zero. + half transition = max(_HeightTransition, 1e-5); + + // This sets the highest splat to "transition", and everything else to a lower value relative to that, clamping to zero + // Then we clamp this to zero and normalize everything + half4 weightedHeights = splatHeight + transition - maxHeight.xxxx; + weightedHeights = max(0, weightedHeights); + + // We need to add an epsilon here for active layers (hence the blendMask again) + // so that at least a layer shows up if everything's too low. + weightedHeights = (weightedHeights + 1e-6) * splatControl; + + // Normalize (and clamp to epsilon to keep from dividing by zero) + half sumHeight = max(dot(weightedHeights, half4(1, 1, 1, 1)), 1e-6); + splatControl = weightedHeights / sumHeight.xxxx; +} +#endif + +void SplatmapFinalColor(inout half4 color, half fogCoord) +{ + color.rgb *= color.a; + + #ifndef TERRAIN_GBUFFER // Technically we don't need fogCoord, but it is still passed from the vertex shader. + + #ifdef TERRAIN_SPLAT_ADDPASS + color.rgb = MixFogColor(color.rgb, half3(0,0,0), fogCoord); + #else + color.rgb = MixFog(color.rgb, fogCoord); + #endif + + #endif +} + +void SetupTerrainDebugTextureData(inout InputData inputData, float2 uv) +{ + #if defined(DEBUG_DISPLAY) + #if defined(TERRAIN_SPLAT_ADDPASS) + if (_DebugMipInfoMode != DEBUGMIPINFOMODE_NONE) + { + discard; // Layer 4 & beyond are done additively, doesn't make sense for the mipmap streaming debug views -> stop. + } + #endif + + switch (_DebugMipMapTerrainTextureMode) + { + case DEBUGMIPMAPMODETERRAINTEXTURE_CONTROL: + SETUP_DEBUG_TEXTURE_DATA_FOR_TEX(inputData, TRANSFORM_TEX(uv, _Control), _Control); + break; + case DEBUGMIPMAPMODETERRAINTEXTURE_LAYER0: + SETUP_DEBUG_TEXTURE_DATA_FOR_TEX(inputData, TRANSFORM_TEX(uv, _Splat0), _Splat0); + break; + case DEBUGMIPMAPMODETERRAINTEXTURE_LAYER1: + SETUP_DEBUG_TEXTURE_DATA_FOR_TEX(inputData, TRANSFORM_TEX(uv, _Splat1), _Splat1); + break; + case DEBUGMIPMAPMODETERRAINTEXTURE_LAYER2: + SETUP_DEBUG_TEXTURE_DATA_FOR_TEX(inputData, TRANSFORM_TEX(uv, _Splat2), _Splat2); + break; + case DEBUGMIPMAPMODETERRAINTEXTURE_LAYER3: + SETUP_DEBUG_TEXTURE_DATA_FOR_TEX(inputData, TRANSFORM_TEX(uv, _Splat3), _Splat3); + break; + default: + break; + } + + // TERRAIN_STREAM_INFO: no streamInfo will have been set (no MeshRenderer); set status to "6" to reflect in the debug status that this is a terrain + // also, set the per-material status to "4" to indicate warnings + inputData.streamInfo = TERRAIN_STREAM_INFO; + #endif +} + +/////////////////////////////////////////////////////////////////////////////// +// Vertex and Fragment functions // +/////////////////////////////////////////////////////////////////////////////// + +// Used in Standard Terrain shader +Varyings SplatmapVert(Attributes v) +{ + Varyings o = (Varyings)0; + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainInstancing(v.positionOS, v.normalOS, v.texcoord); + + VertexPositionInputs Attributes = GetVertexPositionInputs(v.positionOS.xyz); + + o.uvMainAndLM.xy = v.texcoord; + o.uvMainAndLM.zw = v.texcoord * unity_LightmapST.xy + unity_LightmapST.zw; + + #ifndef TERRAIN_SPLAT_BASEPASS + o.uvSplat01.xy = TRANSFORM_TEX(v.texcoord, _Splat0); + o.uvSplat01.zw = TRANSFORM_TEX(v.texcoord, _Splat1); + o.uvSplat23.xy = TRANSFORM_TEX(v.texcoord, _Splat2); + o.uvSplat23.zw = TRANSFORM_TEX(v.texcoord, _Splat3); + #endif + +#if defined(DYNAMICLIGHTMAP_ON) + o.dynamicLightmapUV = v.texcoord * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; +#endif + + #if defined(_NORMALMAP) && !defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + half3 viewDirWS = GetWorldSpaceNormalizeViewDir(Attributes.positionWS); + float4 vertexTangent = float4(cross(float3(0, 0, 1), v.normalOS), 1.0); + VertexNormalInputs normalInput = GetVertexNormalInputs(v.normalOS, vertexTangent); + + o.normal = half4(normalInput.normalWS, viewDirWS.x); + o.tangent = half4(normalInput.tangentWS, viewDirWS.y); + o.bitangent = half4(normalInput.bitangentWS, viewDirWS.z); + #else + o.normal = TransformObjectToWorldNormal(v.normalOS); +#if UNITY_VERSION >= 60000000 + OUTPUT_SH4(Attributes.positionWS, o.normal.xyz, GetWorldSpaceNormalizeViewDir(Attributes.positionWS), o.vertexSH, o.probeOcclusion); +#else + OUTPUT_SH(o.normal.xyz, o.vertexSH); +#endif + #endif + + half fogFactor = 0; + #if !defined(_FOG_FRAGMENT) + fogFactor = ComputeFogFactor(Attributes.positionCS.z); + #endif + + #ifdef _ADDITIONAL_LIGHTS_VERTEX + o.fogFactorAndVertexLight.x = fogFactor; + o.fogFactorAndVertexLight.yzw = VertexLighting(Attributes.positionWS, o.normal.xyz); + #else + o.fogFactor = fogFactor; + #endif + + o.positionWS = Attributes.positionWS; + o.clipPos = Attributes.positionCS; + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + o.shadowCoord = GetShadowCoord(Attributes); + #endif + + return o; +} + +void ComputeMasks(out half4 masks[4], half4 hasMask, Varyings IN) +{ + masks[0] = 0.5h; + masks[1] = 0.5h; + masks[2] = 0.5h; + masks[3] = 0.5h; + +#ifdef _MASKMAP + masks[0] = lerp(masks[0], SAMPLE_TEXTURE2D(_Mask0, sampler_Mask0, IN.uvSplat01.xy), hasMask.x); + masks[1] = lerp(masks[1], SAMPLE_TEXTURE2D(_Mask1, sampler_Mask0, IN.uvSplat01.zw), hasMask.y); + masks[2] = lerp(masks[2], SAMPLE_TEXTURE2D(_Mask2, sampler_Mask0, IN.uvSplat23.xy), hasMask.z); + masks[3] = lerp(masks[3], SAMPLE_TEXTURE2D(_Mask3, sampler_Mask0, IN.uvSplat23.zw), hasMask.w); +#endif + + masks[0] *= _MaskMapRemapScale0.rgba; + masks[0] += _MaskMapRemapOffset0.rgba; + masks[1] *= _MaskMapRemapScale1.rgba; + masks[1] += _MaskMapRemapOffset1.rgba; + masks[2] *= _MaskMapRemapScale2.rgba; + masks[2] += _MaskMapRemapOffset2.rgba; + masks[3] *= _MaskMapRemapScale3.rgba; + masks[3] += _MaskMapRemapOffset3.rgba; +} + +// Used in Standard Terrain shader with Area Light support +#ifdef TERRAIN_GBUFFER +GBufferFragOutput SplatmapFragment(Varyings IN) +#else +void SplatmapFragment( + Varyings IN + , out half4 outColor : SV_Target0 +#ifdef _WRITE_RENDERING_LAYERS + , out uint outRenderingLayers : SV_Target1 +#endif + ) +#endif +{ + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN); +#ifdef _ALPHATEST_ON + ClipHoles(IN.uvMainAndLM.xy); +#endif + + half3 normalTS = half3(0.0h, 0.0h, 1.0h); +#ifdef TERRAIN_SPLAT_BASEPASS + half3 albedo = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uvMainAndLM.xy).rgb; + half smoothness = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uvMainAndLM.xy).a; + half metallic = SAMPLE_TEXTURE2D(_MetallicTex, sampler_MetallicTex, IN.uvMainAndLM.xy).r; + half alpha = 1; + half occlusion = 1; +#else + + half4 hasMask = half4(_LayerHasMask0, _LayerHasMask1, _LayerHasMask2, _LayerHasMask3); + half4 masks[4]; + ComputeMasks(masks, hasMask, IN); + + float2 splatUV = (IN.uvMainAndLM.xy * (_Control_TexelSize.zw - 1.0f) + 0.5f) * _Control_TexelSize.xy; + half4 splatControl = SAMPLE_TEXTURE2D(_Control, sampler_Control, splatUV); + + half alpha = dot(splatControl, 1.0h); +#ifdef _TERRAIN_BLEND_HEIGHT + // disable Height Based blend when there are more than 4 layers (multi-pass breaks the normalization) + if (_NumLayersCount <= 4) + HeightBasedSplatModify(splatControl, masks); +#endif + + half weight; + half4 mixedDiffuse; + half4 defaultSmoothness; + SplatmapMix(IN.uvMainAndLM, IN.uvSplat01, IN.uvSplat23, splatControl, weight, mixedDiffuse, defaultSmoothness, normalTS); + half3 albedo = mixedDiffuse.rgb; + + half4 defaultMetallic = half4(_Metallic0, _Metallic1, _Metallic2, _Metallic3); + half4 defaultOcclusion = half4(_MaskMapRemapScale0.g, _MaskMapRemapScale1.g, _MaskMapRemapScale2.g, _MaskMapRemapScale3.g) + + half4(_MaskMapRemapOffset0.g, _MaskMapRemapOffset1.g, _MaskMapRemapOffset2.g, _MaskMapRemapOffset3.g); + + half4 maskSmoothness = half4(masks[0].a, masks[1].a, masks[2].a, masks[3].a); + defaultSmoothness = lerp(defaultSmoothness, maskSmoothness, hasMask); + half smoothness = dot(splatControl, defaultSmoothness); + + half4 maskMetallic = half4(masks[0].r, masks[1].r, masks[2].r, masks[3].r); + defaultMetallic = lerp(defaultMetallic, maskMetallic, hasMask); + half metallic = dot(splatControl, defaultMetallic); + + half4 maskOcclusion = half4(masks[0].g, masks[1].g, masks[2].g, masks[3].g); + defaultOcclusion = lerp(defaultOcclusion, maskOcclusion, hasMask); + half occlusion = dot(splatControl, defaultOcclusion); +#endif + + InputData inputData; + InitializeInputData(IN, normalTS, inputData); + SetupTerrainDebugTextureData(inputData, IN.uvMainAndLM.xy); + +#if defined(_DBUFFER) + half3 specular = half3(0.0h, 0.0h, 0.0h); + ApplyDecal(IN.clipPos, + albedo, + specular, + inputData.normalWS, + metallic, + occlusion, + smoothness); +#endif + + InitializeBakedGIData(IN, inputData); + +#ifdef TERRAIN_GBUFFER + + BRDFData brdfData; + InitializeBRDFData(albedo, metallic, /* specular */ half3(0.0h, 0.0h, 0.0h), smoothness, alpha, brdfData); + + // Baked lighting. + half4 color; + Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, inputData.shadowMask); + MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, inputData.shadowMask); + color.rgb = GlobalIllumination(brdfData, (BRDFData)0, 0, inputData.bakedGI, occlusion, inputData.positionWS, + inputData.normalWS, inputData.viewDirectionWS, inputData.normalizedScreenSpaceUV); + color.a = alpha; + SplatmapFinalColor(color, inputData.fogCoord); + + // Dynamic lighting: emulate SplatmapFinalColor() by scaling gbuffer material properties. This will not give the same results + // as forward renderer because we apply blending pre-lighting instead of post-lighting. + // Blending of smoothness and normals is also not correct but close enough? + brdfData.albedo.rgb *= alpha; + brdfData.diffuse.rgb *= alpha; + brdfData.specular.rgb *= alpha; + brdfData.reflectivity *= alpha; + inputData.normalWS = inputData.normalWS * alpha; + smoothness *= alpha; + + return PackGBuffersBRDFData(brdfData, inputData, smoothness, color.rgb, occlusion); +#else + + // Standard URP PBR lighting calculation + half4 color = UniversalFragmentPBR(inputData, albedo, metallic, /* specular */ half3(0.0h, 0.0h, 0.0h), smoothness, occlusion, /* emission */ half3(0, 0, 0), alpha); + + // Additional Area Light (only when enabled) + #if defined(_ENABLE_BG_AREA_LIGHTING) + // Create SurfaceData for area light evaluation + SurfaceData surfaceData; + surfaceData.albedo = albedo; + surfaceData.metallic = metallic; + surfaceData.specular = half3(0.0h, 0.0h, 0.0h); + surfaceData.smoothness = smoothness; + surfaceData.occlusion = occlusion; + surfaceData.emission = half3(0, 0, 0); + surfaceData.alpha = alpha; + surfaceData.normalTS = normalTS; + surfaceData.clearCoatMask = 0.0h; + surfaceData.clearCoatSmoothness = 0.0h; + + color.rgb += EvaluateAreaLight(inputData, surfaceData); + #endif + + SplatmapFinalColor(color, inputData.fogCoord); + + outColor = half4(color.rgb, 1.0h); + +#ifdef _WRITE_RENDERING_LAYERS + outRenderingLayers = EncodeMeshRenderingLayer(); +#endif +#endif +} + +// Shadow pass + +// Shadow Casting Light geometric parameters. These variables are used when applying the shadow Normal Bias and are set by UnityEngine.Rendering.Universal.ShadowUtils.SetupShadowCasterConstantBuffer in com.unity.render-pipelines.universal/Runtime/ShadowUtils.cs +// For Directional lights, _LightDirection is used when applying shadow Normal Bias. +// For Spot lights and Point lights, _LightPosition is used to compute the actual light direction because it is different at each shadow caster geometry vertex. +float3 _LightDirection; +float3 _LightPosition; + +struct AttributesLean +{ + float4 position : POSITION; + float3 normalOS : NORMAL; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct VaryingsLean +{ + float4 clipPos : SV_POSITION; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; + +VaryingsLean ShadowPassVertex(AttributesLean v) +{ + VaryingsLean o = (VaryingsLean)0; + UNITY_SETUP_INSTANCE_ID(v); + TerrainInstancing(v.position, v.normalOS, v.texcoord); + + float3 positionWS = TransformObjectToWorld(v.position.xyz); + float3 normalWS = TransformObjectToWorldNormal(v.normalOS); + +#if _CASTING_PUNCTUAL_LIGHT_SHADOW + float3 lightDirectionWS = normalize(_LightPosition - positionWS); +#else + float3 lightDirectionWS = _LightDirection; +#endif + + float4 clipPos = TransformWorldToHClip(ApplyShadowBias(positionWS, normalWS, lightDirectionWS)); + +#if UNITY_REVERSED_Z + clipPos.z = min(clipPos.z, UNITY_NEAR_CLIP_VALUE); +#else + clipPos.z = max(clipPos.z, UNITY_NEAR_CLIP_VALUE); +#endif + + o.clipPos = clipPos; + + o.texcoord = v.texcoord; + + return o; +} + +half4 ShadowPassFragment(VaryingsLean IN) : SV_TARGET +{ +#ifdef _ALPHATEST_ON + ClipHoles(IN.texcoord); +#endif + return 0; +} + +// Depth pass + +VaryingsLean DepthOnlyVertex(AttributesLean v) +{ + VaryingsLean o = (VaryingsLean)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainInstancing(v.position, v.normalOS); + o.clipPos = TransformObjectToHClip(v.position.xyz); + o.texcoord = v.texcoord; + return o; +} + +half4 DepthOnlyFragment(VaryingsLean IN) : SV_TARGET +{ +#ifdef _ALPHATEST_ON + ClipHoles(IN.texcoord); +#endif +#ifdef SCENESELECTIONPASS + // We use depth prepass for scene selection in the editor, this code allow to output the outline correctly + return half4(_ObjectId, _PassValue, 1.0, 1.0); +#endif + return IN.clipPos.z; +} + +#endif + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl.meta new file mode 100644 index 00000000..e7ccecb6 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: f0bd0b7090b9f174e9b5acef11b36f94 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/BadDog/BGAreaTerrainLitForwardPasses.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include.meta b/Packages/com.baddog.rendering.arealight/Shaders/Include.meta new file mode 100644 index 00000000..4606335d --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b1361c2d0f193e4ea06e9cccd6e1ed6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLightShadows.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLightShadows.hlsl new file mode 100644 index 00000000..a998cad1 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLightShadows.hlsl @@ -0,0 +1,150 @@ +#ifndef BADDOG_AREA_LIGHT_SHADOWS_INCLUDED +#define BADDOG_AREA_LIGHT_SHADOWS_INCLUDED + +// URP shadow sampling utilities +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl" +#include "Packages/com.baddog.rendering.arealight/Shaders/Include/HDPCSS.hlsl" + +//----------------------------------------------------------------------------- +// Area Light Shadow Data +//----------------------------------------------------------------------------- + +// Maximum number of area lights that can cast shadows +#define MAX_AREA_LIGHT_SHADOW_COUNT 8 + +// Area Light Shadow Atlas +TEXTURE2D_SHADOW(_AreaLightsShadowmapTexture); + +// Area Light Shadow Atlas Size +// x: 1.0 / width (texel size) +// y: 1.0 / height (texel size) +// z: width (resolution) +// w: height (resolution) +float4 _AreaLightShadowmapSize; + +// Area Light Shadow Parameters (per area light, indexed by areaLightIndex) +// x: shadow strength [0,1] +// y: soft shadow (1.0 for soft, 0.0 for hard) - reserved for future use +// z: light type identifier (for shader variants) - reserved for future use +// w: areaLightIndex (same as array index, or -1 if no shadow) +float4 _AreaLightShadowParams[MAX_AREA_LIGHT_SHADOW_COUNT]; + +// Area Light World-to-Shadow Matrices (per area light, indexed by areaLightIndex) +float4x4 _AreaLightsWorldToShadow[MAX_AREA_LIGHT_SHADOW_COUNT]; + +// PCSS Parameters for Area Light Shadows +// x: shadowSoftness (world space units) +// y: blockerSampleCount +// z: filterSampleCount +// w: rangeScale (for directional lights, 1.0 for area lights) +float4 _PCSSAdditionalLightParams; + +//----------------------------------------------------------------------------- +// PCSS Support Function (if not provided by URP Shadows.hlsl) +//----------------------------------------------------------------------------- + +real SampleShadowmapFilteredPCSS(TEXTURE2D_SHADOW_PARAM(ShadowMap, sampler_ShadowMap), float4 shadowCoord, ShadowSamplingData samplingData, float4 pcssParams, float3 positionWS, bool isPerspectiveProjection) +{ + // Generate jitter for PCSS using screen pixel coordinates + float4 clipPos = TransformWorldToHClip(positionWS); + float2 screenPos = ComputeScreenPos(clipPos).xy * _ScreenParams.xy; + float sampleJitterAngle = InterleavedGradientNoise(screenPos, 0) * 2.0 * PI; + float2 sampleJitter = float2(sin(sampleJitterAngle), cos(sampleJitterAngle)); + + // Extract PCSS parameters + float shadowSoftness = pcssParams.x; + int blockerSampleCount = (int)pcssParams.y; + int filterSampleCount = (int)pcssParams.z; + float lightRangeScale = pcssParams.w; + float minFilterRadius = 2.0; + + // shadowmapSize format: (texelWidth, texelHeight, width, height) + // We need to convert shadowSoftness (world units) to UV space + // shadowSoftness is in world units, we convert to texels then to UV + float lightArea = shadowSoftness * samplingData.shadowmapSize.x; // Convert to UV space using texel size + float maxLightArea = 0.04; // 4% of UV space + lightArea = min(lightArea, maxLightArea); + + // Shadow map bounds (full texture for non-atlas) + float UMin = 0.0, UMax = 1.0, VMin = 0.0, VMax = 1.0; + + // Perform PCSS blocker search + real averageBlockerDepth; + real numBlockers; + bool blockerFound = BlockerSearch(averageBlockerDepth, numBlockers, lightArea, shadowCoord.xyz, UMin, UMax, VMin, VMax, sampleJitter, ShadowMap, sampler_PointClamp, blockerSampleCount); + + // Calculate filter size based on penumbra estimation + float filterSize = shadowSoftness * (isPerspectiveProjection ? PenumbraSizePunctual(shadowCoord.z, averageBlockerDepth) : PenumbraSizeDirectional(shadowCoord.z, averageBlockerDepth, lightRangeScale)); + filterSize = blockerFound ? max(filterSize, minFilterRadius) : minFilterRadius; + + // Convert filter size to UV space (filterSize is in world units, multiply by texel size) + filterSize *= samplingData.shadowmapSize.x; + + // Perform PCSS filtering + return PCSS(shadowCoord.xyz, UMin, UMax, VMin, VMax, filterSize, sampleJitter, ShadowMap, sampler_ShadowMap, filterSampleCount); +} + +//----------------------------------------------------------------------------- +// Area Light Shadow Sampling +//----------------------------------------------------------------------------- + +// Sample area light shadow for a given area light index +// areaLightIndex: Index of the area light (matches _AreaLightDataBuffer index) +// positionWS: World space position to sample shadow at +// Returns: Shadow attenuation [0,1], where 1 = fully lit, 0 = fully shadowed +half SampleAreaLightShadow(uint areaLightIndex, float3 positionWS) +{ + float4 shadowParams = _AreaLightShadowParams[areaLightIndex]; + + // Check if this light has shadow (w >= 0) + // w contains the areaLightIndex if shadow is enabled, or -1 if disabled + if (shadowParams.w < 0.0) + return 1.0; + + // Transform position to shadow space + float4 shadowCoord = mul(_AreaLightsWorldToShadow[areaLightIndex], float4(positionWS, 1.0)); + + // Build sampling data compatible with URP shadow sampling + ShadowSamplingData samplingData; + samplingData.shadowOffset0 = 0; + samplingData.shadowOffset1 = 0; + samplingData.shadowmapSize = _AreaLightShadowmapSize; + samplingData.softShadowQuality = half(shadowParams.y); + + // Perspective divide and out-of-bounds handling + shadowCoord.xyz /= max(shadowCoord.w, 1e-5); + if (BEYOND_SHADOW_FAR(shadowCoord)) + return 1.0; + + real attenuation; + + // Directly call URP shadow filter entry points by BG keywords (no macro remap). + #if defined(_BG_AREALIGHT_SHADOWS_PCF2X2) + attenuation = SampleShadowmapFilteredLowQuality(TEXTURE2D_SHADOW_ARGS(_AreaLightsShadowmapTexture, sampler_LinearClampCompare), shadowCoord, samplingData); + #elif defined(_BG_AREALIGHT_SHADOWS_TENT5X5) + attenuation = SampleShadowmapFilteredMediumQuality(TEXTURE2D_SHADOW_ARGS(_AreaLightsShadowmapTexture, sampler_LinearClampCompare), shadowCoord, samplingData); + #elif defined(_BG_AREALIGHT_SHADOWS_TENT7X7) + attenuation = SampleShadowmapFilteredHighQuality(TEXTURE2D_SHADOW_ARGS(_AreaLightsShadowmapTexture, sampler_LinearClampCompare), shadowCoord, samplingData); + #elif defined(_BG_AREALIGHT_SHADOWS_PCSS) + // PCSS for area lights: reuse the PCSS path implemented in Shadows.hlsl, + // controlled by _PCSSAdditionalLightParams (x: softness, y: blockerSamples, z: filterSamples, w: rangeScale) + attenuation = SampleShadowmapFilteredPCSS( + TEXTURE2D_SHADOW_ARGS(_AreaLightsShadowmapTexture, sampler_LinearClampCompare), + float4(shadowCoord.xyz, 1.0), + samplingData, + _PCSSAdditionalLightParams, + positionWS, + /*isPerspectiveProjection*/ true); + #else + attenuation = real(SAMPLE_TEXTURE2D_SHADOW(_AreaLightsShadowmapTexture, sampler_LinearClampCompare, shadowCoord.xyz)); + #endif + + // Apply shadow strength + attenuation = LerpWhiteTo(attenuation, shadowParams.x); + + return half(attenuation); +} + +#endif // BADDOG_AREA_LIGHT_SHADOWS_INCLUDED + + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLightShadows.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLightShadows.hlsl.meta new file mode 100644 index 00000000..3a363302 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLightShadows.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: f1c7cba811161e542ae1a802e715bb1d +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLightShadows.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl new file mode 100644 index 00000000..b04bfeaa --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl @@ -0,0 +1,565 @@ +#ifndef BADDOG_AREA_LIGHTING_INCLUDED +#define BADDOG_AREA_LIGHTING_INCLUDED + +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/AreaLighting.hlsl" +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonLighting.hlsl" +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/GlobalSamplers.hlsl" +#include "Packages/com.baddog.rendering.arealight/Shaders/Include/PreIntegratedFGD.hlsl" +#include "Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.hlsl" + +//----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- + +#define GPULIGHTTYPE_RECTANGLE (6) +#define GPULIGHTTYPE_TUBE (5) + +//----------------------------------------------------------------------------- +// PreLightData Structure (Area Light Related) +//----------------------------------------------------------------------------- + +// Precomputed lighting data for area light evaluation +// Reference: Based on HDRP's PreLightData structure, simplified for area lights only +struct BGPreLightData +{ + float NdotV; // Dot product between normal and view direction (could be negative due to normal mapping) + + // Pre-integrated FGD (Fresnel, Geometric, Diffuse) terms + float3 specularFGD; // Pre-integrated specular FGD term + float diffuseFGD; // Pre-integrated diffuse FGD term + float reflectivity; // Pre-integrated reflectivity term (for multiscattering) + float energyCompensation; // Energy compensation for multiscattering (1.0 / specularReflectivity - 1.0) + + // Area light LTC (Linearly Transformed Cosines) transforms + float3x3 orthoBasisViewNormal; // Right-handed view-dependent orthogonal basis around the normal + // Warning: These matrices are transposed! They are designed to transform row vectors via mul(V, M) + float3x3 ltcTransformDiffuse; // Inverse LTC transformation matrix for diffuse BRDF (Lambertian or Disney Diffuse) + float3x3 ltcTransformSpecular; // Inverse LTC transformation matrix for specular BRDF (GGX) +}; + +//----------------------------------------------------------------------------- +// Area Light Data Structure +//----------------------------------------------------------------------------- + +// Area light data structure for URP +// This structure contains the necessary information for evaluating area lights (rectangular and line/tube lights) +// IMPORTANT: Must match C# BGAreaLightRenderingData layout exactly +// Uses float4 instead of float3+padding to match C# Vector4 layout (avoids alignment issues) +struct BGAreaLightData +{ + float4 positionWS; // float4: xyz = position, w = 1 when this entry is an area light (matches C# Vector4 flag) + float4 right; // float4: xyz = right vector, w = unused + float4 up; // float4: xyz = up vector, w = unused + float4 forward; // float4: xyz = forward vector, w = unused + float4 size; // float4: xy = size (length, height), zw = unused + float4 colorIntensity; // float4: rgb = color, w = intensity + float4 rangeParams; // float4: x = range, y = rangeAttenuationScale, z = rangeAttenuationBias, w = isRectLight + float4 renderingLayerMask; // float4: x = uint mask bits (reinterpreted from C#), yzw = unused +}; + +//----------------------------------------------------------------------------- +// Area Light Data Buffer +//----------------------------------------------------------------------------- + +// Structured buffer containing area light data for additional lights (per-object order) +// Entries without BGAreaLight component will have intensity = 0 +StructuredBuffer _AreaLightDataBuffer; + +// Count of entries in the area light data buffer (matches additionalLightsCount) +int _AreaLightDataBufferCount; + +//----------------------------------------------------------------------------- +// Area Light Shadow Data +//----------------------------------------------------------------------------- + +#include "Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLightShadows.hlsl" + +#if UNITY_VERSION < 60000000 +// This function assumes that inputs are well-behaved, e.i. +// that the line does not pass through the origin and +// that the light is (at least partially) above the surface. +float I_diffuse_line(float3 C, float3 A, float hl) +{ + // Solve C.z + h * A.z = 0. + float h = -C.z * rcp(A.z); // May be Inf, but never NaN + + // Clip the line segment against the z-plane if necessary. + float h2 = (A.z >= 0) ? max( hl, h) + : min( hl, h); // P2 = C + h2 * A + float h1 = (A.z >= 0) ? max(-hl, h) + : min(-hl, h); // P1 = C + h1 * A + + // Normalize the tangent. + float as = dot(A, A); // |A|^2 + float ar = rsqrt(as); // 1/|A| + float a = as * ar; // |A| + float3 T = A * ar; // A/|A| + + // Orthogonal 2D coordinates: + // P(n, t) = n * N + t * T. + float tc = dot(T, C); // C = n * N + tc * T + float3 P0 = C - tc * T; // P(n, 0) = n * N + float ns = dot(P0, P0); // |P0|^2 + + float nr = rsqrt(ns); // 1/|P0| + float n = ns * nr; // |P0| + float Nz = P0.z * nr; // N.z = P0.z/|P0| + + // P(n, t) - C = P0 + t * T - P0 - tc * T + // = (t - tc) * T = h * A = (h * a) * T. + float t2 = tc + h2 * a; // P2.t + float t1 = tc + h1 * a; // P1.t + float s2 = ns + t2 * t2; // |P2|^2 + float s1 = ns + t1 * t1; // |P1|^2 + float mr = rsqrt(s1 * s2); // 1/(|P1|*|P2|) + float r2 = s1 * (mr * mr); // 1/|P2|^2 + float r1 = s2 * (mr * mr); // 1/|P1|^2 + + // I = (i1 + i2 + i3) / Pi. + // i1 = N.z * (P2.t / |P2|^2 - P1.t / |P1|^2). + // i2 = -T.z * (P2.n / |P2|^2 - P1.n / |P1|^2). + // i3 = N.z * ArcCos[Dot[P1, P2] / (|P1| * |P2|)] / |P0|. + float i12 = (Nz * t2 - (T.z * n)) * r2 + - (Nz * t1 - (T.z * n)) * r1; + // Guard against numerical errors. + float dt = min(1, (ns + t1 * t2) * mr); + float i3 = acos(dt) * (Nz * nr); // angle * cos(θ) / r^2 + + // Guard against numerical errors. + return INV_PI * max(0, i12 + i3); +} + +// A hack to smoothly limit the influence of the light to the interior of a pillow. +// A "pillow" (for the lack of a better name) is formed by sweeping a ball across a rectangle. +// This function behaves like CapsuleAttenuation() for a narrow rectangle. +// This function behaves like SmoothWindowedDistanceAttenuation() for a small rectangle. +// Convention: the surface point is located at the origin of the coordinate system. +real PillowWindowing(real3 center, real3 xAxis, real3 yAxis, real halfLength, real halfHeight, + real rangeAttenuationScale, real rangeAttenuationBias) +{ +// Conceptually, the idea is very simple: after taking the symmetry +// of the pillow into account, it is clear that the problem can be +// reduced to finding the closest sphere inside the pillow. +// We begin our search at the center of the pillow, and then translate +// this point along and across the plane of symmetry until we either +// a) find the closest point on the plane, or b) hit an edge of the rectangle. +// The problem is simplified by working in the coordinate system of the pillow. +real x = dot(center, xAxis); // -x, strictly speaking +real dx = max(0, abs(x) - halfLength); +real y = dot(center, yAxis); // -y, strictly speaking +real dy = max(0, abs(y) - halfHeight); +real r2 = dot(center, center); // r^2 +real z2 = max(0, r2 - x * x - y * y); // z^2 +real d2 = z2 + dx * dx + dy * dy; // Squared distance to the center of the closest sphere + +return SmoothDistanceWindowing(d2, rangeAttenuationScale, rangeAttenuationBias); +} +#endif + +//----------------------------------------------------------------------------- +// Area Light Shadow Sampling (moved to BGAreaLightShadows.hlsl) +//----------------------------------------------------------------------------- + +// Get area light data for a specific additional light index (per-object order) +BGAreaLightData GetAreaLightData(uint lightIndex) +{ + return _AreaLightDataBuffer[lightIndex]; +} + +// Legacy helper for visible light indexing (kept for compatibility) +BGAreaLightData GetAreaLightDataFromRealIndex(uint realLightIndex) +{ + return _AreaLightDataBuffer[realLightIndex]; +} + +//----------------------------------------------------------------------------- +// Area Light Evaluation +//----------------------------------------------------------------------------- + +// Evaluates area light using LTC approximation +// isRectLight: true for rectangular light, false for line/tube light +// center: Light center position in local coordinate system (shaded point at origin) +// right: Right vector of the light in local coordinate system +// up: Up vector of the light in local coordinate system +// halfLength: Half-length of the light along the right axis +// halfHeight: Half-height of the light along the up axis (0 for line lights) +// invM: Inverse LTC transformation matrix (transposed) +// perceptualRoughness: Material perceptual roughness [0, 1] +// Returns: float4 where rgb = color (1,1,1), a = irradiance +float4 EvaluateLTC_Area(bool isRectLight, float3 center, float3 right, float3 up, + float halfLength, float halfHeight, + float3x3 invM, float perceptualRoughness) +{ + float3 ortho = cross(center, right); + float orthoSq = dot(ortho, ortho); + + // Check whether the light is in a vertical orientation + bool quit = (orthoSq == 0); + + // Check whether the light is entirely below the surface + // We must test twice, since a linear transformation + // may bring the light above the surface (a side-effect) + quit = quit || (center.z + halfLength * abs(right.z) + halfHeight * abs(up.z) <= 0); + + float4 ltcValue = float4(1, 1, 1, 0); + + if (!quit) + { + // Perform sparse matrix multiplication + float3 C = mul(invM, center); + float3 A = mul(invM, right); + float3 B = mul(invM, up); + + // Check whether the light is entirely below the surface after transformation + if (C.z + halfLength * abs(A.z) + halfHeight * abs(B.z) > 0) + { + if (isRectLight) + { + // Transform the rectangular light vertices + float4x3 lightVerts; + lightVerts[0] = C - halfLength * A - halfHeight * B; // LL + lightVerts[1] = lightVerts[0] + (2.0 * halfHeight) * B; // UL + lightVerts[2] = lightVerts[1] + (2.0 * halfLength) * A; // UR + lightVerts[3] = lightVerts[2] - (2.0 * halfHeight) * B; // LR + + // Compute polygon irradiance in the transformed configuration + #if UNITY_VERSION >= 60000000 + float3 formFactor; + ltcValue.a = PolygonIrradiance(lightVerts, formFactor); + #else + ltcValue.a = PolygonIrradiance(lightVerts); + #endif + } + else + { + // Line light evaluation + #if UNITY_VERSION >= 60000000 + float w = ComputeLineWidthFactor(invM, ortho, orthoSq); + #else + float w = ComputeLineWidthFactor(invM, ortho); + #endif + ltcValue.a = I_diffuse_line(C, A, halfLength) * w; + } + } + } + + return ltcValue; +} + +//----------------------------------------------------------------------------- +// PreLightData Initialization +//----------------------------------------------------------------------------- + +// Initialize PreLightData for area light evaluation +BGPreLightData GetAreaLightPreLightData( + float3 V, float3 N, + float perceptualRoughness, float3 fresnel0, + uint bsdfModelDiffuse, uint bsdfModelSpecular) +{ + BGPreLightData preLightData; + + // Initialize all fields to zero + preLightData.NdotV = 0.0; + preLightData.specularFGD = float3(0, 0, 0); + preLightData.diffuseFGD = 0.0; + preLightData.reflectivity = 0.0; + preLightData.energyCompensation = 0.0; + preLightData.orthoBasisViewNormal = (float3x3)0; + preLightData.ltcTransformDiffuse = (float3x3)0; + preLightData.ltcTransformSpecular = (float3x3)0; + + // Compute NdotV + preLightData.NdotV = dot(N, V); + float clampedNdotV = ClampNdotV(preLightData.NdotV); + + // Compute pre-integrated FGD (Fresnel, Geometric, Diffuse) terms + float specularReflectivity; +#ifdef USE_DIFFUSE_LAMBERT_BRDF + // Use Lambertian diffuse FGD (diffuseFGD = 1.0) + GetPreIntegratedFGDGGXAndLambert( + clampedNdotV, + perceptualRoughness, + fresnel0, + preLightData.specularFGD, + preLightData.diffuseFGD, + preLightData.reflectivity + ); + specularReflectivity = preLightData.reflectivity; +#else + // Use Disney Diffuse FGD + GetPreIntegratedFGDGGXAndDisneyDiffuse( + clampedNdotV, + perceptualRoughness, + fresnel0, + 1, + preLightData.specularFGD, + preLightData.diffuseFGD, + preLightData.reflectivity + ); + specularReflectivity = preLightData.reflectivity; +#endif + + // Compute energy compensation for multiscattering + preLightData.energyCompensation = (specularReflectivity > 0.0) ? (1.0 / specularReflectivity - 1.0) : 0.0; + + // Build orthogonal basis around normal (view-dependent) + preLightData.orthoBasisViewNormal = GetOrthoBasisViewNormal(V, N, preLightData.NdotV); + + // Sample LTC matrices for diffuse + // HDRP style: Use compile-time macro to choose between Lambertian and other BRDF models +#ifdef USE_DIFFUSE_LAMBERT_BRDF + // Use identity matrix for Lambertian (no texture sampling) + preLightData.ltcTransformDiffuse = k_identity3x3; +#else + // Sample LTC matrix for the specified BRDF model (e.g., Disney Diffuse) + preLightData.ltcTransformDiffuse = SampleLtcMatrix(perceptualRoughness, clampedNdotV, bsdfModelDiffuse); +#endif + + // Sample LTC matrix for specular + preLightData.ltcTransformSpecular = SampleLtcMatrix(perceptualRoughness, clampedNdotV, bsdfModelSpecular); + + return preLightData; +} + +// Area light lighting function compatible with URP's LightingPhysicallyBased style +// This function can be used in URP's additional lights loop +half3 LightingPhysicallyBasedAreaLight( + BGAreaLightData areaLightData, + BGPreLightData preLightData, + float3 positionWS, + half3 normalWS, + half3 viewDirectionWS, + half3 brdfDiffuse, + half3 brdfSpecular, + bool specularHighlightsOff) +{ + // Step 1: Calculate light-to-surface vector and half dimensions + float3 unL = areaLightData.positionWS.xyz - positionWS; + float halfLength = areaLightData.size.x * 0.5; + float halfHeight = areaLightData.size.y * 0.5; + bool isRectLight = areaLightData.rangeParams.w > 0.5; + + // Step 2: Check if light is front-facing (for rectangular lights only) + // Light forward points in the direction the light is facing (light emission direction) + // If dot(forward, unL) < 0, the point is behind the light (not illuminated) + if (isRectLight && dot(areaLightData.forward.xyz, unL) >= 0) + return half3(0, 0, 0); + + // Step 3: Calculate intensity attenuation (matching HDRP implementation) + // HDRP uses PillowWindowing for all area lights (rect and line) + // For line lights, halfHeight = 0, so PillowWindowing degrades to CapsuleWindowing behavior + float intensity = PillowWindowing(unL, areaLightData.right.xyz, areaLightData.up.xyz, + halfLength, halfHeight, + areaLightData.rangeParams.y, // rangeAttenuationScale + areaLightData.rangeParams.z); // rangeAttenuationBias + + // Early exit if light is not visible + if (intensity <= 0) + return half3(0, 0, 0); + + // Step 4: Transform light vectors into local coordinate system (using pre-computed basis) + float3 center = mul(preLightData.orthoBasisViewNormal, unL); + float3 right = mul(preLightData.orthoBasisViewNormal, areaLightData.right.xyz); + float3 up = mul(preLightData.orthoBasisViewNormal, areaLightData.up.xyz); + + // Step 5: Evaluate diffuse part (using pre-computed LTC matrix) + float4 ltcDiffuse = EvaluateLTC_Area(isRectLight, + center, right, up, + halfLength, halfHeight, + transpose(preLightData.ltcTransformDiffuse), + 1.0); // Roughness = 1 for diffuse + + // Step 6: Evaluate specular part (using pre-computed LTC matrix) + half3 lighting = half3(0, 0, 0); + + // Diffuse contribution (FGD from preLightData) + lighting += brdfDiffuse * ltcDiffuse.a * preLightData.diffuseFGD; + + // Specular contribution (FGD from preLightData) + half3 specularLighting = half3(0, 0, 0); +#ifndef _SPECULARHIGHLIGHTS_OFF + [branch] if (!specularHighlightsOff) + { + float4 ltcSpecular = EvaluateLTC_Area(isRectLight, + center, right, up, + halfLength, halfHeight, + transpose(preLightData.ltcTransformSpecular), + 1.0); // Roughness is handled by LTC matrix + + specularLighting = brdfSpecular * preLightData.specularFGD * ltcSpecular.a; + + // Apply energy compensation for multiscattering (matching HDRP) + specularLighting *= (1.0 + preLightData.energyCompensation); + } +#endif + + // Combine diffuse and specular + lighting += specularLighting; + + // Step 7: Apply intensity and light color + lighting *= intensity * areaLightData.colorIntensity.rgb * areaLightData.colorIntensity.w; + + return lighting; +} + +half3 LightingPhysicallyBasedAreaLight( + BGAreaLightData areaLightData, + BGPreLightData preLightData, + float3 positionWS, + half3 normalWS, + half3 viewDirectionWS, + half3 brdfDiffuse, + half3 brdfSpecular) +{ + return LightingPhysicallyBasedAreaLight(areaLightData, preLightData, positionWS, + normalWS, viewDirectionWS, + brdfDiffuse, brdfSpecular, false); +} + +half3 LightingPhysicallyBasedAreaLightWithShadow( + uint areaLightIndex, + BGAreaLightData areaLightData, + BGPreLightData preLightData, + float3 positionWS, + half3 normalWS, + half3 viewDirectionWS, + half3 brdfDiffuse, + half3 brdfSpecular, + bool specularHighlightsOff) +{ + // Calculate base lighting (without shadow) + half3 lighting = LightingPhysicallyBasedAreaLight( + areaLightData, preLightData, positionWS, + normalWS, viewDirectionWS, + brdfDiffuse, brdfSpecular, specularHighlightsOff); + + // Apply shadow attenuation + half shadowAttenuation = SampleAreaLightShadow(areaLightIndex, positionWS); + lighting *= shadowAttenuation; + + return lighting; +} + +half3 LightingPhysicallyBasedAreaLightWithShadow( + uint areaLightIndex, + BGAreaLightData areaLightData, + BGPreLightData preLightData, + float3 positionWS, + half3 normalWS, + half3 viewDirectionWS, + half3 brdfDiffuse, + half3 brdfSpecular) +{ + return LightingPhysicallyBasedAreaLightWithShadow( + areaLightIndex, areaLightData, preLightData, positionWS, + normalWS, viewDirectionWS, + brdfDiffuse, brdfSpecular, false); +} + +half3 EvaluateAreaLight( + float3 positionWS, + half3 normalWS, + half3 viewDirectionWS, + half3 brdfDiffuse, + half3 brdfSpecular, + float perceptualRoughness, + float3 fresnel0, + bool specularHighlightsOff) +{ + half3 totalLighting = half3(0, 0, 0); + + if (_AreaLightDataBufferCount <= 0) + { + return totalLighting; + } + + uint bsdfModelDiffuse = LTCLIGHTINGMODEL_DISNEY_DIFFUSE; + uint bsdfModelSpecular = LTCLIGHTINGMODEL_GGX; + + BGPreLightData preLightData = GetAreaLightPreLightData( + viewDirectionWS, + normalWS, + perceptualRoughness, + fresnel0, + bsdfModelDiffuse, + bsdfModelSpecular + ); + +#ifdef _LIGHT_LAYERS + uint meshRenderingLayers = GetMeshRenderingLayer(); +#endif + + for (uint i = 0; i < (uint)_AreaLightDataBufferCount; ++i) + { + BGAreaLightData areaLightData = GetAreaLightData(i); + +#ifdef _LIGHT_LAYERS + uint lightLayerMask = asuint(areaLightData.renderingLayerMask.x); + if (!IsMatchingLightLayer(lightLayerMask, meshRenderingLayers)) + { + continue; + } +#endif + + half3 lightContribution = LightingPhysicallyBasedAreaLightWithShadow( + i, // areaLightIndex + areaLightData, + preLightData, + positionWS, + normalWS, + viewDirectionWS, + brdfDiffuse, + brdfSpecular, + specularHighlightsOff); + + totalLighting += lightContribution; + } + + return totalLighting; +} + +half3 EvaluateAreaLight( + float3 positionWS, + half3 normalWS, + half3 viewDirectionWS, + half3 brdfDiffuse, + half3 brdfSpecular, + float perceptualRoughness, + float3 fresnel0) +{ + return EvaluateAreaLight( + positionWS, normalWS, viewDirectionWS, + brdfDiffuse, brdfSpecular, + perceptualRoughness, fresnel0, + false); +} + +half3 EvaluateAreaLight(InputData inputData, SurfaceData surfaceData) +{ + BRDFData brdfData; + InitializeBRDFData(surfaceData, brdfData); + + float perceptualRoughness = PerceptualSmoothnessToPerceptualRoughness(surfaceData.smoothness); + float3 fresnel0 = brdfData.specular; + + // Check if specular highlights are disabled + bool specularHighlightsOff = false; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specularHighlightsOff = true; + #endif + + return EvaluateAreaLight( + inputData.positionWS, + inputData.normalWS, + inputData.viewDirectionWS, + brdfData.diffuse, + brdfData.specular, + perceptualRoughness, + fresnel0, + specularHighlightsOff); +} + + +#endif // BADDOG_AREA_LIGHTING_INCLUDED + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl.meta new file mode 100644 index 00000000..35ee3dea --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: cdda5adc9fcf03f4185241ccc4e87b7e +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/Include/BGAreaLighting.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/HDPCSS.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/Include/HDPCSS.hlsl new file mode 100644 index 00000000..66b2e583 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/HDPCSS.hlsl @@ -0,0 +1,293 @@ +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + +#define DISK_SAMPLE_COUNT 64 +// Fibonacci Spiral Disk Sampling Pattern +// https://people.irisa.fr/Ricardo.Marques/articles/2013/SF_CGF.pdf +// +// Normalized direction vector portion of fibonacci spiral can be baked into a LUT, regardless of sampleCount. +// This allows us to treat the directions as a progressive sequence, using any sampleCount in range [0, n <= LUT_LENGTH] +// the radius portion of spiral construction is coupled to sample count, but is fairly cheap to compute at runtime per sample. +// Generated (in javascript) with: +// var res = ""; +// for (var i = 0; i < 64; ++i) +// { +// var a = Math.PI * (3.0 - Math.sqrt(5.0)); +// var b = a / (2.0 * Math.PI); +// var c = i * b; +// var theta = (c - Math.floor(c)) * 2.0 * Math.PI; +// res += "float2 (" + Math.cos(theta) + ", " + Math.sin(theta) + "),\n"; +// } + +static const float2 fibonacciSpiralDirection[DISK_SAMPLE_COUNT] = +{ + float2 (1, 0), + float2 (-0.7373688780783197, 0.6754902942615238), + float2 (0.08742572471695988, -0.9961710408648278), + float2 (0.6084388609788625, 0.793600751291696), + float2 (-0.9847134853154288, -0.174181950379311), + float2 (0.8437552948123969, -0.5367280526263233), + float2 (-0.25960430490148884, 0.9657150743757782), + float2 (-0.46090702471337114, -0.8874484292452536), + float2 (0.9393212963241182, 0.3430386308741014), + float2 (-0.924345556137805, 0.3815564084749356), + float2 (0.423845995047909, -0.9057342725556143), + float2 (0.29928386444487326, 0.9541641203078969), + float2 (-0.8652112097532296, -0.501407581232427), + float2 (0.9766757736281757, -0.21471942904125949), + float2 (-0.5751294291397363, 0.8180624302199686), + float2 (-0.12851068979899202, -0.9917081236973847), + float2 (0.764648995456044, 0.6444469828838233), + float2 (-0.9991460540072823, 0.04131782619737919), + float2 (0.7088294143034162, -0.7053799411794157), + float2 (-0.04619144594036213, 0.9989326054954552), + float2 (-0.6407091449636957, -0.7677836880006569), + float2 (0.9910694127331615, 0.1333469877603031), + float2 (-0.8208583369658855, 0.5711318504807807), + float2 (0.21948136924637865, -0.9756166914079191), + float2 (0.4971808749652937, 0.8676469198750981), + float2 (-0.952692777196691, -0.30393498034490235), + float2 (0.9077911335843911, -0.4194225289437443), + float2 (-0.38606108220444624, 0.9224732195609431), + float2 (-0.338452279474802, -0.9409835569861519), + float2 (0.8851894374032159, 0.4652307598491077), + float2 (-0.9669700052147743, 0.25489019011123065), + float2 (0.5408377383579945, -0.8411269468800827), + float2 (0.16937617250387435, 0.9855514761735877), + float2 (-0.7906231749427578, -0.6123030256690173), + float2 (0.9965856744766464, -0.08256508601054027), + float2 (-0.6790793464527829, 0.7340648753490806), + float2 (0.0048782771634473775, -0.9999881011351668), + float2 (0.6718851669348499, 0.7406553331023337), + float2 (-0.9957327006438772, -0.09228428288961682), + float2 (0.7965594417444921, -0.6045602168251754), + float2 (-0.17898358311978044, 0.9838520605119474), + float2 (-0.5326055939855515, -0.8463635632843003), + float2 (0.9644371617105072, 0.26431224169867934), + float2 (-0.8896863018294744, 0.4565723210368687), + float2 (0.34761681873279826, -0.9376366819478048), + float2 (0.3770426545691533, 0.9261958953890079), + float2 (-0.9036558571074695, -0.4282593745796637), + float2 (0.9556127564793071, -0.2946256262683552), + float2 (-0.50562235513749, 0.8627549095688868), + float2 (-0.2099523790012021, -0.9777116131824024), + float2 (0.8152470554454873, 0.5791133210240138), + float2 (-0.9923232342597708, 0.12367133357503751), + float2 (0.6481694844288681, -0.7614961060013474), + float2 (0.036443223183926, 0.9993357251114194), + float2 (-0.7019136816142636, -0.7122620188966349), + float2 (0.998695384655528, 0.05106396643179117), + float2 (-0.7709001090366207, 0.6369560596205411), + float2 (0.13818011236605823, -0.9904071165669719), + float2 (0.5671206801804437, 0.8236347091470047), + float2 (-0.9745343917253847, -0.22423808629319533), + float2 (0.8700619819701214, -0.49294233692210304), + float2 (-0.30857886328244405, 0.9511987621603146), + float2 (-0.4149890815356195, -0.9098263912451776), + float2 (0.9205789302157817, 0.3905565685566777) +}; + +real2 ComputeFibonacciSpiralDiskSample(const in int sampleIndex, const in real diskRadius, const in real sampleCountInverse, const in real sampleCountBias) +{ + real sampleRadius = diskRadius * sqrt((real)sampleIndex * sampleCountInverse + sampleCountBias); + real2 sampleDirection = fibonacciSpiralDirection[sampleIndex]; + return sampleDirection * sampleRadius; +} + +real PenumbraSizePunctual(real Reciever, real Blocker) +{ + return abs((Reciever - Blocker) / Blocker); +} + +real PenumbraSizeDirectional(real Reciever, real Blocker, real rangeScale) +{ + return abs(Reciever - Blocker) * rangeScale; +} + +bool BlockerSearch(inout real averageBlockerDepth, inout real numBlockers, real lightArea, real3 coord, real UMin, real UMax, real VMin, real VMax, real2 sampleJitter, Texture2D shadowMap, SamplerState pointSampler, int sampleCount) +{ + real blockerSum = 0.0; + real sampleCountInverse = rcp((real)sampleCount); + real sampleCountBias = 0.5 * sampleCountInverse; + real ditherRotation = sampleJitter.x; + + for (int i = 0; i < sampleCount && i < DISK_SAMPLE_COUNT; ++i) + { + real2 offset = ComputeFibonacciSpiralDiskSample(i, lightArea, sampleCountInverse, sampleCountBias); + offset = real2(offset.x * sampleJitter.y + offset.y * sampleJitter.x, + offset.x * -sampleJitter.x + offset.y * sampleJitter.y); + + real U = coord.x + offset.x; + real V = coord.y + offset.y; + + //NOTE: We must clamp the sampling within the bounds of the shadow atlas. + // Overfiltering will leak results from other shadow lights. + if (U < UMin || U > UMax || V < VMin || V > VMax) + { + // Discard the sample (it is located outside the shadow map, and it may correspond to another cube map face). + } + else + { + real shadowMapDepth = SAMPLE_TEXTURE2D_LOD(shadowMap, pointSampler, float2(U, V), 0.0).x; + + if (COMPARE_DEVICE_DEPTH_CLOSER(shadowMapDepth, coord.z)) + { + blockerSum += shadowMapDepth; + numBlockers += 1.0; + } + } + } + + // Return the depth value of the far plane if none of the samples are valid + averageBlockerDepth = (numBlockers > 0) ? (blockerSum / numBlockers) : UNITY_RAW_FAR_CLIP_VALUE; + + return numBlockers > 0; +} + +real PCSS(real3 coord, real UMin, real UMax, real VMin, real VMax, real filterRadius, real2 sampleJitter, Texture2D shadowMap, SamplerComparisonState compSampler, int sampleCount) +{ + real sum = 0.0; + real sampleCountInverse = rcp((real)sampleCount); + real sampleCountBias = 0.5 * sampleCountInverse; + real ditherRotation = sampleJitter.x; + + real numValidSamples = 0; + + for (int i = 0; i < sampleCount && i < DISK_SAMPLE_COUNT; ++i) + { + real2 offset = ComputeFibonacciSpiralDiskSample(i, filterRadius, sampleCountInverse, sampleCountBias); + offset = real2(offset.x * sampleJitter.y + offset.y * sampleJitter.x, + offset.x * -sampleJitter.x + offset.y * sampleJitter.y); + + real U = coord.x + offset.x; + real V = coord.y + offset.y; + + //NOTE: We must clamp the sampling within the bounds of the shadow atlas. + // Overfiltering will leak results from other shadow lights. + if (U < UMin || U > UMax || V < VMin || V > VMax) + { + // Discard the sample (it is located outside the shadow map, and it may correspond to another cube map face). + } + else + { + sum += SAMPLE_TEXTURE2D_SHADOW(shadowMap, compSampler, real3(U, V, coord.z)).r; + numValidSamples += 1.0; + } + } + + // Return the unoccluded (unshadowed) value if none of the samples are valid + return (numValidSamples > 0) ? (sum / numValidSamples) : 1.0; +} + + +/////////////////////////////// +// PCSS variant for area lights + +// Samples denser near the center - important for blocker search +real2 ComputeFibonacciSpiralDiskSampleClumped(const in int sampleIndex, const in real sampleCountInverse, out real sampleDistNorm) +{ + // Samples not biased away from the center - sample 0 at (0, 0) is important for blocker search near shadow contact points. + sampleDistNorm = (real)sampleIndex * sampleCountInverse; + + // Third power chosen arbitrarily - center area is really that much more important + sampleDistNorm = sampleDistNorm * sampleDistNorm * sampleDistNorm; + + return fibonacciSpiralDirection[sampleIndex] * sampleDistNorm; +} + +// Samples uniformly spread across the disk kernel +real2 ComputeFibonacciSpiralDiskSampleUniform(const in int sampleIndex, const in real sampleCountInverse, const in real sampleBias, out real sampleDistNorm) +{ + // Samples biased away from the center, so that sample 0 doesn't fall at (0, 0), or it will not be affected by sample jitter and create a visible edge. + sampleDistNorm = (real)sampleIndex * sampleCountInverse + sampleBias; + + // sqrt results in uniform distribution + sampleDistNorm = sqrt(sampleDistNorm); + + return fibonacciSpiralDirection[sampleIndex] * sampleDistNorm; +} + +void FilterScaleOffset(real3 coord, real maxSampleZDistance, real shadowmapSamplingScale, out real2 filterScalePos, out real2 filterScaleNeg, out real2 filterOffset) +{ + real d = shadowmapSamplingScale * maxSampleZDistance / (1 - coord.z); + real2 target = (coord.xy + 0.5) * 0.5; + + filterScalePos = (1 - target) * d; + filterScaleNeg = target * d; + filterOffset = (target - coord.xy) * d; +} + +bool BlockerSearch_Area(inout real closestBlocker, real maxSampleZDistance, real2 shadowmapInAtlasScale, real2 posTCAtlas, real3 posTCShadowmap, real2 minCoord, real2 maxCoord, real2 sampleJitter, Texture2D shadowMap, SamplerState pointSampler, int sampleCount) +{ + // The z extent of the filter cone shouldn't go beyond the near plane of the shadow +#if UNITY_REVERSED_Z + #define NEARPLANE 1 + maxSampleZDistance = min(1 - posTCShadowmap.z, maxSampleZDistance); +#else + #define NEARPLANE 0 + maxSampleZDistance = min(posTCShadowmap.z, maxSampleZDistance); +#endif + + real sampleCountInverse = rcp((real)sampleCount); + + real2 filterScalePos, filterScaleNeg; + real2 filterOffset; + FilterScaleOffset(posTCShadowmap, maxSampleZDistance, shadowmapInAtlasScale.x, filterScalePos, filterScaleNeg, filterOffset); + + closestBlocker = NEARPLANE; + for (int i = 0; i < sampleCount && i < DISK_SAMPLE_COUNT; ++i) + { + real sampleDistNorm; + real2 offset = ComputeFibonacciSpiralDiskSampleClumped(i, sampleCountInverse, sampleDistNorm); + offset = real2(offset.x * sampleJitter.y + offset.y * sampleJitter.x, + offset.x * -sampleJitter.x + offset.y * sampleJitter.y); + + offset = offset * real2(offset.x > 0 ? filterScalePos.x : filterScaleNeg.x, offset.y > 0 ? filterScalePos.y : filterScaleNeg.y) + filterOffset * sampleDistNorm; + real zoffset = maxSampleZDistance * sampleDistNorm; + + real2 pos = posTCAtlas + offset; + + real blocker = SAMPLE_TEXTURE2D_LOD(shadowMap, pointSampler, pos, 0.0).x; + + if (!(any(pos < minCoord) || any(pos > maxCoord)) && + COMPARE_DEVICE_DEPTH_CLOSER(blocker, posTCShadowmap.z + zoffset) && + COMPARE_DEVICE_DEPTH_CLOSER(closestBlocker, blocker)) + { + closestBlocker = blocker; + } + } + + return COMPARE_DEVICE_DEPTH_CLOSER(NEARPLANE, closestBlocker); +} + +real PCSS_Area(real2 posTCAtlas, real3 posTCShadowmap, real maxSampleZDistance, real2 shadowmapInAtlasScale, real2 shadowmapInAtlasOffset, real2 minCoord, real2 maxCoord, real2 sampleJitter, Texture2D shadowMap, SamplerComparisonState compSampler, int sampleCount) +{ + real biasFactor = 1; + real sampleCountInverse = rcp((real)sampleCount + biasFactor); + real sampleBias = biasFactor * sampleCountInverse; + + real2 filterScalePos, filterScaleNeg; + real2 filterOffset; + FilterScaleOffset(posTCShadowmap, maxSampleZDistance, shadowmapInAtlasScale.x, filterScalePos, filterScaleNeg, filterOffset); + + real sum = 0.0; + for (int i = 0; i < sampleCount && i < DISK_SAMPLE_COUNT; ++i) + { + real sampleDistNorm; + real2 offset = ComputeFibonacciSpiralDiskSampleUniform(i, sampleCountInverse, sampleBias, sampleDistNorm); + offset = real2(offset.x * sampleJitter.y + offset.y * sampleJitter.x, + offset.x * -sampleJitter.x + offset.y * sampleJitter.y); + + offset = offset * real2(offset.x > 0 ? filterScalePos.x : filterScaleNeg.x, offset.y > 0 ? filterScalePos.y : filterScaleNeg.y) + filterOffset * sampleDistNorm; + real zoffset = maxSampleZDistance * sampleDistNorm; + + real3 pos = 0; + pos.xy = posTCAtlas + offset; + pos.z = posTCShadowmap.z + zoffset; + + sum += (any(pos.xy < minCoord) || any(pos.xy > maxCoord)) ? 1 : SAMPLE_TEXTURE2D_SHADOW(shadowMap, compSampler, pos).r; + } + + return sum / sampleCount; +} + + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/HDPCSS.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/Include/HDPCSS.hlsl.meta new file mode 100644 index 00000000..1ebac759 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/HDPCSS.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 0f71b54072966be4f94964b8cd3f65ca +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/Include/HDPCSS.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.cs.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.cs.hlsl new file mode 100644 index 00000000..199aeacf --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.cs.hlsl @@ -0,0 +1,22 @@ +// +// This file was automatically generated. Please don't edit by hand. Execute Editor command [ Edit > Rendering > Generate Shader Includes ] instead +// + +#ifndef LTCAREALIGHT_CS_HLSL +#define LTCAREALIGHT_CS_HLSL +// +// UnityEngine.Rendering.HighDefinition.LTCLightingModel: static fields +// +#define LTCLIGHTINGMODEL_GGX (0) +#define LTCLIGHTINGMODEL_DISNEY_DIFFUSE (1) +#define LTCLIGHTINGMODEL_CHARLIE (2) +#define LTCLIGHTINGMODEL_KAJIYA_KAY_SPECULAR (3) +#define LTCLIGHTINGMODEL_MARSCHNER (4) +#define LTCLIGHTINGMODEL_COOK_TORRANCE (5) +#define LTCLIGHTINGMODEL_WARD (6) +#define LTCLIGHTINGMODEL_OREN_NAYAR (7) +#define LTCLIGHTINGMODEL_COUNT (8) + + +#endif + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.cs.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.cs.hlsl.meta new file mode 100644 index 00000000..a332b8ea --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.cs.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: c092a617a3180384d9e8377e5bba8351 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.cs.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.hlsl new file mode 100644 index 00000000..be2e3706 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.hlsl @@ -0,0 +1,75 @@ +// Area light textures +TEXTURE2D_ARRAY(_LtcData); // We pack all Ltc data inside one texture array to limit the number of resource used + +#include "Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.cs.hlsl" + +#define LTC_LUT_SIZE (64) + +// Approximate fit of BRDF with power for NdotL coefficient +void ModifyLambertLTCTransformForDiffusePower(inout float3x3 ltcTransformDiffuse, float diffusePower) +{ + // reminder: value is remapped to have 0 as neutral + diffusePower = diffusePower + 1; + + // To do this fitting, the ltcTransformDiffuse were outputed from C# by + // - modifying the code in BRDF_Disney.cs to handle diffuse power + // - uncommenting MenuItem in LTCTableGeneratorEditor.cs + // - generating a few tables for various diffuse power values + // Then each column of the table is fitted with respect to the diffuse power + + float fitted = 0.26564f; + float w = diffusePower - 1; + ltcTransformDiffuse._m00 += w * fitted; + ltcTransformDiffuse._m11 += w * fitted; +} + +// Approximate fit of BRDF with power for NdotL coefficient +void ModifyDisneyLTCTransformForDiffusePower(inout float3x3 ltcTransformDiffuse, float diffusePower, float perceptualRoughness, float clampedNdotV) +{ + // reminder: value is remapped to have 0 as neutral + diffusePower = diffusePower + 1; + + // To do this fitting, the ltcTransformDiffuse were outputed from C# by + // - modifying the code in BRDF_Disney.cs to handle diffuse power + // - uncommenting MenuItem in LTCTableGeneratorEditor.cs + // - generating a few tables for various diffuse power values + // Then each column of the table is fitted with respect to the diffuse power + + // TODO: should revisit, can probably be made cheaper and more precise + // When diffusePower > 3.5, fitting is not great but value is limited to range [1, 3] in the UI + float w = sqrt(abs(diffusePower)) - 1; + float w2 = sqrt(abs(diffusePower - 1)); + float x = perceptualRoughness; + float y2 = 1 - clampedNdotV; + float y = sqrt(y2); + float y4 = y2 * y2; + + float fitted = lerp(0.6039, 0.6588, x); + + float c = lerp(0.0043359, 0.024585, x); + float d = lerp(0.0, 0.012516, x); + float fitted2 = y4*y4 * c + d * y; + + float c2 = lerp(0.0039, 0.02, x); + float d2 = lerp(0.0, 0.00705, x); + float fitted3 = y4*y4 * c2 + d2 * y; + + ltcTransformDiffuse._m00 += w * fitted; + ltcTransformDiffuse._m02 -= w2 * fitted2; + ltcTransformDiffuse._m11 += w * fitted; + ltcTransformDiffuse._m20 += w2 * fitted3; +} + +// Fetches the transposed M^(-1) matrix need for runtime LTC evaluation. +float3x3 SampleLtcMatrix(float perceptualRoughness, float clampedNdotV, uint bsdfIndex) +{ + // sqrt(1 - cos(theta)) results in an approximately linear parametrization + // that replaces an expensive acos() function with a simple sqrt(). + float2 uv = Remap01ToHalfTexelCoord(float2(perceptualRoughness, sqrt(1 - clampedNdotV)), LTC_LUT_SIZE); + + float3x3 invM = 0; + invM._m22 = 1; + invM._m00_m02_m11_m20 = SAMPLE_TEXTURE2D_ARRAY_LOD(_LtcData, sampler_LinearClamp, uv, bsdfIndex, 0); + + return invM; +} diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.hlsl.meta new file mode 100644 index 00000000..9860b48c --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 461a3082fb16a954da111509b2c670f5 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/Include/LTCAreaLight.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/PreIntegratedFGD.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/Include/PreIntegratedFGD.hlsl new file mode 100644 index 00000000..064db8dd --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/PreIntegratedFGD.hlsl @@ -0,0 +1,81 @@ +#ifndef BADDOG_PREINTEGRATED_FGD_INCLUDED +#define BADDOG_PREINTEGRATED_FGD_INCLUDED + +#include "Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl" +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/GlobalSamplers.hlsl" + +//----------------------------------------------------------------------------- +// Pre-Integrated FGD Texture Declarations +//----------------------------------------------------------------------------- + +// Pre-integrated FGD (Fresnel, Geometric, Diffuse) textures +// These textures store pre-computed BSDF integrals for efficient IBL and area light evaluation +TEXTURE2D(_PreIntegratedFGD_GGXDisneyDiffuse); +TEXTURE2D(_PreIntegratedFGD_CharlieAndFabric); +TEXTURE2D(_PreIntegratedFGD_Marschner); + +// Use URP's standard linear clamp sampler from GlobalSamplers.hlsl +// sampler_LinearClamp is defined in GlobalSamplers.hlsl and can be used directly + +//----------------------------------------------------------------------------- +// Pre-Integrated FGD Functions (GGX + Disney Diffuse) +//----------------------------------------------------------------------------- + +// For image based lighting, a part of the BSDF is pre-integrated. +// This is done both for specular GGX height-correlated and DisneyDiffuse +// reflectivity is Integral{(BSDF_GGX / F)} - use for multiscattering +void GetPreIntegratedFGDGGXAndDisneyDiffuse(float NdotV, float perceptualRoughness, float3 fresnel0, float F90, out float3 specularFGD, out float diffuseFGD, out float reflectivity) +{ + // We want the LUT to contain the entire [0, 1] range, without losing half a texel at each side. + float2 coordLUT = Remap01ToHalfTexelCoord(float2(sqrt(NdotV), perceptualRoughness), FGDTEXTURE_RESOLUTION); + + float3 preFGD = SAMPLE_TEXTURE2D_LOD(_PreIntegratedFGD_GGXDisneyDiffuse, sampler_LinearClamp, coordLUT, 0).xyz; + + // Pre-integrate GGX FGD + // Integral{BSDF * dw} = + // Integral{(F0 + (F90 - F0) * (1 - )^5) * (BSDF / F) * dw} = + // (F90 - F0) * Integral{(1 - )^5 * (BSDF / F) * dw} + F0 * Integral{(BSDF / F) * dw}= + // (F90 - F0) * x + F0 * y + specularFGD = (F90 - fresnel0) * preFGD.xxx + fresnel0 * preFGD.yyy; + + // Pre integrate DisneyDiffuse FGD: + // z = DisneyDiffuse + // Remap from the [0, 1] to the [0.5, 1.5] range. + diffuseFGD = preFGD.z + 0.5; + + reflectivity = preFGD.y; +} + +// Overload without F90 parameter (defaults to 1.0) +void GetPreIntegratedFGDGGXAndDisneyDiffuse(float NdotV, float perceptualRoughness, float3 fresnel0, out float3 specularFGD, out float diffuseFGD, out float reflectivity) +{ + GetPreIntegratedFGDGGXAndDisneyDiffuse(NdotV, perceptualRoughness, fresnel0, 1.0, specularFGD, diffuseFGD, reflectivity); +} + +// GGX + Lambert variant (for USE_DIFFUSE_LAMBERT_BRDF) +void GetPreIntegratedFGDGGXAndLambert(float NdotV, float perceptualRoughness, float3 fresnel0, out float3 specularFGD, out float diffuseFGD, out float reflectivity) +{ + GetPreIntegratedFGDGGXAndDisneyDiffuse(NdotV, perceptualRoughness, fresnel0, specularFGD, diffuseFGD, reflectivity); + diffuseFGD = 1.0; +} + +//----------------------------------------------------------------------------- +// Pre-Integrated FGD Functions (Charlie + Fabric Lambert) +//----------------------------------------------------------------------------- + +void GetPreIntegratedFGDCharlieAndFabricLambert(float NdotV, float perceptualRoughness, float3 fresnel0, out float3 specularFGD, out float diffuseFGD, out float reflectivity) +{ + // Read the texture + float3 preFGD = SAMPLE_TEXTURE2D_LOD(_PreIntegratedFGD_CharlieAndFabric, sampler_LinearClamp, float2(NdotV, perceptualRoughness), 0).xyz; + + specularFGD = lerp(preFGD.xxx, preFGD.yyy, fresnel0) * 2.0 * PI; + + // z = FabricLambert + diffuseFGD = preFGD.z; + + reflectivity = preFGD.y; +} + +#endif // BADDOG_PREINTEGRATED_FGD_INCLUDED + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/Include/PreIntegratedFGD.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/Include/PreIntegratedFGD.hlsl.meta new file mode 100644 index 00000000..6c53cc0e --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/Include/PreIntegratedFGD.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 5f3c66b7998a30f4398aa55c231750eb +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/Include/PreIntegratedFGD.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl new file mode 100644 index 00000000..06499abd --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl @@ -0,0 +1,14 @@ +// +// This file was automatically generated. Please don't edit by hand. Execute Editor command [ Edit > Rendering > Generate Shader Includes ] instead +// + +#ifndef PREINTEGRATEDFGD_CS_HLSL +#define PREINTEGRATEDFGD_CS_HLSL +// +// BadDog.Rendering.AreaLight.PreIntegratedFGD+FGDTexture: static fields +// +#define FGDTEXTURE_RESOLUTION (64) + + +#endif + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl.meta b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl.meta new file mode 100644 index 00000000..6b4f45cb --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: bd8ea76e5e78ccc4c83f8455f6339348 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_CharlieFabricLambert.shader b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_CharlieFabricLambert.shader new file mode 100644 index 00000000..ec5b06d5 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_CharlieFabricLambert.shader @@ -0,0 +1,111 @@ +Shader "Hidden/BadDog/URP/PreIntegratedFGD_CharlieFabricLambert" +{ + SubShader + { + Tags{ "RenderPipeline" = "UniversalPipeline" } + Pass + { + ZTest Always Cull Off ZWrite Off + + HLSLPROGRAM + + #pragma editor_sync_compilation + + #pragma vertex Vert + #pragma fragment Frag + #pragma target 4.5 + #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch + + #define PREFER_HALF 0 + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/ImageBasedLighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + + // ---------------------------------------------------------------------------- + // Importance Sampling + // ---------------------------------------------------------------------------- + float4 IntegrateCharlieAndFabricLambertFGD(float3 V, float3 N, float roughness, uint sampleCount = 4096) + { + // Ref: "Production Friendly Microfacet Sheen BRDF": http://www.aconty.com/pdf/s2017_pbs_imageworks_sheen.pdf + float NdotV = ClampNdotV(dot(N, V)); + float4 acc = float4(0.0, 0.0, 0.0, 0.0); + float3x3 localToWorld = GetLocalFrame(N); + float rcpSampleCount = rcp(sampleCount); + for (uint i = 0; i < sampleCount; ++i) + { + // uniformly sample the hemisphere (recommended by the paper) + float3 localL = SampleConeStrata(i, rcpSampleCount, 0.0f); + float NdotL = localL.z; + float3 L = mul(localL, localToWorld); + + // evaluate cos-weighted "Charlie" BRDF without the Fresnel term + float3 H = normalize(V + L); + float NdotH = dot(N, H); + float weight = D_Charlie(NdotH, roughness) * V_Charlie(NdotL, NdotV, roughness) * NdotL; + + // Integral{BSDF * dw} = + // Integral{(F0 + (1 - F0) * (1 - )^5) * (BSDF / F) * dw} = + // (1 - F0) * Integral{(1 - )^5 * (BSDF / F) * dw} + F0 * Integral{(BSDF / F) * dw}= + // (1 - F0) * x + F0 * y = lerp(x, y, F0) + float VdotH = dot(V, H); + acc.x += weight * pow(1 - VdotH, 5); + acc.y += weight; + + // for Fabric Lambert we still use a Cosine importance sampling + float weightOverPdf; + float2 u = Hammersley2d(i, sampleCount); + ImportanceSampleLambert(u, localToWorld, L, NdotL, weightOverPdf); + float fabricLambert = FabricLambertNoPI(roughness); + acc.z += fabricLambert * weightOverPdf; + } + + // Normalize the accumulated value + acc *= 1.0f / sampleCount; // should be multiplied by 2pi, but to keep the values in [0, 1] range for texture storage we defer the multiplication to sampling in GetPreIntegratedFGDCharlieAndFabricLambert + return acc; + } + + // ---------------------------------------------------------------------------- + // Pre-Integration + // ---------------------------------------------------------------------------- + + struct Attributes + { + uint vertexID : SV_VertexID; + }; + + struct Varyings + { + float4 positionCS : SV_POSITION; + float2 texCoord : TEXCOORD0; + }; + + Varyings Vert(Attributes input) + { + Varyings output; + + output.positionCS = GetFullScreenTriangleVertexPosition(input.vertexID); + output.texCoord = GetFullScreenTriangleTexCoord(input.vertexID); + + return output; + } + + float4 Frag(Varyings input) : SV_Target + { + // These coordinate sampling must match the decoding in GetPreIntegratedDFG in lit.hlsl, i.e here we use perceptualRoughness, must be the same in shader + float NdotV = input.texCoord.x; + float perceptualRoughness = input.texCoord.y; + float3 V = float3(sqrt(1 - NdotV * NdotV), 0, NdotV); + float3 N = float3(0.0, 0.0, 1.0); + + // Pre integrate Charlie and FabricLambert FGD + float4 preFGD = IntegrateCharlieAndFabricLambertFGD(V, N, PerceptualRoughnessToRoughness(perceptualRoughness)); + + return float4(preFGD.xyz, 1.0); + } + + ENDHLSL + } + } + Fallback Off +} + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_CharlieFabricLambert.shader.meta b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_CharlieFabricLambert.shader.meta new file mode 100644 index 00000000..434eb2e5 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_CharlieFabricLambert.shader.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: 78fe891928ee5d74a83446be26e22cad +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_CharlieFabricLambert.shader + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_GGXDisneyDiffuse.shader b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_GGXDisneyDiffuse.shader new file mode 100644 index 00000000..1b97ccdf --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_GGXDisneyDiffuse.shader @@ -0,0 +1,72 @@ +Shader "Hidden/BadDog/URP/PreIntegratedFGD_GGXDisneyDiffuse" +{ + SubShader + { + Tags{ "RenderPipeline" = "UniversalPipeline" } + Pass + { + ZTest Always Cull Off ZWrite Off + + HLSLPROGRAM + + #pragma editor_sync_compilation + + #pragma vertex Vert + #pragma fragment Frag + #pragma target 4.5 + #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch + + #define PREFER_HALF 0 + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/ImageBasedLighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD.cs.hlsl" + + struct Attributes + { + uint vertexID : SV_VertexID; + }; + + struct Varyings + { + float4 positionCS : SV_POSITION; + float2 texCoord : TEXCOORD0; + }; + + Varyings Vert(Attributes input) + { + Varyings output; + + output.positionCS = GetFullScreenTriangleVertexPosition(input.vertexID); + output.texCoord = GetFullScreenTriangleTexCoord(input.vertexID); + + return output; + } + + float4 Frag(Varyings input) : SV_Target + { + // We want the LUT to contain the entire [0, 1] range, without losing half a texel at each side. + float2 coordLUT = RemapHalfTexelCoordTo01(input.texCoord, FGDTEXTURE_RESOLUTION); + + // The FGD texture is parametrized as follows: + // X = sqrt(dot(N, V)) + // Y = perceptualRoughness + // These coordinate sampling must match the decoding in GetPreIntegratedDFG in Lit.hlsl, + // i.e here we use perceptualRoughness, must be the same in shader + // Note: with this angular parametrization, the LUT is almost perfectly linear, + // except for the grazing angle when (NdotV -> 0). + float NdotV = coordLUT.x * coordLUT.x; + float perceptualRoughness = coordLUT.y; + + // Pre integrate GGX with smithJoint visibility as well as DisneyDiffuse + float4 preFGD = IntegrateGGXAndDisneyDiffuseFGD(NdotV, PerceptualRoughnessToRoughness(perceptualRoughness)); + + return float4(preFGD.xyz, 1.0); + } + + ENDHLSL + } + } + Fallback Off +} + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_GGXDisneyDiffuse.shader.meta b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_GGXDisneyDiffuse.shader.meta new file mode 100644 index 00000000..56d83aa4 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_GGXDisneyDiffuse.shader.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: 66b05214d2eee4440813a5ce277f96a9 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_GGXDisneyDiffuse.shader + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_Marschner.shader b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_Marschner.shader new file mode 100644 index 00000000..2f976856 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_Marschner.shader @@ -0,0 +1,65 @@ +Shader "Hidden/BadDog/URP/PreIntegratedFGD_Marschner" +{ + SubShader + { + Tags{ "RenderPipeline" = "UniversalPipeline" } + Pass + { + ZTest Always Cull Off ZWrite Off + + HLSLPROGRAM + + #pragma editor_sync_compilation + + #pragma vertex Vert + #pragma fragment Frag + #pragma target 4.5 + #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch + + #define PREFER_HALF 0 + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/ImageBasedLighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + + // ---------------------------------------------------------------------------- + // Pre-Integration + // ---------------------------------------------------------------------------- + + struct Attributes + { + uint vertexID : SV_VertexID; + }; + + struct Varyings + { + float4 positionCS : SV_POSITION; + float2 texCoord : TEXCOORD0; + }; + + Varyings Vert(Attributes input) + { + Varyings output; + + output.positionCS = GetFullScreenTriangleVertexPosition(input.vertexID); + output.texCoord = GetFullScreenTriangleTexCoord(input.vertexID); + + return output; + } + + float4 Frag(Varyings input) : SV_Target + { + // Currently, we do not implement the pre-integration of Marschner for two reason: + // 1) Area Light support for anisotropic LTC is not supported, and we fall back to GGX. + // 2) Environment lighting is evaluated with the BSDF directly. + + float4 preFGD = 0; + + return float4(preFGD.xyz, 1.0); + } + + ENDHLSL + } + } + Fallback Off +} + diff --git a/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_Marschner.shader.meta b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_Marschner.shader.meta new file mode 100644 index 00000000..d5d1a091 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_Marschner.shader.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: d43bf2ddcbeda1f4387f4baf22d88d98 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/Shaders/PreIntegratedFGD_Marschner.shader + uploadId: 884030 diff --git a/Packages/com.baddog.rendering.arealight/package.json b/Packages/com.baddog.rendering.arealight/package.json new file mode 100644 index 00000000..472085b2 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/package.json @@ -0,0 +1,23 @@ +{ + "name": "com.baddog.rendering.arealight", + "version": "1.3.0", + "displayName": "BadDog Rendering Area Light", + "description": "Realtime area light rendering support for URP.", + "unity": "2022.3", + "unityRelease": "0f1", + "keywords": [ + "rendering", + "area light", + "lighting", + "urp", + "universal render pipeline" + ], + "author": { + "name": "BadDog", + "email": "shenpan998@gmail.com" + }, + "type": "library", + "dependencies": { + "com.unity.render-pipelines.universal": "14.0.7" + } +} \ No newline at end of file diff --git a/Packages/com.baddog.rendering.arealight/package.json.meta b/Packages/com.baddog.rendering.arealight/package.json.meta new file mode 100644 index 00000000..48123147 --- /dev/null +++ b/Packages/com.baddog.rendering.arealight/package.json.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: a5cdb55fb063e804189f0685acca7314 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 346790 + packageName: Realtime Area Light for URP + packageVersion: 1.3.0 + assetPath: Packages/com.baddog.rendering.arealight/package.json + uploadId: 884030 diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 06c50be1..f41a7d32 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,5 +1,13 @@ { "dependencies": { + "com.baddog.rendering.arealight": { + "version": "file:com.baddog.rendering.arealight", + "depth": 0, + "source": "embedded", + "dependencies": { + "com.unity.render-pipelines.universal": "14.0.7" + } + }, "com.unity.burst": { "version": "1.8.28", "depth": 0, diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index 405a3960..87ea4245 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c95d61a78e0d72c52fc50017c0a3ce4a90ea8fc8f986f898ae95c96344a14df4 +oid sha256:72fbcc3036451f74b04f7bc2bfe343c7535592036df5f6f11881c41aa43fe0ae size 9903